赞
踩
所谓语言模型(Language Model,LM),即给定一句话的前k个词,我们希望语言模型可以预测第k+1个词是什么,即给出一个第k+1个词可能出现的概率的分布p(xk+1|x1x2...xk)。
衡量一个语言模型的好坏,最好的方法就是将其应用到具体的问题当中,比如机器翻译、speech recognition、spelling corrector等。然后看这个语言模型在这些任务中的表现(extrinsic evaluation,or in-vivo evaluation)。但是,这种方法一方面难以操作,另一方面可能非常耗时,可能跑一遍evaluation需要一两天。因此,人们就希望找一种intrinsic evaluation的方法。即根据与语言模型自身的一些特性,来设计一种简单易行,而又行之有效的评测指标。于是,人们就发明了perplexity这个指标。
Perplexity是一种衡量自然语言处理领域(NLP)中,语言模型的好坏的指标。
简单来说,perplexity就是对于语言模型所估计的一句话出现的概率,用句子长度normalize一下,具体形式如下:
PP(S)===P(w1w2...wN)−1N1p(w1w2...wN)−−−−−−−−−−−−√N∏i=1N1p(wi|w1w2...wi−1)−−−−−−−−−−−−−−−−−−⎷N
对于bigram来讲,就是下面的式子:
PP(S)=∏i=1N1p(wi|wi−1)−−−−−−−−−−−−⎷N
其中,对于第一个词,就是p(w1|w0),w0表示START,是一个占位符,表示句子的起始。
Perplexity越小越好,相应的,就是我们见过的句子出现的概率越大越好
Perplexity其实表示的是average branch factor,大概可以翻译为平均分支系数。即平均来说,我们预测下一个词时有多少种选择。
举个例子来说,对于一个长度为N的,由0-9这10个数字随机组成的序列。由于这10个数字随机出现,所以每个数字出现的概率是110。也就是,在每个点,我们都有10个等概率的候选答案供我们选择,于是我们的perplexity就是10(有10个合理的答案)。具体计算过程如下:
PP(S)=∏i=1N1110−−−−−⎷N=10
于是,在看到一个语言模型报告其perplexity是109时,我们就可以直观的理解为,平均情况下,这个语言模型预测下一个词时,其认为有109个词等可能地可以作为下一个词的合理选择。
另一种常用的perplexity表达形式如下(以unigram为例):
PP(S)=2−1N∑P(wi)
其中,N是句子S的长度,P(wi)是第i个词的概率(如果是bigram就应该是第i个bigram的概率)
这个式子是从交叉熵的角度推导出来,很多地方将perplexity的时候就用的这个式子(但我个人觉得从交叉熵的角度解释很牵强)。由于这个式子没什么直观解释,所以大家记的时候还是按照之前的式子记吧
http://sentiment-mining.blogspot.com/2016/11/perplexity.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。