先说结论:困惑度是交叉熵的指数形式。

然后你要知道信息熵、交叉熵的概念,可参考知乎上的回答~

对于熵,简单点就是信息量 [公式] 的期望。将一个sentence看做一个随机变数,[公式] ,这里假定是有限长度n,那么它对应的熵为:

[公式]

对应的per-word 熵,也就是entroy rate为:

[公式]

引入交叉熵,真实分布p,通过语言模型生成的sentence,可以看作预测得到分布为m,那么交叉熵:

[公式]

根据 [公式] ,交叉熵的值越小,我们预测得到的分布也就越接近真实分布。

这里因为训练样本已经给出,也就是p是定值,故 [公式] 可写成:

[公式]

有了上面的知识,接下来理解困惑度就很容易了~

基于语言模型 [公式] 的困惑度perplexity可定义为交叉熵的指数形式:

可以看到perplexity和交叉熵一样都可以用来评价语言模型的好坏。 对于测试集其困惑度越小,准确率也就越高,语言模型也就越好~


前面的回答都很优秀,但我想基于我的理解做个补充。

困惑度 Perplexity 是衡量语言模型好坏的指标,为了更好地理解其意义,首先有必要回顾熵的概念。根据资讯理论与编码的知识,我们知道 熵代表著根据信息的概率分布对其编码所需要的最短平均编码长度。

  1. Entropy

假设离散随机变数 [公式] 概率分布为 [公式]

离散随机变数 [公式] 概率分布为 [公式]

离散随机变数 [公式] 概率分布为 [公式]

则根据离散随机变数熵的计算公式可计算得 [公式]

也就是说如果需要对离散随机变数 [公式][公式][公式] 进行编码,编码长度分别为 0 bits、1.5 bits 和 2 bits。而编码长度表示随机变数能够呈现出的等可能性的状态数(就随机变数而言就是取值个数,这种表述并不严谨,只是为了方便下文叙述):随机变数 [公式] 呈现出的状态数为 [公式] 种;随机变数 [公式] 呈现出的状态数为 [公式] 种;随机变数 [公式] 呈现出的状态数为 [公式] 种。

2. Entropy Rate

对于索引可数的随机过程 [公式] ,其熵率定义为: [公式]

对于独立同分布的序列,各随机变数的熵相等,则显然有:

[公式]

所以熵率依其定义可粗略地类比于随机过程中 per-random_variable entropy。比如,考虑这样一台打字机,假设可输出 [公式] 个等可能的符号。因此打字机可产生长度为 [公式] 的共 [公式] 个序列,并且都等可能出现。那么对于该印表机, [公式] bits/symbol。

3. "Entropy of Language"

在语言模型中,对于语言 [公式] 中的长度为 [公式] 的单词序列 [公式] ,单词序列的熵的计算公式为

[公式]

那么在单词序列熵的基础上,根据熵率的定义,可粗略的定义 per-word entropy

[公式]

而若将语言 [公式] 视作随机过程,则有:

[公式]

而对上式又可作如下近似(摘自 Speech and Language Processing 3rd ed. draft):

The Shannon-McMillan-Breiman theorem (Algoet and Cover 1988, Cover and Thomas 1991) states that if the language is regular in certain ways (to be exact, if it is both stationary and ergodic)

[公式] To summarize, by making some incorrect but convenient simplifying assumptions, we can compute the entropy of some stochastic process by taking a very long sample of the output and computing its average log probability.

4. Cross Entropy

当我们用概率分布 [公式] 来近似真实的未知分布 [公式] 时,可利用交叉熵来衡量近似分布 [公式] 的性能好坏。在语言模型的应用场景下,语言 [公式] (仍视作随机过程)的交叉熵表达式如下所示,其中 [公式] 表示真实的语言模型, [公式] 表示根据训练语料学习得到的语言模型:

[公式]

根据 Shannon-McMillan-Breiman theorem,可近似得:

[公式]

在实际应用中,单词序列一般都足够长,又可作如下近似表示:

[公式]

注意交叉熵 [公式] 是真实分布 [公式] 的上界, [公式] ,也因此在模型训练时经常把交叉熵当作损失函数进行优化,以逼近真实分布。

5. Perplexity

从训练语料中学习得到语言模型分布后,可以计算 perplexity 衡量其好坏。假设测试语料为 [公式],测试语料中的每一语句为单词序列 [公式] ,则:

  • log-likelihood [公式]
  • per-word log-likelihood [公式]
  • per-word cross entropy [公式]
  • perplexity [公式]

其中 [公式] 即为语言模型。

6. Summary

[公式] 就可认为是根据训练语料学习得到的语言模型 [公式] 的交叉熵,而这一般也是在训练语言模型时的损失函数。而对于 perplexity 即 [公式]从编码长度的角度来理解,就可认为是在语言模型 [公式] 下,等可能性的输出结果的个数。所以在给定输入的前面若干辞汇即给定历史信息后,当然语言模型等可能性输出的结果个数越少越好,越少表示模型就越知道对给定的历史信息 [公式] ,应该给出什么样的输出 [公式] ,即 perplexity 越小,表示语言模型越好。

在学习语言模型时最常见的一个例子是随机语言模型,即每次等可能性地输出辞汇表 [公式] 中的任意辞汇。显然这与前面印表机的例子相同,因此随机语言模型的 perplexity 为 [公式]

P.S. 关于 perplexity,更常见的表述如下,所有表述方式实质上是等价的:

假设测试语料共包括 [公式] 个句子,第 [公式] 个句子有 [公式] 个字,则有

[公式]

对测试语料中的每一个句子 [公式] ,若 [公式] 越大,则说明语言模型在测试语料上的表现越好。即相当于下式

[公式] 而 perplexity 定义为 [公式]


一、语言模型

本文尽量通俗解释一下困惑度的概念。既然题目中写了是用来评价语言模型的好坏,那么首先来看一下语言模型:忆臻:深入浅出讲解语言模型?

zhuanlan.zhihu.com图标

简单地说,语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率?

那么如何计算一个句子的概率呢?给定句子(词语序列)

它的概率可以表示为:

也就是说在给定一句话的前k个词,我们希望语言模型可以预测第k+1个词是什么,即给出一个第k+1个词可能出现的概率的分布p(xk+1|x1x2...xk)。

那么如何学习到一个语言模型呢,这里不详细叙述,可以参考:忆臻:深入浅出讲解语言模型?

zhuanlan.zhihu.com图标

二、如何评价一个语言模型好坏

在得到不同的语言模型(一元语言模型、二元语言模型....)的时候,我们如何判断一个语言模型是否好还是坏,一般有两种方法:1、一种方法将其应用到具体的问题当中,比如机器翻译、speech recognition、spelling corrector等。然后看这个语言模型在这些任务中的表现(extrinsic evaluation,or in-vivo evaluation)。但是,这种方法一方面难以操作,另一方面可能非常耗时,可能跑一个evaluation需要大量时间,费时难操作。2、针对第一种方法的缺点,大家想是否可以根据与语言模型自身的一些特性,来设计一种简单易行,而又行之有效的评测指标。于是,人们就发明了perplexity这个指标。困惑度(perplexity)的基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好,公式如下:[公式]由公式可知,句子概率越大,语言模型越好,迷惑度越小。

下面是一些 ngra-m 模型经 训练文本后在测试集上的困惑度值:

可以看到,之前我们学习的 trigram 模型经训练后,困惑度由955跌减至74,这是十分可观的结果。

这节的核心就是句子概率越大,语言模型越好,迷惑度越小。参考:http://sentiment-mining.blogspot.com/2016/11/perplexity.html?

sentiment-mining.blogspot.com

本回答来自专栏【机器学习演算法与自然语言处理】:

忆臻:通俗解释困惑度 (Perplexity)-评价语言模型的好坏?

zhuanlan.zhihu.com图标

楼主要的是一个『通俗解释』,那么抛开上面诸位学术型回答的公式答案,一句话就是:

困惑度p可以理解为,如果每个时间步都根据语言模型计算的概率分布随机挑词,那么平均情况下,挑多少个词才能挑到正确的那个

选自 Graham Neubig: Neural Machine Translation and Sequence-to-sequence Models: A Tutorial


答案请见

习翔宇:基于循环神经网路的语言模型的介绍与TensorFlow实现(1):语言模型与评价指标perplexity?

zhuanlan.zhihu.com图标

简单来说,是语言模型的评价指标。

语言模型的效果好坏的常用评价指标是困惑度(perplexity),在一个测试集上得到的perplexity 越低,说明建模的效果越好,计算perplexity的公式如下:

[公式]

简单来说,perplexity刻画的是语言模型预测一个语言样本的能力,比如已经知道了 [公式] 这句话会出现在语料库之中,那么通过语言模型计算得到这句话的概率越高,说明语言模型对这个语料库拟合的越好。

在语言模型的训练中,通常采用perplexity的对数表达形式:

[公式]

相比较乘积求平方根的方式,采用加法的形式可以加速计算,同时避免概率乘积数值过小而导致浮点数向下溢出的问题。

在数学上,log perplexity 可以看作真实分布与预测分布之间的交叉熵 Cross Entropy, 交叉熵描述了两个概率分布之间的一种距离,假设 [公式] 是一个离散变数, [公式] 是两个与 [公式] 相关的概率分布,那么 [公式] 之间的交叉熵 的定义是分布 [公式][公式] 的期望值:

[公式]

我们把 [公式] 看作是单词, [公式] 表示每个位置上单词的真实分布,

[公式]

[公式] 是模型的预测分布 [公式] ,那么即有

[公式]

因此log perplexity和交叉熵是等价的。

欢迎关注专栏

机器学习?

zhuanlan.zhihu.com图标
推荐阅读:
相关文章