NLP中对困惑度感到困惑?
困惑度(Perplexity)在NLP中是個最流行的評估指標,它用于評估語言模型學的到底有多好.
但是很多煉丹師可能至今對"困惑度"依然感到困惑,這篇就把這個講清楚.
假設我們要做個對話機器人,它功能很簡單,就是你跟它說你冰箱有啥,它告訴你還需要買啥,能一起做出美味佳肴.
例如"雞肉,胡蘿卜",它能夠立馬給出5~6種購物清單,這就類似用一個NLP模型,去預估和"雞肉和胡蘿卜"共現較多的食材.
但是這樣評估并不全面,真實情況是用這個NLP模型可能會產生很多新菜譜,然后按照新菜譜可能可以創造更好的美味佳肴?
那還需要美食家去評價這個模型了.有沒有一種指標,它獨立于特定的任務,可以評估模型的質量呢?那就是困惑度了,它衡量了模型對自己預估結果的不確定性.
低困惑度說明模型對自己很自信,但是不一定準確,但是又和最后任務的表現緊密相關.然后它又計算起來非常簡單,用概率分布就可以計算.
困惑度如何算?
舉個簡單的例子,訓練上述對話機器人的樣本如下:
1. 雞肉,黃油,梨
2.雞肉,黃油,辣椒
3.檸檬,梨,蝦
4.辣椒,蝦,檸檬
這些句子,有6個word,我們學個模型就是給一個詞,預估其他詞和它一起共現的概率.最簡單的模型就是unigram模型了,每個word都是獨立分布的,因為每個詞都出現了兩次,所以所有詞出現的概率都是一樣的:
這明顯是個非常差的模型,無論你告訴這個模型你有啥,它都會隨機給你挑選剩余食材.回到困惑度,我們希望有個評估指標,模型預估概率為1,評估指標能接近0,預估概率為0,評估指標接近∞,這表示模型有多"自信",很明顯!那就是log函數了:
上述unigram模型用上式計算-log(0.16) = 2.64. 上式讓我們聯想到了信息熵, unigram的熵就是6 * (1/6 * 2.64) = 2.64:
知道上式困惑度就很好算了,就是熵的指數:
最終我們算出困惑度約等于6.這不就是我們vocabulary的大小嗎?這就是你在句子中每個位置可以選擇的可能單詞的數量。
perplexity不得不知的事!
低困惑度不能保證模型更好.首先,正如我們在計算部分所看到的,模型最糟糕的困惑度是由語言的詞匯量決定的。這意味著您可以大大降低模型的復雜度,例如,只需從單詞級模型(可能很容易具有50000多個單詞的詞匯量)切換到字符級模型(詞匯量約為26),而不管字符級模型是否真的更準確。其他變量,如訓練數據集的大小或模型的上下文長度,也會對模型的復雜性產生不成比例的影響。第二,也是更重要的一點,困惑和所有內部評估一樣,不提供任何形式的理智檢查,同困惑度的模型也是有好有壞的。
困惑度應用
當使用“困惑”來評估在真實世界數據集(如one billion word benchmark)上訓練的模型時,可以看到類似的問題。這個語料庫是由2011年發表的數千篇在線新聞文章組成的,所有這些文章都被分解成了句子。它被設計成一個標準化的測試數據集,允許研究人員直接比較在不同數據上訓練的不同模型,而困惑度就是一個最普遍的基準選擇。
不幸的是工作表明,模型的困惑很容易受到與模型質量無關的因素的影響。在三個不同的新聞數據集上訓練相同的模型時,困惑度波動很大.由于“困惑度”可以有效地衡量模型模仿其所測試的數據集風格的準確程度,因此基于與基準數據集相同時期的新聞訓練的模型由于詞匯相似性而具有不公平的優勢。
總結
優點:
- 計算速度快,允許研究人員在昂貴/耗時的真實世界能快速淘汰不太可能表現良好的模型.
- 有助于估算模型的不確定性/信息密度
缺點:
- 不適合最終評估,因為它只是測量模型的可信度,而不是準確性
- 很難在不同上下文長度、詞匯大小、基于單詞與基于字符的模型等的數據集之間進行比較。
總結
以上是生活随笔為你收集整理的NLP中对困惑度感到困惑?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不加样本就能做数据增强?还能提效?
- 下一篇: No Fine-Tuning, Only