语言模型
n元语法
- 语言模型是什么?
语言模型通常构建为字符串s的出现概率。
语言模型与句子是否符合语法是没有关系的,即使一个句子完全符合语法逻辑,我们仍然可以认为该句子出现的概率为0. - 语言模型的数学表示?
P ( s ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) . . . p ( w l ∣ w 1 . . . w l ) P(s)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2) ... p(w_l|w_1...w_l) P(s)=p(w1)p(w2∣w1)p(w3∣w1,w2)...p(wl∣w1...wl)
其中,s表示字符串, w i w_i wi是句子的基元出现的概率。 - n元语法或者n元语法到底表达的含义是什么?
简单来说,在计算 P ( s ) P(s) P(s)的时候,如果将每个单词出现的概率视为自由参数,那么自由参数的数目将过多而无法计算。
所以简化的一种方式是将历史 w 1 . . . w i − 1 w_1...w_{i-1} w1...wi−1通过某种规则映射为等价类 E ( w 1 . . . w i − 1 ) E(w_1...w_{i-1}) E(w1...wi−1),将 p ( w l ∣ w 1 . . . w l ) = p ( w l ∣ E ( w 1 . . . w l ) ) p(w_l|w_1...w_l)=p(w_l|E(w_1...w_l)) p(wl∣w1...wl)=p(wl∣E(w1...wl))。
n元语法是其中最实际的一种做法,基本思想是对于两段历史来说,如果最近的n个单词相同,那么就将其视作等价类。
语言模型性能评价
性能指标包括交叉熵和困惑度。
需要返回去阅读,交叉熵和困惑度这两者都有什么含义?怎么计算?
数据平滑
- 什么是数据平滑?为什么要进行数据平滑?
我们使用最大似然估计去使用频率来代替概率,这种方法下,如果我们的语料库不足够大,那么很容易出现某些句子没有出现而判定是零概率或者恰巧在样本中出现的较多而判定概率过高的问题。
数据平滑的基本思想是,提高低概率,降低高概率,尽可能使得概率分布均匀,以产生更准确的概率。 - 列举常用的数据平滑方法以及介绍。
- 加1法
假设每个n元语法比实际多出现一次。 - 加法平滑法
假设每个n元语法比实际多出现 δ ∈ [ 0 , 1 ] \delta \in [0,1] δ∈[0,1]次。 - 古德-图灵估计法
基本思路是,对于任何一个发生r次的n元语法,都假设它发生了 ( r + 1 ) n r + 1 n r (r+1)\frac{n_{r+1}}{n_r} (r+1)nrnr+1次。
其中, n i n_i ni表示发生了i次的n元语法的数目。
这种方法是很多平滑技术的核心。
Katz平滑法是Good-Turing估计法引入高阶模型与低阶模型之后的扩充。 - Jelinek-Mercer平滑法
基本思路为使用低阶的n元模型向高阶的n元模型进行插值。
Witten-Bell平滑方法
是该方法的一个实例。基本思路为如果对应的n元文法出现的次数大于1,则使用高阶模型;否则,后退到低阶模型。 - 绝对减值法
…(其他方法先暂时省略)
- 数据平滑方法分类
从思想上来说,数据平滑算法可以分为后备模型和插值模型,两者处理计数为0的n元文法时都采用了低阶信息;区别在于处理计算大于0的n元文法的时候,前者没有使用低阶信息,而后者使用了。