系統學習NLP(十四)--句子向量與篇章向量

Eason.wxd發表於2019-03-11

轉自:https://blog.csdn.net/qq_35082030/article/details/72582103
Doc2Vec 或者叫做 paragraph2vec, sentence embeddings,是一種非監督式演算法,可以獲得 sentences/paragraphs/documents 的向量表達,是 word2vec 的擴充。

摘要

許多機器翻譯的演算法都需要使用固定長度的詞向量特徵。在到達文字層面時,我們最常用的一個固定長度的特徵是詞袋模型。儘管他們很流行,但是詞袋模型有兩大缺點:1、失去了詞序特徵;2、忽略了語義特徵,例如,powerful與strong和Paris距離都是非常遠的。在本文中,我們提出了一個段落向量,它是一個無監督演算法,從變長的文字(句子、段落、文章)中學習到固定長度的詞向量特徵。我們的演算法使用一個密集向量來表示每個文字,而這個是通過預測詞出現在文字來訓練的。它的結構給了我們可以克服詞袋模型缺點的可能。實驗結果顯示,段落向量優於詞袋模型,也同樣優於其他文字向量表示。最終我們在幾個文字分類和情感分析任務中取得了最優值。

1 引言

文字分類和聚類在許多應用中扮演重要作用,例如文字檢索、網頁搜尋和垃圾郵件過濾。而這些應用的核心都是像邏輯斯蒂迴歸或者K-means聚類這樣的機器學習演算法。這些演算法通常需要使用一個定長的向量來表示輸入文字。由於詞袋模型和n-graims模型的簡單、有效和經常去的不錯的準確度,因此他們是最常用文字定長向量表達方式。

但是,詞袋模型有許多缺點。詞序特徵會丟失,因此不同的句子,如果使用相同的單詞,可能得到的是相同的向量表達。即使是n-gram模型,它也只是在較短的上下文中考慮詞序,這就受到了稀疏資料和高維的約束。詞袋模型和n-gram模型對於詞義都是不敏感的,它們更多的會考慮詞與詞之間的距離。就像摘要中說的那樣,powerful與strong和Paris距離都是非常遠的,事實上,我們知道,powerful與strong更近。

本文中,我們提出了段落向量,一種無監督框架來學習為每篇文字分配向量。文字可以是變長的,無論是句子還是篇章。之所以叫做段落向量是為了強調這個方法可以應用到變長文字中,無論是句子、段落還是更大的篇章單元。

在我們的模型中,向量表達是由在段落中預測有用的詞來訓練的。更確切來講,我們通過幾個從段落中獲取的詞向量來連線成段落向量,並且對在給出的上下文中預測接下來的詞。詞向量和段落向量都是基於SGD和BP演算法的。不同的是,詞向量是共享的,而段落向量是段落間相互獨立的。在預測時,段落向量通過固定的詞向量來進行預測,並且訓練一個新的段落向量直到收斂。

我們的技術主要受到了最近使用神經網路學習詞向量表示的工作的激勵。在他們的前期工作中,每一個詞都會由一個向量表示,而這個向量來源於上下文中其他詞向量的拼接或者平均。例如,在2006年的Bengio的神經網路語言模型中,它使用前幾個詞向量的拼接來構建神經網路的輸入,並且嘗試去預測接下來的詞。其結果就是,當模型訓練完成後,詞向量被對映到了一個向量空間,在這個向量空間中,具有相似語義的詞會有相似的向量表示。

接著這些成功的技術,研究者們又試圖把模型擴充套件以從詞層面到達短語級或者句子級層面。例如,一個簡單的方法就是使用文字的所有詞向量加權平均。一個更復雜的方法是使用矩陣操作,根據句子的短語結構分析樹給出的順序組合詞向量。這兩種方法都有缺陷,第一種方法和詞袋模型一樣丟失了詞序特徵,第二種方法則只能在句子層面上做,因為它依賴於短語句法分析。

段落向量能夠組合序列化變長輸入的表達。不像之前的方法,它具有普適性而且可以應用於各種長度的文字:句子、段落和篇章。他不需要對特定任務進行詞權重的調整,它也不需要依賴於句法分析樹。在接下來的部分中,我們將會展現一些在基準資料集上的實驗,這些實驗充分展示了段落向量的優勢。例如,在情感分析中,我們取得了最優的結果,比之前複雜的方法還要減少16%的錯誤率。在文字分類任務中,我們方法明顯打敗了詞袋模型,取得了大約30%的效能提升。

2演算法

我們從之前學習詞向量的方法開始講起。這些方法都對我們的段落向量方法有促進作用。

2.1 詞向量表示學習方法

這一部分,我們介紹詞向量的相關概念。一個著名的詞向量學習框架如圖1所示,其任務就是通過給出的上下文中的詞可以預測當前詞的向量。
這裡寫圖片描述
在這個框架中,每個詞都會被對映成一個獨一無二的詞向量,通過一個一維矩陣W(譯者注:onehot編碼),這一列表示著這個詞在詞典中的位置。通過求和或者求平均的方法來獲得矩陣,這個矩陣被用來預測下一個詞的詞向量的特徵。

更正式的,給定一串單詞w1,w2,w3,…wT,詞向量模型的目標就是使得平均似然估計最大:

預測任務通常是使用一個多類分類器,例如Softmax函式。這裡,我們使用:
這裡寫圖片描述
每一個yi都是一個非歸一化的似然概率,對應的是每一個輸出的詞i,其中y的計算如下:
這裡寫圖片描述
這裡,U,b是softmax的引數。h是由W中抽取出的詞向量的平均值或者求和構成。
這裡寫圖片描述
實際應用中,層次化的Softmax(Morin&Bengio,2005;Mnih &Hinton,2008;Mikolov et all,2013c)比普通Softmax更適合快速訓練。在我們的工作中,層次化的Softmax是一個二叉哈夫曼樹。短編碼被分配給了頻率高的詞。這時一個很好的加速訓練的小技巧因為這樣一般的詞都可以得到快速訓練。其程式碼和(Mikolov et all,2013c)用的是一樣的。

基於詞向量的神經網路模型大多使用SGD方法訓練,其梯度通過BP演算法獲得。這種模型在神經語言模型中非常常見。一個關於詞向量的訓練演算法的具體實現在這裡可以找到:code.google.com/p/word2vec/( Mikolov et all,2013a)

當訓練收斂後,擁有類似語義的單詞會被對映到向量空間裡相似的位置上。還是“powerful”和“strong”,他們離的更近。而且詞向量間的不同,也表示著不同的意思。這就意味著距離差距也有語義差距。King-man=Queen-woman。大概就是這意思,這個可以被用來學習一個線性矩陣來翻譯不同語言間的單詞和短語。

這些特性使得詞向量對於一些自然語言處理的任務特別適合,例如語言模型(Bengio et al 2006;Mikolov et all 2012),自然語言理解(Collobert & Weston 2008;Zhila et all,2013),統計機器翻譯(Mikolov et all 2013b;Zou et al.,2013),影象理解(Frome et al,2013)和相關性抽取(Socher et al,2013a)。

2.2 段落向量

我們的學習段落向量的方法是受到了學習詞向量的啟發。這個啟發就是,我們使用詞向量來預測句子中下一個單詞。所以,儘管這些詞向量初始化時是隨機的,但是他們最終還是捕獲了語義資訊作為預測結果的副產品。我們將使用同樣的這種方法應用到我們的段落向量中。段落向量也被用來在段落裡給出上下文預測下一個詞。

在我們的段落向量框架中(圖2),每一個段落也被對映成一個獨立的向量,使用一個矩陣D來表示。而每個單詞也被對映為一個獨立的向量,使用矩陣W來表示。段落向量和詞向量都被平均或者求和在一個上下文中用來預測下一個詞。在實驗中,我們使用平均的方法來組合這些向量。
這裡寫圖片描述
更重要的,模型中唯一改變的只有式1中的h,從只是D表示變成了D和W共同表示。

段落塊可以被看成是另一個詞,這個詞裡記載著當前上下文所缺失的資訊,或者說是段落的主題。正因為這個原因,我們經常叫這個模型為分散式記憶模型——段落向量(PV-DM)

上下文資訊是按照固定長度在段落上根據滑動視窗不斷取樣,段落向量會被該段落產生的所有上下文視窗所共同擁有,但是不跨越段落,也就是說,不同段落的段落向量是不同的。但是不同段落的詞向量是相同的。

段落向量和詞向量使用隨機梯度下降方法訓練,這個梯度使用的是BP演算法獲得。每一步的隨機梯度下降,都是從一個隨機段落裡取樣獲得固定長度的上下文,通過圖2種的網路計算梯度誤差並且使用該梯度更新模型中的引數。

在預測的時候,需要一個實現一個預測的步驟來進行計算一個新段落的段落向量,這也是通過梯度下降獲得。在這步驟中,模型的剩餘引數,包括詞向量W和Softmax的權重都是固定的。

假設這裡有N個段落在語料庫中,有M個詞在詞典裡,我們想去學習段落向量。因此每段都被對映到p維裡,每個詞被對映到q維裡,這樣,模型總共擁有N*p+M*q引數,包括softmax的引數。即使當N非常大時,這些引數也有可能非常大,但是整個訓練過程也是稀疏的並且高效的。

經過訓練後,段落向量就可以被用來作為段落的特徵。例如可以替代詞袋特徵等。我們可以把這個特徵直接用到機器學習演算法中,例如邏輯斯蒂迴歸、支援向量機或者K-means聚類。

總的來說,這個演算法有2個主要步驟:1)使用無監督方法訓練詞向量W(譯者注:和Word2vec一樣);2)推測階段獲取段落向量D。第三步驟是使用D在一個標準分類器上進行標籤預測,例如邏輯斯蒂分類或者支援向量機。

段落向量的優勢:段落向量的一個最主要的優勢在於它不需要標註的語料。

段落向量也克服了一些詞袋模型的缺點。首先它隱含了詞向量模型的最重要的特點,詞的語義。也就是說,相似的語義的詞會有相似的位置(譯者注:意思是,相似的語義的段落也有相似的位置)。第二個優勢就是它考慮了詞序,就像在較短的上下文中n-gram模型所做的那樣。這是非常重要的,因為n-gram模型提供了大量的段落資訊,包括詞序。我們的模型就有可能優於n-gram模型,因為n-gram模型可能建立出一個高維的但卻稀疏的矩陣。

2.3無詞序的段落向量:分佈的詞袋模型

以上的方法都是考慮了在一個文字視窗中使用詞向量和段落向量的連結來預測下一個單詞。另一個方法是在輸入中忽略上下文單詞,但是在輸出中強制模型對段落中隨機取樣的單詞進行預測。事實上,SGD的每一次迭代中,我們都會從一個文字視窗中取樣,然後從這個文字視窗中隨機取樣一個單詞並且構建一個基於段落向量的分類任務。這項技術見圖三。我們叫做這種方法為PV-DBOW,與PV-DM相對應。

除了概念上簡單外,這個模型也儲存更少的資料。我們只需要儲存Softmax權重,而之前的模型需要儲存Softmax權重和詞向量。這個模型更像是詞向量模型中的Skip-gram模型。
這裡寫圖片描述
在我們的試驗中,每個段落向量由2部分組成:一個是通過標準段落向量(PV-DM)另一個是(PV-DBOW)。PV-DM通常可以取得很好的成績在很多工上,但是如果和PV-DBOW搭配的話,能對多個系統都取得更連續的好的成績,因此我們強烈推薦。

3實驗

我們做了實驗來更好的理解段落向量的表現。為此,我們在兩個文字理解問題上做了基準的段落向量:情感分析和資訊檢索。

對於情感分析任務,我們使用了2個資料集史丹佛情感分析樹庫資料集(Socher ,2013b)和IMDB資料集(Mass ,2011)。在這兩個資料集中的文字長度是非常不同的,Socher每個例子都是一個單獨的句子,而Mass的資料集中的例子都是好幾個句子連在一起的。

我們也使用了我們的方法在資訊檢索的任務上,這個任務是當給出一個查詢時,判斷一個文件是否應當被檢索到。

3.1 史丹佛情感樹庫資料集上的情感分析

資料集:這個資料集首先被(Pang & Lee ,2005)提出來,並且被(Socher et all. 2013c)擴充套件作為情感分析的基準系統。它包含了11855個從爛番茄上的影視評論的句子。

這個資料集包涵一下集合:8544個訓練集,2210個測試集,1101個驗證集。
每一個句子都有一個標籤,這個標籤從0-1分別表示最消極到最積極。這些標籤都是Amazon Mechanical Turk上由人工標記得到的。

這個資料集附帶有每個句子的具體標籤以及子句法結構樹,前面兩個做了很多工作(譯者注:此處省略),最終這個資料集可以在http://nlp.Stanford.edu/sentiment/獲取。

任務和基準線:在(Socher et all.2013)文章中,任務被分成了2個基準系統,一個細準系統使用5分類,一個基準系統分為2分類。而且既可以對整個句子進行標註也可以對所有的短語進行標註。這裡使用的是對整個句子標註。

(Socher et al. 2013b)使用和好幾種方法在這個資料及上,並且發現遞迴神經張量網路要比詞袋模型好很多。這可以被認為是影評經常非常短並且結構在判斷是否是積極還是消極上具有重要作用,就像在很小的資料集上給出單詞後。

實驗草案:
我們按照(Socher et al. 2013b)的方法實現了一下。為了保證我們能夠充分使用已提供的資料集,在我們的模型中,我們把每個短語都看成是一個獨立的句子,因此我們是在所有的短語中訓練的。

在學習完短語和句子的向量表達後,我們使用這些來學習一個影評打分的預測器。

在測試的時候,我們固定每個詞的向量表達並且學習這個句子的向量表達,使用的是梯度下降方法。一旦句子向量表達學習完成後,我們就使用它用一個邏輯斯蒂迴歸來預測影評打分。

在我們的實驗中,我們使用驗證集交叉驗證了視窗的大小,最優的視窗大小為8.因此向量表達的分類器有兩個向量組成,一個是PV-DBOW,另一個是PV-DM。在這兩個中,所有的詞和段落向量都是400維的。我們為了預測第8個詞,我們使用的是7個詞向量和一個段落向量。而特殊符號(。?!)等,我們也視作是一個普通的字元。如果這個句子小於9個詞,我們使用NULL來填充。

結果:
我們把不同方法的錯誤率都放在了表1種。首先應當注意的就是傳統的詞袋模型(貝葉斯、SVM、二元貝葉斯)的表現非常差。這是因為詞袋模型沒有考慮到句子的組成,例如詞序。因此有很多複雜的語言現象不能夠被識別,例如諷刺。這個結果也顯示遞迴神經網路模型這種更先進的方法,使用的句法分析而考慮了句子組成,因此表現的更好。
這裡寫圖片描述
但是我們的方法由於以上所有基準系統,包括遞迴神經網路。而且我們也不需要句法分析。在粗顆粒度上我們降低了2.4%的錯誤率,相比較最好的基準系統提升了16%。

3.2 真正的段落向量:在IMDB資料集上的情感分析

之前都是一個句子,下面是多個句子,即使是(Socher,2013b)使用的RNTN,也是需要依靠句法分析的。我們段落是沒有句法分析的,但是我們仍然可以做,因為我們不需要句法分析。(譯者注:這個實驗可以見http://blog.csdn.net/lenbow/article/details/52120230,但是效果沒有論文的報告上的好)實驗表明,我們的方法優於其他方法。

資料集:這裡同樣的選取100000條來自IMDB的影評,這個工作在(Maas 2011)裡講過了。主要是25000個已標註的訓練例項、25000個已標註的測試集例項和50000個未標註的例項。總共有2種標籤:積極和消極。這些標籤在訓練集和測試集裡是平均分佈的。資料集可以從http://ai.Stanford.edu/amaas/data/sentiment/index.html獲得。

實驗草案;
我們使用了75000個訓練樣例(25000標註的50000未標註的)。然後獲取已標註的例項的段落向量並把它們放到一個含有一層一藏層50個單元的神經網路並且使用一個邏輯斯蒂分類器來學習預測分類器。

在測試時,給出一個實力句子,我們固定好其他的網路並且使用梯度下降方法學習測試樣例中的段落向量。一旦向量學習完畢後,我們通過給神經網路輸入這些向量來預測這些評論的情感。

我們段落向量模型的超引數使用的和之前的那個任務一樣,只是視窗大小變成了10個詞。其他都沒變。

結果:實驗結果如表2所示。從表中我們可以看出,詞袋模型在長句中的表現很非常好,但是很難有很大的提升知道使用了詞向量。最顯著的改進是在2012年的(Dahl et al. 2012)的工作中,他們在詞袋模型中使用了一種限制型波茲曼機。組合了這兩個模型也只改進了1.5%的錯誤率。

另一個重要改進工作來源於(Wang & Manning,2012).在他們嘗試的方法中,NBSVM的2元特徵取得了最好成績並且提升了2%的錯誤率。
這裡寫圖片描述
在本文中,我們提到的方法顯著的低於10%的錯誤率,達到了7.42%,比最好的還低了1.3%,如果算相對改進的話,則改進了15%。

3.3使用段落向量進行資訊抽取

我們開始把注意力轉移到了另一個任務上,在這個任務上,我們使用定長的段落向量表達。其主要任務就是給出最熱門的1000000查詢,然後每個查詢選取前10個結果。然後每次使用3個段落,這三個段落中,有2個是來自同一查詢,另一個是隨機選取的。目的是能預測出哪兩個段落來自同一查詢。判斷的方法為段落向量化並測量之間的距離,距離近的為來自同一個查詢。(譯者注:這裡我們不詳細舉例,這是Google的特權)
這裡寫圖片描述

4 相關工作

這裡主要介紹了從向量表達到神經網路語言模型,以及從詞袋模型到詞向量表達,並且到達短語向量表達和段落向量表達的整個過程。具體可見原文。

5 結論

我們描述了一種無監督學習演算法來從變長的文字(句子、段落)中學習到向量表達,我們稱為段落向量。這些向量表達是根據上下文來預測段落中取樣獲得的單詞。

我們在幾個文字分類任務上都做了實驗,例如在史丹佛樹庫和IMDB資料集上的情感分析任務。在這些任務中,這種方法都是最優的。這些好的表現也表明了段落向量可以對段落的語義有表徵能力。事實上,段落向量確實可以克服很多詞袋模型的缺點。

儘管現在的工作都是聚焦於文字表達,但我們的方法是可以被應用於序列化資料的表達。在無文字領域,句法分析是沒有提供的,我們認為段落向量是可以取代詞袋模型和n-gram模型的。 補充:

篇章表示

如果處理的物件是比句子更長的文字序列(比如篇章),為了降低模型複雜度,一般採用層次化的方法,先得到句子編碼,然後以句子編碼為輸入,進一步得到篇章的表示。具體的層次化可以採用以下幾種方法:
(1)層次化的卷積神經網路
即用卷積神經網路對每個句子進行建模,然後以句子為單位再進行一次卷積和池化操作,得到篇章表示。
(2)層次化的迴圈神經網路
即用迴圈神經網路對每個句子進行建模,然後再用一個迴圈神經網路建模以句子為單位的序列,得到篇章表示。
(3)混合模型
先用迴圈神經網路對每個句子進行建模,然後以句子為單位再進行一次卷積和池化操作,得到篇章表示。在上述模型中,迴圈神經網路因為非常適合處理文字序列,因此被廣泛應用在很多自然語言處理任務上。

相關文章