通俗讲解语言模型的评价指标-困惑度

  • 2020 年 10 月 29 日
  • AI

本文主要介绍语言模型的评价指标困惑度(perplexity),如果想要了解语言模型以及n-gram语言模型可以看《带你理解语言模型》《通俗理解n-gram语言模型》。

无论是n-gram语言模型(unigram, bigram, tirgram)还是理论上可以记忆无限个单词(无穷元语法, ∞-gram)递归神经网络语言模型(RNN Language Model),都会涉及到一个最关键的问题:如何来评价这些语言模型的好坏?

语言模型是很多涉及到产生文字或预测文字概率的NLP问题的组成部分,因此最为直观的评价方法是对应用语言模型的NLP任务进行评估。为了评估语言模型的好坏,运行更为复杂且更加耗时的其它NLP任务,显然这种方法比较繁琐。

有没有一种能够直接对语言模型进行评价的方法呢?语言模型简单来说就是计算句子的概率值,通常认定测试集中的句子为模拟真实生产环境中的正常句子,因此在训练数据集上训练好的语言模型,计算在测试集中的正常句子的概率值越高说明语言模型的越好,而这正是困惑度(perplexity)的基本思想。

困惑度是语言模型效果好坏的常用评价指标,计算困惑度的公式如下:

在测试集上得到的困惑度越低,说明语言模型的效果越好。通过上面的公式也可以看出,困惑度实际上是计算每一个单词得到的概率导数的几何平均,因此困惑度可以理解为平均分支系数(average branching factor),即模型预测下一个单词时的平均可选择的单词数量。

下面举一个简单的小例子,假设现在词汇表中有三个单词:,则训练好的bigram语言模型的参数值为:

计算的值,具体为:(滑动公式可以移动

此时训练好的bigram语言模型的困惑度为3,也就是说,在平均情况下,该模型预测下一个单词时,有3个单词等可能的可以作为下一个单词的合理选择。当然上面的bigram语言模型设置的参数值仅仅是为了举例方便。

上面都是在计算一个句子的困惑度,如果测试集中有n个句子,只需要计算出这n句子的困惑度,然后将n个困惑度累加取平均,最终的结果作为训练好的语言模型的困惑度。

参考:

  1. 《实战Google深度学习框架》