先說結論:困惑度是交叉熵的指數形式。

然後你要知道信息熵、交叉熵的概念,可參考知乎上的回答~

對於熵,簡單點就是信息量 [公式] 的期望。將一個sentence看做一個隨機變數,[公式] ,這裡假定是有限長度n,那麼它對應的熵為:

[公式]

對應的per-word 熵,也就是entroy rate為:

[公式]

引入交叉熵,真實分佈p,通過語言模型生成的sentence,可以看作預測得到分佈為m,那麼交叉熵:

[公式]

根據 [公式] ,交叉熵的值越小,我們預測得到的分佈也就越接近真實分佈。

這裡因為訓練樣本已經給出,也就是p是定值,故 [公式] 可寫成:

[公式]

有了上面的知識,接下來理解困惑度就很容易了~

基於語言模型 [公式] 的困惑度perplexity可定義為交叉熵的指數形式:

可以看到perplexity和交叉熵一樣都可以用來評價語言模型的好壞。 對於測試集其困惑度越小,準確率也就越高,語言模型也就越好~


前面的回答都很優秀,但我想基於我的理解做個補充。

困惑度 Perplexity 是衡量語言模型好壞的指標,為了更好地理解其意義,首先有必要回顧熵的概念。根據資訊理論與編碼的知識,我們知道 熵代表著根據信息的概率分佈對其編碼所需要的最短平均編碼長度。

  1. Entropy

假設離散隨機變數 [公式] 概率分佈為 [公式]

離散隨機變數 [公式] 概率分佈為 [公式]

離散隨機變數 [公式] 概率分佈為 [公式]

則根據離散隨機變數熵的計算公式可計算得 [公式]

也就是說如果需要對離散隨機變數 [公式][公式][公式] 進行編碼,編碼長度分別為 0 bits、1.5 bits 和 2 bits。而編碼長度表示隨機變數能夠呈現出的等可能性的狀態數(就隨機變數而言就是取值個數,這種表述並不嚴謹,只是為了方便下文敘述):隨機變數 [公式] 呈現出的狀態數為 [公式] 種;隨機變數 [公式] 呈現出的狀態數為 [公式] 種;隨機變數 [公式] 呈現出的狀態數為 [公式] 種。

2. Entropy Rate

對於索引可數的隨機過程 [公式] ,其熵率定義為: [公式]

對於獨立同分布的序列,各隨機變數的熵相等,則顯然有:

[公式]

所以熵率依其定義可粗略地類比於隨機過程中 per-random_variable entropy。比如,考慮這樣一臺打字機,假設可輸出 [公式] 個等可能的符號。因此打字機可產生長度為 [公式] 的共 [公式] 個序列,並且都等可能出現。那麼對於該印表機, [公式] bits/symbol。

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

[公式] 就可認為是根據訓練語料學習得到的語言模型 [公式] 的交叉熵,而這一般也是在訓練語言模型時的損失函數。而對於 perplexity 即 [公式]從編碼長度的角度來理解,就可認為是在語言模型 [公式] 下,等可能性的輸出結果的個數。所以在給定輸入的前面若干辭彙即給定歷史信息後,當然語言模型等可能性輸出的結果個數越少越好,越少表示模型就越知道對給定的歷史信息 [公式] ,應該給出什麼樣的輸出 [公式] ,即 perplexity 越小,表示語言模型越好。

在學習語言模型時最常見的一個例子是隨機語言模型,即每次等可能性地輸出辭彙表 [公式] 中的任意辭彙。顯然這與前面印表機的例子相同,因此隨機語言模型的 perplexity 為 [公式]

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圖標
推薦閱讀:
相關文章