Fork me on GitHub

nlp入门基础之语言模型

nlp入门基础之语言模型


@[toc]
https://zhuanlan.zhihu.com/p/28080127
https://zhuanlan.zhihu.com/p/52061158
https://blog.csdn.net/weixin_40056628/article/details/89364456

1. 简介

语言模型(language model)是用来计算一个句子的概率的模型,或者预测下一个词出现的概率。通俗地讲,就是用来评估一个句子有多大的可能性是有意义的(是人话而不是一堆杂乱无章的词语组合)。
一段自然语言文本可以看做是一个离散时间序列$s=\omega_1,\omega_2,\cdots,\omega_T$,而一个语言模型的作用是构建这个时间序列的概率分布$P(s)$。概率计算公式可以表示为:

对于$P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1})$,可以在大量娱乐库中采用频率统计的方式来近似估计:

直接计算上式是不现实的。假设词汇表大小为$V$,由上式可以看到,产生第$i$个词$\omega_i$的概率是由已经产生的$i-1$个词$\omega_1,\omega_2,\cdots,\omega_{i-1}$决定的,那么我们必须考虑所有$V^{i-1}$种不同历史情况下,产生第$i$个词的概率。这样模型中就会有$V^i$个自由参数(每个条件概率看成一个参数)。这在实际中几乎是无法从训练数据中估计出这些参数的。并且,很多词的组合可能在语料库中根本不存在,这样会导致最后估计出的概率为零(数据稀疏问题)。
因此需要引入语言模型来降低参数个数。语言模型有基于统计模型的,比如n元语法(n-gram),也有基于神经网络的。

2. n元语法

n元语法(n-grams)是基于n-1阶马尔科夫链的概率语言模型,也即在n-gram模型中,一个词的出现概率只与前面n-1个词有关:

每个条件概率需要实现在大量语料库中根据频率近似求得。

  • n=1: unigram,每个词独立于历史
  • n=2: bigram,每个词只与它前面的一个词有关。实际中常用
  • n=3: trigram,每个词只与它前面的两个词有关

n元语法模型可能的缺陷:

  1. 参数空间过大
  2. 数据稀疏

2.1. 一元模型(unigram)

一元模型假设每句子中的每个每个词都是独立的,也即:

需要实现在语料库中统计每个字的频率。

2.2. 二元模型(bigram)

注意需要有句子开头和结尾标识符。实践中,需要先统计语料库中词语的两两组合情况的各自频率,再统计每个词的频率,以便得到条件概率。

3. n-gram模型实践

3.1. 文本分类

假设类别有两类:$Y_1,Y_2$,原始文本为$X$。由贝叶斯公司可知:

$P(Y_i)$就是类别$Y_i$的文本比例;$P(X|Y_i)$就是在类别$Y_i$下句子$X$的概率,可以由n-gram算得

在上述贝叶斯假设条件下,可以简化过程,直接将训练样本的n-gram特征作为输入去训练一个分类器,得到分类模型。

4. 神经网络语言模型

4.1. 基于前馈神经网络的语言模型

Bengio在2003的论文A Neural Probabilistic Language Model。
在这里插入图片描述

图4.1 前馈神经网络语言模型

先给每个词在连续空间中赋予一个向量(词向量),再通过神经网络去学习这种分布式表征。利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系。很显然这种方式相比 n-gram 具有更好的泛化能力只要词表征足够好。从而很大程度地降低了数据稀疏带来的问题。但是这个结构的明显缺点是仅包含了有限的前文信息
该模型利用前n-1个词去预测下一个词,输入层是n-1个词的one-hot向量(每个向量是$1\times V$),再乘以一个$1\times D$的权重矩阵,得到$1\times D$的中间向量,将n-1个中间向量拼接成隐藏层(长度为$D(n-1)$)。隐藏层的激活函数为tanh,输出层为一个全连接层再接一个softmax函数生成概率分布。该模型的副产物就是词向量(输入层到隐藏层的权重矩阵)
这篇论文是词向量的鼻祖,后面的cbow和skip-gram都是由这里启发而来。

4.2. 基于循环神经网络的语言模型

为了解决定长信息(只能利用前面n-1个词的信息)的问题,Mikolov在2010的论文 Recurrent neural network based language model。
在这里插入图片描述

图4.2 RNN语言模型(图片来源见水印)

网络的输入层是”s我想你”,输出层可以看作是分别计算条件概率 P(w|s)、P(w|s我)、P(w|s我想)、P(w|s我想你) 在整个词表V中的值。而我们的目标就是使期望词对应的条件概率尽可能大。

相比单纯的前馈神经网络,隐状态的传递性使得RNN语言模型原则上可以捕捉前向序列的所有信息(虽然可能比较弱)。通过在整个训练集上优化交叉熵来训练模型,使得网络能够尽可能建模出自然语言序列与后续词之间的内在联系。

为了解决依赖的信息过长的问题,后续又有LSTM、attention等改进方法