语言模型(language model)是自然语言处理的重要技术。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为\(T\)的文本中的词依次为 \(w_1, w_2, \ldots, w_T\)。
定义
对于一段自然语言序列,语言模型就是计算他的概率:
\[P(w_1, w_2, \ldots, w_n).\]
也就是说语言模型是对语句的概率分布的建模。
语言模型的计算
概率链式法则
\[P\left(w_{1 : n}\right)=P\left(w_{1}\right) P\left(w_{2} | w_{1}\right) P\left(w_{3} | w_{1 : 2}\right) P\left(w_{4} | w_{1 : 3}\right) \ldots P\left(w_{n} | w_{1 : n-1}\right)\]
为了计算语言模型,我们需要计算词的概率,以及一个词在给定前几个词的情况下的条件概率,即语言模型参数。设训练数据集为一个大型文本语料库,如维基百科的所有条目。词的概率可以通过该词在训练数据集中的相对词频来计算。例如, \(P(w_1)\) 可以计算为 \(w_1\) 在训练数据集中的词频(词出现的次数)与训练数据集的总词数之比。因此,根据条件概率定义,一个词在给定前几个词的情况下的条件概率也可以通过训练数据集中的相对词频计算。例如, \(P(w_2∣w_1)\) 可以计算为 \(w_1,w_2\) 两词相邻的频率与 \(w_1\) 词频的比值,因为该比值即 \(P(w_1,w_2)\) 与 \(P(w_1)\) 之比;而 \(P(w_3∣w_1,w_2)\) 同理可以计算为 \(w_1 、 w_2\) 和 \(w_3\) 三词相邻的频率与 \(w_1\) 和 \(w_2\) 两词相邻的频率的比值。以此类推。
k-gram 语言模型
当序列长度增加时,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。 n 元语法通过马尔可夫假设(虽然并不一定成立)简化了语言模型的计算。
\[P\left(w_{1 : n}\right) \approx \prod^{n} P\left(w_{i} | w_{i-k : i-1}\right)\]
如何计算
采用极大似然法,在一个大的语料库中,可以得到
\[ \hat{p}_{\mathrm{MLE}}\left(w_{i+1}=m | w_{i-k : i}\right)=\frac{\#\left(w_{i-k : i+1}\right)}{\#\left(w_{i-k : i}\right)} \]
平滑技术
上面的模型计算最大的问题是分母为零,也就是句子没有出现过的情况。
Add \(\alpha\)平滑
\[ \hat{p}_{\mathrm{add}-\alpha}\left(w_{i+1}=m | w_{i-k : i}\right)=\frac{\#\left(w_{i-k : i+1}\right)+\alpha}{\#\left(w_{i-k : i}\right)+\alpha|V|},0<\alpha \leq 1 \]
BACK-OFF
k-gram没有观测到的话,算(k-1)gram
\[ \hat{p}_{\text { int }}\left(w_{i+1}=m | w_{i-k : i}\right)=\lambda_{w_{i-k : i}} \frac{\#\left(w_{i-k : i+1}\right)}{\#\left(w_{i-k : i}\right)}+\left(1-\lambda_{w_{i-k : i}}\right) \hat{p}_{\text { int }}\left(w_{i+1}=m | w_{i-(k-1) : i}\right) \]
传统语言模型的局限性
- 平滑技术复炸
- 计算量
- 泛化性差
所以基于神经网络的语言模型就热门起来了。