语言模型(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)