语音识别-浅谈语言模型

统计语言模型

统计语言模型的定义

统计语言模型是所有词序列上的一个概率分布

统计语言模型的作用

  1. 计算任意词序列的概率,以便确定概率最大的词序列。
  2. 给定一个历史词序列,预测下一个出现概率最大的词,并计算这个概率。
    假定 s = ( w 1 , w 2 , ⋯   , w n ) \boldsymbol{s}=\left( w_1,w_2,\cdots,w_n\right) s=(w1,w2,,wn)表示一个有意义的词序列,,其概率可以表示为:
    P ( s ) = P ( x 1 = w 1 , x 2 = w 2 , ⋯   , x n = w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) … P ( w n ∣ w 1 , w 2 , ⋯   , w n − 1 ) = ∏ i = 1 n P ( w i ∣ w 1 i − 1 ) \begin{aligned} P(\boldsymbol{s})&=P(x_1=w_1,x_2=w_2,\cdots,x_n=w_n)\\ &=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)\ldots P(w_n|w_1,w_2,\cdots,w_{n-1})\\ &=\prod_{i=1}^n P(w_i|w_1^{i-1}) \end{aligned} P(s)=P(x1=w1,x2=w2,,xn=wn)=P(w1)P(w2w1)P(w3w1,w2)P(wnw1,w2,,wn1)=i=1nP(wiw1i1)

其他知识

如何计算语言模型中的概率

在语料库中计数,语料库分为训练集(training set),验证集/保留集(dev/held-out set),测试集(testing set)。保留集从训练集中分离,用于计算一些参数,例如插值模型中的插值系数。

常见术语

我们以下面两句话为例介绍统计语言模型中常见的几个术语:

  1. I uh have a re- report today.
  2. 我 是 不 是 老 了。

有声停顿(fillers/filled pauses): 如uh就是一个没有实际意义的有声停顿。
截断(fragment):表示没有说完整,如re-。
词目(lemma):词语主干(stem)相同,比如dogs和dog是一个词目。
词形(wordforms):完整的词语样子,比如dogs和dog是两个词形。
型(type):语料库或者字典中不同单词的数目,2中有5种型(我 是 不 老 了)。
例(token):语料中单词数目,2中有6例。
字典(vocabulary):语言模型的基本组件,规定了我们对哪些元素进行统计。

N-gram语言模型

为了简化计算,我们采用 N N N阶马尔可夫假设,即假定每个词出现的概率只和前 N − 1 N-1 N1个词有关,在此假设下的统计语言模型被称为N-gram语言模型。
N = 1 N=1 N=1时,每个词出现的概率都与其他词无关,此时的语言模型被称为unigram。
N = 2 N=2 N=2时,每个词出现的概率只与之前的1个词有关,此时的语言模型被称为bigram。
N = 3 N=3 N=3时,每个词出现的概率只与之前的2个词有关,此时的语言模型被称为trigram。
实际中最常用的是3-gram语言模型,主要有两个原因:
(1)阶数越高,计算量越大,潜在的计算量呈指数增长;
(2)高阶模型会面临严重的数据稀疏问题。况且,更高阶的模型并不一定能够覆盖所有的语言现象。

N-gram语言模型的估计

通常使用最大似然估计来计算每个词序列出现的条件概率,这是对训练数据的最佳估计,N-gram语言模型用前 N − 1 N-1 N1个词估计第 N N N个词,有
P ( w i ∣ w 1 i − 1 ) = P ( w i ∣ w i − N + 1 i − 1 ) = c o u n t ( w i − N + 1 i − 1 w i ) c o u n t ( w i − N + 1 i − 1 ) P(w_i|w_1^{i-1})=P(w_i|w_{i-N+1}^{i-1})=\frac{count(w_{i-N+1}^{i-1}w_i)}{count(w_{i-N+1}^{i-1})} P(wiw1i1)=P(wiwiN+1i1)=count(wiN+1i1)count(wiN+1i1wi)
我们以bigram语言模型为例,有
P ( w i ∣ w i − 1 ) = c o u n t ( w i − 1 w i ) c o u n t ( w i − 1 ) P(w_i|w_{i-1})=\frac{count(w_{i-1}w_i)}{count(w_{i-1})} P(wiwi1)=count(wi1)count(wi1wi)
在语料库中统计词序列 w i − 1 w i w_{i-1}w_i wi1wi w i − 1 w_{i-1} wi1的数量即可。

开头,结尾和未知词怎么处理?
在语音识别中,一般用 < s > <s> <s>表示句子的开头, < / s > </s> </s>表示句子的结尾,vocabulary中没有的词用 < U N K > <UNK> <UNK>表示。

N-gram语言模型的评价方法

N-gram语言模型的评价方法主要有两种:

  1. 根据实际应用评价,例如在语音识别,机器翻译中的表现来评价。
  2. 计算困惑度(Perplexity),其基本思想是给测试集的句子赋予较高概率值的语言模型较好。

此处主要介绍第二种评价方法,对于句子 s = ( w 1 , w 2 , ⋯   , w n ) \boldsymbol{s}=\left( w_1,w_2,\cdots,w_n\right) s=(w1,w2,,wn),困惑度就是用单词数归一化后的测试集概率:
P P ( s ) = P ( w 1 w 2 ⋯ w n ) − 1 N = 1 P ( w 1 w 2 ⋯ w n ) n = 1 ∏ i = 1 n P ( w i ∣ w i − N + 1 i − 1 ) n \begin{aligned} PP(\boldsymbol{s})&=P(w_1w_2 \cdots w_n)^{-\frac{1}{N}}\\ &=\sqrt[n]{\frac{1}{P(w_1w_2 \cdots w_n)}}\\ &=\sqrt[n]{\frac{1}{\prod_{i=1}^n P(w_i|w_{i-N+1}^{i-1})}}\\ \end{aligned} PP(s)=P(w1w2wn)N1=nP(w1w2wn)1 =ni=1nP(wiwiN+1i1)1
注:通常在语音模型工具包中会给出PPL和PPL1两个值,其中PPL考虑词数和句子数,例如 < s > <s> <s>,而PPL1只考虑词数。

平滑算法

由于语料的稀疏性,有些词序列找不到,需要对数据进行平滑。

拉普拉斯平滑(Laplace Smoothing/Add-one Smoothing)

基本思想:将每个计数加一,从而使得任何词序列都有计数,以bigram为例:
P l a p l a c e ( w i ∣ w i − 1 ) = c o u n t ( w i − 1 w i ) + 1 c o u n t ( w i − 1 ) + v P_{laplace}(w_i|w_{i-1})=\frac{count(w_{i-1}w_i)+1}{count(w_{i-1})+v} Plaplace(wiwi1)=count(wi1)+vcount(wi1wi)+1
其中 v v v是vocabulary的大小。
优点:算法简单,解决了概率为0的问题。
缺点:原来计数量较高的词序列,概率削减严重,认为所有未出现的词序列概率相等也有点不合理。

古德图灵平滑(Good-turing Smoothing)

基本思想:用你看见过一次的事情(Seen Once)估计你未看见的事件(Unseen Events),并依次类推,用看见过两次的事情估计看见过一次的事情等等。
对于任何出现 r r r次的n元组,都假设它出现了 r ∗ r^* r次:
r ∗ = ( r + 1 ) n r + 1 n r r^*=(r+1)\frac{n_{r+1}}{n_r} r=(r+1)nrnr+1
其中 n r n_r nr是训练集中出现 r r r次的N元组的数量,对这个统计数进行归一化得到概率为:
p r = r ∗ N p_r=\frac{r^*}{N} pr=Nr
其中 N N N是总的token数量。

插值(Interpolation)平滑

基本思想:从所有N-grams估计中,把所有的概率估计混合。例如,我们优化一个trigram模型,我们将统计的trigram,bigram和unigram计数进行插值,以trigram为例:
P ( w i ∣ w i − 2 w i − 1 ) = λ 1 P ( w i ∣ w i − 2 w i − 1 ) + λ 2 P ( w i ∣ w i − 1 ) + λ 3 P ( w i ) \begin{aligned} P(w_i|w_{i-2}w_{i-1})&= \lambda_1 P(w_i|w_{i-2}w_{i-1})+\lambda_2P(w_i|w_{i-1})+\lambda_3 P(w_i) \end{aligned} P(wiwi2wi1)=λ1P(wiwi2wi1)+λ2P(wiwi1)+λ3P(wi)
其中插值系数 λ i \lambda_i λi可以通过EM算法来估计,步骤如下:

  1. 确定训练集,保留集,测试集;
  2. 根据训练集构造初始语言模型,并确定初始的 λ i \lambda_i λi;
  3. 基于EM算法迭代地优化 λ i \lambda_i λi, 使得保留集概率(如下式)最大化:
    l o g P ( w 1 ⋯ w n ∣ M ( λ 1 ⋯ λ k ) ) = ∑ i l o g P M ( λ 1 ⋯ λ k ) ( w i ∣ w i − 1 ) logP(w_1\cdots w_n|M(\lambda_1\cdots \lambda_k))=\sum_i logP_{M(\lambda_1\cdots \lambda_k)}(w_i|w_{i-1}) logP(w1wnM(λ1λk))=ilogPM(λ1λk)(wiwi1)
回退(Back off)平滑

基本思想: 若N阶语言模型存在,直接使用打折后的概率(常使用Good-turing算法进行打折);若高阶语言模型不存在(i.e. unseen events),将打折节省出的概率量,依照N-1阶的语言模型概率进行分配,依此类推。

语言模型的存储格式

ARPA Format

ARPA Format是N-gram的标准存储格式,是一个ASCII表,在小标题后跟着一个表,列举出所有非零的N元语法概率。在每个N元语法的条目中,依次为:
折扣后的对数概率,
词序列,
回退权重。
例如:
l o g 10 P ∗ ( w i ∣ w i − 1 ) log_{10}P^*(w_i|w_{i-1}) log10P(wiwi1),
w i − 1 w i w_{i-1}w_i wi1wi,
l o g α ( w i − 1 w i ) log\alpha(w_{i-1}w_i) logα(wi1wi)

工具包
  1. SRILM(最常用):http://www.speech.sri.com/projects/srilm
  2. KENLM:https://github.com/kpu/kenlm
  3. IRSTLM:https://github.com/irstlm-team/

总结

总结下基于统计的 n-gram 语言模型的优缺点:

优点:

  1. 采用极大似然估计,参数易训练;
  2. 完全包含了前 n-1 个词的全部信息;
  3. 可解释性强,直观易理解。

缺点

  1. 缺乏长期依赖,只能建模到前 n-1 个词;
  2. 随着 n 的增大,参数空间呈指数增长;
  3. 数据稀疏,难免会出现OOV的问题;
  4. 单纯的基于统计频次,泛化能力差。

RNN语言模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值