NLP知识点 - perplexity 困惑度

2023-12-14 05:45

本文主要是介绍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

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

这篇关于NLP知识点 - perplexity 困惑度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491343

相关文章

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

【反射知识点详解】

Java中的反射(Reflection)是一个非常强大的机制,它允许程序在运行时检查或修改类的行为。这种能力主要通过java.lang.reflect包中的类和接口来实现。 通过反射,Java程序可以动态地创建对象、调用方法、访问字段,以及获取类的各种信息(如构造器、方法、字段等)。 反射的用途 反射主要用于以下几种情况: 动态创建对象:通过类的Class对象动态地创建其实例。访问类的字段

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

Python知识点:如何使用Python开发桌面应用(Tkinter、PyQt)

Python 提供了多个库来开发桌面应用程序,其中最常见的两个是 Tkinter 和 PyQt。这两者各有优点,选择取决于你的需求。以下我会介绍如何使用 Tkinter 和 PyQt 开发简单的桌面应用程序。 1. 使用 Tkinter 开发桌面应用 Tkinter 是 Python 的标准库,它非常轻量级且跨平台。它适合开发简单的桌面应用,入门较容易。 安装 Tkinter Tkinte

Python知识点:如何使用Anaconda进行科学计算环境管理

使用 Anaconda 进行科学计算环境管理是一个非常强大且灵活的方式,特别适合处理 Python 和 R 语言的包管理和虚拟环境管理。Anaconda 集成了许多用于科学计算和数据分析的库,并提供了环境隔离的功能,确保不同项目之间不会发生包冲突。以下是使用 Anaconda 进行科学计算环境管理的详细步骤: 1. 安装 Anaconda 首先,你需要在本地机器上安装 Anaconda。你可以