系統學習NLP(十二)--文字表示綜述

Eason.wxd發表於2019-03-10

文字表示,簡單的說就是不將文字視為字串,而視為在數學上處理起來更為方便的向量(也就是文字特徵抽取)。而怎麼把字串變為向量,就是文字表示的核心問題。

文字表示,基於型別分為:

  • 長文字表示
  • 短文字表示(句子)
  • 詞表示

關於文字表示,研究者從不同的角度出發,提出大量的文字表示模型。本文重點梳理現有模型,大致分為三類,即基於向量空間模型、基於主題模型和基於神經網路的方法。

基於向量空間模型的方法

向量空間模型是將文字表示成實數值分量所構成的向量,一般而言,每個分量對應一個詞項,相當於將文字表示成空間中的一個點。向量不僅可以用來訓練分類器,而且計算向量之間的相似度可以度量文字之間的相似度。

詞袋子模型(bag of words)

詞袋子模型是一種非常經典的文字表示。顧名思義,它就是將字串視為一個 “裝滿字元(詞)的袋子” ,袋子裡的詞語是隨便擺放的。而兩個詞袋子的相似程度就以它們重合的詞及其相關分佈進行判斷。
舉個例子,對於句子:“我們這些傻傻的路痴走啊走,好不容易找到了飯店的西門”。
我們先進行分詞,將所有出現的詞儲存為一個詞表。然後依據 “詞語是否出現在詞表中” 可以將這句話變為這樣的向量:
[1,0,1,1,1,0,0,1,…]
詞表:[我們,你們,走,西門,的,吃飯,旅遊,找到了,…]
其中向量的每個維度唯一對應著詞表中的一個詞。可見這個向量的大部分位置是0值,這種情況叫作“稀疏”。為了減少儲存空間,我們也可以只儲存非零值的位置。

詞袋子模型的優缺點
優點:

簡單,方便,快速在語料充足的前提下,對於簡單的自然語言處理任務效果不錯。如文字分類。
缺點:

其準確率往往比較低。
凡是出現在文字中的詞一視同仁,不能體現不同詞在一句話中的不同的重要性。
無法關注詞語之間的順序關係,這是詞袋子模型最大的缺點。如“武松打老虎”跟“老虎打武松”在詞袋子模型中是認為一樣的。

對詞袋子模型的改進:TF-IDF

即向量的維度對應詞表的大小,對應維度使用TF-IDF計算。向量空間模型的優點是簡單明瞭,向量維度意義明確,效果不錯,但也存在明顯的缺點,其一,維度隨著詞表增大而增大,且向量高度稀疏;其二,無法處理“一義多詞”和“一詞多義”問題。

在向量空間模型中,文件集合相當於表示成高維稀疏矩陣,如圖1中所示,文件集合矩陣的維度是N*V,其中N是文件數目,V是詞表的大小。為了更好的提升文字的語義表示能力,有人提出通過矩陣分解的方法,對高維稀疏矩陣進行分解,最為著名的便是潛在語義分析(Latent semantic analysis, LSA),具體而言,LSA會構建一個文件與詞項的共現矩陣,矩陣的元素一般通過TFIDF計算得到,最終通過奇異值分解的方法對原始矩陣降維,可以得到文件向量和詞項向量。如圖1所示,分解後,每個文件可以用k維向量表示(k << V),相當於潛在語義分析實現對文件的低維語義表示。但是,以上過程通過矩陣分解得到,空間中維度的物理含義不明確,無法解釋。

圖1  LSA

補充:TFIDF原理

如果某個詞或短語在一篇文章中出現的頻率高(TF),並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。TFIDF實際上是:TF * IDF,TF詞頻(Term Frequency),IDF逆向檔案頻率(Inverse Document Frequency)。TF表示詞條在文件d中出現的頻率。IDF的主要思想是:如果包含詞條t的文件越少,也就是n越小,IDF越大,則說明詞條t具有很好的類別區分能力。如果某一類文件C中包含詞條t的文件數為m,而其它類包含t的文件總數為k,顯然所有包含t的文件數n=m+k,當m大的時候,n也大,按照IDF公式得到的IDF的值會小,就說明該詞條t類別區分能力不強。但是實際上,如果一個詞條在一個類的文件中頻繁出現,則說明該詞條能夠很好代表這個類的文字的特徵,這樣的詞條應該給它們賦予較高的權重,並選來作為該類文字的特徵詞以區別與其它類文件。這就是IDF的不足之處. 在一份給定的檔案裡,詞頻(term frequency,TF)指的是某一個給定的詞語在該檔案中出現的頻率。這個數字是對詞數(term count)的歸一化,以防止它偏向長的檔案。(同一個詞語在長檔案裡可能會比短檔案有更高的詞數,而不管該詞語重要與否。)對於在某一特定檔案裡的詞語來說,它的重要性可表示為:

以上式子中分子是該詞在檔案中的出現次數,而分母則是在檔案中所有字詞的出現次數之和。

逆向檔案頻率(inverse document frequency,IDF)是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總檔案數目除以包含該詞語之檔案的數目,再將得到的商取以10為底的對數得到:

其中

  • |D|:語料庫中的檔案總數

  • :包含詞語的檔案數目(即的檔案數目)如果該詞語不在語料庫中,就會導致分母為零,因此一般情況下使用資料平滑作為分母。idf公式分母idf公式分母

然後再計算TF與IDF的乘積。

某一特定檔案內的高詞語頻率,以及該詞語在整個檔案集合中的低檔案頻率,可以產生出高權重的TF-IDF。因此,TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語。

基於主題模型的方法

上面提到LSA演算法通過線性代數中奇異值分解實現文件對映到低維語義空間裡的向量,但是空間中每一個維度是沒有明確物理意義的,主題模型嘗試從概率生成模型的角度實現文字的表示,每一個維度是一個“主題(topic)”,這個主題通常是一組詞的聚類,因此可以通過主題大概猜測每個維度所代表的語義,具有一定的解釋性。

最早的主題模型pLSA (probabilistic LSA),假設文件具有主題分佈,文件中的詞從主題對應的詞分佈中抽取。如圖2所示,以d表示文件,w表示詞,z表示主題(隱變數),則文件和詞的聯合概率p(d, w)的生成過程可表示為:

其中p(z|d)和p(w|z)作為引數可以用EM演算法進行學習。然而,pLSA沒有假設主題的的先驗分佈,導致引數隨訓練文件的數目呈線性增長,引數空間很大。

圖2  pLSA

於是,有人提出更加完善的主題的模型LDA(Latent Dirichlet allocation),可以認為pLSA體現頻率學派的思想,而LDA是貝葉斯學派的思想,LDA在已有的模型上中的2個多項式分佈引入了狄利克雷先驗分佈,從而解決pLSA中存在的問題。如圖3所示,每個文件的主題分佈為多項式分佈Mult(θ),其中θ從狄利克雷先驗分佈Dir(α)抽取,同理,對於主題的詞分佈為多項式分佈Mult(Φ),引數Φ也是從狄利克雷先驗Dir(β)抽取得到。

圖3  LDA

基於主題模型的方法,引入“主題”概念,具有一定的物理意義,從而得到文件的主題分佈表示。當然,主題模型很存在一些問題,比如訓練引數多導致訓練時間長,對短文字的建模效果不好,主題數目的設定需要人工設定可能導致不合理。後來,也有很多人提出改進的方法,在這就不一一贅述了。

基於神經網路的方法

現今,基於神經網路的方法受到廣泛關注,各種各樣的模型被相繼提出,本節總結其中最具有代表性的模型,將其分為三類:

  • 第一類,基於詞向量合成的模型,該類方法僅是在詞向量基礎上簡單合成;
  • 第二類,基於RNN/CNN的模型,該類方法利用更復雜的深度學習模型對文字進行建模;
  • 第三類,基於注意力機制的模型,在已有神經網路模型基礎上,引入注意力機制,提升文字建模效果。

基於詞向量合成的模型

2003年Bengio等人開始使用神經網路來做語言模型的工作,嘗試得到詞的低維、稠密的向量表示,2013年Mikolov等人提出簡化的模型,即著名的Word2Vec,包含兩個模型CBOW和Skip-gram,前者通過視窗語境預測目標詞出現的概率,後者使用目標詞預測視窗中的每個語境詞出現的概率。語義上相似或相關的詞,得到的表示向量也相近,這樣的特性使得Word2Vec獲得巨大成功。

後來,Mikolov等人又延續Word2Vec的思想,提出Doc2Vec,核心思想是將文件向量當作“語境”,用來預測文件中的詞。Doc2Vec演算法可以得到詞向量和文件向量。如圖4所示,兩個演算法的思想基本一致。

圖4  Word2Vec和Doc2Vec比較

其實,也可以通過最簡單的合成方式實現從詞向量到句子向量的表示,fastText就是這樣簡單有效的模型,如圖5所示,輸入層是詞向量,然後通過把句子裡的詞向量平均就得到句子的表示,最後送到分類器中。不過,輸入端會另外補充一些n-gram資訊來捕捉區域性序列資訊。fastText是線性分類模型,實驗表明在諸多“簡單”文字分類任務中表現出色,且具備訓練速度非常快的優點,所以可以成為很好的Baseline。

圖5  fastText模型

基於RNN/CNN的模型

自然語言中,詞構成句子,句子構成文件,有很多工作嘗試合理表示詞向量同時,也有很多模型被提出來建模句子和文件,其中最常見的網路結構便是LSTM和CNN。

2014年Kim提出基於卷積神經網路的文字分類,如圖6所示,輸入是句子對應的詞向量矩陣,經過一層卷積層和一層Max Pooling層,得到句子的表示,送入到全連線層,最後softmax輸出。卷積神經網路擅長提取重要的區域性特徵,在文字分類中,可以理解為不同大小的卷積核在提取不同n-gram特徵。一般認為,卷積神經網路無法考慮長距離的依賴資訊,且沒有考慮詞序資訊,在有限的視窗下提取句子特徵,會損失一些語義資訊。

圖6 CNN網路用於文字分類

針對CNN的不足之處,LSTM和GRU等迴圈神經網路因為擅長捕捉長距離資訊,所以也被大家嘗試用來文字表示。如圖7所示,圖中利用雙向LSTM來建模輸入句子,輸入是句子的詞向量,輸入至BiLSTM中進行序列建模。最後句子表示,可以嘗試兩種方法,其一,選擇最後的hidden state用來表示句子;其二,所有hidden state的平均用於表示句子。

圖7 BiLSTM用於文字表示

剛才分析到,CNN擅長提取區域性特徵,而LSTM擅長捕捉長距離資訊,不難想到,有人嘗試結合兩種網路的優點,提出RCNN用於文字建模。如圖8所示,整個網路結構主要有兩部分組成,迴圈結構和Max Pooling。迴圈結構,可以理解為,在已有詞向量為輸入的基礎上,通過雙向RNN網路學習每一個詞的左、右上下文資訊,接著將三部分(left context, word embedding, right context)表示向量拼接起來,作為句子中每一個詞的表示,然後使用變換得到中間語義表示;Max Pooling層,採用element-wise的max pooling方式,可以從變長的輸入中得到固定的句子表示。

圖8  RCNN用於文字表示

基於注意力機制的模型

注意力被認為是一種有效選擇資訊的方式,可以過濾掉大量與任務無關的資訊,最先在機器翻譯任務中被提出,解決seq2seq中encoder過程把源序列對映成固定大小的向量存在“損失”資訊的情況。緊接著,Attention被推廣到各種NLP任務中,文字表示任務當然不例外。這裡,主要介紹兩種Attention的形式,Hierarchical Attention 和 Self-Attention。

Hierarchical Attention網路結構,如圖9所示,該模型基於兩個基本假設,其一,文件是分層結構的,詞構成句子,句子構成文件;其二,文件中不同詞或句子提供的資訊量不一樣的,該模型適合用來表示包含多個句子的文件的表示問題。模型主要由word encoder和sentence encoder,以及相應的attention組成,word encoder部分用於得到句子的表示,該層的輸入為句子的詞向量,經過雙向GRU後得到中間表示,word attention部分對中間表示按attention值進行加權得到此句最終的句子表示;sentence encoder部分用於得到文件的表示,使用word encoder部分得到文件中所有句子的表示後,將此作為sentence encoder部分的輸入,類比word encoder的計算,可以最終得到文件的表示。簡言之,利用Hierarchical Attention結構,一層詞輸入得到句子表示,一層句子輸入得到文件表示。即使文件長度較長,但是在注意力的作用下,依然可以較好的捕捉到有效的特徵資訊,忽略無意義的輸入。

圖9  Hierarchical Attention

Self-Attention網路結構,如圖10所示,大多數神經網路模型將文字表示成一維的向量,但是此模型通過二維矩陣來表示句子,包括兩部分,一部分是雙向的LSTM,另一部分是自注意力機制,自注意力機制實現對雙向LSTM中所有的隱藏狀態以不同權重的方式線形組合,每一次組合獲得句子的一部分表示,多次組合便得到矩陣表示(圖中矩陣M)。

圖10  Self-Attention

相關文章