语言模型(language model, LM)在自然语言处中,尤其是基于统计模型的语音识别、机器翻译、汉语自动分词、句法分析等相关研究中都有广泛的应用。

其中最主要采用的是n元语法模型(n-gram),这种模型构建简单、直接,但因为数据缺乏需要采用平滑(smoothing)算法。

一个语言模型中,通常构建为字符串s的概率分布p(s),反映的是字符串s作为一句子出现的概率。

对于一个由 l 个基元(基元 可以是字、词、或短语等)构成的句子 s=w1w2⋯wl,其概率公式可以表示为:

p(s)=p(w1)p(w2| w1)p(w3| w1w2)⋯p(wl| w1⋯wl−1) =∏li=1p(wi| w1⋯wi−1)

其中,第 i(1≤i≤l) 个词的概率是由已经产生的 i−1个词 w1w2⋯wi−1 决定的,一般称第 i−1 个词为第 i

  • n=1 即出现在第 i 位上的词 wi 独立于历史时,一元文法被记作 unigram, uni-gram, monogram
  • n=2 即出现在第 i 位上的词 wi,仅仅于它前一个历史词 wi−1
  • n=3 即出现在第 i 位上的词 wi,仅与它前面的两个历史词 wi−2wi−1
  • 以二元语法模型为例,我们近似的认为,一个词的概率只依赖于它前面的一个词,即

p(s)=∏li=ip(wi| w1⋯wi−1)≈∏li=1p(wi| wi−1)

• 为了使得 p(wi| wi−1) 对于 i−1 的情况也有意义,我们在句子开头加上一个句首标记 <BOS><script type="math/tex" id="MathJax-Element-6872"> 
 
   </script>, 即假设 
   
  w0 就是 
   
  <BOS><script type="math/tex" id="MathJax-Element-6874"> 
  
    </script>。同时,保持 
    
   ∑sp(s)=1,需要在句尾加上 
    
   <EOS><script type="math/tex" id="MathJax-Element-6876"> 
   
     </script>。

p(Mark wrote a book)=p(Mark |<BOS>)×p(wrote | Mark)×p(a | wrote)×p(book | a)×p(<EOS>| book)

  • 计算条件概率p(wi| wi−1),可以使用二元语法 wi−1wi

p(wi| wi−1)=c(wi−1wi)∑wic(wi−1wi)

  • 这种方法,被称为最大似然估计(maximum likehood estimation, MLE)
    对于n>2的n元语法模型

p(s)=∏l+1i=1p(wi| wi−1i−n+1)

  • 其中,wji 表示词 wi⋯wj,约定 w−n+2 到 w0 为 <BOS<script type="math/tex" id="MathJax-Element-6887"> wl+1 为 <EOS><script type="math/tex" id="MathJax-Element-6889"> </script>。
    那么估算概率 p(wi| wi−1i−n+1)

p(wi| wi−1i−n+1)=c(wii−n+1)∑wic(wii−n+1)

  • 求和表达式∑wic(wii−n+1) 等于计算历史 c(wi−1i−n+1)
    根据上述原理,通过计算训练语料库中每个句子的 p(wi| wi−1i−n+1),我们就可以得出新出现句子 p(s)