传统的语言模型,模型评估参数(信息、各种熵和困惑度),最后介绍了一些数据平滑的方法
语言模型
二元语法
对于一个句子一阶马尔科夫链
。
设
认为一个词出现的概率和它前面的n个词有关系。则对于句子
上述公式需要大量的概率计算,太理想了。一般取
对于
实际例子
假设语料库
s = ['brown read holy bible', 'plm see a text book', 'he read a book by david']
t = 'brown read a book'
那么求句子
语音识别歧义消除
如给了一个拼音 踏实研究生物的,他实验救生物的,他是研究生物的
,那么求出
汉语分词问题
给定汉字串他是研究生物的
。可能的汉字串 他 是 研究生 物 的
和他 是 研究 生物 的
,这也是求最大句子的概率
开发自然语言处理的统计方法的一般步骤
- 收集大量语料(基础工作,工作量最大,很重要)
- 对语料进行统计分析,得出知识(如n元文法,一堆概率)
- 针对场景建立算法,如计算概率可能也用很多复杂的算法或者直接标注
- 解释或者应用结果
模型评估参数
基础
- 评价目标:语言模型计 算出的概率分布与“真实的”理想模型是否接近
- 难点:无法知道“真实的”理想模型的分布
- 常用指标:交叉熵,困惑度
信息量和信息熵
信息量
概率是对事件确定性的度量,那么信息就是对不确定性的度量。信息量
信息熵
信息熵
一般是
- 信息熵的本质是信息量的期望
- 信息熵是对不确定性的度量
- 随机变量
的熵越大,说明不确定性也大;若 为定值,则熵为0 平均分布
是"最不确定”的分布
联合熵和条件熵
联合熵
联合熵实际上描述的是一对随机变量平均所需要的信息量,定义如下。
条件熵
给定
其中可以推导出:
相对熵和交叉熵
相对熵
随机变量真实分布
,q是预测分布
。
相对熵也称为KL距离
,用来衡量相同事件空间里两个概率分布的差异。
特别地,若
交叉熵
交叉熵用来衡量估计模型与真实概率分布之间的差异。
随机变量
实际应用
交叉熵的实际应用,设
n元文法模型的交叉熵
设测试集
其中
则在数据n元模型
公式的推导过程如下
可以这么理解:利用模型
困惑度
困惑度是评估语言的基本准则人,也是对测试集T中每一个词汇的概率的几何平均值的倒数。
当然,交叉熵和困惑度越小越好。语言模型设计的任务就是要找出困惑度最小的模型。
在英语中,n元语法模型的困惑度是
数据平滑
问题的提出
按照上面提出的语言模型,有的句子就没有概率,但是这是不合理的,因为总有出现的可能,概率应该大于0。设
因此,必须分配给所有可能出现的字符串一个非0的概率值来避免这种错误的发送。
平滑技术
就是用来解决这种零概率问题的。平滑指的是为了产生更准确的概率来调整最大似然估计的一种技术,也称作数据平滑
。思想是劫富济贫
,即提高低概率、降低高概率,尽量是概率分布趋于均匀。
数据平滑是语言模型中的核心问题
加法平滑
其实为了避免0概率,最简单的就是给统计次数加1。这里我们可以为每个单词的出现次数加上
注:这个方法很原始。
Good-Turing
Good-Turing
也称作古德-图灵方法,这是很多平滑技术的核心。
主要思想是重新分配概率,会得到一个剩余概率量
对于一个
- 出现次数为
的 元语法 新的出现次数 - 设
,即 是这个分布中最初的所有文法出现的次数,例如所有以 开始的总次数 - 出现次数为
的修正概率
剩余概率量
然后把
缺点
- 若出现次数最大为
,则无法计算 的新的次数 和修正概率 - 高低阶模型的结合通常能获得较好的平滑效果,但是Good-Turing不能高低阶模型结合
Jelinek-Mercer
问题引入
假如
所以我们需要在二元语法模型中加入一个一元模型
二元线性插值
使用
所以可以得到