NLP中的Perplexity是什么?

Perplexity,翻译为中文的意思为:困惑、混乱。在NLP中,表示语言模型的困惑度,是交叉熵的指数形式,可以作为语言模型的评价指标。Perplexity越低,说明模型拟合效果越好。Perplexity 计算公式如下:
P e r p l e x i t y ( S ) = p ( w 1 , w 2 , w 3 , . . . , w m ) − 1 / m = ∏ i = 2 m 1 p ( w i ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) m Perplexity(S) = p(w_1, w_2, w_3,...,w_m)^{-1/m}\\ = \sqrt[m]{\prod_{i=2}^m \frac{1}{ p(w_i|w_1, w_2, w_3,...,w_{i-1})}} Perplexity(S)=p(w1,w2,w3,...,wm)1/m=mi=2mp(wiw1,w2,w3,...,wi1)1
简单来说,perplexity刻画的是语言模型预测一个语言样本的能力,比如已经知道了 ( w 1 , w 2 , w 3 , . . . , w m ) (w_1, w_2, w_3,...,w_m) (w1,w2,w3,...,wm)这句话会出现在语料库之中,那么通过语言模型计算得到这句话的概率越高,说明语言模型对这个语料库拟合的越好。

在语言模型的训练中,通常采用perplexity的对数表达形式:

log ( p e r p l e x i t y ( S ) ) = − 1 m ∑ i = 2 m p ( w 1 , w 2 , w 3 , . . . , w m ) \text{log}(perplexity(S)) =-\frac{1}{m} \sum_{i=2}^{m} p(w_1, w_2, w_3,...,w_m) log(perplexity(S))=m1i=2mp(w1,w2,w3,...,wm)

在数学上,log perplexity 可以看作真实分布与预测分布之间的交叉熵 Cross Entropy, 交叉熵描述了两个概率分布之间的一种距离,假设 x x x 是一个离散变量, u ( x ) u(x) u(x) v ( x ) v(x) v(x) 是两个与 x x x 相关的概率分布,那么 u , v u, v u,v 之间的交叉熵的定义是分布 u u u − log ( v ( x ) ) -\text{log}(v(x)) log(v(x)) 的期望值:
H ( u , v ) = E u [ − l o g ( v ( x ) ] = − ∑ x u ( x ) l o g ( v ( x ) ) H(u, v) = E_u[-log(v(x)]=-\sum_x{u(x)log(v(x))} H(u,v)=Eu[log(v(x)]=xu(x)log(v(x))

我们把 x x x 看作是单词, u ( x ) u(x) u(x) 表示每个位置上单词的真实分布,
u ( x ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) = { 1 x = w i 0 x ≠ w i u(x|w_1, w_2, w_3,...,w_{i-1}) = \begin{cases} 1& \textstyle{x=w_i}\\ 0& \textstyle{x\neq w_i} \end{cases} u(xw1,w2,w3,...,wi1)={10x=wix=wi

v ( x ) v(x) v(x)是模型的预测分布 p ( w i ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) p(w_i|w_1, w_2, w_3,...,w_{i-1}) p(wiw1,w2,w3,...,wi1) ,那么即有
H ( u , v ) = − ∑ x u ( x ) l o g ( v ( x ) ) = − 1 m ∑ i = 2 m ( ∑ x u ( x ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) p ( w i ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) ) = − 1 m ∑ i = 2 m ( 1 × p ( w i ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) + ∑ x ≠ w i 0 × p ( w i ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) ) = − 1 m ∑ i = 2 m p ( w i ∣ w 1 , w 2 , w 3 , . . . , w i − 1 ) = log ( p e r p l e x i t y ( S ) ) H(u, v) =-\sum_x{u(x)log(v(x))}\\ =-\frac{1}{m} \sum_{i=2}^{m} (\sum_xu(x|w_1, w_2, w_3,...,w_{i-1})p(w_i|w_1, w_2, w_3,...,w_{i-1}))\\ =-\frac{1}{m} \sum_{i=2}^{m} (1\times p(w_i|w_1, w_2, w_3,...,w_{i-1}) + \sum_{x\neq w_i} 0\times p(w_i|w_1, w_2, w_3,...,w_{i-1}))\\ =-\frac{1}{m} \sum_{i=2}^{m} p(w_i|w_1, w_2, w_3,...,w_{i-1})\\ = \text{log}(perplexity(S)) H(u,v)=xu(x)log(v(x))=m1i=2m(xu(xw1,w2,w3,...,wi1)p(wiw1,w2,w3,...,wi1))=m1i=2m(1×p(wiw1,w2,w3,...,wi1)+x=wi0×p(wiw1,w2,w3,...,wi1))=m1i=2mp(wiw1,w2,w3,...,wi1)=log(perplexity(S))

可以看出, log ( p e r p l e x i t y ( S ) ) \text{log}(perplexity(S)) log(perplexity(S))和交叉熵是等价的。

### Perplexity 的定义 Perplexity 是衡量语言模型质量的一个重要指标。具体来说,对于一个由 \(N\) 个单词组成的文本序列 \(\{w_i\}_{i=1}^{N}\),其困惑度可以被定义为: \[ PP(W) = \left( \prod_{i=1}^{N} \frac{1}{P(w_i|w_1, w_2, ..., w_{i-1})} \right)^{\frac{1}{N}} \] 其中 \( P(w_i | w_1, w_2, ..., w_{i-1}) \) 表示基于前序词预测下一个词的概率[^3]。 当计算每个分词上的困惑度时,如果整个测试集中共有1000个单词,并且可以用7.95比特给每个单词编码,则该模型上每个词的困惑度大约为\(2^{7.95}=247\)。这表明,在每个词语位置上有相当于投掷一个247面骰子的不确定性。 ### 应用领域 #### 自然语言处理(NLP) 在自然语言处理任务中,较低的困惑度意味着模型能够更好地捕捉到语料库中的模式并做出更为精确的预测。因此,这一指标常用于评估不同架构下的语言模型优劣以及指导超参数调优过程[^4]。 #### 教育技术 随着AI大模型逐渐融入教育场景,困惑度同样成为了一个有用的工具来监测学生学习进度或个性化辅导系统的效能。例如,通过分析对话记录里学生的表达习惯及其变化趋势,教师可以获得关于他们理解程度的第一手资料;而自动评分系统则能依据此标准给出更加合理的反馈意见[^1]。 ```python import math def calculate_perplexity(probabilities): """ 计算给定一系列条件概率后的困惑度 参数: probabilities (list): 各时刻下目标事件发生的条件概率列表 返回: float: 困惑度值 """ log_sum = sum(math.log(p, 2) for p in probabilities) n = len(probabilities) return pow(2, (-1 / n) * log_sum) # 示例使用 example_probs = [0.8, 0.6, 0.9] print(f"The perplexity is {calculate_perplexity(example_probs)}") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NLP_wendi

谢谢您的支持。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值