1. 语言模型

1. 语言模型

2. Attention Is All You Need(Transformer)算法原理解析

3. ELMo算法原理解析

4. OpenAI GPT算法原理解析

5. BERT算法原理解析

6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

7. Transformer-XL原理介绍

1. 前言

在机器学习领域,语言识别和图像识别都不太需要预处理就能喂给计算机,语音识别的输入数据可以是音频频谱序列向量所构成的矩阵,图像识别的输入数据是像素点向量构成的矩阵。但是文本是一种抽象的东西,显然不能直接把文本数据喂给机器当做输入,因此这里就需要对文本数据进行处理。

2. 语言模型

语言模型是对一段文本的概率进行估计即针对文本\(X\),计算\(P(X)\)的概率,对信息检索,机器翻译,语音识别等任务有着重要的作用。语言模型分为统计语言模型神经网络语言模型

3. 统计语言模型

要判断一段文字是不是一句自然语言,可以通过确定这段文字的概率分布来表示其存在的可能性。语言模型中的词是有顺序的,给定m个词看这句话是不是一句合理的自然语言,关键是看这些词的排列顺序是不是正确的。所以统计语言模型的基本思想是计算条件概率。

输入:\(X=(x_1,x_2,...,x_m)\)

输出:\(P(X)\)的概率

\[P(X)=P(x_1,x_2,x_3...,x_m)=P(x_2|x_1)P(x_3|x_1,x_2)...P(x_m|x_1,x_2,...x_{m-1}) \]

以上公式就是语言模型的基本定义。这个公式有2个问题。

假设有句子\((x_1,x_2,x_3,x_4,x_5,x_6)\)

\[P(x_6|x_1,x_2,x_3,x_4,x_5)=\frac{count(x_1,x_2,x_3,x_4,x_5,x_6)}{count(x_1,x_2,x_3,x_4,x_5)} \]

  • 自由参数数目

假定字符串中字符全部来自与大小为\(V\)的词典,上述例子中我们需要计算所有的条件概率,对于所有的条件概率,这里的\(x\)都有\(V\)种取值,那么实际上这个模型的自由参数数目量级是\(V^6\),6为字符串的长度。
从上面可以看出,模型的自由参数是随着字符串长度的增加而指数级暴增的,这使我们几乎不可能正确的估计出这些参数。

  • 数据稀疏性

从上面可以看到,每一个\(x\)都具有\(V\)种取值,这样构造出了非常多的词对,但实际中训练语料是不会出现这么多种组合的,那么依据最大似然估计,最终得到的概率实际是很可能是0。

3.1 N-gram模型

大家已经知道了语言模型的定义,那首先会遇到一个问题,上面这个公式遇到长句子时计算最后一个词的概率\(P(x_m|x_1,x_2,...x_{m-1})\)会变得非常的麻烦,那我们是不是可以进行一定的简化呢?设想一下这句话“今天天气真是不错,现在感觉有点饿,我们去吃饭吧!”当我们预测P("吃饭")的概率时,感觉和最前面描述天气的关系不是很大,而是和比较近的“有点饿”联系比较紧密。所以我们根据一个词会和它附近的词联系比较紧密,那我们就可以简化语言模型的概率公式了。

假设我们定义一个词的概率和它前面的k个词相关,公式改写如下:

\[P(x_i|x_1,x_2,...x_{i-1})=P(x_i|x_{i-(k-1)},...,x_{i-1}) \]

\[P(X)=\prod_{i=1}^mP(x_i|x_{i-(k-1)},...,x_{i-1}) \]

从模型的效果来看,理论上\(n\)的取值越大,效果越好。但随着\(n\)取值的增加,效果提升的幅度是在下降的。同时还涉及到一个可靠性和可区别性的问题,参数越多,可区别性越好,但同时单个参数的实例变少从而降低了可靠性。

N-gram比较好解决了自由参数多的问题,但是数据稀疏的问题还是没有呗解决。

3.2 平滑化

假设有一个词组在训练语料中没有出现过,那么它的频次就为0,但实际上能不能认为它出现的概率为0呢?显然不可以,我们无法保证训练语料的完备性。那么,解决的方法是什么?如果我们默认每一个词组都出现1次呢,无论词组出现的频次是多少,都往上加1,这就能够解决概率为0的问题了。

\[P(x_6|x_1,x_2,x_3,x_4,x_5)=\frac{count(x_1,x_2,x_3,x_4,x_5,x_6) + 1}{count(x_1,x_2,x_3,x_4,x_5) + 1} \]

4. 神经网络语言模型

神经网络语言模型的提出解决了N-gram模型当\(n\)较大时会发生数据稀疏的问题。与N-gram语言模型相同,神经网络语言模型(NNLM)也是对\(n\)元语言模型进行建模,估计\(P(x_i|x_{i-n+1},x_{i-n+2},...x_{i-1})\)的概率,与统计语言模型不同的是,神经网络语言模型不通过计数的方法对\(n\)元条件概率进行估计,而是直接通过一个神经网络对其建模求解。

image

神经网络语言模型的结构入上图所示,可以分为输入层、投影层、隐藏层和输出层

  1. 输入层:这里就是词\(x\)的上下文,如果用N-gram的方法就是词\(x\)的前\(n-1\)个词了。每一个词都作为一个长度为\(V\)的one-hot向量传入神经网络中.
  2. 投影层:投影层也叫embedding层,在投影层中,存在一个look-up表\(C\)\(C\)被表示成一个\(V*m\)的自由参数矩阵,其中\(V\)是词典的大小,而\(m\)代表每个词投影后的维度。表\(C\)中每一行都作为一个词向量存在,这个词向量可以理解为每一个词的另一种分布式表示。每一个one-hot向量都经过表\(C\)的转化变成一个词向量。\(n-1\)个词向量首尾相接的拼起来,转化为\((n-1)m\)的列向量输入到下一层。
  3. 隐藏层:隐藏层的作用是进行非线性变换。\(z=tanh(WX+b)\)
  4. 输出层:用softmax进行概率计算,计算词表\(V\)的每个词的概率。\(P(x_i)=softmax(z)\)

5. 总结

即使使用了神经网络语言模型,本质上仍然是N元语言模型,就是你要预测的当前词只和他前面的N-1个词有关,与更前面的词无关。尽管神经网络这种方法一定程度上解决了数据稀疏的问题,但还是损失了一些信息。如果想要学习前面所有的的词就要涉及s到自然语言处理中的循环神经网络(RNN),我们都知道,循环神经网络的定义是当前的输出不仅和当前的输入有关,还和上一时刻的隐藏层的输出有关,这样讲神经网络展开后就会发现他把序列从开头到结尾全连起来了,十分方便处理序列数据,而这个性质正是我们做语言模型所需要的。

posted @ 2018-10-27 15:46  hyc339408769  阅读(9867)  评论(1编辑  收藏  举报