当前位置: 首页 > backend >正文

【NLP】 26. 语言模型原理与概率建模方法详解(Language Models)

语言模型原理与概率建模方法详解(Language Models)

语言模型(Language Model, LM)是自然语言处理的核心组件之一。其任务是为一个词序列分配一个概率值,反映这段文本在自然语言中的“合理性”或“常见性”。在本章节中,我们将从基本定义出发,深入讲解语言模型的建模方法(包括 n-gram 模型、链式法则分解、Markov 假设等)、概率计算技巧、数值稳定性对策,以及各类方法的优缺点对比。


一、语言模型的基本任务:为句子赋概率

语言模型的目标是对一个词序列 w 1 , w 2 , … w_1, w_2, \ldots w1,w2,计算其联合概率:

P ( w 1 , w 2 , . . . , w N ) P(w_1, w_2, ..., w_N) P(w1,w2,...,wN)

例如:

输入:“We are people.”
输出:一个表示这句话合理性的概率值。

这个概率值可以用于下游多个任务,包括:下一个词预测、拼写纠错、语音识别、机器翻译、文本生成等。


二、三种概率建模方案对比

🧠 方法一:查找表(Lookup Table)

构建一个大表,存储所有可能词序列的概率值,例如 7 个词的组合:

P ( w 1 , w 2 , . . . , w 7 ) P(w_1, w_2, ..., w_7) P(w1,w2,...,w7)

📉 问题
如果词汇表大小为 ∣ V ∣ = 1 0 4 |V| = 10^4 V=104,则可能组合数量为:

∣ V ∣ 7 = 1 0 28 |V|^7 = 10^{28} V7=1028

这意味着我们既无法存储这些组合,也无法从语料中统计出全部概率。


🧠 方法二:使用链式法则(Chain Rule)

根据概率论的链式法则,我们可以将联合概率分解为条件概率的乘积:

P ( w 1 , . . . , w 7 ) = P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋅ P ( w 3 ∣ w 1 , w 2 ) ⋯ P ( w 7 ∣ w 1 , . . . , w 6 ) P(w_1, ..., w_7) = P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_1,w_2) \cdots P(w_7|w_1,...,w_6) P(w1,...,w7)=P(w1)P(w2w1)P(w3w1,w2)P(w7w1,...,w6)

这种做法更合理,因为我们不再建表,而是用模型估计每个词在上下文条件下的概率。

📉 问题
尽管避免了存储问题,但长距离上下文仍然很难准确估计,如:

P ( w 7 ∣ w 1 , w 2 , . . . , w 6 ) P(w_7 | w_1, w_2, ..., w_6) P(w7w1,w2,...,w6)

计算量仍然很大,并存在数据稀疏性问题。


🧠 方法三:使用近似(n-gram 语言模型)

为进一步简化,我们假设:每个词只依赖前面的 n−1 个词(即马尔可夫假设):

  • Bigram(n=2)模型

    P ( w 1 , . . . , w 7 ) ≈ P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋅ P ( w 3 ∣ w 2 ) ⋯ P ( w 7 ∣ w 6 ) P(w_1, ..., w_7) \approx P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_2) \cdots P(w_7|w_6) P(w1,...,w7)P(w1)P(w2w1)P(w3w2)P(w7w6)

  • Trigram(n=3)模型

P ( w 1 , . . . , w 7 ) ≈ P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋅ P ( w 3 ∣ w 1 , w 2 ) ⋯ P ( w 7 ∣ w 5 , w 6 ) P(w_1, ..., w_7) \approx P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_1,w_2) \cdots P(w_7|w_5,w_6) P(w1,...,w7)P(w1)P(w2w1)P(w3w1,w2)P(w7w5,w6)


三、马尔可夫假设的含义与限制

马尔可夫假设(Markov Assumption):未来只依赖于当前,不依赖于更久远的过去。

以 bigram 为例:

P ( w n ∣ w 1 , . . . , w n − 1 ) ≈ P ( w n ∣ w n − 1 ) P(w_n | w_1, ..., w_{n-1}) \approx P(w_n | w_{n-1}) P(wnw1,...,wn1)P(wnwn1)

✅ 优点:

  • 显著降低模型复杂度
  • 易于从语料中统计

❌ 缺点:

  • 无法捕捉长距离依赖
  • 高阶 n-gram 仍然面临稀疏性问题

四、概率估计公式与稀疏性问题

n-gram 模型中的条件概率通常使用频数估计:

P ( w i ∣ w i − 1 ) = Count ( w i − 1 , w i ) Count ( w i − 1 ) P(w_i | w_{i-1}) = \frac{\text{Count}(w_{i-1}, w_i)}{\text{Count}(w_{i-1})} P(wiwi1)=Count(wi1)Count(wi1,wi)

📉 问题:

  • 如果词对 ( w i − 1 , w i ) (w_{i-1}, w_i) (wi1,wi) 从未在训练语料中出现,则概率为 0
  • 这导致语言模型对新句子没有鲁棒性

🔧 解决办法

  • 使用平滑技术(如 Laplace、Kneser-Ney、Good-Turing)
  • 采用神经网络语言模型

五、数值下溢与对数概率的使用

连续乘积如:

P ( w 1 , . . . , w 100 ) = ( 1 0 − 6 ) 100 = 1 0 − 600 P(w_1, ..., w_{100}) = (10^{-6})^{100} = 10^{-600} P(w1,...,w100)=(106)100=10600

⚠️ 计算机无法表示如此小的数值

✅ 解决方案:使用对数概率(log probability)替代乘积运算:

log ⁡ P ( w 1 , . . . , w n ) = ∑ i = 1 n log ⁡ P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) \log P(w_1, ..., w_n) = \sum_{i=1}^{n} \log P(w_i | w_{i-n+1}, ..., w_{i-1}) logP(w1,...,wn)=i=1nlogP(wiwin+1,...,wi1)

这种做法可避免下溢问题,并将概率乘法转化为更稳定的加法操作。


六、特殊处理:起始/结束标记与稀有词

语言模型需要特殊处理:

  1. 句首/句尾标记:添加 <start><end> 符号来界定边界
  2. 未知词(UNK)处理:引入通用标签替代训练集中未出现的词
  3. 小概率平滑:为避免模型输出为0的概率,引入平滑技术对频数进行校正

七、三种方法的全面对比

方法原理优点缺点
查找表法直接存储所有可能的组合概率理论上精确存储需求极高,不现实
链式法则分解为条件概率乘积理论上正确上下文过长、稀疏问题
n-gram 模型只依赖前 n-1 个词,Markov 假设简单、可训练、可实现忽略长距离依赖、稀疏性

http://www.xdnf.cn/news/4040.html

相关文章:

  • QT聊天项目DAY08
  • C 语言逻辑运算符:组合判断,构建更复杂的条件
  • Cisco Packet Tracer 选项卡的使用
  • Python中的客户端和服务端交互的基本内容
  • vue实现AI问答Markdown打字机效果
  • 【C/C++】函数模板
  • Auto.js 脚本:清理手机数据但保留账号
  • 第R8周:RNN实现阿尔兹海默病诊断(pytorch)
  • 基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的网络安全防火墙技术方案‌(国产化替代J1900的全栈技术解析)
  • Python生活手册-正则表达式:从快递单到咖啡订单的文本魔法
  • Level DB --- MergingIterator
  • Compose 中使用 WebView
  • 基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计
  • Softmax回归与单层感知机对比
  • 【platform push 提示 Invalid source ref: HEAD】
  • 双目视觉的核心目标
  • NGINX 的 ngx_http_auth_jwt_module模块
  • 模块方法模式(Module Method Pattern)
  • JavaScript 实现输入框的撤销功能
  • 算力经济模型推演:从中心化到去中心化算力市场的转变(区块链+智能合约的算力交易原型设计)
  • Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)
  • C++ 类与对象(下)—— 进阶特性与底层机制解析(构造函数初始化,类型转换,static成员,友元,内部类,匿名对象)
  • 基于 HTML 和 CSS 实现的 3D 翻转卡片效果
  • WebRTC 服务器之SRS服务器概述和环境搭建
  • 【算法笔记】动态规划基础(二):背包dp
  • TopK题-快速选择方法
  • 数据结构实验8.1:图的基本操作
  • 联邦学习的深度解析,有望打破数据孤岛
  • 005-nlohmann/json 基础方法-C++开源库108杰
  • Sim Studio 是一个开源的代理工作流程构建器。Sim Studio 的界面是一种轻量级、直观的方式,可快速构建和部署LLMs与您最喜欢的工具连接