1. 什么是语言模型?
想象一下,当你听到"下雨天,我带了___"这句话时,你的大脑可能会自动补上"伞"这个词。这背后其实是一个预测过程——你的大脑根据已有的语言经验,预测下一个最可能出现的词。
语言模型 就是让计算机学会这种预测能力的工具。它通过分析大量文本数据(我们称之为"语料库"),学习语言的规律,从而预测在给定上下文的情况下,下一个词或字符最可能出现的概率。
1.1 为什么语言是"概率性"的?
语言充满了不确定性:
同一个意思可以用多种方式表达("我饿了"、"我肚子饿了"、"我想吃东西了")
同一个词在不同语境下意思不同("苹果手机"和"吃苹果"中的"苹果")
这些不确定性使得我们需要用概率 的方法来理解和预测语言。统计语言模型正是基于这个思想发展的。
2. n-grams:语言模型的起点
在众多语言模型中,n-grams 是最基础也最直观的一种统计语言模型。它的核心思想很简单:预测下一个词时,我们只看前面的n-1个词 。
2.1 什么是n-gram?
Unigram(n=1) : 只考虑单个词,不看上下文
Bigram(n=2) : 考虑前1个词
Trigram(n=3) : 考虑前2个词
以此类推...
2.1 n-grams如何工作?一个生动的例子
假设我们有这样一个小语料库:
长颈鹿脖子长
长颈鹿脖子疼
长颈鹿吃树叶
长颈鹿看远方
长颈鹿躲在动物园
现在,我们想用bigram (n=2)模型计算"长颈鹿脖子长"这个句子出现的概率。
首先,我们统计语料库中各个词和词对出现的次数:
"长颈鹿"出现了5次
"脖子"出现了2次(在"长颈鹿脖子长"和"长颈鹿脖子疼"中)
"长颈鹿 脖子"这个组合出现了2次
"脖子 长"这个组合出现了1次
然后,我们计算概率:
P(脖子|长颈鹿) = "长颈鹿 脖子"出现次数 / "长颈鹿"出现次数 = 2/5
P(长|脖子) = "脖子 长"出现次数 / "脖子"出现次数 = 1/2
最后,整个句子的概率是: P(长颈鹿脖子长) = P(脖子|长颈鹿) × P(长|脖子) = (2/5) × (1/2) = 1/5
这意味着,在我们的小语料库中,"长颈鹿脖子长"这个句子出现的可能性是20%。
2.3 n值大小的影响:能力与泛化的平衡
n值的选择是一个重要的权衡:
n值小 (如unigram):
优点:能覆盖更多词汇组合,泛化能力强
缺点:忽略上下文,预测不准确
n值大 (如5-gram):
优点:考虑更长的上下文,预测更准确
缺点:许多词组组合在语料库中从未出现,导致"零概率"问题
比如,如果我们用trigram (n=3)来计算"长颈鹿脖子长",但由于"长颈鹿 脖子 长"这个三元组在我们的小语料库中只出现了一次,很多其他可能的组合根本没出现,会导致大量"零概率"的情况。
2.4 n-grams背后的简单原理
n-grams模型基于一个称为"马尔可夫假设 "的思想:当前词的出现概率主要取决于前面有限个词 。
这很符合我们的语言习惯。例如,当你说"今天天气真___"时,你可能会说"好"、"糟糕"、"热"等,而不太可能说"香蕉"或"自行车"。前面的词"今天天气真"强烈影响了下一个词的可能选择。
2.5 n-grams的局限性
尽管n-grams在早期自然语言处理中非常成功,但它也有明显的局限:
零概率问题 :当遇到训练数据中未出现的词组组合时,概率为零
长距离依赖 :无法捕捉相隔较远的词之间的关系
数据稀疏 :需要极大量的数据才能覆盖所有可能的词组组合
为了解决这些问题,数据科学家们发明了"平滑技术",比如给所有可能的词组分配一个很小的概率,避免零概率问题。
3.从n-grams到现代AI
n-grams是语言模型发展的起点。随着技术进步,我们现在已经有了更强大的模型,如RNN、Transformer等,它们能更好地处理语言的复杂性。
但理解n-grams仍然是重要的基础,它帮助我们理解语言模型的核心思想:通过统计规律预测下一个词 。