🧠 ChatGPT的工作原理:小白也能轻松了解的深度解析 🚀


大约 2 个月前

🧠 ChatGPT 的工作原理:新手友好的深入探讨 🚀

🔍 理解 ChatGPT 的工作流程

ChatGPT 在生成响应之前,会逐步处理用户输入。让我们将其分解为 通俗易懂的概念和现实世界的例子,同时附上 代码示例,以实际了解这些理念是如何运作的。

🔹 1️⃣ 预处理:准备输入数据 🛠️

在 ChatGPT 理解和处理用户的输入之前,必须 清理和结构化文本

📌 这里发生了什么?

  • 删除 多余的空格、符号和特殊字符
  • 文本转换为小写 以保持一致性。
  • 处理 拼写错误(有时候)。

🏢 现实世界例子:

想象一下你在和 Google Assistant 或 Alexa 交谈。如果你说:👉 “告诉我今天的天气!!” 在处理之前,AI 会 规范化 为:👉 “tell me the weather today”

🖥️ 预处理的 Python 代码:

import re

def preprocess_text(text):
    # 转换为小写
    text = text.lower()
    # 移除特殊字符和多余空格
    text = re.sub(r'[^a-zA-Z0-9s]', '', text)
    text = re.sub(r's+', ' ', text).strip()
    return text

# 示例用法
input_text = "Tell ME tHe weathEr TodaY!!"
processed_text = preprocess_text(input_text)
print(processed_text)  # 输出: "tell me the weather today"

🧐 解释:

  • lower() → 将文本转换为小写。
  • re.sub(r'[^a-zA-Z0-9s]', '', text) → 移除特殊字符。
  • re.sub(r's+', ' ', text).strip() → 移除多余的空格。

🔹 2️⃣ 切分:将文本拆分成更小的部分 🔤

在预处理之后,ChatGPT 将文本拆分为标记(单词或子词)。

📌 这里发生了什么?

  • 将句子拆分成 单词或子词
  • 为每个标记分配 唯一的 ID

🏢 现实世界例子:

如果你在 Google 上搜索,它会 自动补全 你的查询。👉 “最佳比萨饼…” 🔍 Google 将单词 “最佳”“比萨”“附近” 进行切分,然后基于热门搜索结果进行建议。

🖥️ 切分的 Python 代码(使用 NLTK 库):

import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize

def tokenize_text(text):
    return word_tokenize(text)

# 示例用法
tokenized_text = tokenize_text("ChatGPT is an amazing AI!")
print(tokenized_text)  # 输出: ['ChatGPT', 'is', 'an', 'amazing', 'AI', '!']

🧐 解释:

  • word_tokenize(text) → 将文本拆分为单词。
  • ['ChatGPT', 'is', 'an', 'amazing', 'AI', '!'] → 现在模型可以单独处理每个单词。

🔹 3️⃣ 嵌入:将单词转换为数字 🔢

计算机不能理解单词;它们只能理解 数字嵌入将单词转换为数值向量以进行处理。

📌 这里发生了什么?

  • 每个单词被表示为一个 向量(数字集合)
  • 意义相近的单词有 相似的向量值

🏢 现实世界例子:

想想 Spotify 的歌曲推荐 🎵。

  • 如果你喜欢 “古典音乐”,它会根据向量相似性推荐类似的曲目。

🖥️ 单词嵌入的 Python 代码(使用 spaCy):

import spacy

nlp = spacy.load("en_core_web_md")

def get_word_embedding(word):
    return nlp(word).vector  # 返回数值表示

# 示例用法
word_vector = get_word_embedding("ChatGPT")
print(word_vector[:5])  # 打印向量的前5个值

🧐 解释:

  • nlp(word).vector → 将单词转换为 向量表示
  • 示例:
  • “国王”[0.5, -0.2, 0.8, ...]
  • “女王”[0.52, -0.18, 0.79, ...](相似的值意味着相似的意思!)

🔹 4️⃣ 自注意力:理解上下文 🤔

ChatGPT 分析句子中单词之间的关系,使用 自注意力

📌 这里发生了什么?

  • 给予相关单词更大的重要性
  • 帮助模型 理解基于上下文的意义

🏢 现实世界例子:

考虑这句话:👉 “银行因为是星期天而关闭。”

  • “银行” 是指 河岸还是金融银行
  • 自注意力 分析周围的单词 以判断意思。

🖥️ 自注意力的示例代码(简化版本):

import torch
import torch.nn.functional as F

# 示例注意力分数
query = torch.tensor([1.0, 0.8, 0.6])
keys = torch.tensor([[1.0, 0.9, 0.7], [0.8, 0.6, 0.4]])

# 点积相似度(给予多少注意力)
attention_scores = torch.matmul(query, keys.T)

# Softmax 归一化注意力值
attention_weights = F.softmax(attention_scores, dim=-1)

print(attention_weights)  # 较高的值意味着更大的重要性

🧐 解释:

  • torch.matmul(query, keys.T) → 计算单词之间的注意力分数。
  • F.softmax(attention_scores, dim=-1)给予某些单词更大的重要性

🔹 5️⃣ 生成输出:创建响应 📝

在理解输入之后,模型 预测下一个单词 并生成响应。

🏢 现实世界例子:

使用 Google 翻译 时,它会基于语法和上下文预测 最佳下一个单词

🖥️ 文本生成的 Python 代码(使用 GPT-2 模型):

from transformers import pipeline

# 加载 GPT-2 模型
text_generator = pipeline("text-generation", model="gpt2")

# 生成文本
response = text_generator("什么是 AI?", max_length=50)
print(response[0]['generated_text'])

🧐 解释:

  • pipeline("text-generation", model="gpt2") → 加载一个 预训练的 GPT-2 模型
  • text_generator("什么是 AI?", max_length=50) → 根据输入生成一个 响应

🔹 6️⃣ 后处理:使文本可读 📖

一旦模型生成文本,会进行清理 使其对人类可读。

📌 这里发生了什么?

  • 删除不必要的单词 或重复。
  • 修正语法问题(如果需要)。

🏢 现实世界例子:

Google 文档的智能完成功能 中,AI 提供句子完成建议,这些建议得以细化以实现 更好的可读性

🎯 最后思考:这为什么重要?

  • 💡 预处理 确保输入干净。
  • 🏷 切分 将文本分解为单词。
  • 🔢 嵌入 将单词转换为数字。
  • 🧠 自注意力 有助于理解上下文。
  • 📝 文本生成 创建有意义的响应。

🚀 这个过程使 ChatGPT、Alexa、Google Assistant 以及所有 AI 聊天机器人得以运行!

👉 想要构建自己的 AI 聊天机器人吗? 给我留言!🤖

FluxAI 中文

© 2025. All Rights Reserved