NLP基础知识点:困惑度(Perplexity)

article/2025/9/24 11:56:09

本篇内容翻译自Speech and Language Processing. Daniel Jurafsky & James H. Martin.
链接:https://web.stanford.edu/~jurafsky/slp3/
不愧是自然语言处理领域的圣经,读起来流畅自然,以后还是要多读经典。


困惑度(Perplexity, PP)用来评估一个语言模型的好坏。
我们知道语言模型是用来计算一个句子的概率,但实际中,我们不会使用原始的概率作为语言模型的度量。

1. 公式定义

给定测试集 W = w 1 w 2 . . . w N W = w_1w_2...w_N W=w1w2...wN
困惑度定义为测试集的概率的倒数,并用单词数做归一化。
在这里插入图片描述
使用链式法则来计算 P ( W ) P(W) P(W)
在这里插入图片描述
如果使用bigram模型,公式为:
在这里插入图片描述
词序列的条件概率越高,困惑度越低。因此,根据语言模型,最小化困惑相当于最大化测试集概率。

2. 与熵的联系

另一种理解困惑度的方式是,as the weighted average branching factor of a language
怎么理解呢?
The branching factor指的是——一种语言中,任何单词接下来可能跟着出现的单词的数目。

举一个数字识别的例子,假设在训练集与测试集中0-9出现的概率均为1/10。
把10个阿拉伯数字看作一种迷你语言,那么它的困惑度就是10。
在这里插入图片描述
但如果假设数字0出现的非常频繁,在一个训练集中,0出现了91词,其它数字各只出现了1次。
现在有这样一个测试集:0 0 0 0 0 3 0 0 0 0
它的困惑度肯定是比10低的,因为大部分时候下一个数字是0
尽管the branching factor仍然是10,但加权求和的结果(困惑度)会更小。
这里就能感觉到困惑度和信息论中的熵概念很相似了,概率平均分布时,熵最大。

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

接下来回顾一下熵的公式:
在这里插入图片描述
如何计算包含序列W ={w0,w1,w2, . . . ,wn}.的熵?
L为一个语言,计算其中所有长度为n的有限的词序列
在这里插入图片描述
定义 entropy rate(看作是per-word entropy)为
在这里插入图片描述
但是要真正衡量一种语言的熵,需要考虑无限长的序列。
在这里插入图片描述
根据香农-麦克米兰- 布雷曼熵定理(Shan-non-McMillan-Breiman theorem)
如果一个语言既平稳又遍历
在这里插入图片描述
也就是说,我们可以取一个足够长的序列,而不是对所有可能的序列求和。
香农-麦克米兰- 布雷曼熵定理(Shan-non-McMillan-Breiman theorem)的直觉是,一个足够长的单词序列将包含许多其他较短的序列,并且这些较短的序列中的每一个都将根据它们的概率在较长的序列中重复出现。

尽管自然语言并不是stationary的,我们可以做一些简化假设,取一个非常长的输出样本,计算其average log probability来计算一些随机过程的熵。

接下来介绍交叉熵。
当我们不知道产生一些数据的实际概率分布时,交叉熵是有用的。
在这里插入图片描述
m,p为两个不同的概率分布,m is a model of p (i.e., an approximation to p).
根据概率分布p产生序列,但根据m对其概率的对数求和。

对一个平稳遍历过程,根据香农-麦克米兰- 布雷曼熵定理
在这里插入图片描述
通过采用足够长的单个序列而不是对所有可能的序列求和,就可以估计p和m的交叉熵。

又,对于任意概率分布m,有
在这里插入图片描述
m越精确,则交叉熵 H ( p , m ) H(p,m) H(p,m)就越接近真实熵 H ( p ) H(p) H(p)
因此可以用两者的差值来衡量一个模型有多精确。
在两个模型m1和m2之间,更精确的模型将是交叉熵较低的模型。

上文中,交叉熵被定义为一个词序列长度n趋向无穷的极限。
我们需要依靠一个固定长度(也要足够长)的序列来对交叉熵做一个估计。
在词序列W上,估计模型 M = P ( w i ∣ w i − N + 1 . . . w i − 1 ) M = P(w_i|w_{i-N+1}...w_{i-1}) M=P(wiwiN+1...wi1)的交叉熵为H(W)
在这里插入图片描述
最终定义perplexity of a model P on a sequence of words W 为以2为底,交叉熵估计值H(W)为幂次的值。
在这里插入图片描述

3. 进一步说明

使用19979个单词的词汇表,对《华尔街日报》的3800万个单词(包括句子开头的标记),分别训练了三个语言模型,然后计算困惑度。
在这里插入图片描述
可以发现,n-gram给我们的关于单词序列的信息越多,困惑度就越低。

困惑度的改善(内在)并不能保证NLP任务(如语音识别或机器翻译)的性能提升(外在)。
然而,因为困惑度通常与这种改进相关,所以它通常被用作对算法的快速检查。
但是,在结束模型的评估之前,模型在困惑度方面的改进应该始终通过对真实任务的端到端评估来确认。


http://chatgpt.dhexx.cn/article/W9snFdvW.shtml

相关文章

Python LDA gensim 计算 perplexity

转载自 https://blog.csdn.net/qq_23926575/article/details/79472742 1.LDA主题模型困惑度 这部分参照:LDA主题模型评估方法–Perplexity,不过后面发现这篇文章Perplexity(困惑度)感觉写的更好一点,两篇都是翻译的维基百科。 perplexity是一…

困惑度 (perplexity)

困惑度 (perplexity) 在自然语言处理中,对于一个语言模型,一般用困惑度来衡量它的好坏,困惑度越低,说明语言模型面对一句话感到困惑的程度越低,语言模型就越好。 对于LDA模型,最常用的两个评价方法困惑度(Perplexity)、相似度(Corre)。 其中困惑度可以理解为对于一篇…

Metric评价指标-Perplexity语言模型

欢迎关注知乎: 世界是我改变的 知乎上的原文链接 一. 原理介绍 在研究生实习时候就做过语言模型的任务,当时让求PPL值,当时只是调包,不求甚解,哈哈哈,当时也没想到现在会开发这个评价指标,那现…

perplexity和预训练时用的loss的区别

Perplexity和预训练时用的loss都是用来评估语言模型的性能的指标,但是它们的计算方式和意义有所不同。 Perplexity是一种用来衡量语言模型对一个测试集的预测能力的指标。它的计算方式是将测试集中的所有句子输入到语言模型中,计算每个句子的困惑度&…

技术干货 | 基于MindSpore详解Perplexity语言模型评价指标

01 原理介绍 在研究生实习时候就做过语言模型的任务,当时让求PPL值,当时只是调包,不求甚解,哈哈哈,当时也没想到现在会开发这个评价指标,那现在我来讲一下我对这个指标的了解,望各位大佬多多指…

Perplexity定义

Refer from http://blog.csdn.net/pipisorry/article/details/42460023 http://blog.csdn.net/pipisorry/article/details/42460023 熵/信息熵 Perplexity定义 perplexity是一种信息理论的测量方法,b的perplexity值定义为基于b的熵的能量(b可以是一个概…

gensim---LDA---perplexity

以下内容来源于https://blog.csdn.net/qq_25073545/article/details/79773807 使用gensim实现lda,并计算perplexity( gensim Perplexity Estimates in LDA Model) Neither. The values coming out of bound() depend on the number of topi…

世界上第一个会话搜索引擎——Perplexity AI使用测评

引言 比起传统的列表式搜索,Perplexity AI把艳惊四座的ChatGPT和必应搜索结合起来,既有ChatGPT式的问答,又像普通搜索引擎那样列出链接,就连马斯克也亲自称赞:它不仅总结出了推文的由来,还将推文的内容解释…

主题模型TopicModel:LDA主题模型的评估

http://blog.csdn.net/pipisorry/article/details/42460023 基础知识:熵 [熵与互信息] 皮皮blog Perplexity定义 perplexity是一种信息理论的测量方法,b的perplexity值定义为基于b的熵的能量(b可以是一个概率分布,或者概率模型…

语言模型常用评价方法:perplexity、bleu

目录 1. perplexity(困惑度、复杂度) 2. BLEU 代码实现 1. perplexity(困惑度、复杂度) 更多详细,参考:详解语言模型NGram及困惑度Perplexity 语言模型:语言模型可以表示为一个计算 的模型&a…

LDA主题模型绘制困惑度(perplexity)-主题数曲线——python

主题建模作为一种基于机器学习的文本内容分析技术,一般用于推断文本文档中隐藏主题的技术。很多研究使用了基于Latent Dirichlet Allocation (LDA)的主题建模算法来处理大规模文档并识别潜在主题。LDA主题模型已经在多个研究领域得到应用,且都有着不俗表…

Android keystore

1.keystore是一个密钥库,密钥库中可以放很多对密钥对(私钥证书(证书中包含公钥,数字签名,证书有效期,组织机构名称,申请时间,算法等。))kestore中有两种密码,一个密码是访问密钥库的…

查看KeyStore的信息,(本地的和线上的)

本地的: 1.找到jdk路径、如图 输入cmd 2.输入:keytool -list -v -keystore C:\Users\j\Desktop\app-android-v1.6-1caec749d84e708f91fd90ab383e42d7b417a47e\你的名.keystore 注意:C:\Users\j\Desktop\app-android-v1.6-1caec749d84e708f9…

Keystore与Truststore的区别

Keystore vs Truststore 概念 Keystore 用于存储特定程序应提供给双方(服务器或客户端)以进行验证的私钥和身份证书。 Truststore 用于存储来自认证机构 (CA) 的证书,这些证书验证服务器在 SSL 连接中提供的证书。 区别 KeystoreTruststo…

Keystore、Key attestation

最近看见了Keystore这个名词不知道什么意思,百度找到了前辈的优秀文章,这里copy学习一下,原文链接放在文末,感谢前辈。 Keystore的技术演进之路 Android提供的keystore功能发展历程伴随着Android版本不断演进。 从 Android 6.0 …

Android KeyStore流程

文章目录 一、Keystore二、Keystore架构及接口函数1. Keystore组件架构2. IKeymasterDevice.hal中的几个重要接口函数2.1 begin函数2.2 update函数2.3 finish函数2.4 abort函数 3. Keymaster TA4. 对称密码函数API 三、从Keystore到Keymaster的完整分析1. cts问题2. 代码流程分…

AndroidStudio生成keystore

相信大家都慢吞吞的切换将开发工具迁移到了AS,今天,奉上生成keystore的方法。 看图: 点击我选中的Generate Signed APK,翻译过来大致是,生成已签署的APK,我们点击这一项 如果还没有生成keystore&#xff…

keytool生成keystore、truststore、证书

keytool生成keystore、truststore、证书 1. 打开cmd命令行,进入文件夹(如:D:\test_icessl_key)。keytool会把接下来生成的所有文件都保存到此处。 2. 输入:keytool -genkeypair -alias icesslkey -keyalg RSA -validi…

Android Studio 默认keystore 以及自定义keystore

我们使用Android Studio 运行或测试我们的app 它使用一个默认的debug.keystore进行签名。 这个默认签名(keystore)是不需要密码的,它的默认位置在 $HOME/.android/debug.keystore,如果不存在Android studio会自动创建它。 例如我的debug.keystore就在…

SSL证书中的keystore是什么

什么是keystore 是java的密钥库、用来进行通信加密用的、比如数字签名。keystore就是用来保存密钥对的,比如公钥和私钥。 在keystore里,包含两种数据: 密钥实体(Key entity)——密钥(secret key&#xff0…