n元语法

语言模型

在统计天然语言处理中语言模型是很重要的一块,经常使用的语言模型是n元语法模型,固然如今比较流行的还有神经网络语言模型。n元语法模型须要额外的平滑处理,而神经网络语言模型则没必要,它自带平滑效果。html

n元语法

n元语法(n-gram)是NLP中很重要的统计语言模型,简单来讲就是计算某个句子出现的几率,好比“我今天上班迟到了”这句话在整个语言下的几率,通常咱们会经过一个大的语料库来进行统计。网络

用数学语言来描述,假设咱们的句子为
并发


,则该句子的几率为

其中P(w1)表示第一个词w1出现的几率;P(w2|w1)是第一个词出现的前提下第二个词出现的几率;以此类推。好比s=“我今天上班迟到了”,那么P(s)=P(我)P(今天|我)P(上班|我,今天)P(迟到了|我,今天,上班)。机器学习

若是严格按照上述公式计算几率,假设总词汇大小为 N,那么第 t 个词的几率 要考虑 分布式


种状况,当 N 较大时,句子长度也较长时,将产生一个天文数字的自有参数,没法计算。

上述的语言模型的参数空间太大并且数据稀疏,致使在实际中基本没法使用。因此咱们须要一个假设,某个词出现的几率只与它前面的一个或几个词有关,这个假设就是马尔科夫假设。学习

  • 当 n=1 时,称为一元语法,被记为unigram,此时第 i 个词出现的几率彻底独立与以前的状况。
  • 当 n=2 时,称为二元语法,被称为一阶马尔科夫链,记为bigram,此时第 i 个词出现的几率与它的前一个词有关。
  • 当 n=3 时,称为三元语法,被称为二阶马尔科夫链,记做trigram,此时第 i 个词出现的几率与它的前两个词有关。

有了上面的假设,问题就变简单了,对于二元语法,某个句子出现的几率就能够用下面表示.net

实际应用中 n 取3比较多,取太大仍然存在自由参数太多问题。另外为了使当 t=1 时上述公式仍然有意义,能够在句子面前加上一个句子起始标记,而结尾也能够添加句子结束标记。设计

计算条件几率

平滑处理

为何须要平滑处理?假若有些句子中存在一些训练语料未包含的词,或者连着的词在训练语料中未出现过。这时候就会让几率变为0,好比,计算cdn

但实际上它的几率不能说是为0,因此此时就须要平滑处理。最简单的平滑处理就是加1法,假设出现的次数比实际多一次,这样就不会存在为0的状况了。htm


其中T为总词汇数量。

加1法有时效果很差,能够用其余方法处理,包括

  • Good-Turing估计法
  • Katz平滑法
  • Jelinek-Mercer平滑法
  • Kneser-Ney平滑法
  • 贝叶斯平滑法
  • 等等

缺点

n-gram这种处理序列信息的方式依然存在局限性,好比当n大于3时基本就没法处理了,参数空间太大。另外它不能表示词与词之间的关联性。

========广告时间========

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有须要的朋友能够到 item.jd.com/12185360.ht… 购买。感谢各位朋友。

为何写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述
这里写图片描述
相关文章
相关标签/搜索