發現網絡上流傳的關於困惑度(perplexity)大多數都是利用了N-gram
或者主題模型
的例子來闡述的。但是現在這個年代來學習這個指標的人多半都是想研究神經網絡
的,而兩者的對困惑度的計算方法又很不同,這就不能不讓人對“困惑度”感到“困惑”了。本人雖然才疏學淺,還是斗膽在這裏嘗試寫一篇文章,試圖用簡潔的方式來梳理清楚其中的困惑。
困惑度的基本定義
首先,困惑度是用來評價語言模型
好壞的指標。語言模型是衡量句子好壞的模型,本質上是計算句子的概率:
對於句子s(詞語w的序列):
它的概率爲:【公式1】
困惑度與測試集上的句子概率相關,其基本思想是:給測試集的句子賦予較高概率值的語言模型較好,當語言模型訓練完之後,測試集中的句子都是正常的句子,那麼訓練好的模型就是在測試集上的概率越高越好[1],公式如下:
這裏想補充一下參考資料裏沒有強調的一些點
- 根號內是句子概率的倒數,所以顯然 句子越好(概率大),困惑度越小,也就是模型對句子越不困惑。 這樣我們也就理解了這個指標的名字。
- 開N次根號(N爲句子長度)意味着幾何平均數(把句子概率拆成詞語概率的連乘)
- 需要平均的原因是,因爲每個字符的概率必然小於1,所以越長的句子的概率在連乘的情況下必然越小,所以爲了對長短句公平,需要平均一下
- 是幾何平均的原因,是因爲幾何平均數的特點是,如果有其中的一個概率是很小的,那麼最終的結果就不可能很大,從而要求好的句子的每個字符都要有基本讓人滿意的概率 [2]
- 機器翻譯常用指標BLEU也使用了幾何平均,還有機器學習常用的F score使用的調和平均數 ,也有類似的效果
在不同具體模型下的計算
不同模型的困惑度計算的差別,實際上都是來源於對句子概率的計算方式的不同,所以主要圍繞句子概率展開:
N-gram(uni-gram, bi-gram, tri-gram)
網絡上常見的例子:
對uni-gram語言模型(一元語言模型),其採用了單個詞語概率獨立的簡化假設。
用詞袋模型(Bag Of Words)這個名字來解釋它可能更形象。把一個詞語看做一種顏色的小球,句子的產生就是從一個裝有所有詞語的袋子裏面有放回地抽出小球的過程。每類小球(詞語)的概率互相獨立。
故句子的概率不使用【公式1】,而是用每個詞語(uni-gram)的概率相乘:【公式2】
對於bi-gram語言模型(二元語言模型),其採用馬爾科夫假設:一個詞的出現僅依賴於它前面出現的一個詞。
故句子的概率就是每個詞語(bi-gram)的概率相乘:
tri-gram類似:
實際上,都是把句子概率拆分成了N-gram的小單元概率計算。
注意,馬上我們就要迎來第一個困惑點:這些小單元的概率如何計算
第一類、統計語言模型,採用的是從數據集中的N-gram出現頻率直接統計得到概率的方法。如uni-gram就是單個詞語的出現頻率(詞頻/語料庫中所有的詞語數量),而例如tri-gram則是
主題模型
第二類使用主題模型(LDA等)來作爲語言模型。
實際上,這種模型也採用了詞袋模型的假設,所以句子概率的計算同【公式2】。
只是,對於其中的uni-gram的概率計算,並不再來自於頻率統計,採用了融合主題的更復雜的建模,提升了模型的泛化性能,是一種進步,想了解具體原理的我推薦 [3]。
神經網絡
神經網絡(這裏我主要指RNN/LSTM/GRU)在主題模型的基礎上又跨出了一大步。計算句子概率不再需要做出簡化假設,分解爲N-gram計算,而是可以使用最上面寫的最根本的【公式1】來計算:
LSTM示意圖
LSTM的具體原理我推薦看[4]來了解。這裏我只簡單說一下,由於LSTM的序列性,其每一步預測的詞語概率自然而然就是以前面所有的上下文爲條件的條件概率,即:
這點與前面提到的兩類模型都有根本不同。從而讓我們可以利用【公式1】來計算句子概率,取得更好的效果。
另外,神經網絡中的困惑度常常不是直接使用句子概率來計算的,而是使用了cross entropy(或者negative log likelihood,二者實際上是等價的)
(圖源[5])
這是因爲現在的深度學習框架對它們有現成的計算函數,用起來很方便。並且把上面的公式展開推導一下,可以得到與【公式1】實際上等價的結果(上圖中還對語料庫所有句子求了個算數平均)。
因爲perplexity可以從cross entropy中得到,而cross entropy又是除了語言模型以外的文本生成任務(如機器翻譯,摘要生成等)也常用的loss,所以我們也可以把perplexity拓展到語言模型外,用cross entropy來計算文本生成裏的困惑度。
機器翻譯的框架OpenNMT就使用了困惑度作爲一個指標。[6]
基本概念到此爲止,下面還有一些新方向的延伸。
GPT/BERT/XLnet
順便提一下近年來流行的GPT/BERT/XLnet,它們又代表了語言模型的新方向,對上述方法又做出了改動,因而在此一併梳理。
這裏主要引用XLNet的論述
GPT是Auto-regressive模型,其句子概率計算方法同【公式1】
BERT自稱爲(Masked Language Model, MLM),在XLNet中被稱爲denoising auto-encoding。一般只是用來預測MASK位置的詞語概率,而不是句子概率,所以也有說它不算是一種語言模型的。它的概率計算方法:
即,以被MASK處理後的整句話的上下文爲條件,計算所有被mask位置的詞語的概率之和。
XLnet用的則是Permutation Language Modeling,說來話長,具體詳見論文吧。
本文涉及概念較多,也許難免還會有些小問題,如果發現問題,歡迎指正。
本文參考資料,並且都是繼續深入理解的很好資料:
[1] 憶臻的知乎專欄
https://zhuanlan.zhihu.com/p/44107044, https://zhuanlan.zhihu.com/p/28080127
[2] https://blog.csdn.net/qixinlei/article/details/98184316
[3] https://www.cnblogs.com/pinard/p/6831308.html
[4] https://www.cnblogs.com/wangduo/p/6773601.html
[5] https://www.hankcs.com/nlp/cs224n-rnn-and-language-models.html
[6] https://forum.opennmt.net/t/metrics-bleu-ppl-gold-ppl-pred/249