當前位置:
首頁 > 最新 > 自然語言處理:語言模型與評價方法

自然語言處理:語言模型與評價方法

小編說:語言模型是自然語言處理問題中一類最基本的問題,它有著非常廣泛的應用,也是理解後文中更加複雜的自然語言處理問題的基礎。本文介紹了語言模型的基本概念以及介紹評價語言模型好壞的標準,並給出了使用TensorFlow實現該損失函數的具體代碼。

1 語言模型簡介

假設一門語言中所有可能的句子服從某一個概率分布,每個句子出現的概率加起來為1,那麼「語言模型」的任務就是預測每個句子在語言中出現的概率。對於語言中常見的句子,一個好的語言模型應得出相對較高的概率;而對於不合語法的句子,計算出的概率則應接近於零。把句子看成單詞的序列,語言模型可以表示為一個計算p(w1,w2,w3,…,wm)的模型。語言模型僅僅對句子出現的概率進行建模,並不嘗試去「理解」句子的內容含義。比如說,語言模型能告訴我們什麼樣的句子是常用句子,但無法告訴我們兩句話的意思是否相似或者相反。

語言模型有很多應用。很多生成自然語言文本的應用都依賴語言模型來優化輸出文本的流暢性。生成的句子在語言模型中的概率越高,說明其越有可能是一個流暢、自然的句子。例如在輸入法中,假設輸入的拼音串為「xianzaiquna」,輸出可能是「西安在去哪」,也可能是「現在去哪」,這時輸入法就利用語言模型比較兩個輸出的概率,得出「現在去哪」更有可能是用戶所需要的輸出。在統計機器翻譯的雜訊信道模型(Noisy Channel Model)中,每個候選翻譯的概率由一個翻譯模型和一個語言模型共同決定,其中的語言模型就起到了在目標語言中挑選較為合理的句子的作用。在《TensorFlow(第2版)》9.3小節中將看到,神經網路機器翻譯的Seq2Seq模型可以看作是一個條件語言模型(Conditional Language Model),它相當於是在給定輸入的情況下對目標語言的所有句子估算概率,並選擇其中概率最大的句子作為輸出。

那麼如何計算一個句子的概率呢?首先一個句子可以被看成是一個單詞序列:

其中m為句子的長度。那麼,它的概率可以表示為:

p(wm|w1,w2,w3,…,wm-1)表示,已知前m-1個單詞時,第m個單詞為wm的條件概率。如果能對這一項建模,那麼只要把每個位置的條件概率相乘,就能計算一個句子出現的概率。然而一般來說,任何一門語言的辭彙量都很大,辭彙的組合更是不計其數。假設一門語言的辭彙量為V,如果要將p(wm|w1,w2,w3,…,wm-1)的所有參數保存在一個模型里,將需要Vm個參數,一般的句子長度遠遠超出了實際可行的範圍。為了估計這些參數的取值,常見的方法有n-gram模型、決策樹、最大熵模型、條件隨機場、神經網路語言模型等。這裡先以其中最簡單的n-gram模型來介紹語言模型問題。為了控制參數數量,n-gram模型做了一個有限歷史假設:當前單詞的出現概率僅僅與前面的n-1個單詞相關,因此以上公式可以近似為:

n-gram模型里的n指的是當前單詞依賴它前面的單詞的個數。通常n可以取1、2、3、4,其中n取1、2、3時分別稱為unigram、bigram和trigram。n-gram模型中需要估計的參數為條件概率:

假設某種語言的單詞表大小為V,那麼n-gram模型需要估計的不同參數數量為O(Vn)量級。當n越大時,n-gram模型在理論上越準確,但也越複雜,需要的計算量和訓練語料數據量也就越大,因此n取≥4的情況非常少。

n-gram模型的參數一般採用最大似然估計(Maximum Likelihood Estimation,MLE)方法計算:

其中C(X)表示單詞序列X在訓練語料中出現的次數。訓練語料的規模越大,參數估計的結果越可靠。但即使訓練數據的規模非常大時,還是有很多單詞序列在訓練語料中不會出現,這就會導致很多參數為0。舉例來說,IBM使用了366M英語語料訓練trigram,發現14.7%的trigram和2.2%的bigram在訓練中沒有出現。為了避免因為乘以0而導致整個句概率為0,使用最大似然估計方法時需要加入平滑避免參數取值為0。使用n-gram建立語言模型的細節不再詳細介紹,感興趣的讀者推薦閱讀Michael Collins的講義 。

2 語言模型的評價方法

語言模型效果好壞的常用評價指標是複雜度(perplexity)。在一個測試集上得到的perplexity越低,說明建模的效果越好。計算perplexity值的公式如下:

簡單來說,perplexity值刻畫的是語言模型預測一個語言樣本的能力。比如已經知道(w1,w2,w3,…,wm)這句話會出現在語料庫之中,那麼通過語言模型計算得到的這句話的概率越高,說明語言模型對這個語料庫擬合得越好。

從上面的定義中可以看出,perplexity實際是計算每一個單詞得到的概率倒數的幾何平均,因此perplexity可以理解為平均分支係數(average branching factor),即模型預測下一個詞時的平均可選擇數量。例如,考慮一個由0~9這10個數字隨機組成的長度為m的序列,由於這10個數字出現的概率是隨機的,所以每個數字出現的概率是 。因此,在任意時刻,模型都有10個等概率的候選答案可以選擇,於是perplexity就是10(有10個合理的答案)。perplexity的計算過程如下:

目前在PTB(Penn Tree Bank)數據集上最好的語言模型perplexity為47.7 ,也就是說,平均情況下,該模型預測下一個詞時,有47.7個詞等可能地可以作為下一個詞的合理選擇。

在語言模型的訓練中,通常採用perplexity的對數表達形式:

相比乘積求平方根的方式,使用加法的形式可以加速計算,同時避免概率乘積數值過小而導致浮點數向下溢出的問題。

在數學上,log perplexity可以看成真實分布與預測分布之間的交叉熵(Cross Entropy)。交叉熵描述了兩個概率分布之間的一種距離。假設x是一個離散變數,u(x)和v(x)是兩個與x相關的概率分布,那麼u和v之間交叉熵的定義是在分布u下-log(v(x))的期望值:

把x看作單詞,u(x)為每個位置上單詞的真實分布,v(x)為模型的預測分布p(wi|w1,…,wi-1),就可以看出log perplexity和交叉熵是等價的。唯一的區別在於,由於語言的真實分布是未知的,因此在log perplexity的定義中,真實分布用測試語料中的取樣代替,即認為在給定上文w1,w2,…,wi-1的條件下,語料中出現單詞wi的概率為1,出現其他單詞的概率均為0。

GIF

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 博文視點Broadview 的精彩文章:

人工神經網路到底能幹什麼?到底在幹什麼?

TAG:博文視點Broadview |