发现网络上流传的关于困惑度(perplexity)大多数都是利用了N-gram
或者主题模型
的例子来阐述的。但是现在这个年代来学习这个指标的人多半都是想研究神经网络
的,而两者的对困惑度的计算方法又很不同,这就不能不让人对“困惑度”感到“困惑”了。本人虽然才疏学浅,还是斗胆在这里尝试写一篇文章,试图用简洁的方式来梳理清楚其中的困惑。
困惑度的基本定义
首先,困惑度是用来评价语言模型
好坏的指标。语言模型是衡量句子好坏的模型,本质上是计算句子的概率:
对于句子s(词语w的序列):
它的概率为:【公式1】
困惑度与测试集上的句子概率相关,其基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好[1],公式如下:
这里想补充一下参考资料里没有强调的一些点
- 根号内是句子概率的倒数,所以显然 句子越好(概率大),困惑度越小,也就是模型对句子越不困惑。 这样我们也就理解了这个指标的名字。
- 开N次根号(N为句子长度)意味着几何平均数(把句子概率拆成词语概率的连乘)
- 需要平均的原因是,因为每个字符的概率必然小于1,所以越长的句子的概率在连乘的情况下必然越小,所以为了对长短句公平,需要平均一下
- 是几何平均的原因,是因为几何平均数的特点是,如果有其中的一个概率是很小的,那么最终的结果就不可能很大,从而要求好的句子的每个字符都要有基本让人满意的概率 [2]
- 机器翻译常用指标BLEU也使用了几何平均,还有机器学习常用的F score使用的调和平均数 ,也有类似的效果
在不同具体模型下的计算
不同模型的困惑度计算的差别,实际上都是来源于对句子概率的计算方式的不同,所以主要围绕句子概率展开:
N-gram(uni-gram, bi-gram, tri-gram)
网络上常见的例子:
对uni-gram语言模型(一元语言模型),其采用了单个词语概率独立的简化假设。
用词袋模型(Bag Of Words)这个名字来解释它可能更形象。把一个词语看做一种颜色的小球,句子的产生就是从一个装有所有词语的袋子里面有放回地抽出小球的过程。每类小球(词语)的概率互相独立。
故句子的概率不使用【公式1】,而是用每个词语(uni-gram)的概率相乘:【公式2】
对于bi-gram语言模型(二元语言模型),其采用马尔科夫假设:一个词的出现仅依赖于它前面出现的一个词。