摘要:

本文主要是简单讲解一下语言模型N-Gram。网上已经有许多关于N-Gram模型讲解了,下面几个链接是我在阅读过程中认为比较好的文章。和大家分享一下。
N-Gram文章-1
N-Gram文章-2

1.N-Gram模型

什么是N-Gram模型?如果让你用一句话描述你会怎么描述?我个人比较认同下面这一种说法,这种说法可能不完全的正确,但是能让你第一时间明白这个模型的基本内容。
该模型基于这样一种假设,第n个词的出现只与前面n-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现的概率的乘积。这些概率可以通过直接从语料中统计n个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
ok,看完这句话可能有几个问题。
① 为什么模型要假设第n个词的出现只与前面n-1个词相关,而与其他任何词都不相关。
②Bigram,Trigram是什么东西?
③各个词出现的概率如何计算?
④N-Gram模型有何应用?

2.问题1&2

假设我们目前有一个句子T,句子T有许多个词组成,现在我来考虑一下这个句子出现的概率也就是:
比方说,今天天气真好,这个句子出现的概率。就应该是:
好的,现在问题转化为求后面的每一个条件概率。但其实你会发现,这些条件概率非常不好求。
但是这种方法存在两个致命的缺陷:一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。
那么,既然这个原始的式子不好求,那怎么办?一般情况下,我们可以 做点假设。没错,假设就是我们的问题一。其实这个假设是利用了 马儿科夫链的假设。
我们假设,第n个词出现的只与前n-1个词相关的话,我们的式子就可以得到极大的简化。
假设n取1,也就是每个词的出现是独立,那么此时为1-Gram模型,句子的概率为:
显然,这种假设太过于强,每个词出现不可能完全的独立。
假设n取2,也就是每个词的出现仅与前一个词出现有关,此时为2-Gram模型也就是Bi-Gram,句子的概率为:
假设n取3,也就是每个词的出现仅与前两个词有关,此时为3-Gram模型,也就是Tr-Gram,句子的概率为:
回到我们刚刚那句话,今天天气真好,如果采用2-Gram的模型我们有:
这里说明一下:采用N-Gram模型的时候,在句子开始与结束需要补充N-1个标识符。<s>表示开始  </s>表示结束
至此,N-Gram模型就已经基本介绍完毕了,下面以一个例子说明一下计算的过程。
在这里插一段题外话:其实,我们回忆朴素贝叶斯模型的推导思路时候,其实我们当时遇到的问题也是很类似的,因此后面我们做了一个很强的假设(每个特征之间相互独立),因此才得以求出当时需要的条件概率。具体看文章 朴素贝叶斯思想。 (在对比中学习往往效果是最佳的)

3.问题3

那么我们要如何进行计算呢?其实过程很简单,把握好一下公式:
对N-Gram模型。
C代表的出现的次数。比方说,我们在一个语料库中已经统计好了下表。
第一行第二列代表,i出现在want前面的827次数。
下表代表每个词出现的次数。比如i一共出现2533词。
ok,那么概率
注意的是,这里是有顺序要求的,并不是i,want同时出现的次数,而是i出现在want前面的次数。
更加详细的计算可以参考本文开头给出参考文章。

3.问题4

至于N-Gram其实有许多的应用,说其中一个,
在搜索的时候,我们输入一个字,后面会自动联想其他的字。其实这个也用到N-Gram的技术。
具体在开头参考文章最后一的部分有给出。大家可以参考一下。

总结

这篇文章其实没说什么,只是简单的给大家理了一下思路,更加深入的学习需要大家在网上寻找更多资源来进行学习。
N-Gram中一个很重要的问题,平滑的问题其实我们没有提到,这里简单提一下,我们看到上面的表
发现有很多的0,这样,我们在算概率时,概率就为0,只要有这种词组合出现的情况下就会导致整个句子的概率为0,显然这不符合事实。
另外,我们可以联想朴素贝叶斯里头,我们也碰到过这个问题。我们当时解决的方法就是利用平滑。
最简单的平滑我们改造上面的概率公式:
其中V是所有上面内所有次次数之和。

N-Gram模型入门相关推荐

  1. 从LeNet-5 CNN模型入门PyTorch

    从LeNet-5 CNN模型入门PyTorch 1. PyTorch 准备 1.1 PyTorch特点 1.2 PyTorch安装测试 2. 完整代码 2.1 LeNet模型 2.2 训练 2.2 测 ...

  2. 因果模型一:因果模型入门综述

    因果模型一:因果模型入门综述 一. 为什么要研究因果模型? 二. 因果研究的发展历程 1. C.G. Hempel 1984--因果研究的分水岭 2. 统计相关性模型 3. 虚假原因 三.INUS条件 ...

  3. 第19章 随机波动率模型入门

    这学期会时不时更新一下伊曼纽尔·德曼(Emanuel Derman) 教授与迈克尔B.米勒(Michael B. Miller)的<The Volatility Smile>这本书,本意是 ...

  4. vecm模型怎么写系数_用Stata搞实证之面板模型入门

    日常摸鱼的强师傅,终于想起来填这个大坑了! 许多有关计量的入门教程都上来先丢一堆理论,看的头晕脑胀,但实际应用却讲的十分含糊 这对于很多想快速水paper或者写毕业论文交差的同学十分不友好 而跟着本教 ...

  5. 电气simulink常用模块_从整车控制器VCU模型入门simulink(1)

    学习一门语言或者一门技术,最烦的就是长篇大论的理论和脱离实际的练习,我想正在阅读这篇文章的你一定深有体会,既然认识到了这样的痛点,我们接下来就换一种方式来学,通过实际工程中能运用到模型来逐步入门sim ...

  6. Actor并发模型入门

    使用Scala,基于Akka的Actor并发模型. import akka.actor.Actor import akka.actor.Props import akka.actor.ActorSys ...

  7. S参数模型和 IBIS模型入门

    S参数模型   基于频域的行为级模型,  S参数主要用于分析高频无源结构. S参数描述的通道对信号的影响和通道的特性. 描述线性无源互连结构的一种行为模型,来源于网络分析法. S参数模型不考虑互连结构 ...

  8. SCA(Service Component Architecture)编程模型入门

    2006 年 1 月 04 日 本文将介绍SCA编程模型中的基本概念,并以一个简单的例子来说明它的一些基本用法,期待能够抛砖引玉,并为读者以后深入了解SCA打下基础. 概览 目前业界主要的软件厂商都在 ...

  9. 从整车控制器VCU模型入门simulink(4)

    3.档位控制子系统 Gear 是不是发现自己不会的模块越来越少?其实学习任何一项技能,只要敢于去尝试,每天进步一丢丢,就会发现压根没有自己想象的那么难. 这里主要讲下Matlab Fcn和Memory ...

  10. 从整车控制器VCU模型入门simulink(3)

    2.加速控制子系统 Accelerator 这个部分主要是用来处理采集到的加速踏板模拟信号,将其转换为有效的加速踏板开度信号,当然其中也对信号的有效性进行判断,如果超出正常范围则会报错. 为了保证可靠 ...

最新文章

  1. 其他算法-SVD奇异值分解
  2. 特性(C# 和 Visual Basic)
  3. 备战金九银十,阿里P8师兄指导完整攻略(附:学习资料+面试宝典+项目实战笔记)
  4. Linux_SystemLogManager
  5. Java学习笔记——反射
  6. 用PHP爬取知乎的100万用户
  7. SpringBoot 微信H5支付
  8. 软件工程 -- 数据流图的画法
  9. threejs 三面体_Three.js基础探寻五——正二十面体、圆环面等
  10. html怎么用2个caption不换行,caption怎么用
  11. 计算机日志文件事件ID,系统日志出现事件 ID:16001来源:AFD的警告
  12. 吃货在东京 -- 记那段吃不饱的日子 之五 保护加班后的胃
  13. 09年国内外免费杀毒软件大收罗
  14. NYOJ-234-DP(吃土豆)
  15. 计算机毕业设计之 少儿编程学习平台的设计与实现
  16. NandFlash基础知识-K9F2G08
  17. 人工蜂群算法python_python如何实现人工蜂群算法 python实现人工蜂群算法代码示例...
  18. MacBook Pro安装WIN10问题集锦
  19. PHP接入快递鸟查询快递
  20. 核电站仪控系统智能测试平台设计

热门文章

  1. Android 之 声音捕捉
  2. 鸟叔linux笔记004
  3. keras 香草编码器_使用香草JavaScript在浏览器中进行事件委托
  4. win11 家庭版开启guest用户共享
  5. 20220615波兰网友拆德国产无线烟感,烟雾探测原来是这样实现!
  6. 浅析东西方文化差异:计算机考试判卷的视角
  7. 更改IE浏览器网页 myeclipse的背景颜色为淡绿色可以有效保护视力
  8. 电脑操作系统环境的转变[win]-->[linux]
  9. 数据结构与算法---算法篇之动态规划(一)
  10. python输入一个三位数求个十百位_python分别求个十百千位