经典的语言模型:N-gram

语言模型

一个语言模型通常构建为字符串的S的概率分布P(s)。比如,每个人100句话中平均大约有一句“你好”,那么“你好”这句话的概率大致为,像“野猪会做饭烧菜”,基本没人会说,则可以认为其概率为0。语言模型中的句子和语法无关,只和出现的可能性相关。
假设构成一个句子。其概率计算公式可以表示为:
,随着句子的增长,计算难度是呈指数型增长的。
一个比较实际的做法是只考虑当前词只和前n个词相关,其余无关。这种语言模型称之为n-gram。一般n=2,3应用的比较多。

以二元文法为例:2-gram

我写了一本书,分词后为:我 写了 一本 书。因为开头和结尾没有,则会为句子添加,,分别代表开始和结束。
即这句话的概率

如何确定的值呢?
首先构建语言模型的数据为训练数据。假设通过统计得到 "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的次幂其实就是困惑度了。所以一般用困惑度来代替交叉熵来评估语言模型。
困惑度:

你可能感兴趣的:(经典的语言模型:N-gram)