求通俗解释NLP里的perplexity是什么?
先说结论:困惑度是交叉熵的指数形式。
然后你要知道信息熵、交叉熵的概念,可参考知乎上的回答~
对于熵,简单点就是信息量 的期望。将一个sentence看做一个随机变数, ,这里假定是有限长度n,那么它对应的熵为:
对应的per-word 熵,也就是entroy rate为:
引入交叉熵,真实分布p,通过语言模型生成的sentence,可以看作预测得到分布为m,那么交叉熵:
根据 ,交叉熵的值越小,我们预测得到的分布也就越接近真实分布。
这里因为训练样本已经给出,也就是p是定值,故 可写成:
有了上面的知识,接下来理解困惑度就很容易了~
基于语言模型 的困惑度perplexity可定义为交叉熵的指数形式:
可以看到perplexity和交叉熵一样都可以用来评价语言模型的好坏。 对于测试集其困惑度越小,准确率也就越高,语言模型也就越好~
前面的回答都很优秀,但我想基于我的理解做个补充。
困惑度 Perplexity 是衡量语言模型好坏的指标,为了更好地理解其意义,首先有必要回顾熵的概念。根据资讯理论与编码的知识,我们知道 熵代表著根据信息的概率分布对其编码所需要的最短平均编码长度。
- 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推荐阅读: