求通俗解釋NLP里的perplexity是什麼?
先說結論:困惑度是交叉熵的指數形式。
然後你要知道信息熵、交叉熵的概念,可參考知乎上的回答~
對於熵,簡單點就是信息量
對應的per-word 熵,也就是entroy rate為:
引入交叉熵,真實分布p,通過語言模型生成的sentence,可以看作預測得到分布為m,那麼交叉熵:
根據
這裡因為訓練樣本已經給出,也就是p是定值,故
有了上面的知識,接下來理解困惑度就很容易了~
基於語言模型
可以看到perplexity和交叉熵一樣都可以用來評價語言模型的好壞。 對於測試集其困惑度越小,準確率也就越高,語言模型也就越好~
前面的回答都很優秀,但我想基於我的理解做個補充。
困惑度 Perplexity 是衡量語言模型好壞的指標,為了更好地理解其意義,首先有必要回顧熵的概念。根據資訊理論與編碼的知識,我們知道 熵代表著根據信息的概率分布對其編碼所需要的最短平均編碼長度。
- Entropy
假設離散隨機變數
離散隨機變數
離散隨機變數
則根據離散隨機變數熵的計算公式可計算得
也就是說如果需要對離散隨機變數
2. Entropy Rate
對於索引可數的隨機過程
對於獨立同分布的序列,各隨機變數的熵相等,則顯然有:
所以熵率依其定義可粗略地類比於隨機過程中 per-random_variable entropy。比如,考慮這樣一台打字機,假設可輸出
3. "Entropy of Language"
在語言模型中,對於語言
那麼在單詞序列熵的基礎上,根據熵率的定義,可粗略的定義 per-word entropy:
而若將語言
而對上式又可作如下近似(摘自 Speech and Language Processing 3rd ed. draft):
The Shannon-McMillan-Breiman theorem (Algoet and Cover 1988, Cover and Thomas 1991) states that if the language is regular in certain ways (to be exact, if it is both stationary and ergodic)
To summarize, by making some incorrect but convenient simplifying assumptions, we can compute the entropy of some stochastic process by taking a very long sample of the output and computing its average log probability.
4. Cross Entropy
當我們用概率分布
根據 Shannon-McMillan-Breiman theorem,可近似得:
在實際應用中,單詞序列一般都足夠長,又可作如下近似表示:
注意交叉熵
5. Perplexity
從訓練語料中學習得到語言模型分布後,可以計算 perplexity 衡量其好壞。假設測試語料為
- log-likelihood
- per-word log-likelihood
- per-word cross entropy
- perplexity
其中
6. Summary
在學習語言模型時最常見的一個例子是隨機語言模型,即每次等可能性地輸出辭彙表
P.S. 關於 perplexity,更常見的表述如下,所有表述方式實質上是等價的:
假設測試語料共包括
個句子,第 個句子有 個字,則有 對測試語料中的每一個句子
,若 越大,則說明語言模型在測試語料上的表現越好。即相當於下式 而 perplexity 定義為
一、語言模型
本文盡量通俗解釋一下困惑度的概念。既然題目中寫了是用來評價語言模型的好壞,那麼首先來看一下語言模型:憶臻:深入淺出講解語言模型?zhuanlan.zhihu.com簡單地說,語言模型就是用來計算一個句子的概率的模型,也就是判斷一句話是否是人話的概率?
那麼如何計算一個句子的概率呢?給定句子(詞語序列)它的概率可以表示為:
也就是說在給定一句話的前k個詞,我們希望語言模型可以預測第k+1個詞是什麼,即給出一個第k+1個詞可能出現的概率的分布p(xk+1|x1x2...xk)。
那麼如何學習到一個語言模型呢,這裡不詳細敘述,可以參考:憶臻:深入淺出講解語言模型?zhuanlan.zhihu.com二、如何評價一個語言模型好壞
在得到不同的語言模型(一元語言模型、二元語言模型....)的時候,我們如何判斷一個語言模型是否好還是壞,一般有兩種方法:1、一種方法將其應用到具體的問題當中,比如機器翻譯、speech recognition、spelling corrector等。然後看這個語言模型在這些任務中的表現(extrinsic evaluation,or in-vivo evaluation)。但是,這種方法一方面難以操作,另一方面可能非常耗時,可能跑一個evaluation需要大量時間,費時難操作。2、針對第一種方法的缺點,大家想是否可以根據與語言模型自身的一些特性,來設計一種簡單易行,而又行之有效的評測指標。於是,人們就發明了perplexity這個指標。困惑度(perplexity)的基本思想是:給測試集的句子賦予較高概率值的語言模型較好,當語言模型訓練完之後,測試集中的句子都是正常的句子,那麼訓練好的模型就是在測試集上的概率越高越好,公式如下:下面是一些 ngra-m 模型經 訓練文本後在測試集上的困惑度值:
可以看到,之前我們學習的 trigram 模型經訓練後,困惑度由955跌減至74,這是十分可觀的結果。
這節的核心就是句子概率越大,語言模型越好,迷惑度越小。參考:http://sentiment-mining.blogspot.com/2016/11/perplexity.html?sentiment-mining.blogspot.com本回答來自專欄【機器學習演算法與自然語言處理】:
憶臻:通俗解釋困惑度 (Perplexity)-評價語言模型的好壞?zhuanlan.zhihu.com樓主要的是一個『通俗解釋』,那麼拋開上面諸位學術型回答的公式答案,一句話就是:
困惑度p可以理解為,如果每個時間步都根據語言模型計算的概率分布隨機挑詞,那麼平均情況下,挑多少個詞才能挑到正確的那個
選自 Graham Neubig: Neural Machine Translation and Sequence-to-sequence Models: A Tutorial
答案請見
習翔宇:基於循環神經網路的語言模型的介紹與TensorFlow實現(1):語言模型與評價指標perplexity?zhuanlan.zhihu.com簡單來說,是語言模型的評價指標。
語言模型的效果好壞的常用評價指標是困惑度(perplexity),在一個測試集上得到的perplexity 越低,說明建模的效果越好,計算perplexity的公式如下:
簡單來說,perplexity刻畫的是語言模型預測一個語言樣本的能力,比如已經知道了
在語言模型的訓練中,通常採用perplexity的對數表達形式:
相比較乘積求平方根的方式,採用加法的形式可以加速計算,同時避免概率乘積數值過小而導致浮點數向下溢出的問題。
在數學上,log perplexity 可以看作真實分布與預測分布之間的交叉熵 Cross Entropy, 交叉熵描述了兩個概率分布之間的一種距離,假設
我們把
因此log perplexity和交叉熵是等價的。
歡迎關注專欄
機器學習?zhuanlan.zhihu.com推薦閱讀: