一枝(只)漂亮的小花(貓)是個什麼鬼,它與現階段最流行的語言模型又有什麼聯繫?

一枝(只)漂亮的小花(貓)是輸入法里的一個案例。稍帶介紹下,我導師是哈工大計算機王曉龍教授,他是國內較早一批做輸入法的學者,是智能拼音輸入法的作者和構架提出者,當時他的智能拼音輸入法1995年被微軟看中後,基於此成為 PC 上流行一時的微軟拼音輸入法(詳見「我知道的百度王海峰」)。「一枝(只)漂亮的小花(貓)」是他課堂上的經典案例(後面將簡稱小花貓案例),當然另一個他經常提起的就是「做科研要頂天立地」,這個先按下不表,有空再補上。

在輸入法里,給定輸入「yi zhi piao liang de xiao hua」,其對應希望得到的輸出漢字是「一枝漂亮的小花」,但如果後面再加個「mao」呢?根絕上下文語境這個「枝」就得變換為「只」了。從這可以看到中文的字或詞是由上文和下文同時決定的,有時單由一方決定不了,由這引發出對語言模型的探討。

  • 語言模型

語言模型是對語言的建模,給定語言序列w1, w2, .., wn,語言模型就是計算該序列的概率,即P(w1, w2, ..., wn)。對於上述例子,就是計算P(一,只,(枝),漂,亮,的,小,花,(貓))。這東西有什麼用了,用處可大了,有了概率也就有了值,也就可以比較,最終也就有了選擇。比如在在輸入法問題上,P(一,只,漂,亮,的,小,花,貓)> P(一,枝,漂,亮,的,小,花,貓),那可以讓模型輸出正確的答案。

那問題來了,如何計算出這個概率。目前來看主要分為統計語言模型和神經語言模型兩大類,兩者分別基於count和continuous-space空間。兩者的表現形式大家可以自行百度 bag of words VS word embedding。

統計語言模型

統計模型主要是N-gram模型,下面給出unigram、bigram和trigram模型,如圖1。

圖1

實際應用中N一般不會大於4,因為會產生太多的稀疏值。N-gram模型的主要不足是缺乏長期依賴,只能建模到前 N-1 個詞。例如在小花貓案例中,zhi取決於mao的信息,但他們中間的跨度是6,所以很難建立起zhi和mao的聯繫。

unigram、bigram和trigram反映了一個問題,即語言模型到底是在求什麼。前面說到是求字元串序列的概率,從圖1中的紅框可以看出歸根結底是求給定一串上下文出現某個詞的概率(一般context<=3)。明白這個來看神經語言模型就更明白了。

神經語言模型

神經語言模型經歷了基於前饋神經網路的模型、基於循環神經網路的模型、基於卷積網路的模型和基於自注意力機制的模型。

基於前饋神經網路的模型

最早提出基於前饋神經網路模型的是Benjio(A Neural Probabilistic Language Model,2003),如圖,它是利用神經網路去建模當前詞出現的概率與其前 N-1 個詞之間的約束關係。(不得不佩服牛人,現在覺得理所當然的東西在當時是逆主流而行。)這種方式相比 n-gram 具有更好的泛化能力,緩解了稀疏性帶來的問題,它可以建模context>3的關係。Mikolov等人基於其類似思路提出了劃時代的word2vec模型Skip-gram(但稍微進行了調整,變成了上文和下文,具體有什麼區別後面會講到)。Benjio模型的主要不足在於需要預先設置context長度,一般是5-10個前置單詞。理論上,Benjio模型可以解決小花貓案例(將序列倒過來)。

圖2

基於循環神經網路的模型

前面提到基於前饋神經網路的模型僅能處理長度有限的序列(5-10 context),對於更長的怎麼辦。真實情況有這麼長的場景需求嗎?還真有哈,舉個金融場景的例子。

「公司進行舉行股東大會,就股權(投資/融資)進行詳細闡述,公司近期因資金鏈問題」

如果不看「因資金鏈問題」部分,這個上下文場景「投資」和「融資」都可以,而如果加上的話大概率是選擇「融資」,而他們之間的context跨度超過了10。

圖3

Recurrent neural network based language model的模型如圖3,大家可以看下RNN/LSTM/GRU等模型的介紹,這裡不細說了。相比基於前饋神經網路的模型,基於循環神經網路的模型可以捕捉前向序列所有信息(LSTM/GRU可以有選擇地捕捉相關信息)。

這裡來簡單對比下Skip-gram模型和循環神經網路模型。對於上下文信息,Skip-gram模型能同時覆蓋,而循環神經網路模型僅能單向覆蓋上文或下文,如果要覆蓋上下文就需要用Bi-RNN/LSTM/GRU模型。這會有什麼影響嗎?它與後面將會提到預訓練語言模型的建模思路有關(Bert用的是類似Skip-gram方案,ELMo用的是Bi-RNN/LSTM/GRU方案)。

基於卷積神經網路的模型

CNN和RNN是NLP領域經典的神經網路結構,既然有了基於循環神經網路的模型,那為什麼沒有基於卷積神經網路的模型呢?別說,還真有!Convolutional Neural Network Language Models,它是在基於前饋神經網路模型的基礎上將前向網路替換成了卷積網路(如圖4),所以模型的創新性沒那麼高。

圖4

基於自注意力機制的模型

很多預訓練語言模型都是基於自注意力機制的模型,包括GPT、BERT和XLNet,大家可以看下張俊林老師的《從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史》文章。

下面來對比下基於循環神經網路的模型(RNN)、基於卷積神經網路的模型(CNN)和基於自注意力機制的模型(Transformer)。首先是他們都可以對語言建模,但建模的形式各不相同。如圖5,CNN是從空間的角度進行建模,基於鄰域策略從空間維度不斷擴大,在小花貓案例中通過三跳將「只」與「貓」建立關係;RNN是從時間的角度進行建模,通過不停迭代往後遞進,在小花貓案例中通過六跳將「只」與「貓」建立關係(其思路與N-gram有些類似,只不過能保存更多前面的信息);Transformer是從完全圖的角度進行建模,任何兩點都是直達,所以在小花貓案例中通過一跳將「只」與「貓」建立關係。當然從圖中也可以看到Transformer結構比CNN和RNN要複雜。

圖 5

  • 預訓練語言模型

預訓練語言模型經歷了word2vec、ELMo、GPT-1、Bert、GPT-2和XLNet的發展見文章(從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史),這裡我稍微介紹下ELMo、Bert和XLNet的區別。

從語言模型建模的角度,ELMo走的是基於循環神經網路的模型思路,基於LSTM結構,所以註定模型在預研建模過程中不能同時看上文和下文,只能看一個方向。如果想看兩邊就得用雙向LSTM結構,然後將兩者concat,這種不足就是不能在過程中同時藉助上文和下文信息。Bert走的是Skip-gram模型思路,基於Transformer結構,當然作者巧妙地藉助了Mask機制來實現這一操作(深深膜拜這一思路),模型能同時看上文和下文信息。要實現這一機制Transformer是個基礎,能不能用LSTM結構?不行,因為LSTM只能看一邊。Transformer是不是只能同時看兩邊?不是,GPT-1和GPT-2就是走看一邊的思路,具體要看怎麼使用Transformer。

XLNet比較有意思,它是想藉助看一邊的形式來實現同時看兩邊的效果,優勢是什麼呢?文中說是解決Mask測試中不出現問題和Mask依賴問題。它是怎麼做到的呢?基於Transformer結構,主要藉助雙流注意力和Attention mask機制來解決。可以看下張俊林老師的《XLNet:運行機制及和Bert的異同比較》,介紹得很詳細,關鍵在於下面這張圖6,張老師特別做了標記,非常容易理解。

圖6

這裡稍微延伸下思考。Bert和XLNet都是能同時看兩邊,說明看兩邊相比看一邊確實要好一些,只是策略不同而已。那是不是還有其他策略呢?個人覺得還有,如果你能想到並解決,那你也是大牛了。畢竟大部分人都僅能做到在現有的基礎上修修補補,而像Bert和XLNet那樣能提出一個全新的思路還是很稀少。另外,很好奇為什麼XLNet不用Next sentence prediction loss,文中給出了對比結果,但沒有具體解釋,不知是不是與Transformer-XL有關。

上面所講純屬個人思考,眼光有限,錯誤難免,謹慎參考。

參考文獻

我知道的百度王海峰

A Neural Probabilistic Language Model

Recurrent neural network based language model

Convolutional Neural Network Language Models

從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史

XLNet:運行機制及和Bert的異同比較


推薦閱讀:
相关文章