语言模型
一个语言模型通常构建为字符串的S的概率分布P(s)。比如,每个人100句话中平均大约有一句“你好”,那么“你好”这句话的概率大致为,像“野猪会做饭烧菜”,基本没人会说,则可以认为其概率为0。语言模型中的句子和语法无关,只和出现的可能性相关。
假设构成一个句子。其概率计算公式可以表示为:
,随着句子的增长,计算难度是呈指数型增长的。
一个比较实际的做法是只考虑当前词只和前n个词相关,其余无关。这种语言模型称之为n-gram。一般n=2,3应用的比较多。
以二元文法为例:2-gram
我写了一本书,分词后为:我 写了 一本 书。因为开头和结尾没有,则会为句子添加<BOS>,<EOS>,分别代表开始和结束。
即这句话的概率
如何确定的值呢?
首先构建语言模型的数据为训练数据。假设通过统计得到 "BOS 我” = 5次
“BOS 你” = 3次 ,“BOS 他” = 4次,,则 ,其他同理,最终可以得出这句话的概率。 显然,语言中肯定存在不在模型中的词(未登录词,新词等等)。比如心来的句子p(开始|BOS) = 0。 那么这个以“开始”开头的句子概率为0,显然不够合理。
数据平滑
平滑技术就是用来解决这类概率为0的情况。
加法平滑技术
在上述问题中,字面理解,就是默认给每个词组+1,即p(我|BOS)= 5+1/{(5+3+4)+3} =6/ 15。p(开始|BOS) = (0+1)/{(5+3+4)+3 +1} = 1/16。 概率为0的问题也得到了有效的解决。
古德图零估计法
基本思路:对于任何一个出现r次的n元语法,都假设它出出现了次。
其中,为出现r次的n元语法个数,同理。
可以看出,这个估计法不能直接应用于 的情况。
Kaza平滑技术
待定
模型评估
评估一个模型的好坏,就是看这个模型在测试数据(实际数据)上的表现情况。准确率,回归率等等。而评价一个语言模型常用的方法有测试数据的概率,或交叉熵,困惑度等等。
语言模型设计的任务就是寻找最接近真实语言的模型。所以,采用用交叉熵或困惑度来评估模型,熵值越小,表示模型越接近真实语言。
交叉熵公式为:
首先是真实词的概率,这个值无法获取。但可以确定的是,它是一个定值。
所以,的是文本T的概率,W是文本T词的个数 。
加个2的次幂其实就是困惑度了。所以一般用困惑度来代替交叉熵来评估语言模型。
困惑度:
网友评论