失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > perplexity 衡量指标_困惑度(perplexity)的基本概念及多种模型下的计算(N-gram

perplexity 衡量指标_困惑度(perplexity)的基本概念及多种模型下的计算(N-gram

时间:2022-12-08 19:24:06

相关推荐

perplexity 衡量指标_困惑度(perplexity)的基本概念及多种模型下的计算(N-gram

让人困惑的困惑度

发现网络上流传的关于困惑度(perplexity)大多数都是利用了N-gram或者主题模型的例子来阐述的。但是现在这个年代来学习这个指标的人多半都是想研究神经网络的,而两者对困惑度的计算方法又很不同,这就不能不让人对“困惑度”感到“困惑”了。本人虽然才疏学浅,还是斗胆在这里尝试写一篇文章,试图用简洁的方式来梳理清楚其中的困惑。

困惑度的基本定义

首先,困惑度是用来评价语言模型好坏的指标。语言模型是衡量句子好坏的模型,本质上是计算句子的概率:

对于句子s(词语w的序列):

它的概率为:【公式1】公式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语言模型(二元语言模型),其采用马尔科夫假设:一个词的出现仅依赖于它前面出现的一个词。

故句子的概率就是每个词语(bi-gram)的概率相乘:

tri-gram类似:

实际上,都是把句子概率拆分成了N-gram的小单元概率计算。

注意,马上我们就要迎来第一个困惑点:这些小单元的概率如何计算

第一类、统计语言模型,采用的是从数据集中的N-gram出现频率直接统计得到概率的方法。如uni-gram就是单个词语的出现频率(词频/语料库中所有的词语数量),而例如tri-gram则是

主题模型

第二类使用主题模型(LDA等)来作为语言模型。

实际上,这种模型也采用了词袋模型的假设,所以句子概率的计算同【公式2】。

只是,对于其中的uni-gram的概率计算,并不再来自于频率统计,而是采用了融合主题的更复杂的建模,提升了模型的泛化性能,是一种进步,想了解具体原理的我推荐 [3]。

神经网络

神经网络(这里我主要指RNN/LSTM/GRU)在主题模型的基础上又跨出了一大步。计算句子概率不再需要做出简化假设,分解为N-gram计算,而是可以使用最上面写的最根本的【公式1】来计算:

LSTM示意图[4]

LSTM的具体原理我推荐看 [4] 来了解。这里我只简单说一下,由于LSTM的序列性,其每一步预测的词语概率自然而然就是以前面所有的上下文为条件的条件概率,即:

这点与前面提到的两类模型都有根本不同。从而让我们可以利用【公式1】来计算句子概率,取得更好的效果。

另外,神经网络中的困惑度常常不是直接使用句子概率来计算的,而是使用了cross entropy(或者negative log likelihood,二者实际上是等价的)(图源[5])

这是因为现在的深度学习框架对它们有现成的计算函数,用起来很方便。并且把上面的公式展开推导一下,可以得到与【公式1】实际上等价的结果(上图中还对语料库所有句子求了个算数平均)。

因为perplexity可以从cross entropy中得到,而cross entropy又是除了语言模型以外的文本生成任务(如机器翻译,摘要生成等)也常用的loss,所以我们也可以把perplexity拓展到语言模型外,用cross entropy来计算文本生成里的困惑度。

机器翻译的框架OpenNMT就使用了困惑度作为一个指标。[6]

另,语言模型常使用BPC(Bits-per-character)来衡量其好坏,实际上它就是平均cross entropy(log以2为底),也就是PPL计算公式里的2的指数上面的部分。其信息论解释可见[7]

基本概念到此为止,下面还有一些新方向的延伸。

GPT/BERT/XLnet

顺便提一下近年来流行的GPT/BERT/XLnet,它们又代表了语言模型的新方向,对上述方法又做出了改动,因而在此一并梳理。

这里主要引用XLNet的论述

GPT是Auto-regressive模型,其句子概率计算方法同【公式1】

BERT自称为(Masked Language Model, MLM),在XLNet中被称为denoising auto-encoding。一般只是用来预测MASK位置的词语概率,而不是句子概率,所以也有说它不算是一种语言模型的。它的概率计算方法:

即,以被MASK处理后的整句话的上下文为条件,计算所有被mask位置的词语的概率之和。

XLnet用的则是Permutation Language Modeling,说来话长,具体详见论文吧。

本文涉及概念较多,也许难免还会有些小问题,如果发现问题,欢迎指正。

本文参考资料,并且都是继续深入理解的很好资料:

perplexity 衡量指标_困惑度(perplexity)的基本概念及多种模型下的计算(N-gram 主题模型 神经网络)...

如果觉得《perplexity 衡量指标_困惑度(perplexity)的基本概念及多种模型下的计算(N-gram 》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。