前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >困惑度(perplexity)的基本概念及比较多种模型下的计算(N-gram, 主题模型/LDA, 神经网络/RNN)

困惑度(perplexity)的基本概念及比较多种模型下的计算(N-gram, 主题模型/LDA, 神经网络/RNN)

作者头像
blmoistawinde
发布2020-03-20 16:59:24
9.2K0
发布2020-03-20 16:59:24
举报

发现网络上流传的关于困惑度(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语言模型(二元语言模型),其采用马尔科夫假设:一个词的出现仅依赖于它前面出现的一个词。

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

在这里插入图片描述
在这里插入图片描述

tri-gram类似:

在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

主题模型

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

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

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

神经网络

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

LSTM示意图
LSTM示意图

LSTM示意图

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

p(wn∣wn−1,wn−2,...,w1)=Softmax(ht)p(w_n|w_{n-1}, w_{n-2}, ..., w_{1}) = Softmax(h_ t)p(wn​∣wn−1​,wn−2​,...,w1​)=Softmax(ht​)

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

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

在这里插入图片描述
在这里插入图片描述

(图源[5])

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

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

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

在这里插入图片描述
在这里插入图片描述

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


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,说来话长,具体详见论文吧。


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

本文参考资料,并且都是继续深入理解的很好资料: [1] 忆臻的知乎专栏 ​https://zhuanlan.zhihu.com/p/44107044, https://zhuanlan.zhihu.com/p/28080127 [2] https://blog.csdn.net/qixinlei/article/details/98184316 [3] https://www.cnblogs.com/pinard/p/6831308.html [4] https://www.cnblogs.com/wangduo/p/6773601.html [5] https://www.hankcs.com/nlp/cs224n-rnn-and-language-models.html [6] https://forum.opennmt.net/t/metrics-bleu-ppl-gold-ppl-pred/249

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 困惑度的基本定义
  • 在不同具体模型下的计算
    • N-gram(uni-gram, bi-gram, tri-gram)
      • 主题模型
        • 神经网络
          • GPT/BERT/XLnet
          相关产品与服务
          NLP 服务
          NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档