困惑度(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(w1​w2​w3​...wN​)−N1​=NP(w1​w2​w3​...wN​)1​​
这里补充一下公式的细节:

  • 根号内是句子概率的倒数,所以显然 句子越好(概率大),困惑度越小,也就是模型对句子越不困惑。 这样我们也就理解了这个指标的名字。

  • 开N次根号(N为句子长度)意味着几何平均数(把句子概率拆成字符概率的连乘)

    • 需要平均的原因是,因为每个字符的概率必然小于1,所以越长的句子的概率在连乘的情况下必然越小,所以为了对长短句公平,需要平均一下

    • 几何平均的原因,是因为其的特点是,如果有其中的一个概率是很小的,那么最终的结果就不可能很大,从而要求好的句子的每个字符都要有基本让人满意的概率 [2]

      • 机器翻译常用指标BLEU也使用了几何平均,还有机器学习常用的F score使用的调和平均数 ,也有类似的效果。

当然,这是在数学领域内计算困惑度的公式,在实际的代码层面,用的是另一套公式,需要将上述公式进行转换,下面我就详细来介绍一下:

  • 在真实的代码计算中,上述的公式很难计算,但是就是有大佬发现,其实上述的公式可以转化为求交叉熵的公式。而背后的原理是,不管是困惑度,还是交叉熵,其本质上都是在计算信息熵,所以都是在计算模型的混乱程度,因此两者在数学意义的转换就有了理论依据,下面看一下公式转换过程:

PP(W)=2H(W)=2−1Nlog⁡2P(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−N1​log2​P(w1​,w2​,w3​,...,wN​)

PP(W)=2−1Nlog⁡2P(w1,w2,w3,...,wN)=(2log⁡2P(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−N1​log2​P(w1​,w2​,w3​,...,wN​)=(2log2​P(w1​,w2​,w3​,...,wN​))−N1​=P(w1​,w2​,w3​,...,wN​)−N1​=NP(w1​w2​w3​...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​),也就是求交叉熵。
  • 第二行,对应的代码是−log⁡2P(w1,w2,w3,...,wN)-\log_2P(w_1,w_2,w_3,...,w_N)−log2​P(w1​,w2​,w3​,...,wN​)
  • 第三行,对应的代码是求N
  • 第四行,对应的代码就是2−1Nlog⁡2P(w1,w2,w3,...,wN)2^{-\frac{1}{N}\log_2P(w_1,w_2,w_3,...,w_N)}2−N1​log2​P(w1​,w2​,w3​,...,wN​)

以上就是我个人对于困惑度查询资料以及完成代码之后做出的理解。

Perplexity相关推荐

  1. 困惑度 (perplexity)

    困惑度 (perplexity) 在自然语言处理中,对于一个语言模型,一般用困惑度来衡量它的好坏,困惑度越低,说明语言模型面对一句话感到困惑的程度越低,语言模型就越好. 对于LDA模型,最常用的两个评 ...

  2. Perplexity困惑度解释

    引用wiki上的话 "A model of an unknown probability distribution p, may be proposed based on a trainin ...

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

    Perplexity和预训练时用的loss都是用来评估语言模型的性能的指标,但是它们的计算方式和意义有所不同. Perplexity是一种用来衡量语言模型对一个测试集的预测能力的指标.它的计算方式是将 ...

  4. 神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)

    目录 前言 一.Perplexity AI网站介绍 二.优点介绍 2-0.界面介绍 2-1.纯净.时效性.来源说明 2-2.基于AI对话形式的搜索引擎 三.使用方法介绍 总结 前言 ChatGPT背后 ...

  5. 困惑度 perplexity

    在自然语言处理中,困惑度是用来衡量语言模型优劣的一个方法.它的值是对交叉熵损失函数做指数运算后得到的结果. 交叉熵损失函数 单个训练样本的损失: loss=−1n∑i=1nyilogyi^=−logy ...

  6. 语言模型评价指标 bpc(bits-per-character)和困惑度ppl(perplexity)

    首先简单介绍下语言模型的标准评价指标: 1. 混淆度 (Perplexity) 用来衡量一个语言模型在未见过的的字符串S上的表现.对于一个长度为N的字符串S,语言模型给出概率P(S),对应的混淆度 ( ...

  7. 【LM】(八)语言模型评价指标——困惑度Perplexity原理及代码

    0.语言模型 语言模型(Language Model,LM),基于统计的语言模型,给出一句话的前k个词,预测第k+1个词,即求第k+1个词出现的概率p(xk+1|x1,x2,...,xk).在深度网络 ...

  8. 【AI 交互式聊天】怎样实现财富自由??? 无需等待 Bing ChatGPT : 已经有一个免费自由使用的基于搜索结果响应的 AI 交互式聊天网站了!文中附 Perplexity 网站链接!

    目录 用中文 介绍一下 perplexity 实现原理 MySQL InnoDB 引擎和 ISM引擎比较 用中文输出

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

    本篇内容翻译自Speech and Language Processing. Daniel Jurafsky & James H. Martin. 链接:https://web.stanfor ...

  10. Perplexity(困惑度)

    转载请注明出处,谢谢. #什么是Perplexity(困惑度)? 在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度.它也可以用来比较两个概率分布或概率模型.( ...

最新文章

  1. OpenCV(十二)漫水填充算法
  2. DATA - RANGE OF
  3. python arp攻击_ARP欺骗——用Python实现道德黑客攻击的自动化
  4. c++类模板及参数类型的运行时判断
  5. qq登录界面句柄_别小看QQ邮箱测试,80%的测试新手都不能写出完整的测试用例~...
  6. java插件化_从零开始实现一个插件化框架(一)
  7. JAVA基础之关键字、保留字和标识符
  8. java数独流程图_软件工程个人项目总结-数独
  9. 在Globalscape EFT FTP服务器上安装SSL证书的方法
  10. 二维条码和射频识别技术在仓储物流系统中的应用
  11. “十四五”融合地表水国控断面监测数据(约3641个点位,含水质等级、水温,pH,溶解氧,电导率,浊度,高猛酸盐指数,化学需氧量,五日生化需氧量,氨氮,总磷,总氮,铜,锌,氟化物,硒,砷,汞,镉,等)
  12. 小学计算机学打字教学教案,第13课 键盘指法练习
  13. acme 生成通配符 SSL 证书
  14. AAC 音频数据结构实例分析:
  15. 华为鸿蒙系统平板电脑,华为5G鸿蒙系统平板电脑正式入网,搭载八核处理器麒麟9000芯片...
  16. win10 GTX1080 avatarify AI实时换脸
  17. 计算机视觉与人的视觉
  18. java foreach循环语句_Javaforeach语句
  19. 腹板拼接宽度_钢结构拼接相关规范要求
  20. Lucas定理——推导及证明

热门文章

  1. LINUX下如何查看内存品牌和速率啊?
  2. 0基础学数据分析 那些黑客常用的网址
  3. openfeign原理
  4. android tv 信源不一致问题
  5. python获取usb扫描枪数据线_GitHub - liz7up/USB4ScanGun: USB扫描枪识别,已获取对应扫描枪返回值的测试程序...
  6. 联邦学习的基本概念、三种框架和应用场景
  7. 使用node搭建后台管理系统(2)
  8. CDMAIS95A/B与cdma20001X对比分析(转)
  9. 小米3Android密码怎么解吗,小米手机双清、三清方法介绍,如何刷机解除开机密码锁...
  10. nios 双核 烧录_FPGA烧写NIOS ii程序至FLASH(epcs)中