序列模型之语言模型(Language model)简记

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

13931179-48202f0e5bbbb032.png
一个句子的概率(是第k个词)

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

语言模型示意图

示意图中的每一个表示一个预测值(单词),、是预输入向量,均为,表示序列长度。

假如我们在训练集中得到一句话:Cats average 15 hours of sleep a day. 首先将每个词标记为、、等,即标签值。

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


在某个时间步t正确的词是,softmax预测值是,则单个预测的损失函数是

(,)=

总体损失函数是



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

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

13931179-95e60b8cf649b88e.png
一个句子的概率
13931179-db9dd228346c4da9.png
bigram的计算



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

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

13931179-abdb456449919778.png
加法平滑,取常数

猜你喜欢

转载自blog.csdn.net/weixin_34397291/article/details/86781389
今日推荐