前言
本文是阅读专题漫谈 Language Model觉得很有帮助,记录阅读中的思考和困惑,整理为笔记。
语言模型
语言模型的作用,通俗的说法是 判断一句话多么像人话
语言模型是一个概率分布模型,对由基础单元(可以是单词、字符串等等)组成的序列(,其中为第i个基础单元)给出一个概率,使用条件概率形式进行分解:
上下文长度导致复杂度增长,解决方案:
- 朴素贝叶斯 不考虑上下文,只看单词的概率
-
Ngram 假设长度为的上下文有关联,常用
存在的问题
- 语言模型的条件概率部分使用连乘形式,会导致浮点数下溢。为了避免由概率值精度导致的小数位问题,将连乘转为形式:
-
概率为0导致的连乘失效
对于没有出现过的单词,通过频率极大似然估计出的概率值为0,使得连乘结果为0,使其他有意义的上下文因素失效。
常用的方法是Smoothing- 最简单的做法就是所有单词频次+1,但是效果一般不佳:
其中为单词的出现频次,满足,是单词的总数 -
Katz Smoothing(back-off)
降维打击:用短序列概率估计长序列的概率
举例来说如果trigram未出现过,回退为bigram,如果还是没有,回退到unigram进行计算
其中代表训练集中出现的频次,代表折扣系数[1][2],是回退系数
折扣系数 为分配概率给未出现的,则原概率需要打折扣,一般的做法是:
1.不修改出现次数较多的频率 ,订一个频率的threshold;
2. 出现次数较少的情况,令
回退系数
Step1 所有条件为的概率总和为1
Step2 转化为形式
Step3 将提到等号左边
Step4 所有条件为的条件概率总和为1,类似Step1
- 最简单的做法就是所有单词频次+1,但是效果一般不佳:
修剪
目的:减小模型
基于相对熵的修剪方法[3]
相对熵 概率分布的差异
修剪方法 对每一个ngram进行修剪,选取相对熵最小的ngram进行修剪。假设修剪操作对概率分布的影响相互独立(PS:感觉不太可能),则可以直接把相对熵低于threshold的全部删除
举例:三元中删除
符号定义 为,表示上下文,表示回退过的上下文
- 本身的概率计算方法,需要改为回退形式,其余出现过的三元概率不受影响;
- 使用计算回退之后概率的其他三元单词会受到影响,因为计算中纳入了,删去需要重新计算:
只需在分子和分母的累加中删去这一项即可计算出新的 - 相对熵的计算
Step1 取自[3]
Step2 除以外其他历史的概率不受影响
Step3 将和未出现过的三元词提出来,其他词由于不受影响可以忽略
Step4 将条件概率拆解为,将使用回退方法计算出来
网友评论