Perplexity
困惑度(Perplexity):评价语言模型的指标
1.定义
PPL(Perplexity) 是用在自然语言处理领域(NLP)中,衡量语言模型好坏的指标。它主要是根据每个词来估计一句话出现的概率,并用句子长度作normalize。
- 其本质上就是计算句子的概率,例如对于句子S(词语w的序列):
S=W1,W2,W3,...,WkS = W_1,W_2,W_3,...,W_k S=W1,W2,W3,...,Wk
- 它的概率为:
P(S)=P(W1,W2,W3,...,Wk)=p(W1)p(W2∣W1)...p(Wk∣W1,W2,W3,...,Wk−1)P(S) = P(W_1,W_2,W_3,...,W_k)= p(W_1)p(W_2|W_1)...p(W_k|W_1,W_2,W_3,...,W_{k-1}) P(S)=P(W1,W2,W3,...,Wk)=p(W1)p(W2∣W1)...p(Wk∣W1,W2,W3,...,Wk−1)
困惑度与测试集上的句子概率相关,其基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。
- 通俗点来讲,假设词库里有10个单词,那么对于一个完全没有训练过的模型,其预测一个特定单词的概率就是1/10,概率是均等分的,这时候我们就能得出其困惑度为10,也就是模式是完全糊涂的,没有任何分辨能力。但是当模型能将一个特定单词预测出1/2的概率时,就代表模型能从10个单词中挑选出2个可能对的单词,这时候模型的困惑度就是2,说明模型有了一定的分辨能力。当然,这么简单的求倒数获取困惑度的前提是概率是均等的,如果概率不均等,那么困惑度和预测的倒数就不是相等关系了。
- 当然,最好的就是模型能识别出那个正确的单词,给予100%的概率,这时候模型的困惑度就是1,代表模型没有任何困惑,是完全清楚的,可以正确识别单词,也就是能正确识别一个句子。
2.公式
下面讲一下其基础公式:
PP(W)=P(w1w2w3...wN)−1N=1P(w1w2w3...wN)NPP(W)=P(w_1w_2w_3...w_N)^{-\frac{1}{N}}\\ = \sqrt[N]{\frac{1}{P(w_1w_2w_3...w_N)}} PP(W)=P(w1w2w3...wN)−N1=NP(w1w2w3...wN)1
这里补充一下公式的细节:
根号内是句子概率的倒数,所以显然 句子越好(概率大),困惑度越小,也就是模型对句子越不困惑。 这样我们也就理解了这个指标的名字。
开N次根号(N为句子长度)意味着几何平均数(把句子概率拆成字符概率的连乘)
需要平均的原因是,因为每个字符的概率必然小于1,所以越长的句子的概率在连乘的情况下必然越小,所以为了对长短句公平,需要平均一下
是几何平均的原因,是因为其的特点是,如果有其中的一个概率是很小的,那么最终的结果就不可能很大,从而要求好的句子的每个字符都要有基本让人满意的概率 [2]
- 机器翻译常用指标BLEU也使用了几何平均,还有机器学习常用的F score使用的调和平均数 ,也有类似的效果。
当然,这是在数学领域内计算困惑度的公式,在实际的代码层面,用的是另一套公式,需要将上述公式进行转换,下面我就详细来介绍一下:
- 在真实的代码计算中,上述的公式很难计算,但是就是有大佬发现,其实上述的公式可以转化为求交叉熵的公式。而背后的原理是,不管是困惑度,还是交叉熵,其本质上都是在计算信息熵,所以都是在计算模型的混乱程度,因此两者在数学意义的转换就有了理论依据,下面看一下公式转换过程:
PP(W)=2H(W)=2−1Nlog2P(w1,w2,w3,...,wN)PP(W) = 2^{H(W)}=2^{-\frac{1}{N}\log_2P(w_1,w_2,w_3,...,w_N)} PP(W)=2H(W)=2−N1log2P(w1,w2,w3,...,wN)
PP(W)=2−1Nlog2P(w1,w2,w3,...,wN)=(2log2P(w1,w2,w3,...,wN))−1N=P(w1,w2,w3,...,wN)−1N=1P(w1w2w3...wN)NPP(W)=2^{-\frac{1}{N}\log_2P(w_1,w_2,w_3,...,w_N)}\\ =(2^{\log_2P(w_1,w_2,w_3,...,w_N)})^{-\frac{1}{N}}\\ =P(w_1,w_2,w_3,...,w_N)^{-\frac{1}{N}}\\ =\sqrt[N]{\frac{1}{P(w_1w_2w_3...w_N)}} PP(W)=2−N1log2P(w1,w2,w3,...,wN)=(2log2P(w1,w2,w3,...,wN))−N1=P(w1,w2,w3,...,wN)−N1=NP(w1w2w3...wN)1
- 从上面可以看出,
PP(W)
在本质上就是变成了交叉熵加一个底数的指数函数,所以当我们要求困惑度,就可以直接求交叉熵了。 - 这里还有一个细节,这个底数和log是配套的,在公式中间可以直接消掉,所以底数的大小并不重要,这里选了2,换一个我也可以使用e,这并无关系。
3.代码
我们来看一下代码具体是怎么实现困惑度的。
probs = np.take(probs, target, axis=1).diagonal()
total += -np.sum(np.log(probs))
count += probs.size
perplexity = np.exp(total / count)
其实核心代码就这四行。
- 第一行,先求出P(w1,w2,w3,...,wN)P(w_1,w_2,w_3,...,w_N)P(w1,w2,w3,...,wN),也就是求交叉熵。
- 第二行,对应的代码是−log2P(w1,w2,w3,...,wN)-\log_2P(w_1,w_2,w_3,...,w_N)−log2P(w1,w2,w3,...,wN)
- 第三行,对应的代码是求
N
- 第四行,对应的代码就是2−1Nlog2P(w1,w2,w3,...,wN)2^{-\frac{1}{N}\log_2P(w_1,w_2,w_3,...,w_N)}2−N1log2P(w1,w2,w3,...,wN)
以上就是我个人对于困惑度查询资料以及完成代码之后做出的理解。
Perplexity相关推荐
- 困惑度 (perplexity)
困惑度 (perplexity) 在自然语言处理中,对于一个语言模型,一般用困惑度来衡量它的好坏,困惑度越低,说明语言模型面对一句话感到困惑的程度越低,语言模型就越好. 对于LDA模型,最常用的两个评 ...
- Perplexity困惑度解释
引用wiki上的话 "A model of an unknown probability distribution p, may be proposed based on a trainin ...
- perplexity和预训练时用的loss的区别
Perplexity和预训练时用的loss都是用来评估语言模型的性能的指标,但是它们的计算方式和意义有所不同. Perplexity是一种用来衡量语言模型对一个测试集的预测能力的指标.它的计算方式是将 ...
- 神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)
目录 前言 一.Perplexity AI网站介绍 二.优点介绍 2-0.界面介绍 2-1.纯净.时效性.来源说明 2-2.基于AI对话形式的搜索引擎 三.使用方法介绍 总结 前言 ChatGPT背后 ...
- 困惑度 perplexity
在自然语言处理中,困惑度是用来衡量语言模型优劣的一个方法.它的值是对交叉熵损失函数做指数运算后得到的结果. 交叉熵损失函数 单个训练样本的损失: loss=−1n∑i=1nyilogyi^=−logy ...
- 语言模型评价指标 bpc(bits-per-character)和困惑度ppl(perplexity)
首先简单介绍下语言模型的标准评价指标: 1. 混淆度 (Perplexity) 用来衡量一个语言模型在未见过的的字符串S上的表现.对于一个长度为N的字符串S,语言模型给出概率P(S),对应的混淆度 ( ...
- 【LM】(八)语言模型评价指标——困惑度Perplexity原理及代码
0.语言模型 语言模型(Language Model,LM),基于统计的语言模型,给出一句话的前k个词,预测第k+1个词,即求第k+1个词出现的概率p(xk+1|x1,x2,...,xk).在深度网络 ...
- 【AI 交互式聊天】怎样实现财富自由??? 无需等待 Bing ChatGPT : 已经有一个免费自由使用的基于搜索结果响应的 AI 交互式聊天网站了!文中附 Perplexity 网站链接!
目录 用中文 介绍一下 perplexity 实现原理 MySQL InnoDB 引擎和 ISM引擎比较 用中文输出
- NLP基础知识点:困惑度(Perplexity)
本篇内容翻译自Speech and Language Processing. Daniel Jurafsky & James H. Martin. 链接:https://web.stanfor ...
- Perplexity(困惑度)
转载请注明出处,谢谢. #什么是Perplexity(困惑度)? 在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度.它也可以用来比较两个概率分布或概率模型.( ...
最新文章
- OpenCV(十二)漫水填充算法
- DATA - RANGE OF
- python arp攻击_ARP欺骗——用Python实现道德黑客攻击的自动化
- c++类模板及参数类型的运行时判断
- qq登录界面句柄_别小看QQ邮箱测试,80%的测试新手都不能写出完整的测试用例~...
- java插件化_从零开始实现一个插件化框架(一)
- JAVA基础之关键字、保留字和标识符
- java数独流程图_软件工程个人项目总结-数独
- 在Globalscape EFT FTP服务器上安装SSL证书的方法
- 二维条码和射频识别技术在仓储物流系统中的应用
- “十四五”融合地表水国控断面监测数据(约3641个点位,含水质等级、水温,pH,溶解氧,电导率,浊度,高猛酸盐指数,化学需氧量,五日生化需氧量,氨氮,总磷,总氮,铜,锌,氟化物,硒,砷,汞,镉,等)
- 小学计算机学打字教学教案,第13课 键盘指法练习
- acme 生成通配符 SSL 证书
- AAC 音频数据结构实例分析:
- 华为鸿蒙系统平板电脑,华为5G鸿蒙系统平板电脑正式入网,搭载八核处理器麒麟9000芯片...
- win10 GTX1080 avatarify AI实时换脸
- 计算机视觉与人的视觉
- java foreach循环语句_Javaforeach语句
- 腹板拼接宽度_钢结构拼接相关规范要求
- Lucas定理——推导及证明
热门文章
- LINUX下如何查看内存品牌和速率啊?
- 0基础学数据分析 那些黑客常用的网址
- openfeign原理
- android tv 信源不一致问题
- python获取usb扫描枪数据线_GitHub - liz7up/USB4ScanGun: USB扫描枪识别,已获取对应扫描枪返回值的测试程序...
- 联邦学习的基本概念、三种框架和应用场景
- 使用node搭建后台管理系统(2)
- CDMAIS95A/B与cdma20001X对比分析(转)
- 小米3Android密码怎么解吗,小米手机双清、三清方法介绍,如何刷机解除开机密码锁...
- nios 双核 烧录_FPGA烧写NIOS ii程序至FLASH(epcs)中