语言模型(LM)

在经过孤立词识别之后,需要进入实际应用,也就是实际的语境中的识别,现实生活的语境往往十分复杂,比如方言,断句,省略词等,而且会面对无法预测的未知词语。这章的语言模型则是对这些问题一一分解。

目录

• 统计语言模型
• N-gram语言模型与评价方法
• 平滑算法(Smoothing)

  • 拉普拉斯平滑(Laplace Smoothing/Add-one Smoothing)
  • 古德图灵平滑(Good-turing Smoothing)
  • 卡茨平滑(Katz Smoothing)
  • 克奈瑟-内平滑(Kneser-Ney Smoothing)

• RNN语言模型
• 其它语言模型思想简介(Class-based N-gram & Cache Model)


语言统计模型

定义
一个统计语言模型包含一个有限集合V,和一个函数p(x1,x2,…,xn):

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

作用

1.它可以给我们任意词序列的概率,即帮助我们确定哪个词序列可能性大。
2.给定一个词序列,可以预测下一个最可能出现的词语! [用于ASR,MT等]

举个例子,如果是孤立词识别,那么会圈定识别的范围,如果是电话一样的指令识别,那么会有特定的词语规则,但是如果是日常对话,那么它的可能性就太多太广了。甚至还会面临断句,省略,同音词,缺失语境等等问题…

如何获得语言模型中的概率? 在语料库(Corpus)中计数。
训练集(training-set)与测试集(test-set)
保留集(held-out set): 从训练集中分离,用来计算一些其它参数,如插值模型中的插值系数


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

在实际语境中遇到新词的时候,我们通常会用前面已识别的词语作为基础去预测后面的词的可能性。这就是N-gram的核心思想:用前N-1个词作为历史,估计当前(第N个)词

结合上述描述与之前的一些思想,考虑用最大似然的方式来预测中间词语。与此同时,开头与结尾则是用与来记录,而未知词(OOV)则会被标记为

问题是如何评估这个模型的效率,这里采用了一个度量单位:困惑度(perplexity)
这个度量单位就是用单词归一化后的测试集概率


平滑算法

这个算法用于解决在已知语料库较为稀疏的时候,出现很多未知词序列,此时就需要用平滑算法把已知的概率分给未知。

1.拉普拉斯平滑Laplace Smoothing

Intuition:将每个计数加一,从而使得任何词序列都有计数。

此时需要注意这个算法的两个概念:
1.调整计数c*:用于描述平滑算法对分子的影响。意思是在自身概率被分走之后,对原有概率的影响程度

2.相对打折率dc:代表打折计数和原计数的比率。意思是对整体而言发生的变化

齐夫(Zipf)定律

自然语言语料库中,一个词出现的频率与它在频率表里面的排名成反比。

这意味着语言中大部分词都是低频词,只有很少的常用词。换句话说,就像是在英语交流中,只需要掌握常用的一两千词就可以比较顺畅的使用英语交流了。

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

Intuition:用你看见过一次的事情(Seen Once)估计你未看见的事件(Unseen Events),并依次类推。

频率c出现的频数 frequency of frequency c − −Nc

其核心算法为:

这个算法算是一个框架,把需要使用不同平滑的数据分类,因此需要与其他平滑算法结合使用。
认为c > k katz建议k = 5 ,认为计数可靠不进行打折。

而这里的算法常用的有两种:插值法和回退法

插值法

首先,在held-out set上使用MLE的方法,这些参数也可以通过经验获取

而在实际工程中如果无法获取全局的参数,则考虑使用历史计数来调整获取。

以下便是使用tri-gram为例介绍的插值法

3.卡茨平滑(Katz Smoothing)

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

4.克奈瑟-内平滑(Kneser-Ney Smoothing)

Intuition:对于一个词,如果它在语料库中出现更多种不同上下文(context) 时,它可能应该
有更高的概率。

以bi-gram为例


RNN语言模型

统计语言模型的目标:

RNN就是根据历史推测当前
低频词袋法:


基于类的N元语言模型(Class-based/Clustering N-gram):

Intuition:在语言学中,将具有同样语义的字词归为一类是一种常见的解决数据稀疏的方法。
受此启发,在语言模型中,根据词性分析,语义分析,或者特定任务时人为设计,我们可以将
词和类别建立联系,通过类别信息,帮助我们提升语言模型建模性能。(e.g.航空订票系统)


缓存模型(Cache Model):

Intuition: 如果一个词在句子中用到,那么它很可能被再次用到。
例如:两个人在讨论旅游,它们可能反复用到同一个地名。

作业地址之后会补充在评论区

【语音识别】语言模型LM相关推荐

  1. 语音识别中的声学模型(AM)和语言模型(LM)

    本文主要受参考自: http://blog.csdn.net/by21010/article/details/51506292  以及: https://www.zhihu.com/question/ ...

  2. n-gram语言模型LM

    目录 统计语言模型 N-gram语言模型与评价方法 平滑算法 拉普拉斯平滑(Laplace Smoothing/Add-one Smoothing) 古德图灵平滑(Good-turing Smooth ...

  3. 语言模型(LM)介绍及实操

    原文地址:https://medium.com/analytics-vidhya/a-comprehensive-guide-to-build-your-own-language-model-in-p ...

  4. Freeswitch之ASR(语音识别)总结大全

    文章目录 1.使用Pocket Sphinx进行英文语音识别 2.PocketSphinx语音识别系统语言模型的训练和声学模型的改进 3.PocketSphinx语音识别系统的编译.安装和使用 4.F ...

  5. 【NLP_Stanford课堂】语言模型1

    一.语言模型 旨在:给一个句子或一组词计算一个联合概率 作用: 机器翻译:用以区分翻译结果的好坏 拼写校正:某一个拼错的单词是这个单词的概率更大,所以校正 语音识别:语音识别出来是这个句子的概率更大 ...

  6. 语音识别到底是怎么一回事?学习门槛真的那么高么?

    说起语音识别,大家的第一反应就是那些看起来眼熟却总也搞不清楚的概念和公式,比如MFCC.HMM.GMM.Viterbi图.解码对齐等等,再往下深入,哪个是哪个,具体用途是什么,就都说不清楚了,总觉得那 ...

  7. freeswitch语音识别一系列干货

    转载 https://blog.csdn.net/qq_16633405/article/details/87920034 文章目录 1.使用Pocket Sphinx进行英文语音识别 2.Pocke ...

  8. 语音识别基本原理学习

    语音识别基本架构 W表示文字序列,Y表示语音的输入 那么根据公式1,表示语音识别的目标是 在给定语音输入的情况下,找到可能性最大的文字序列 根据贝叶斯公式,可以得到公式2,分母P(Y)表示出现这条语音 ...

  9. 《预训练周刊》第45期: 冻结语言模型、提示迁移性、快速文档排序

    No.45 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...

最新文章

  1. Microsoft Build 2016 有关微软公有云Azure
  2. 从Chrome中的css自定义样式按钮中删除蓝色边框
  3. 小米面试题:合并二叉树
  4. ExtJS之 标准布局类(针对于panel)
  5. 一些常规形几何形状的绘制和效果填充(一)
  6. 【面试】Java集合篇--图解HashMap的put方法的具体流程
  7. html禁止输入字符,javascript – 如何限制在html表中使用的contenteditable中的字符输入...
  8. 架构师日记|一次性讲透K8S,服务网格,服务治理这些概念
  9. 不容错过的 15 个 Linux 实用技巧
  10. 初识iptables规则
  11. 3. 安装 phpmyadmin
  12. 论文笔记_S2D.31_2015-CVPR_对单张图像进行统一的深度和语义预测
  13. 敏捷思维-架构设计中的方法学(11)精化和合并
  14. PHP程序员求职的一点思考
  15. 安卓java编译器_最方便的安卓手机端Java编译程序(支持中文字符串)
  16. python读取、保存npy文件
  17. android gps测速算法,GPS定位与测速算法研究
  18. Informer时序模型(自定义项目)
  19. 网络里面如何添加计算机,计算机如何添加网络协议
  20. USB大容量存储设备无法启动--这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。

热门文章

  1. 第十届蓝桥杯省赛C组 c语言
  2. ImageNet Classification with Deep Convolutional Neural Networks论文翻译——中文版
  3. fio 全称是flexible I/O tester(灵活的I/O测试工具)。可以根据用户指定I/O类型进行多线程/进程的I/O负载模拟。
  4. COLA 4.0:应用架构的最佳实践
  5. 仪器数据自动化采集,助力提升实验室管理效率
  6. Android | 打印堆栈
  7. 挂件巡检机器人_最近DIY的室内巡检机器人
  8. linux下 获取系统时间的相关函数
  9. C++ error C2059: 语法错误:“常数”
  10. 在MySQL中insert时生成UUID