Language Modeling
语言建模会为词语或 token 序列分配概率,通常通过预测下一个 token 来实现。内容涵盖 n-gram、神经网络模型和评估。
语言建模的任务是为词语或 token序列分配概率。根据概率链式法则,P(w1, w2, ..., wn) = P(w1) x P(w2 | w1) x ... x P(wn | w1, ..., wn-1),因此,能够根据前面的 token 预测下一个 token 的模型,就定义了任意文本的概率;从这些预测中采样即可生成新文本。这种下一个 token 预测目标用于训练每个 GPT模型和大多数大型语言模型(LLM);在 LLM 出现数十年前,这种目标就已用于语音识别和机器翻译系统中的小型语言模型,为候选输出排序,如今仍用于建议手机键盘上的下一个词。语音识别
语言模型如何生成文本#
训练好的模型读取提示,为词汇表中的每个 token 打分,再通过 softmax将分数转换为下一个 token 的概率。然后,解码规则选出一个 token,模型将其附加到文本中,并重复这一循环,直到生成结束 token 或达到长度限制,这就是文本生成的工作方式:
通过温度或核采样进行采样,可以牺牲部分似然性来换取更多样性。由于每个 token 都取决于已生成的 token,回复会逐个 token 生成。Ultralytics LLM 接口会将 stream=True 传递给提供商,因此,要求模型描述检测场景的 YOLO26流水线可以在每段文本增量到达时立即打印。
从 N 元语法到神经网络模型#
Claude Shannon 在 1948 年发表的信息论论文中,利用 N 元语法统计近似构建了英语词语和字母模型。N 元语法模型通过统计语料库中词语序列出现的次数,估计 P(next word | previous n-1 words);IBM 在 20 世纪 70 年代和 80 年代的语音识别系统就依赖这类模型。二元语法模型(n = 2)只需几行 Python 代码就能说明其原理:
from collections import Counter
sentences = ["the cat sat on the mat .", "the dog sat on the rug .", "the cat saw the dog ."]
corpus = " ".join(sentences).split()
# Count word pairs to estimate P(next word | previous word)
pairs = Counter(zip(corpus, corpus[1:]))
firsts = Counter(corpus[:-1])
# The model's next-word distribution after "the"
print({nxt: round(n / firsts["the"], 2) for (prev, nxt), n in pairs.items() if prev == "the"})
# Chain rule: a sentence's probability is the product of its next-word probabilities
sentence = ["the", "dog", "sat", "on", "the", "mat"]
p = 1.0
for prev, nxt in zip(sentence, sentence[1:]):
p *= pairs[(prev, nxt)] / firsts[prev]
print(f"P(dog sat on the mat | the) = {p:.4f}")在“the”之后,模型预测“cat”和“dog”的概率各为 0.33,“mat”和“rug”的概率各为 0.17。即使语料库中没有出现过“the dog sat on the mat”这句话,模型仍将其概率估计为 0.0278,因为其中每一对相邻词都出现过。语料库中缺失的词对概率为零,因此实际的 N 元语法模型需要使用 Kneser-Ney 等平滑方法;它们仍然无法利用超过 n-1 个词的上下文。
Yoshua Bengio 及其同事于 2003 年提出的神经概率语言模型用学得的嵌入和神经网络取代计数方式,使相似词语能够共享统计信息。循环神经网络(RNN)和 LSTM扩大了可用上下文范围;2017 年之后,Transformer凭借对整个上下文窗口进行自注意力运算,成为标准架构。GPT-3于 2020 年表明,一个拥有 1750 亿参数的语言模型能够根据提示中的示例学习新任务。
因果语言建模与掩码语言建模#
因果语言建模(也称自回归语言建模)根据每个 token 左侧的 token 预测该 token,是生成式模型所采用的目标。掩码语言建模会隐藏部分 token,并根据两侧上下文预测这些 token。BERT以这种方式训练其 15% 的输入 token;双向上下文使它擅长分类和命名实体识别等理解任务,但无法从左到右撰写文本。扩散语言模型将掩码机制扩展为一种生成器,可通过多个步骤并行填充多个位置。
训练与评估#
训练属于自监督学习:原始文本本身提供标签,模型通过最小化预测分布与实际下一个 token 之间的交叉熵损失函数来训练。平均损失的指数值就是困惑度,这是标准的内在评估指标;缩放定律则描述模型、数据和算力规模增大时损失如何下降。预训练基础模型只能续写文本,指令微调和基于人类反馈的强化学习(RLHF)则能让它成为遵循请求的助手。
语言建模与相关术语的区别#
- 语言模型与 LLM:语言模型是指任何针对这项任务训练的模型,从二元语法表到 Transformer 都包括在内。LLM 是一种用数万亿个 token 训练、拥有数十亿参数的语言模型。
- 自然语言处理(NLP):利用计算机处理人类语言的整个领域,语言建模是其中的一项任务。
- 视觉自回归建模(VAR):将相同的下一步预测方法应用于图像,从粗到细生成不同分辨率尺度的 token 图,而不是生成词语。










