• 统计语言模型
  • N-gram语言模型与评价方法
  • 平滑算法
    • 拉普拉斯平滑
    • 古德图灵平滑
    • 插值与回退
    • 卡茨平滑
    • 克奈瑟-内平滑
  • 语言模型的存储格式——APRA Format及工具包
  • RNN语言模型
  • 其他语言模型思想简介
  • 大词汇量连续语音识别梳理

统计语言模型

一个统计语言模型包含一个有限集合VVV,和一个函数p(x1,x2,⋯,xn)p(x_1,x_2,\cdots,x_n)p(x1,x2,,xn)

  • 对于任意⟨x1,⋯,xn⟩∈v+,p(x1,x2,⋯,xn)≥0\left \langle x_1,\cdots,x_n \right \rangle \in v^+,p(x_1, x_2, \cdots, x_n)\ge 0x1,,xnv+,p(x1,x2,,xn)0
  • ∑<x1,⋯,xn>∈v+p(x1,x2,⋯,xn)=1\sum_{<x_1,\cdots,x_n>\in v^+}p(x_1, x_2, \cdots, x_n)=1<x1,,xn>∈v+p(x1,x2,,xn)=1

也可以说统计语言模型是所有词序列上的一个概率分布。
统计语言模型可以给我们任意词序列的概率,也可以给定一个词序列,预测下一个最可能出现的词语
语言模型中的一些常见术语:

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

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

N-gram使用前N-1个词作为历史,估计当前(第N)个词。即P(w1∣w1i−1)=P(wi∣wi−N+1i−1)P(w_1|w_1^{i-1})=P(w_i|w_{i-N+1}^{i-1})P(w1w1i1)=P(wiwiN+1i1)
在进行N-gram模型估计时,最简单的方法就是最大似然方法,即P(wi∣wi−N+1i−1)=C(wi−N+1i−1wi)C(wi−N+1i−1)P(w_i|w_{i-N+1}^{i-1})=\frac{C(w_{i-N+1}^{i-1}w_i)}{C(w_{i-N+1}^{i-1})}P(wiwiN+1i1)=C(wiN+1i1)C(wiN+1i1wi)
在ASR领域,习惯使用<s><s><s></s></s></s>来标记开头和结尾,没有在vocabulary中出现的词(OOV,out of vocabulary)一般标记为<UNK><UNK><UNK>
在对N-gram语言模型进行测试评估时,通常分为根据应用实地测试(精确,但耗时耗力)和困惑度两种。
在测试集W=w1,w2,⋯,wNW=w_1,w_2,\cdots,w_NW=w1,w2,,wN,困惑度就是用单词数归一化后的测试集概率:PP(W)=P(w1w2⋯wN)−1N=1P(w1w2⋯wN)N=∑i=1N1P(wi∣wi−N+1i−1)NPP(W)=P(w_1w_2\cdots w_N)^{-\frac{1}{N}}=\sqrt[N]{\frac{1}{P(w_1w_2\cdots w_N)}}=\sqrt[N]{\sum_{i=1}^{N}\frac{1}{P(w_i|w_{i-N+1}^{i-1})}}PP(W)=P(w1w2wN)N1=NP(w1w2wN)1

=Ni=1NP(wiwiN+1i1)1

平滑算法

由于语料的稀疏性,有些词序列找不到,它的概率就是0,此时可以使用平滑算法,将一部分看见的事件概率量分给未看见的事件。

拉普拉斯平滑

intuition:将每个计数加1,从而使得任何次序列都有计数。如P(wi)=C(wi)NP(w_i)=\frac{C(w_i)}{N}P(wi)=NC(wi)NNN为总token数,Plaplace(wi)=C(wi)+1N+VP_{laplace}(w_i)=\frac{C(w_i)+1}{N+V}Plaplace(wi)=N+VC(wi)+1Plaplace(wi∣wi−1)=C(wi−1wi)+1C(wi−1+V)P_{laplace}(w_i|w_{i-1})=\frac{C(w_{i-1}w_i)+1}{C(w_{i-1}+V)}Plaplace(wiwi1)=C(wi1+V)C(wi1wi)+1
平滑算法中有两个非常重要的概念:

  • 调整计数(adjusted count)——c∗c^*c:描述平滑算法仅对分子的影响,以拉普拉斯为例,ci∗=(ci+1)NN+Vc_i^*=(c_i+1)\frac{N}{N+V}ci=(ci+1)N+VN
  • 相对打折折率(discount ratio)——dcd_cdc:打折计数和原计数的比率,dc=c∗cd_c=\frac{c^*}{c}dc=cc
    拉普拉斯平滑算法的缺点:对于比较稀疏的语料,会将原来计数较高的词序列,进行一个很严重的概率削减。

古德图灵平滑

齐夫定律:Given a large sample of words used, the frequency of any word is inversely proportional to its rank in the frequency table(自然语言语料库中,一个词出现的频率与它在频率表里的排名成反比)。也就是说,在语料库(语言)中,大部分词都是低频词,只有很少的常用词。
intuition:用你看见过一次的事情估计你从未看见的事情,并依次类推。
古德图灵平滑算法一般性的表示为:用你看见过c+1c+1c+1次的事情来估计你看见过ccc次的事情。
频率c出现的频数:Nc=∑x:count(x)=c1N_c=\sum_{x:count(x)=c}1Nc=x:count(x)=c1
对于古德图灵平滑算法,其调整计数为:c∗=(c+1)Nc+1Ncc^*=(c+1)\frac{N_{c+1}}{N_c}c=(c+1)NcNc+1,其遗漏量为PGT∗(UnseenEvents)=N1NP_{GT}^*(Unseen Events)=\frac{N_1}{N}PGT(UnseenEvents)=NN1
但是古德图灵平滑也有一个切实问题,如果一个词在预料中出现了N词,但是没有出现N+1次的词序列,难道这个概率变为0吗?在实际解决这个问题时,通常有两种方法:

  • c>k(e.g.k=5)c>k(e.g. k=5)c>k(e.g.k=5)时,Nc≈acβN_c \approx ac^\betaNcacβ,其中α\alphaαβ\betaβ为参数,对NcN_cNc进行平滑。
  • 认为c>kc>kc>k(katz建议k=5),认为技术可靠不进行打折。
    {c∗=cc>kc∗=(c+1)Nc+1Nc−c(k+1)Nk+1N11−(k+1)Nk+1N11≤c≤k\left\{\begin{matrix} c^*=c &c>k \\ c^*=\frac{(c+1)\frac{N_{c+1}}{N_c}-c\frac{(k+1)N_{k+1}}{N_1} }{1-\frac{(k+1)N_{k+1}}{N_1} } &1\le c\le k \end{matrix}\right.

    c=cc=1N1(k+1)Nk+1(c+1)NcNc+1cN1(k+1)Nk+1c>k1ck

插值与回退

插值与回退是两类平滑算法。
插值法Intuition:从所有N-grams估计中,把所有的概率估计进行混合。例如我们优化一个tri-gram模型,我们将tri-gram,bigram和unigram计数进行插值,完成单个语言模型内部的优化。
回退法Intuition:如果在估计一个高阶语言模型非零序列时,我们直接使用这个概率,当高阶语言模型我们需要查找的词序列不存在是,我们回退到低阶语言模型。

卡茨平滑

卡茨平滑算法是一种递归回退的算法。Intuition:若N阶语言模型存在,直接使用打折后的概率(常用古德图灵平滑算法进行打折), 若高阶语言模型不存在,则将打折节省出的概率量,依照N-1阶的语言模型进行分配,依此类推。
Pkatz(wi∣wi−N+1i−1)={p∗(wi∣wi−N+1i−1)C(wi−N+1i)>0α(wi−N+1i−1)Pkatz(wi∣wi−N+2i−1)otherwiseP_{katz}(w_i|w_{i-N+1}^{i-1})=\left\{\begin{matrix} p^*(w_i|w_{i-N+1}^{i-1}) &C(w_{i-N+1}^i)>0 \\ \alpha (w_{i-N+1}^{i-1})P_{katz}(w_i|w_{i-N+2}^{i-1}) &otherwise \end{matrix}\right.Pkatz(wiwiN+1i1)={p(wiwiN+1i1)α(wiN+1i1)Pkatz(wiwiN+2i1)C(wiN+1i)>0otherwise

克奈瑟-内平滑

绝对折扣(克奈瑟-内平滑的一部分)

古德图灵打折后获得此表
C(MLE) 0 1 2 3 4 5 6 7 8 9
c*(GT) 0.0000270 0.446 1.26 2.24 3.24 4.22 5.19 6.21 7.24 8.25

研究人员对“AP新闻专线”语料的bigram进行古德图灵打折后获得上表,发现,除0和1外,其他近似减0.75就可以了,因此,研究人员认为,我们是否可以直接对统计计数减去一个绝对值,用其作为调整计数,即:Pabsolute(wi∣wi−1)={C(wi−1wi)−DC(wi−1)C(wi−1wi)>0α(wi)P(wi)otherwiseP_{absolute}(w_i|w_{i-1})=\left\{\begin{matrix} \frac{C(w_{i-1}w_i)-D}{C(w_{i-1})} &C(w_{i-1}w_i)>0 \\ \alpha (w_i)P(w_i) &otherwise \end{matrix}\right.Pabsolute(wiwi1)={C(wi1)C(wi1wi)Dα(wi)P(wi)C(wi1wi)>0otherwise,在实际应用中,0和1会特殊处理。
克奈瑟-内平滑Intuition:对于一个词,如果它的语料库中出现更多种不同上下文时,它可能应该有更高的概率。为了刻画这种想法,研究人员提出了接续概率:Pcontinuation(wi)=∣{wi−1:C(wi−1wi)>0}∣∑wi∣{wi−1:C(wi−1wi)>0}∣P_{continuation}(w_i)=\frac{| \{ w_{i-1}:C(w_{i-1}w_i)>0 \} | }{\sum _{w_i}| \{ w_{i-1}:C(w_{i-1}w_i)>0 \} | }Pcontinuation(wi)=wi{wi1:C(wi1wi)>0}{wi1:C(wi1wi)>0}
克奈瑟-内平滑就是将绝对值打折和接续概率进行一个有机的结合,它的回退式为:PKN(wi∣wi−1)={C(wi−1wi)−DC(wi−1)C(wi−1wi)>0α(wi)Pcontinuation(wi)otherwiseP_{KN}(w_i|w_{i-1})=\left\{\begin{matrix} \frac{C(w_{i-1}w_i)-D}{C(w_{i-1})} &C(w_{i-1}w_i)>0 \\ \alpha (w_i)P_{continuation}(w_i) &otherwise \end{matrix}\right.PKN(wiwi1)={C(wi1)C(wi1wi)Dα(wi)Pcontinuation(wi)C(wi1wi)>0otherwise,插值式为:PKN(wi∣wi−1)=C(wi−1wi)−DC(wi−1)+β(wi)Pcontinuation(wi)=C(wi−1wi)−DC(wi−1)+β(wi)∣{wi−1:C(wi−1wi)>0}∣∑wi∣{wi−1:C(wi−1wi)>0}∣P_{KN}(w_i|w_{i-1}) =\frac{C(w_{i-1}w_i)-D}{C(w_{i-1})} + \beta (w_i)P_{continuation}(w_i) = \frac{C(w_{i-1}w_i)-D}{C(w_{i-1})}+\beta (w_i)\frac{|\{w_{i-1}:C(w_{i-1}w_i)>0\}|}{\sum _{w_i}|\{w_{i-1}:C(w_{i-1}w_i)>0\}|}PKN(wiwi1)=C(wi1)C(wi1wi)D+β(wi)Pcontinuation(wi)=C(wi1)C(wi1wi)D+β(wi)wi{wi1:C(wi1wi)>0}{wi1:C(wi1wi)>0}

语言模型的存储格式——APRA Format及工具包

ARPA Format是N-gram的标准存储模式:是一个ASCII文件,在一个小标题后跟着一个表,列举出所有非零的N元语法概率。
每个N元语法条目中依次为:

  • 折扣后对数概率(log10格式存储),如:log10P∗(wi∣wi−1)log_{10}P^*(w_i|w_{i-1})log10P(wiwi1)
  • 词序列 ,如:wi−1wiw_{i-1}w_iwi1wi
  • 回退权重(log10格式存储),如:logα(wi−1wi)log \alpha(w_{i-1}w_i)lo(wi1wi)

常用工具包:

  • SRILM(最常用):http://www.speech.sri.com/projects/srilm
  • KenLM:https://github.com/kpu/kenlm
  • KaldiLM:http://www.danielpovey.com/files/kaldi/kaldi_lm.tar.gz
  • IRSTLM:https://github.com/irstlm-team

RNN语言模型

n-gram的问题是其捕捉句子中长期依赖的能力非常有限,而RNN语言模型恰好可以解决这个痛处。Tomac Mikolov最先将RNN引入语音识别工作中。而随着Deep Learn的发展,又出现了一些对历史记忆更好的模型,如LSTM、GRU等。对于RNN来说,最简单直观的输出是vocabulary size vector with softmax,但是这样会有输出维度过高等问题,而低频词袋法可以降低输出维度(取频率最高的N个词,并将剩余词放入一个词袋中)。

其他语言模型思想简介

基于类的N元语言模型:在语言学中,将具有同样语义的词归为一类是一种常见的解决数据稀疏的方法。受此启发,在语言模型中,根据词性分析,语义分析,或者特定任务时人为设计,我们可以将词和类别建立联系,通过类别信息,帮助我们提升语言模型建模性能。
缓存模型:如果一个词在句子中用到,那么它很可能被再次用到。

大词汇量连续语音识别梳理

在此专栏,我们学习了以下内容:

  • 语言模型:建模word间的跳转概率。
  • 字典:提供word到phone的映射,及语言模型建模元素。
  • HMM:建模phone或triphone等基本单元发声过程。
  • GMM:建模每个HMM状态的发射概率,即声学似然分。
  • 决策树:triphone等建模单元绑定,解决数据稀疏问题。
  • 前向后向算法:更新HMM参数。
  • EM算法:更新GMM参数。
  • Viterbi算法:解码或对齐。
  • Embedding Training算法:更新GMM-HMM模型参数,即Viterbi Training。
  • 特征提取:从音频获取MFCC、Fbank等特征。
  • DNN:建模每帧观测的后验概率,后转化为似然概率,提供给每个HMM状态。

熟练掌握上述知识点,我们基本可以完成一个大词汇量连续语音识别系统。

语音识别入门第七节:语言模型相关推荐

  1. 语音识别入门第七节:语言模型(实战篇)

    Ngrams计数: witten_bell平滑:

  2. 语音识别入门第五节:基于GMM-HMM的语音识别系统

    目录 基于孤立词的GMM-HMM语音识别系统 训练 解码 基于单音素的GMM-HMM语音识别系统 音素/词典 训练 解码 基于三音素的GMM-HMM语音识别系统 三音素 决策树 基于孤立词的GMM-H ...

  3. <STC32G12K128入门第七节>ADC模数转换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.ADC? 二.ADC寄存器配置 1.ADC_CONTR控制寄存器 2.ADCCFG配置寄存器 3.ADCTIM 时 ...

  4. Android零基础入门第1节:Android的前世今生

    原文:Android零基础入门第1节:Android的前世今生 现在网上有很多各色Android资料了,但相对来说还是比较零散,Android覆盖的范围极广,最近刚好有机会全部拉通整理一遍,也保存起来 ...

  5. Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

    2019独角兽企业重金招聘Python工程师标准>>> 之前讲过Eclipse环境下的Android虚拟设备的创建和使用,现在既然升级了Android Studio开发工具,那么对应 ...

  6. Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    原文:Android零基础入门第30节:两分钟掌握FrameLayout帧布局 前面学习了线性布局.相对布局.表格布局,那么本期来学习第四种布局--FrameLayout帧布局. 一.认识FrameL ...

  7. Android零基础入门第25节:最简单最常用的LinearLayout线性布局

    原文:Android零基础入门第25节:最简单最常用的LinearLayout线性布局 良好的布局设计对于UI界面至关重要,在前面也简单介绍过,目前Android中的布局主要有6种,创建的布局文件默认 ...

  8. Android零基础入门第44节:ListView数据动态更新

    2019独角兽企业重金招聘Python工程师标准>>> 经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据 ...

  9. Android零基础入门第38节:初识Adapter

    2019独角兽企业重金招聘Python工程师标准>>> 在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter. 一.了解MV ...

最新文章

  1. 关于excel导入到封装成工具类jar包和web版门店收银网络无法无法连接上的解决方法...
  2. jesd204b应用指南中文_Novation 发布 Summit 合成器中文用户指南
  3. 成都网络推广带大家了解一个好的标题需遵循的原则有哪些?
  4. 离线轻量级大数据平台Spark之读取CSV文件实例
  5. 网站搭建从零开始(三)域名解析
  6. 砥志研思SVM(一) 最优间隔分类器问题(上):硬间隔SVM
  7. MongoDB基础介绍安装与使用
  8. Windows Phone 7 开发 31 日谈——第25日:外部API
  9. Linux学习总结(25)——CentOS系统常识
  10. @所有技术人,快来翻开属于你的2021定制日历!
  11. 流行的JavaScript库 ——jQuery
  12. 【05】CC - 格式
  13. NYOJ975 - 关于521
  14. vijos 1071 01背包
  15. 儿童计算机编程课程,少儿编程基础课程介绍
  16. mysql中split_part_Postgresql之split_part()切割函数
  17. 京东区块链技术实践白皮书2020
  18. 串口发送数据,只接收到00的原因之一
  19. Ajax + $ajax
  20. 微信小程序之picker选择器获取值得两种方法

热门文章

  1. 【Vegas原创】word图片隐藏在文字里了的终极解决办法
  2. 软件开发之版本控制方式
  3. vs2013如何调用监视窗口实现调试(如何打断点、逐步调试、逐过程调试、退出调试、条件调试)
  4. 如何删除 顽固文件/文件夹
  5. 一个有潜在危险的要求。从客户端中检测到(ctl00$ $ $ contentplaceholder2submit1
  6. 网络空间开源威胁情报分析的人机优化策略研究
  7. 【统计学的学习方法论】
  8. 从 DP 到 DDP 到 apex
  9. 【翻译】利用加速度求解位置的算法——三轴传感器
  10. 本地计算机无法启动错误1068,Win7系统启动失败并提示错误1068的解决办法