大模型如何“理解”语言?从词向量到注意力机制的认知之旅
当我们与ChatGPT流畅对话,或惊叹于Claude能精准总结长篇文档时,一个根本性的问题随之浮现:这些模型真的“理解”了语言吗?它们没有感官体验,没有生活常识,如何能处理如此复杂的人类符号系统?本文将带你深入大语言模型(LLM)的内部世界,从技术层面拆解其“理解”语言的奥秘。
一、理解的基石:从符号到向量
传统计算机程序处理的是明确的指令和符号(如“if-else”),但语言充满歧义和上下文依赖。大模型的第一步,是将离散的符号(字、词)转化为计算机能处理的数学对象——向量。
1.1 词嵌入(Word Embedding)
“国王”、“王后”、“男人”、“女人”这些词,在模型眼中不再是字符串,而是高维空间(例如512维)中的点。神奇的是,在这个向量空间中,语义关系会表现为几何关系。经典的例子是:vec(“国王”) - vec(“男人”) + vec(“女人”) ≈ vec(“王后”)。这表明模型捕捉到了“性别”和“王室”的概念维度。
# 一个简化的示意代码,展示如何使用预训练词向量(如GloVe)
import numpy as np
# 假设我们有一个小型预训练词向量字典
pretrained_embeddings = {
“king”: np.array([0.5, -0.2, 0.1]),
“man”: np.array([0.3, -0.1, 0.0]),
“woman”: np.array([0.35, 0.1, 0.05]),
“queen”: np.array([0.55, 0.15, 0.1])
}
def analogy(word1, word2, word3):
"""计算类比:word1 : word2 :: word3 : ?"""
result_vec = pretrained_embeddings[word2] - pretrained_embeddings[word1] + pretrained_embeddings[word3]
# 在字典中寻找与result_vec最相似的向量
closest_word = None
min_distance = float(‘inf’)
for word, vec in pretrained_embeddings.items():
if word in [word1, word2, word3]:
continue
dist = np.linalg.norm(vec - result_vec)
if dist < min_distance:
min_distance = dist
closest_word = word
return closest_word
print(analogy(“man”, “king”, “woman”)) # 理想输出:”queen”
1.2 上下文感知:从静态到动态
早期的词嵌入(如Word2Vec)是静态的,即一个词在任何上下文中都是同一个向量。这无法解决“苹果手机”和“吃了一个苹果”中“苹果”的歧义问题。现代大模型(如BERT、GPT)使用动态上下文编码。同一个词在不同句子中会获得不同的向量表示,这个表示由模型根据整个句子的上下文实时计算得出。
二、理解的核心架构:Transformer与注意力机制
如果说词向量是砖瓦,那么Transformer架构就是让这些砖瓦组成智能大厦的蓝图。其核心是自注意力机制。
2.1 自注意力机制:全局关联的魔法
想象你在阅读这句话:“他把香蕉剥了皮,然后吃了它。” 人类能瞬间知道“它”指的是“香蕉”。自注意力机制让模型也能做到这一点。在处理“它”这个词时,模型会计算“它”与句子中所有其他词(包括“香蕉”)的“注意力分数”,从而将更多的“注意力”分配给“香蕉”,并基于此更新“它”的表示。
# 一个极度简化的自注意力计算示意(忽略缩放、多头等细节)
import torch
import torch.nn.functional as F
def simple_self_attention(input_vectors):
"""
input_vectors: [seq_len, embedding_dim] 输入序列的向量表示
"""
seq_len, d_k = input_vectors.shape
# 生成查询(Q)、键(K)、值(V)矩阵
Q = input_vectors # 简化处理,实际是线性变换
K = input_vectors
V = input_vectors
# 计算注意力分数:Q和K的点积,表示相关性
scores = torch.matmul(Q, K.T) # [seq_len, seq_len]
# 对分数进行softmax归一化,得到注意力权重
attention_weights = F.softmax(scores, dim=-1) # [seq_len, seq_len]
# 用注意力权重加权求和V,得到新的序列表示
output = torch.matmul(attention_weights, V) # [seq_len, embedding_dim]
return output, attention_weights
# 示例:假设我们有三个词的向量 [“他”, “吃”, “香蕉”]
seq_vectors = torch.tensor([[0.1, 0.2], [0.2, 0.3], [0.9, 0.8]]) # 3个词,每个词2维向量
new_vectors, attn = simple_self_attention(seq_vectors)
print(“注意力权重矩阵(显示词与词之间的关联强度):”)
print(attn)
# 在训练好的模型中,处理“吃”时,可能会对“香蕉”有较高的注意力权重。
2.2 Transformer编码器-解码器结构
- 编码器(如BERT所用):像是一个“阅读理解专家”,通过多层自注意力,对输入文本(如一个句子)进行深度编码,生成富含上下文信息的向量表示。它擅长分类、问答、语义相似度判断。
- 解码器(如GPT所用):像一个“写作大师”,在生成每个新词时,不仅关注已编码的输入,还关注它自己已经生成的所有词(通过掩码自注意力,防止看到未来信息)。它擅长文本生成、翻译、摘要。
大语言模型(如GPT系列)通常使用仅解码器架构,将编码和解码的功能合二为一,通过海量文本的“下一个词预测”任务进行训练。
三、理解如何涌现:从模式匹配到能力泛化
模型通过在海量文本(万亿级token)上预测下一个词,学会了文本中的统计规律。但这如何升级为“理解”?
3.1 模式与知识的压缩
训练过程本质上是一个巨大的无损压缩过程。为了更准确地预测下一个词,模型必须在其数百亿甚至上万亿的参数中,高效地存储关于世界的事实、语法规则、逻辑关系和文体风格。这些知识不是以数据库条目形式存储,而是以高度非线性的方式分布在网络的权重中。
3.2 情境学习与思维链
- 情境学习:给模型几个输入-输出的例子(“Few-shot Learning”),它就能模仿模式完成任务。这表明模型并非死记硬背,而是学会了执行任务的“方法”或“格式”。
- 思维链:当要求模型在回答复杂推理问题时“一步一步思考”时,其准确性会大幅提升。这暗示模型在生成最终答案的中间步骤中,隐式地构建了推理路径。我们可以通过提示工程显式地引导这一过程。
用户:办公室有10个苹果,小明吃了2个,小红又买了5个进来。现在有几个苹果?
模型(直接回答):13个。
用户:办公室有10个苹果,小明吃了2个,小红又买了5个进来。请一步步思考。
模型(思维链):
1. 最初有10个苹果。
2. 小明吃了2个,剩下 10 - 2 = 8个。
3. 小红买了5个进来,现在有 8 + 5 = 13个。
所以,现在有13个苹果。
四、实际应用场景:理解力的体现
- 语义搜索与问答:模型将查询和文档都编码为向量,在向量空间中寻找最接近的匹配,超越了传统的关键词匹配。
- 代码生成与理解:将代码视为一种特殊语言。模型能理解自然语言需求(如“写一个快速排序函数”)与代码语法、逻辑之间的映射关系。
- 情感分析与意图识别:通过上下文判断“这手机真是绝了”是褒义还是贬义,或者判断用户说“我空调不制冷了”背后的意图是“报修”而非“闲聊”。
- 多语言翻译:模型在向量空间中为不同语言构建了一个对齐的语义空间,使得“Hello world”和“你好,世界”的向量表示在含义上非常接近。
五、结语:统计机器还是认知主体?
大模型对语言的“理解”,是一种基于海量数据统计和复杂模式识别的功能性理解。它能够处理语义、语法和部分语用,表现出惊人的泛化能力,但其本质仍是一个高级的“关联引擎”。它没有意识,没有对世界的内在体验,其“理解”完全依赖于训练数据中存在的模式。
因此,说大模型“理解”语言,更像是在描述它能够在功能上模拟人类语言理解行为。这种模拟已经强大到足以改变我们与信息交互的方式,并催生出无数革命性的应用。未来,如何将符号逻辑、世界知识甚至感知信息更有效地融入这些统计模型,是实现更接近人类理解的关键一步。
理解大模型如何“理解”,不仅是为了更好地使用它,也是为了更清醒地认识当前人工智能的能力边界与未来方向。
文档信息
- 本文作者:JiliangLee
- 本文链接:https://leejiliang.cn/2026/04/11/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E8%AF%AD%E8%A8%80/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)