NLP(三)_统计语言模型

概念

统计语言模型:是描述天然语言内在的规律的数学模型。普遍应用于各类天然语言处理问题,如语音识别、机器翻译、分词、词性标注,等等。简单地说,语言模型就是用来计算一个句子的几率的模型
即P(W1,W2,W3....WK)。利用语言模型,能够肯定哪一个词序列的可能性更大,或者给定若干个词,能够预测下一个最可能出现的词语。算法

N_gram语言模型

  • 简述
    NLP中,人们基于必定的语料库,能够利用Ngram来预计或者评估一个句子是否合理。另一方面,Ngram能够用来评估两个字符串之间的差别程度,这是模糊匹配中经常使用的一种手段。并且普遍应用于机器翻译、语音识别、印刷体和手写体识别、拼写纠错、汉字输入和文献查询。
  • 引入Ngram模型
    假定S表示某个有意义的句子,由一串特定顺序排列的词w1,w2,w3,..,wn组成,n是句子的长度。想知道S在文本中(语料库)出现的可能性,也就是数学上所说的几率P(S):翻译

    P(S)=P(w1,w2,w3,..,wn)=
      P(S)=P(w1,w2,w3,..,wn)=P(W1)P(W2|W1)P(W3|W1,W2)..P(Wn|W1,W2,..,Wn−1)

但是这样的方法存在两个致命的缺陷:code

參数空间过大:条件几率P(wn|w1,w2,..,wn-1)的可能性太多,没法估算,不可能有用;
数据稀疏严重:对于很是多词对的组合,在语料库中都没有出现,依据最大似然估计获得的几率将会是0。最后的结果是,咱们的模型仅仅能算可怜兮兮的几个句子,而大部分的句子算得的几率是0。事件

  • 马尔科夫假设
    为了解决参数空间过大的问题二提出的马尔科夫假设指出:随意一个词出现的几率只是他前面出现的有限的一个或者几个词相关

若是一个词的出现仅依赖于它前面出现的一个词,那么咱们就称之为bigram(这时的Ngram模型的 N=2):文档

P(S)=P(w1,w2,w3,..,wn)=P(W1)P(W2|W1)P(W3|W1,W2)..P(Wn|W1,W2,..,Wn−1)≈P(W1)P(W2|W1)P(W3|W2)..P(Wn|Wn−1)

假设一个词的出现仅依赖于它前面出现的两个词,那么咱们就称之为trigram(这时 N=3):字符串

P(S)=P(w1,w2,w3,..,wn)
        =P(W1)P(W2|W1)P(W3|W1,W2)..P(Wn|W1,W2,..,Wn−1)
        ≈P(W1)P(W2|W1)P(W3|W2,W1)..P(Wn|Wn−1,Wn−2)

通常来讲,N元模型就是假设当前词的出现几率只与它前面的N-1个词有关。而这些几率参数都是能够经过大规模语料库来计算,高于四元的用的很是少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提升的很少。数学

  • 数据平滑
    对语言而言,因为数据稀疏的存在,极大似然法不是一种很好的参数估计办法。这时的解决办法,咱们称之为“平滑技术”。(《数学之美》)

数据平滑的目的有两个:it

  1. 一个是使所有的Ngram几率之和为1;
  2. 二是使所有的Ngram几率都不为0。

其主要策略是把在训练样本中出现过的事件的几率适当减少,而后把减少获得的几率密度分配给训练语料中没有出现过的事件。
(数据平滑技术略)方法

N_gram模型应用(简述)
  • 基于Ngram模型定义的字符串距离

模糊匹配的关键在于如何衡量两个长得很像的单词(或字符串)之间的“差别”,这种差别一般又称为“距离”。除了能够定义两个字符串之间的编辑距离(一般利用Needleman-Wunsch算法或Smith-Waterman算法),还能够定义它们之间的Ngram距离。技术

  • 利用Ngram模型评估语句是否合理
    从统计的角度来看,天然语言中的一个句子S能够由任何词串构成,不过几率P(S)有大有小。例如:

    S1 = 我刚吃过晚饭
      S2 = 刚我过晚饭吃

    显然,对于中文而言S1是一个通顺而有意义的句子,而S2则不是,因此对于中文来讲P(S1)>P(S2)。

另一个例子是,若是咱们给出了某个句子的一个节选,咱们其实能够可以猜想后续的词应该是什么,例如:

她真在认真....

假设咱们如今有一个语料库以下,其中 是句首标记, 是句尾标记:

<s1><s2>yes no no no no yes</s2></s1>
<s1><s2>no no no yes yes yes no</s2></s1>

下面咱们的任务是来评估以下这个句子的几率:

<s1><s2>yes no no yes</s2></s1>

咱们来演示利用trigram模型来计算几率的结果:

P(yes|<s1>,<s2>)=1/2,
 P(no|yes,no)=1/2,
 P(</s2>|no,yes)=1/2,
 P(no|<s2>,yes)=1
 **P(yes|no,no)=2/5**
 P(</s1>|yes,</s2>)=1

因此咱们要求的几率就等于:
1/2×1×1/2×2/5×1/2×1=0.05

  • 基于Ngram模型的文本分类器
    只要根据每一个类别的语料库训练各自的语言模型,实质上就是每个类别都有一个几率分布,当新来一个文本的时候,只要根据各自的语言模型,计算出每一个语言模型下这篇文本的发生几率,文本在哪一个模型的几率大,这篇文本就属于哪一个类别了!

  • Ngram在语言识别中的应用
    当要判断一个新的文档是用的什么语言时,咱们首先要建立文档的Ngram概要文件并算出这个新文档概要文件与语言概要文件之间的距离。这个距离的计算根据的是两个概要文件之间的“out-of-place measure”。选择最短的距离,它表示此特定的文档属于该语言。这里要引入一个阈值,它的做用是当出现任何超过阈值的距离时,系统就会报告这个文档的语言不能被断定或断定有误。

  • 语音识别举例

    nixianzaizaiganshenme
        你如今在干什么?
        你西安载感什么?

    其对应的发音是彻底一致的,这时若是咱们借助于语言模型,咱们会算出这句话的几率:

    P(“你”|“<s>”,“<s>”)P(“如今”|“你”,“<s>”)P(“在”|“你”,“如今”)P(“干什么”|“在”,“如今”)

    远大于

    P(“你”|“<s>”,“<s>”)P(“西安”|“你”,“<s>”)P(“载”|“西安”,“你”)P(“感”|“西安”,“载”)P(“什么”|“在”,“如今”)

隐马尔科夫模型

待续

相关文章
相关标签/搜索