NLP知识点 - perplexity 困惑度

(一) Perplexity

困惑度(Perplexity,缩写为PPL)是衡量语言模型好坏的一个常用指标。

语言模型(language model)是用来预测句子中的next word的概率分布(probability distribution),并计算一个句子的概率。一个好的语言模型,应该给well-written 的句子更高的生成概率,阅读这些句子不应该让人感到困惑。

困惑度的定义:

p e r p l e x i t y ( W ) = P ( w 1 w 2 . . . w n ) − 1 N perplexity(W)=P(w_1w_2...w_n)^{-\frac{1}{N}} perplexity(W)=P(w1w2...wn)N1
在语言模型在测试集 W = { w 1 , w 2 , . . . , w N } W=\{w_1, w_2, ..., w_N\} W={w1,w2,...,wN}上的困惑度,是测试集的逆概率,然后用单词数量进行归一化。

核心思想是,句子的概率越大,其困惑度越小,说明语言模型越好。

(二)Perplexity with Example

假设我们的语言模型,词表只有[“a”, “the”, “red”, “fox”, “dog”, “.”] 六个词。

下面计算“a red fox.”这句话 W W W的概率。

P ( W ) = P ( w 1 w 2 . . . w n ) P(W)=P(w_1w_2...w_n) P(W)=P(w1w2...wn)
所以:
P ( a r e d f o x . ) = P ( a ) ∗ P ( r e d ∣ a ) ∗ P ( f o x ∣ a r e d ) ∗ P ( . ∣ a r e d f o x ) P(a\ red\ fox.)=P(a)*P(red|a)*P(fox|a\ red)*P(.|a \ red\ fox) P(a red fox.)=P(a)P(reda)P(foxa red)P(.∣a red fox)

假设:
句子中首字的概率如下:
P ( w 1 = a ) = 0.4 P(w_1=a)=0.4 P(w1=a)=0.4
P ( w 1 = t h e ) = 0.3 P(w_1=the)=0.3 P(w1=the)=0.3
P ( w 1 = r e d ) = 0.15 P(w_1=red)=0.15 P(w1=red)=0.15
P ( w 1 = f o x ) = 0.08 P(w_1=fox)=0.08 P(w1=fox)=0.08
P ( w 1 = d o g ) = 0.07 P(w_1=dog)=0.07 P(w1=dog)=0.07
P ( w 1 = . ) = 0 P(w_1=.)=0 P(w1=.)=0

所以 P ( a ) = 0.4 P(a)=0.4 P(a)=0.4

然后,假设我们的模型给出了前一个词为a,后一个词的概率分布:
P ( w 2 = a ∣ a ) = 0.01 P(w_2=a|a)=0.01 P(w2=aa)=0.01
P ( w 2 = t h e ∣ a ) = 0.01 P(w_2=the|a)=0.01 P(w2=thea)=0.01
P ( w 2 = r e d ∣ a ) = 0.27 P(w_2=red|a)=0.27 P(w2=reda)=0.27
P ( w 2 = f o x ∣ a ) = 0.3 P(w_2=fox|a)=0.3 P(w2=foxa)=0.3
P ( w 2 = d o g ∣ a ) = 0.4 P(w_2=dog|a)=0.4 P(w2=doga)=0.4
P ( w 2 = . ∣ a ) = 0.01 P(w_2=.|a)=0.01 P(w2=.∣a)=0.01

所以 P ( r e d ∣ a ) = 0.27 P(red|a)=0.27 P(reda)=0.27

类似地,假设我们的模型给出了前两个词为a red,第三个词的概率分布;以及前三个词为a red fox,第四个词的概率分布:
P ( w 3 = a ∣ a r e d ) = 0.02 P(w_3=a|a\ red)=0.02 P(w3=aa red)=0.02
P ( w 3 = t h e ∣ a r e d ) = 0.03 P(w_3=the|a\ red)=0.03 P(w3=thea red)=0.03
P ( w 3 = r e d ∣ a r e d ) = 0.03 P(w_3=red|a\ red)=0.03 P(w3=reda red)=0.03
P ( w 3 = f o x ∣ a r e d ) = 0.55 P(w_3=fox|a\ red)=0.55 P(w3=foxa red)=0.55
P ( w 3 = d o g ∣ a r e d ) = 0.22 P(w_3=dog|a\ red)=0.22 P(w3=doga red)=0.22
P ( w 3 = . ∣ a r e d ) = 0.15 P(w_3=.|a\ red)=0.15 P(w3=.∣a red)=0.15
以及
P ( w 4 = a ∣ a r e d f o x ) = 0.02 P(w_4=a|a\ red\ fox)=0.02 P(w4=aa red fox)=0.02
P ( w 4 = t h e ∣ a r e d f o x ) = 0.03 P(w_4=the|a\ red\ fox)=0.03 P(w4=thea red fox)=0.03
P ( w 4 = r e d ∣ a r e d f o x ) = 0.03 P(w_4=red|a\ red\ fox)=0.03 P(w4=reda red fox)=0.03
P ( w 4 = f o x ∣ a r e d f o x ) = 0.02 P(w_4=fox|a\ red\ fox)=0.02 P(w4=foxa red fox)=0.02
P ( w 4 = d o g ∣ a r e d f o x ) = 0.11 P(w_4=dog|a\ red\ fox)=0.11 P(w4=doga red fox)=0.11
P ( w 4 = . ∣ a r e d f o x ) = 0.79 P(w_4=.|a\ red\ fox)=0.79 P(w4=.∣a red fox)=0.79

所以 P ( a r e d f o x . ) = P ( a ) ∗ P ( r e d ∣ a ) ∗ P ( f o x ∣ a r e d ) ∗ P ( . ∣ a r e d f o x ) = 0.4 ∗ 0.27 ∗ 0.55 ∗ 0.79 = 0.0469 P(a\ red\ fox.)=P(a)*P(red|a)*P(fox|a\ red)*P(.|a \ red\ fox)=0.4*0.27*0.55*0.79=0.0469 P(a red fox.)=P(a)P(reda)P(foxa red)P(.∣a red fox)=0.40.270.550.79=0.0469

此时,可以看到生成的这句话的概率为0.0469。我们是否可以直接比较这句话的概率与当前语言模型生成的其他句子的概率,来判定生成句子的好坏呢?答案是否定的,因为句子的最终概率是单词概率连乘得到的,所以随着句子长度的增加,概率会越来越小。所以我们想要找一个不受句子长度影响的衡量方式。

考虑到句子的概率是连乘得到的,所以这个问题可以通过计算几何平均来解决。此时,我们将利用句子中单词的数量 n n n来对句子概率进行归一化:
P n o r m ( W ) = P ( W ) n P_{norm}(W)=\sqrt [n] {P(W)} Pnorm(W)=nP(W)

此时,a red fox. 这句话的归一化概率为
P n o r m ( a r e d f o x . ) = P ( a r e d f o x . ) 4 = P ( a r e d f o x . ) 1 / 4 = 0.465 P_{norm}(a\ red\ fox.)=\sqrt [4] {P(a\ red\ fox.)}=P(a\ red\ fox.)^{1/4}=0.465 Pnorm(a red fox.)=4P(a red fox.) =P(a red fox.)1/4=0.465

现在,所有的概率都被归一化了,可以比较不同长度句子的概率了。

进一步地,困惑度这个概念被提出来,他是归一化概率的倒数。即:

P e r p l e x i t y = 1 P n o r m ( W ) = 1 P ( W ) 1 n = 1 P ( w ) 1 n Perplexity = \frac{1}{P_{norm}(W)}=\frac{1}{P(W)^\frac{1}{n}}={\frac{1}{P(w)}^{\frac{1}{n}}} Perplexity=Pnorm(W)1=P(W)n11=P(w)1n1

因为是概率的倒数,所以困惑度越低,句子概率越高,语言模型就越好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea的快捷键

1.调整字体的大小 文件夹的循序:setting-Editor-Font 界面: 2.删除当前行 文件夹的循序:setting-Keymap-DeleteLine 界面: 3.导入该行需要的类 文件夹的循序:setting-Editor-General-Auto import 界面: 4.格式化代码 文件夹的循序:setting-keymap-Reformat 界面: 5.快速…

大模型微调方法:冻结方法 Freeze、P-Tuning 系列、LoRA、QLoRA

大模型微调方法 冻结方法 FreezeP-Tuning 系列Prefix-TuningPrompt TuningP-Tuning v1P-Tuning v2 LoRAQLoRA 冻结方法 Freeze 方法意思是,只用少部分参数训练,把模型的大部分参数冻结。 只要设置微调层的参数: # 遍历模型的所有参数和名称…

程序员的养生之道:延寿健康的十大秘诀(下)

程序员的养生之道:延寿健康的十大秘诀(上)-CSDN博客 目录 6. 心理调节,减轻压力 6.1 程序员常见的心理问题 6.2 压力管理的重要性 6.3 放松技巧与应对策略 6.4 积极心态与心理健康 7. 正确坐姿,保护颈椎腰椎 …

VLAN协议与单臂路由

文章目录 VLAN协议与单臂路由一、VLAN的概念及优势1、分割广播域2、VLAN的优势3、VLAN数据帧 二、VLAN的种类1、静态VLAN2、动态VLAN3、VLAN划分方式 三、静态VLAN的配置1、VLAN的范围2、静态VLAN的配置2.1 配置静态VLAN的步骤2.2 vlan三种端口类型举例:配置静态VLA…

VR全景直播来临,沉浸式代入吸引百万人目光

如今,VR技术正在不断改变着直播行业的面貌,为观众提供沉浸式的观看体验。在5G技术的快速发展背景下,VR全景直播作为5G应用的场景,被广泛应用在体育赛事、新闻会议、演唱会、教育医疗等场景,通过VR技术进行全景直播&…

c语言结构体调用格式与对齐

1.声明形式: struct 结构体名字 { 结构体成员 }结构体变量名; 2.赋值方法 3.结构体对齐: 1.起始偏移量:默认结构体第一个元素对齐0起始偏移量,第一个元素占一个字节,此时偏移量为1. 2.标准数&#xff…

基于stm32 FP-AUD-SMARTMIC1 音频系统开发

基于stm32 FP-AUD-SMARTMIC1 音频系统开发 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, FP-AUD-SMARTMIC1 是一个用于 STM32F4Discovery …

Etcd实战(一)-部署etcd集群

1 概述 etcd是一个高可用的分布式键值存储系统,是CoreOS(现在隶属于Red Hat)公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据,并使用Raft协议实现了分布式一致性。etcd广泛应用于Docker、Kubernetes等分布…

《使用ThinkPHP6开发项目》 - 创建控制器

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 《使用ThinkPHP6开发项目》 - 创建应用-CSDN博客 使用ThinkPHP6创建控制器,开始项…

css 纯样式实现绘出进度条

效果: css代码: .bar{height: 14px;width: 100%;font-size: 10px;margin-top: 5px;background-color: #f5f5f5;}.bar::before{display: block;counter-reset: progress var(--precent); content: ;width: calc(1% * var(--precent));color: #fff;height:…

String类详解

String类详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 解密String类:探秘Java中的字符串魔法 在Java的世界里,String类犹如一位魔法…

【C++进阶篇】二叉搜索数

目录 前言: 以后我们要学map,set,AVL,红黑数所以必须要有二叉搜索数做铺垫 1、二叉搜索树概念 2.二叉搜索树操作 1.二叉搜索树的查找 a、从根开始比较,查找,比根大则往右边走查找,比根小则…

SpringBoot 实现动态切换数据源

最近在做业务需求时,需要从不同的数据库中获取数据然后写入到当前数据库中,因此涉及到切换数据源问题。本来想着使用Mybatis-plus中提供的动态数据源SpringBoot的starter:dynamic-datasource-spring-boot-starter来实现。 结果引入后发现由于…

IO零拷贝

在介绍零拷贝之前我们先看看传统的 Java 网络 IO 编程是怎样的。 下面代码展示了一个典型的 Java 网络程序。 File file new File("index.jsp");RandomAccessFile rdf new RandomAccessFile(file, "rw");byte[] arr new byte[(int) file.length()];rdf…

Tcl语言语法精炼总结

一、置换符号 1.变量置换 $ TCl解释器会将认为$后面为变量名,将变量名置换成它的值 2.命令置换 [] []内是一个独立的TCL语句 3.反斜杠置换 \ 换行符、空格、[、$等被TCL解释器当作特殊符号处理。加上反斜杠后变成普通字符 \t TAB \n 换行符 4.双引号 “” “…

鸿蒙开发之页面与组件生命周期

一、页面间的跳转 创建文件的时候记得选择创建page文件,这样就可以在main->resources->profile->main_pages.json中自动形成页面对应的路由了。如果创建的时候你选择了ArkTS文件,那么需要手动修改main_pages.json文件中,添加相应的…

关于大模型ChatGLM3-6B在CPU下运行

最近在调研市场上语言大模型,为公司的产品上虚拟人的推出做准备。各厂提供语言模型都很丰富,使用上也很方便,有API接口可以调用。但唯一的不足,对于提供给百万用户使用的产品,相比价格都比较贵。所以对ChatGLM3-6B的使…

基于pandoraNext使用chatgpt4

1.登陆GitHub 获取pandoraNext项目GitHub - pandora-next/deploy: Pandora Cloud Pandora Server Shared Chat BackendAPI Proxy Chat2API Signup Free PandoraNext. New GPTs(Gizmo) UI, All in one! 在release中选择相应版本操作系统的安装包进行下载 2.获取license_…

分享一个很方便查看所有目录的文件浏览器

分享一个很方便查看所有目录的文件浏览器RootExplorer.apk 链接:文件分享 密码:zxhi33 前提是要设备root过,这样可以方便查看整个设备所有目录的各种文件。 最近客户想要定制Launcher3桌面各种小部件Widget 时间、天气、日历、新闻。 按照客…

最新鸿蒙HarmonyOS4.0开发登陆的界面1

下载deveco-studio 说明一下,本人只是学习中,现在只是拿着vue及uniapp的经验在一点一点的折腾,不过现在看来,鸿蒙入门并不是很难。也许是自己没有深入下去。 https://developer.harmonyos.com/cn/develop/deveco-studio#download…