序列模型之Language model简记

语言模型用来估计句子的可能性P(sentence)

一个句子的概率(W_{k} 是第k个词)

语料库(corpus)指的是很大的某种语言(例如英语)句子组成的文本。通过将语料库中的每个单词映射成索引(例如独热向量)形成字典。可以按需在字典中添加句子末尾标志<EOS>(end of sentence)和对应未出现在字典中的低频词的标志<UNK>(unknown words)作为补充。

示意图中的每一个\hat{y}^{<i>} 表示一个预测值(单词),a^{<o>} x是预输入向量,均为\vec{0} T_{y} 表示序列长度。

假如我们在训练集中得到一句话:Cats average 15 hours of sleep a day. 首先将每个词标记为y^{<1>} y^{<2>} y^{<3>} 等,即标签值。

语言模型第一个激活项的输出是\hat{y}^{<1>} ,他是通过softmax预测字典中每一个词作为第一个词的概率。不管预测结果是什么,将结果\hat{y}^{<1>} 作为第二个激活项的输入,经过相同的操作通过softmax获得的输出是条件概率P(\hat{y}^{<2>} \vert \hat{y}^{<1>} ),依次类推第三个输出是P(\hat{y}^{<3>} \vert \hat{y}^{<2>} \hat{y}^{<1>} )……


在某个时间步t正确的词是y^{<t>} ,softmax预测值是\hat{y}^{<t>} ,则单个预测的损失函数是

L(\hat{y}^{<t>} ,y^{<t>} )=-\sum_{i}y^{<t>} _i\log_~ \hat{y}^{<t>} _i

总体损失函数是J=\sum_{t}L^{<t>}(\hat{y}^{},{y}^{} )



当一个句子很长时,预测一个词时考虑之前所有的词不现实,这时出现了n-gram语言模型。他使用了马尔科夫模型,即任意一个词出现的概率只与它前面出现的n-1个词有关。

根据n值的不同分为unigram(n=1,即每个词都是独立的)、bigram(n=2,即每个词跟他之前的一个词有关)、trigram(n=3,即每个词跟他之前的两个词有关)……从模型的效果来看,理论上n的取值越大,效果越好。但随着n取值的增加,效果提升的幅度是在下降的。

一个句子的概率
bigram的计算



际应用中还会遇到一个问题:数据稀疏,解决方法介绍加法平滑

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

加法平滑,\delta 取常数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容