一、语言模型
语言模型的目的为了能够量化地衡量哪个句子更像一个客观世界真实的句子。根据上下
文推测下一个词是什么,这不需要人工标注语料,可以从大规模语料库中学习丰富的语义知
识。语言模型最初是针对语音识别问题而开发的,它们仍然在现代语音识别系统中发挥着核
心作用,同时也广泛用于其他自然语言处理应用程序。核心思想是根据句子里面前面的一系
列前导单词预测后面跟哪个单词的概率大小(理论上除了上文之外,也可以引入单词的下文
联合起来预测单词出现概率)。句子里面每个单词都会根据上文预测自己,把所有这些单词
的产生概率乘起来,数值越大代表这越像一个真实的句子。
目前主要有两类语言模型,分别是统计语言模型和神经网络语言模型。统计语言模型主
要是 n-gram 语言模型,在神经网络语言模型中,主要包括原始的神经网络语言模型、
word2vec、GloVe、基于循环神经网络的语言模型、ELMo、GPT、BERT。这些语言模型基本
呈承接关系,每一个新的语言模型会在前一个语言模型的基础上进行改进升级。本节课会对
其中几种重要的语言模型进行介绍。
图 1 语言模型
1.1 统计语言模型
以英语为例,假设 V 是所有单词的集合,可以将其表示为
...
,
smile
,
NLP
,
love
,
you
V
her
I
,
在真实的情况下,V 可能很大,包含成千上万的单词,假设 V 是一个有限集合。接下来假设
英语中的句子是一个单词序列,即
...21
xx
mx
,
1m ,
x
0
x
1
,
xm
STOP
,
Vxi ,
i
,...,2,1
m
1
其中 STOP 和 不是 V 的成员,STOP 是句子结束的标志, 是句子中的开始符号。例句如下
所示,
I love you STOP
I love NLP STOP
her you STOP
smile STOP
love smile STOP
you love her smile STOP
STOP
. . .
将 V 定义为具有词汇 V 的所有句子的集合:这是无限集,因为句子可以是任意长度。由此
可以给出以下定义:
统计语言模型由有限集V 和函数
,
xxp
2
1
组成,例如:
(1)对于任意
(2)此外,
x
1
...
1
,
,
xxpV
1
,...,
x
2
m
2
m
...
x
1
x
,
xxp
V
1
x
m
,...,
mx
0
,...,
,因此
x
m
,
xxp
2
1
,...,
mx
是 V 中句子的概率分布。
当从训练语料库中学习语言模型时,将
xc
...1
mx
定义为句子
x ...1
mx
在训练语料库中被
看到的次数,M 是训练语料库中的句子总数。然后可以定义
xp
1
...
x
m
x
m
...
xc
1
M
这样会将从未在训练语料库中出现的句子,分配零概率,这样显然是不合适的。
1.1.1 马尔可夫模型
为每个句子建模包含 m 个随机变量的序列
XX
1
...2
mX
,长度 m 是一个随机变量,因为
句子的长度不是一个固定的值。这里希望模拟任何句子序列
x ...1
mx
的概率,其中
1m 且
iVxi
,
...1
m
,模拟联合概率为
XP
1
Xx
1
,
2
x
2
,...,
X
m
m
x
存在
mV 种形如
x ...1
mx
的可能序列,很明显,列出所有
mV 的可能性是不可行的,因为单
就词汇表 V 而言,就包含成千上万种可能,考虑到序列每个位置的可能性,需要的信息量
太过巨大,因此需要建立一个更紧凑的模型。
XP
利用一阶马尔可夫模型,做出如下假设
x
,...,
XP
x
1
Xx
1
,
X
x
m
m
m
1
1
2
2
XP
1
x
1
i
2
m
i
2
XP
i
XP
i
Xx
i
1
x
1
,...,
X
i
1
x
i
1
Xx
i
i
1
x
i
1
m
i
1
XP
i
Xx
i
i
1
x
i
1
上式第一步是根据概率链式法则得出的精确解。第二步中,假设第 i 个词仅与第 i-1 个词有
关。
在构成三元语言模型基础的二阶马尔可夫过程中,假设如下所示
XP
1
Xx
1
,
2
x
2
,...,
X
m
x
m
XP
i
Xx
i
i
1
Xx
1
i
,
i
2
x
i
2
m
i
1
在此定义中
x
0
x
*1
,
xm
STOP
,
,
iVxi
...1
m
1
。该假设表示第 i 个词仅与第
i-1 个词和第 i-2 个词有关。
产 生 句 子 的 过 程 是 首 先 初 始 化
i
,1
x
0
x
1
, 然 后 从 分 布
XP
设置
i
i
Xx
i
i
2
x
i
2
,
X
i
1
1
x
i
中生成 ix ,如果
xi
STOP
,则返回序列
x ...1 。否则,
ix
1 i
并返回上一步。
1.1.2 n-gram 语言模型
与马尔可夫模型一样,将每个句子建模为 m 个随机变量的序列
XX
1
,...
mX
2
。在马尔可
夫模型下,任何句子
x ...1
mx
的概率为
XP
i
Xx
i
i
1
x
i
1
,
X
i
2
x
i
2
,...,
X
1
n
i
x
i
1
n
m
i
1
XP
1
Xx
1
,
2
x
2
,...,
X
m
x
m
如前所述假设
x
0
x
1
。
假设对于任意i ,有如下表示
XP
i
Xx
i
i
1
xxq
i
i
其中
,
x
i
1
2
,...,
x
i
为
,
X
i
2
x
i
2
...,
,
X
1
n
i
x
i
1
n
,
xxq
i
i
,
x
i
1
2
,...,
x
i
1
n
是模型的参数。然后,对于任何序列
x ...1
mx
,模型采用的形式
1
x
i
1
n
xp
1
...
x
m
这引出了以下定义:
xxq
i
i
,
x
i
1
2
,...,
x
i
1
n
m
i
1
n-gram 语言模型由有限集V 和参数
Vw
STOP
以及
1,...,
u
u
V
n 1
,...,
2
1
,
uuwq
。
,
uuwq
1
,...,
2
1
nu
组成,对于每个 n 元组,有
1
nu
的值可以解释为紧接在 n-1
元组
1,...,
u
1
nu
之后看到单词 w 的概率。对于任何句子
x ...1
mx
,
,
iVxi
...1
m
1
,
xm
STOP
,n-gram 语言模型下句子的概率是
xp
1
...
x
m
其中定义
x
0
x
1
。
xxq
i
i
,
x
i
1
2
,...,
x
i
1
n
m
i
1
当第 i 个词仅与第 i-1 个词和第 i-2 个词有关时,可以将 n-gram 语言模型表示为三元
(Trigram)语言模型。
例如,对于句子 c
I love you STOP
有如下的表示
cp
Iq
,
love
q
,
I
q
you
I
,
love
q
STOP
love
,
you
每个单词仅取决于前两个单词:这是三元组假设。
参数满足任何三元组
wuu
, 2
,
1
的约束条件,
0
uuwq
,
2
1
对于任意二元组
1,uu ,有
2
因此,
1,uuwq
2
定义了以二元语境
为条件的可能的词 w 的分布。
2
1
1
,
uuwq
STOP
Vw
2
1,uu
这里留下的关键问题是估计模型的参数,即
1,uuwq
2
其中 w 可以是
V
STOP
的任意成员,而
Vuu
1,
2
。模型中有
3V 个参数。这可能
是一个非常大的数字。例如,使用
V
10000
(这是一个现实的数字,很可能远小于现代
标准),那么有
。
3 10V
12
wuuc
, 2
,
1
首先,将
定义为在训练语料库中看到三元组
wuu
, 2
,
1
的次数:例如,
,
Ic
1,uuc
,
you
love
2
定义为在语料库中看到二元组
是 在训 练语 料 库中 看 到 I love you 三 个单 词的 序 列的 次 数。 类似 地 ,将
1,uu
2
的次数。对于任何
,
1,
uuw
2
,可以得出以下
定义
,
uuwq
1
2
1
,
,
wuuc
2
2
,
uuc
1
例如对
q
you
I
,
love
的估计是
q
you
I
,
love
Ic
,
,
love
,
Ic
love
you
分子是看到整个三元组
I
,
,
love
you
的次数,而分母是看到两元组
I,
love
的次数。现在只
考虑这两个项的比例。
但是这种估计参数的方式遇到了一个非常严重的问题。模型中有很多参数(例如,词汇
量大小为10000 ,有大约 1210 个参数)。因此,许多计数将为零。这导致两个问题:
(1)由于分子中的计数为0 ,上述大部分估计将是
0
uuwq
,
1
2
。这将导致许多三元
组概率被系统地低估,将概率 0 分配给任何没有在训练数据中看到三元组是不合理的,
1,uuc
模型参数数量与训练语料库中的单词数量相比通常非常大。
2
(2)在分母
1,uuc
2
等于零的情况下,估计不能很好地定义。
解决这两个问题的方法是在最大似然估计的基础上加入线性插值或折扣法的平滑估计
来进行调整。
1.2 神经网络语言模型
在统计语言模型中,具有其局限性:
(1)由于参数空间的爆炸式增长,它无法处理更长程的上下文,即最多只能处理三元
语言模型;
(2)没有考虑词与词之间内在的联系性。
例如,考虑“the cat is walking in the bedroom”这句话。如果我们在训练语料中看到了
很多类似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”这样
的句子,那么,即使我们没有见过这句话,也可以从“cat”和“dog”(“walking”和“running”)
之间的相似性,推测出这句话的概率。然而,N-gram 模型做不到。这是因为,N-gram 本质
上是将词当做一个个孤立的单元去处理的。这种处理方式对应到数学上的形式是一个个离散
的 one-hot 向量。
传统的用 one-hot 作为词向量来表示词,维度相当巨大,难以在有限的空间里进行有效
快速的运算。而且将 China 和 Japan 做内积的结果与 China 和 whale 做内积的结果是一样的,
彼此相互独立。但是直观来看 China 和 Japan 同作为国家名,在向量空间上的位置要比 China
和 whale 的位置要更近一些。假如有 one-hot 词向量如下所示
,...,0,0,0,1
China
,...,0,0,1,0
Japan
,...,0,1,0,0
Cuba
,...,1,0,0,0
whale
...
T
T
0,0,0,0
0,0,0,0
T
0,0,0,0
0,0,0,0
T
其中每个词向量维度为 m。如果词表中存在十万个词,这个词向量组成的矩阵维度将严重影
响系统的运行速度。解决维度爆炸问题的方法就是通过词嵌入(word embedding)来降维。
降维后的词向量可以表示为
T
T
0.05
,
0.99
0.99
,
China
,
0.05
,
0.93
.990
Japan
,
0.28
0.06
,
.970
Cuba
0.5,
.990,.10,.20
whale
...
,...
0.7,
0.6,
,...
T
0.5,
,...
T
,...
其中每个词向量维度为 n,并且 mn 。用图可以将词嵌入的过程简单表示出来,如图 2 所
示,
如果将词向量映射到二维空间上,可以如图 3 表示,
图 2 词嵌入简单表示
图 3 词向量表示
根据图中表示,China、Japan、Cuba 在空间上位置更近一些,这是因为这三个词代表了
三个国家,可以看作是一类词,而 whale 表示“鲸”,与前三个词不是同类型单词,因而与
它们的距离要远一些。可以发现经过词嵌入过程,得到词向量可以表示出比 one-hot 词向量
更多的信息,例如词之间的关系,这是因为引入了上下文信息。
鉴于 N-gram 等模型的不足,在 2003 年 Bengio 等人提出的神经网络语言模型使用了一
个三层前馈神经网络来进行建模。其中有趣的发现了第一层参数,用表示词不仅低维紧密,
而且能够蕴涵语义,也就为现在使用的词向量打下了基础。
将词表中的词语表示为一个固定长度为 m 的向量形式 wC ,这样整个词表可以用一个
图 4 三层前馈神经网络
Vm 的矩阵表示,每一列为一个词向量。现在找到词 tw 的上下文
context ,这里 Bengio
tw
context 是词 tw 的前 1n 个词语,并把这 1n 个词语的词向量首尾相接
设定的上下文
tw
的拼起来,形成维度为
n 1 的向量来当做神经网络的输入,其中 n 一般不大于 5。所以
m
NNLM 输入层的大小已经确定为
m
n 1 ,隐层的规模由人工指定,输出层的大小为 V ,
设定为 V 是因为输入特征为
context 对应的
tw
n 1 维的向量,通过 NNLM 后期望的输
m
出应该是词语 tw 了,即输出类似于模型学习到的到标签的映射,因为共有 V 个词语,所以
输出层维度为 V , tw 在词表 V 中的下标对应的维度就是映射 tw 的得分,而
soft
max
正好
可以把该得分归一化为概率。
假设词 w 的上下文词拼接成一个向量 wx ,在神经网络中的计算如下
z
w
y
w
tanh
Uz
w
d
W
w
Wx
d
U
在向量
y
w
y
,
y
w
1,
w
2,
,...,
y
Vw
,
中的每一个分量 iwy , 表示当前词为词表的第 i 个词,且上下
文词为
context 的概率,求概率还需要对 wy 做一个
w
soft
max
归一化,如下所示