AI人工智能-语言模型-第六周(小白)
什么是语言模型
语言模型的核心任务是判断一个句子是否“合理”,也就是我们常说的“像人话”。
-
例如:“今天天气不错” ✅
-
而“今错不天气天” ❌
数学上,语言模型是计算一个句子的概率,合理的句子概率高,不合理的句子概率低。
- P(今天天气不错) > P(今错不天天气)
常见问题
1.“合理”是主观的,机器怎么判断
语言模型是通过大量真实文本训练出来的,它学习的是语言的统计规律,而不是主观感受
2.为什么需要计算句子的概率
因为很多任务(如语音识别,输入法)中,机器需要从多个候选结果中选出最可能得一个。
语言模型的种类
语言模型分类
- 统计语言模型(SLM):如N-gram,基于词频统计
- 神经语言模型(NLM):如RNN,LSTM,用神经网络建模
- 预训练语言模型(PLM):如BERT,GPT,在大模型语料上预训练
- 大语言模型(LLM):如ChatGPT,参数量极大,能力更强
训练方式
- 自回归:从左到右预测,如GPT
- 自编码:双向预测,如BERT
N-gram语言模型
核心思想:一个句子的概率,可以分解成其中每个词出现的概率的乘积
为什么这样分解
源于概率论中的链式法则。
对于一个句子 (w代表词),其概率是:
根据链式法则,这个联合概率分解为:
直观解释
今天天气不错
:第一个词是“今天”的概率
:在第一个词是“今天”的前提下,第二个词是“天气”的概率
:在前两个词是“今天 天气”的前提下,第三个词是“不错”的概率
- ...以此类推
N-gram的“N”与马尔科夫假设
问题来了:链式法则要求考虑前面所有的词,这在实际中是不可能的。
-
句子长度可变,模型无法处理。
-
历史组合
w1, w2, ..., wn-1太多,几乎不可能在训练数据中全部出现,数据会极度稀疏。
解决方案:马尔科夫假设
-
Unigram (1-gram):一个词的出现不依赖任何上文。
P(S) ≈ P(w1) * P(w2) * P(w3) * ... * P(wn) -
Bigram (2-gram):一个词的出现只依赖它前面1个词。
P(S) ≈ P(w1) * P(w2 | w1) * P(w3 | w2) * ... * P(wn | wn-1) -
Trigram (3-gram):一个词的出现只依赖它前面2个词。
P(S) ≈ P(w1) * P(w2 | w1) * P(w3 | w1, w2) * P(w4 | w2, w3) * ... * P(wn | wn-2, wn-1)
具体概率的计算
通过统计语料库中的词频。
我们用一个极小的语料库来演示:
假设我们的语料库是:
-
今天 天气 不错
-
今天 天气 很好
-
明天 天气 不错
-
今天 是 晴天
我们以 Bigram 模型 为例,计算 P(今天 天气 不错):
根据 Bigram 公式:
P(今天 天气 不错) = P(今天) * P(天气 | 今天) * P(不错 | 天气)
第一步:计算 P(今天)
-
语料库总词数:4句话 * 3个词/句 = 12个词(我们把“今天”、“天气”等都看作一个词)
-
“今天”出现的次数:在第1、2、4句都出现了,共 3 次。
-
所以
P(今天) = 3 / 12 = 1/4
第二步:计算 P(天气 | 今天)
-
这是一个条件概率,意思是“在「今天」出现的情况下,下一个词是「天气」的概率”。
-
公式:
P(天气 | 今天) = Count(今天 天气) / Count(今天) -
Count(今天 天气):“今天”后面紧跟着“天气”的次数。在句子1、2中出现了,共 2 次。 -
Count(今天):“今天”作为“上文”出现的次数。在句子1、2、4中,“今天”后面都有词,共 3 次。(注意:如果“今天”在句尾,则它后面没有词,不算在内) -
所以
P(天气 | 今天) = 2 / 3
第三步:计算 P(不错 | 天气)
-
公式:
P(不错 | 天气) = Count(天气 不错) / Count(天气) -
Count(天气 不错):“天气”后面紧跟着“不错”的次数。在句子1、3中出现了,共 2 次。 -
Count(天气):“天气”作为“上文”出现的次数。在句子1、2、3中,“天气”后面都有词,共 3 次。 -
所以
P(不错 | 天气) = 2 / 3
最终概率:
P(今天 天气 不错) = (1/4) * (2/3) * (2/3) = 4 / 36 = 1 / 9
常见问题
-
P(今天)的分母是总词数,为什么P(天气|今天)的分母是Count(今天)?-
答:
P(今天)是无条件概率,衡量的是“今天”这个词在整个语言中的普遍程度,所以用总词数做分母。 -
P(天气|今天)是条件概率,衡量的是“当「今天」已经出现时,「天气」跟上的可能性”。我们只关心所有出现“今天”的场景,所以分母是“今天”的出现次数。
-
-
如果语料库里没有“今天 天气 不错”这个组合,概率就是0吗?
-
答:对于标准的统计方法,是的
-
