语言模型
1 什么是语言模型?
NLP中的语言模型(Language Model, LM)是用来计算一个句子是否合理(是否从语法上通顺),也就是一个句子出现的可能性大小(概率)。一个句子在生活中出现的可能性很小就代表这个句子不太符合规范或者语法等等。语言模型训练好之后可以应用在生成任务中的。
2 语言模型
我们已经知道语言模型用于计算一个句子是否合理,换句话说就是计算一个句子的概率。这个句子的概率越大说明它越可能比较符合我们说话的习惯,句子的概率越小就说明它可能在语法上是存在问题的。
那么我们就需要计算句子出现的概率p(s)。s是一个句子,把它分词后可以得到 \(w_1, w_2, w_3, w_4\).
开始计算:\(p(s) = p(w_1, w_2, w_3, w_4)\),利用chain rule可以知道:\(p(w_1, w_2, w_3, w_4) = p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1,w_2) \cdot p(w_4|w_1,w_2,w_3)\)。
由于长序列像\(w_1,w_2,w_3\)同时出现的可能性比较小,所以通常概率接近于0,导致句子的概率\(p(s)\)也会很小。这个时候,通常利用马尔可夫假设(Markov Assumption)来简化上面的问题。假设可以是:当前词仅与前面的一个词相关(一阶)(Bigram Model) 或者 当前词仅与前面的两个词相关(二阶)(Trigram Model) 等等以此类推。这样,利用Bigram Model计算\(p(s)\)就为:\(p(s) = p(w_1, w_2, w_3, w_4) = p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1,w_2) \cdot p(w_4|w_1,w_2,w_3) = p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_2) \cdot p(w_4|w_3)\).
如果假设当前词与它前面的词无关,也就是只跟自己相关,即\(p(s) = p(w_1, w_2, w_3, w_4) = p(w_1) \cdot p(w_2) \cdot p(w_3) \cdot p(w_4)\),这种模型称为Unigram,它其实没有考虑到词和词之间的联系和位置关系。
3 如何评测语言模型?
假如我们有一个语料库,在它上面训练了多个语言模型,那么如何去判断哪个语言模型更好呢?
3.1 理想情况下的方式
假设我们训练出来了两个语言模型LM1、LM2,接下来选定一个特定的任务(比如说拼写纠错、机器翻译),把这两个语言模型都应用到这个任务里面,最后比较准确率(或者其他指标)来判断两个语言模型的表现。
这种方式的问题:一个任务可能不仅仅依赖于语言模型,还依赖于其他的内容,所以用任务的好坏来评价语言模型并不是一个很好的方式。(所以我们需要对口的评价方法。)
3.2 语言模型的评价
给定语料库的情况下,通过让语言模型生成句子,让语料库中的句子(通顺的句子)出现的概率