统计语言模型:给定一个词汇集合 语言模型 - 图1,对于一个由 语言模型 - 图2 中的词构成的序列 语言模型 - 图3,统计语言模型赋予这个序列一个概率 语言模型 - 图4,来衡量 语言模型 - 图5 符合自然语言的语法和语义规则的置信度。
给定一个长度为 语言模型 - 图6 的句子语言模型 - 图7,其概率可以看出是 语言模型 - 图8 个词的联合概率。
语言模型 - 图9
语言模型 - 图10 应该是和句子的长度相关的。假设句子长度的概率分布为 语言模型 - 图11,那么完整的分布函数为:
语言模型 - 图12
以句子为基本单位来讨论概率时,其样本空间非常大,很难去估计每个句子的概率。通过概率的乘法公式:
语言模型 - 图13
为了形式简洁,引进一个虚拟词 语言模型 - 图14,并且假定 语言模型 - 图15

N-gram 语言模型

假设一个词的概率只依赖于其前面的 语言模型 - 图16 个词(语言模型 - 图17阶马尔可夫性质),即
语言模型 - 图18
语言模型 - 图19 时,称为一元(unigram)语言模型;
语言模型 - 图20 时,成为二元(bigram)语言模型。
语言模型 - 图21 的值有两种方法:

  1. 假设语言服从多项分布,用最大似然估计来计算多项分布的参数;
  2. 用一个函数 语言模型 - 图22 来直接估计下一个词是 语言模型 - 图23的概率。

    一元模型

    语言模型 - 图24 时,相当于假设句子 语言模型 - 图25 中每个位置上的词都和其他词是独立的,和它出现的上下文无关。也就是说每个位置上的词都是从多项式分布 语言模型 - 图26 独立生成的。这个多项分布 语言模型 - 图27 的维数为词汇表的大小 语言模型 - 图28。因此,句子 语言模型 - 图29 的概率可以表示为:
    语言模型 - 图30
    其中,语言模型 - 图31 为字典中第 语言模型 - 图32 个词在句子中出现的次数。语言模型 - 图33 是需要实现估计出来的,需要从一个大量的文档集合进行估计。根据 Bayes 公式:
    语言模型 - 图34

    n 元语言模型

    语言模型 - 图35 元语言模型中,条件概率 语言模型 - 图36 也可以通过极大似然函数来得到:
    语言模型 - 图37
    平滑技术(Smoothing):增加低频词的频率,降低高频词的频率。加法平滑的计算公式为:
    语言模型 - 图38

其中,语言模型 - 图39 为常熟。一般 语言模型 - 图40,也叫加 语言模型 - 图41 平滑。

语言模型评价方法

困惑度(Perlexity)

困惑度可以衡量一个分布的不确定性。为每个词条件概率的几何平均数的倒数。句子概率越大,困惑度越小,语言模型越好。
image.png
其中,语言模型 - 图43 为测试数据集中所有词的个数。

神经网络语言模型 NNLM

在统计语言模型中,一个关键问题是估计 语言模型 - 图44,即在时刻 语言模型 - 图45,给定历史信息 语言模型 - 图46 条件下,词汇表 语言模型 - 图47 中的每个词 语言模型 - 图48 出现的概率。这个问题可以转化为一个类别数为 语言模型 - 图49 的多分类问题,即:
语言模型 - 图50
其中,语言模型 - 图51 为分类函数,估计词汇表中第 语言模型 - 图52 个词出现的后验概率,并满足 语言模型 - 图53语言模型 - 图54 为模型参数。
image.pngimage.png

  • 输入层:通过词嵌入矩阵将语言符号序列 语言模型 - 图57 转换成稠密的实数值向量。词嵌入矩阵 语言模型 - 图58 中,第 语言模型 - 图59 列向量表示词汇表中第 语言模型 - 图60 个词对应的稠密向量。假设词 语言模型 - 图61 对应词汇表中的索引为 语言模型 - 图62,其 one-hot 向量为 语言模型 - 图63,即第 语言模型 - 图64 维为 1,其余为 0 的 语言模型 - 图65维向量。其对应的词向量为:

语言模型 - 图66
通过直接映射,得到历史信息 语言模型 - 图67 每个词对应的向量表示 语言模型 - 图68, 语言模型 - 图69,…, 语言模型 - 图70

  • 隐藏层:输入词向量 语言模型 - 图71, 语言模型 - 图72,…, 语言模型 - 图73到前馈神经网络和循环神经网络,输出为一个可以表示历史信息的向量 语言模型 - 图74。在神经网络语言模型中,常见的网络类型有以下三种:

    (1) 简单平均:

    语言模型 - 图75
    其中,语言模型 - 图76 为每个词的权重,与位置相关。位置无关的权重可以设置为 语言模型 - 图77

    (2)前馈神经网络:

    1. 假设历史信息只包含前面 ![](https://cdn.nlark.com/yuque/__latex/a438673491daae8148eae77373b6a467.svg#card=math&code=n-1&height=16&id=czkEh) 个词。首先将这 ![](https://cdn.nlark.com/yuque/__latex/a438673491daae8148eae77373b6a467.svg#card=math&code=n-1&height=16&id=Etftx)个词的词向量![](https://cdn.nlark.com/yuque/__latex/8bfe54bbc18e7f45058952e5b5323250.svg#card=math&code=%5Cmathbf%7Bv%7D_%7Bw_%7Bt-n%2B1%7D%7D%2C%20...%2C%20%5Cmathbf%7Bv%7D_%7Bw_%7Bt-1%7D%7D&height=16&id=sFeeB) 拼接为一个维度为 ![](https://cdn.nlark.com/yuque/__latex/9da3112c290d15d1161f72336f4c78ed.svg#card=math&code=d_1%20%5Ctimes%20%28n-1%29&height=20&id=D0rsR) 的向量 ![](https://cdn.nlark.com/yuque/__latex/dd8d30b0430acdea04043d430d207067.svg#card=math&code=%5Cmathbf%7Bx%7D_&height=14&id=l9Hnr)。<br />![](https://cdn.nlark.com/yuque/__latex/19f02436992518624fa145c751ceda6f.svg#card=math&code=%5Cmathbf%7Bx%7D_t%20%3D%20%5Cmathbf%7BV%7D_%7Bw_%7Bt-n%2B1%7D%7D%20%5Coplus%20...%5Coplus%20%5Cmathbf%7BV%7D_%7Bw_%7Bt-1%7D%7D&height=20&id=bd91A)<br /> 然后将 ![](https://cdn.nlark.com/yuque/__latex/dd8d30b0430acdea04043d430d207067.svg#card=math&code=%5Cmathbf%7Bx%7D_t&height=14&id=j6l1T) 输入到由多层前馈神经网络构成的隐藏层,最后一层隐藏层的输出为 ![](https://cdn.nlark.com/yuque/__latex/a258fce68cc7da1e7112978bf7dfe78a.svg#card=math&code=%5Cmathbf%7Bh%7D_t&height=18&id=SMMOM)。比如,只含一层隐藏层的模型为:<br />![](https://cdn.nlark.com/yuque/__latex/39d9fe0bd467d02d585b24d3b065443f.svg#card=math&code=%5Cmathbf%7Bh%7D_t%20%3D%20tanh%28%5Cmathbf%7BW%7D%20%5Cmathbf%7Bx%7D_t%20%2B%20%5Cmathbf%7Bc%7D%29&height=20&id=wThcb)<br /> 前馈神经网络也可以包含跳层连接(Skip-Layer Connections):<br />![](https://cdn.nlark.com/yuque/__latex/768bd7f658a6ade60c7aca425796f4f2.svg#card=math&code=%5Cmathbf%7Bh%7D_t%20%3D%5Cmathbf%7Bx%7D_t%20%5Coplus%20tanh%28%5Cmathbf%7BW%7D%20%5Cmathbf%7Bx%7D_t%20%2B%20%5Cmathbf%7Bc%7D%29&height=20&id=rxJ2J)

    (3)循环神经网络:

    1. 与前馈神经网络不同,循环神经网络可以接受变长的输入序列,依次接受输入 ![](https://cdn.nlark.com/yuque/__latex/8bfe54bbc18e7f45058952e5b5323250.svg#card=math&code=%5Cmathbf%7Bv%7D_%7Bw_%7Bt-n%2B1%7D%7D%2C%20...%2C%20%5Cmathbf%7Bv%7D_%7Bw_%7Bt-1%7D%7D&height=16&id=Wywk3)得到 ![](https://cdn.nlark.com/yuque/__latex/e358efa489f58062f10dd7316b65649e.svg#card=math&code=t&height=14&id=iVhoD) 时刻的隐藏状态 ![](https://cdn.nlark.com/yuque/__latex/a258fce68cc7da1e7112978bf7dfe78a.svg#card=math&code=%5Cmathbf%7Bh%7D_t&height=18&id=RzQdB):<br />![](https://cdn.nlark.com/yuque/__latex/f5c7d811ae0c4319bd1df44d3b742234.svg#card=math&code=%5Cmathbf%7Bh%7D_t%20%3D%20tanh%28U%5Cmathbf%7Bh%7D_%7Bt-1%7D%20%2B%20%20%5Cmathbf%7BW%7D%20%5Cmathbf%7Bx%7D_%7Bt-1%7D%20%2B%20%5Cmathbf%7Bc%7D%29&height=20&id=blXYc)<br /> 其中 ![](https://cdn.nlark.com/yuque/__latex/a258fce68cc7da1e7112978bf7dfe78a.svg#card=math&code=%5Cmathbf%7Bh%7D_t&height=18&id=ZJRCf) = 0。<br />前馈网络语言模型和循环网络语言模型的不同之处:循环神经网络利用隐藏状态来记录以前所有时刻的信息,而前馈神经网络只能接受前 n−1 个时刻的信息。
  • 输出层:

输出层大小为 语言模型 - 图78,输入为历史信息的向量表示 语言模型 - 图79,输出为每个词的后验概率。一般使用 softmax 分类器:
语言模型 - 图80
其中,输出向量 语言模型 - 图81 为一个概率分布,其第 语言模型 - 图82 维是词汇表中第 语言模型 - 图83 个词出现的后验概率;语言模型 - 图84是最后一层隐藏层到输出层直接的权重,也成为输出词嵌入矩阵,矩阵中每一行可以看作是一个词向量。