自然语言处理(三)语言模型

语言模型基本概念

用数学的方法描述语言规律,即用句子 S = w 1 , w 2 w n S = w_1,w_2\dots w_n 的概率 p ( S ) p(S) 刻画句子的合理性.

对语句合理性判断:

  • 规则法:判断是否合乎语法、语义(定性分析)
  • 概率统计法:通过可能性大小来判断(定量计算)

模型思想
p ( S ) = p ( w 1 ) p ( w 2 w 1 ) p ( w n w 1 w n 1 ) = i = 1 n p ( w i w 1 w 1 ) p(S) = p(w_1)p(w_2|w_1)\dots p(w_n|w_1\dots w_{n-1}) = \sum_{i=1}^np(w_i|w_1\cdots w_{-_1})
i = 1 i=1 时, p ( w 1 w 0 ) = p ( w 1 ) p(w_1|w_0) = p(w_1)

输入:句子S

输出:句子概率 p ( S ) p(S)

参数 p ( w i w 1 , w i 1 ) p(w_i|w1,\dots w_{i-1})

计算第 i i 个统计基元,如果共有 L L 个不同的基元,那么第 i i 个基元将会有 L i L^i 种不同的历史情况. 如果L=5000, m=3,参数的数目将达到1250亿!而一个汉语句子平均有有22个词/字!

解决方法
采用马尔可夫方法:假设任意一个词 w i w_i 出现的概率只与它前面的 w i 1 w_{i-1} 有关.

n元文法(n-gram)

一个词有前面的n-1个词决定.

理论上,n越大越好,但同样参数也会增多,通常采用3元文法.

语言模型参数估计

参数估计

通过模型训练获取模型中所有的模型参数即条件概率.

参数的学习方法:最大似然估计MLE

由于语料是有限的,不可能包含所有可能出现的词的组合,因此在必然存在零概率问题.

数据平滑

基本思想

调整最大似然估计的概率值,使零概率增加,非零概率下调.

基本目标

测试样本的语言模型越小越好

基本约束:

w j p ( w i w 1 , w 2 w i 1 ) = 1 \sum_{w_j}p(w_i|w_1,w_2\dots w_{i-1})=1

方法

  • 加1法

    每一种情况出现的次数都加1

  • 减值法/折扣法

    修改训练样本中事件的实际技术,使样本中的事件概率之和小于1,剩余的概率分配给未见概率.

    Good-Turing、Back-off、绝对减值、线性减值

  • 删除插值法

    用低阶文法估计高阶文法,即当3-gram的值不能从训练数据中估计时,采用2-gram代替.

性能评价

  1. 实用方法

  2. 理论方法

    计算模型对于测试样本的困惑度,n-gram对于英文文本的困惑度一般为50~10000,对应于交叉熵范围为6-10bits/word.

语言模型应用

  1. 计算句子概率
  2. 给定若干词,预测下一个词

改进的语言模型

n-gram存在的问题

  1. 对语料敏感,训练参数难以反映不同领域之间语言规律上的差异.
  2. 某些在文本中很少出现,但在某局部文本中大量出现的情况.

基于缓存的语言模型

在文本中刚刚出现过的词在后边的句子中再次出现的可能性往往较大,比标准的n-gram模型预测的概率要大.

自适应方法

  • 将k个最近出现过的词存于一个缓存中,作为独立的训练数据.
  • 通过这些数据,计算动态频度分布数据.
  • 将动态频度分布数据与静态分布数据通过线性插值的方法结合
    p ^ c a c h e ] ( w i w 1 i 1 ) = 1 / K j = i k i 1 I w j = w i p ^ ( w i w 1 i 1 ) = λ p ^ c a c h e ( w i w 1 i 1 ) + ( 1 λ ) p ^ n g r a m ( w i w i n + 1 i 1 ) \hat{p}_{}cache](w_i|w_1^{i-1}) = 1/K\sum_{j=i-k}^{i-1}I_{w_j=w_i}\\ \hat{p}(w_i|w_1^{i-1}) = \lambda\hat{p}_{cache}(w_i|w_1^{i-1}) + (1-\lambda)\hat{p}_{n-gram}(w_i|w_{i-n+1}^{i-1})
    其中, 0 < λ < 1 0<\lambda<1 ,为插值系数,可以通过EM算法求得.

基于混合方法的语言模型

大规模训练语料来自不同领域,在主体、风格都有一定的差异,而测试预料通常是同源的,为了获得最佳性能,语言模型必须适应各种不同类型的语料对齐性能的影响.

自适应方法

  • 将训练语料聚为n类,语言模型划分成n个子模型.
  • 确定适当的训练语料子集,并利用这些预料建立特定的语言模型.
  • 在模型运行时识别测试预料的主题或主题的集合.
  • 整个语言模型的概率通过下面的线性插值公式计算得到.
    p ^ ( w i w 1 i 1 ) = j = 1 n λ j p ^ M j ( w i w 1 i 1 ) \hat{p}(w_i|w_1^{i-1}) = \sum_{j=1}^n\lambda_j\hat{p}_{M_j}(w_i|w_1^{i-1})
    其中 0 < λ j < 1 , j = 1 n λ j = 1 0<\lambda_j<1,\sum_{j=1}^n\lambda_j = 1
    λ \lambda 值可以通过EM算法计算,对测试预料达到最小困惑度.

参考资料

中国科学院大学-NLP课程课件(IIE胡玥老师主讲)

猜你喜欢

转载自blog.csdn.net/JN_rainbow/article/details/84638113