詞向量因何存在:一段往電腦輸入文字的歷史
- 2020 年 8 月 11 日
- AI
向電腦輸入文字,是整個自然語言處理(NLP)領域的宏大故事的一部分,而 NLP 則是人工智慧的重要分支研究領域。
NLP中,最細粒度的部分就是詞語,詞語組成句子,句子再組成段落、篇章、文檔。而語言作為人類獨有的表達方式,如果要輸入到電腦中,則要將語言中的一個個詞語轉換成數值形式,這就需要用到詞向量,或者說詞嵌入的方法。
因而,要想研究好NLP ,勢必要對詞向量有透徹的理解。
讀罷此文,你將對詞向量有一個一般性的認識:它們為何而存在,它們解決了什麼問題,它們源自何處,它們隨著時間如何變化?以及,目前關於詞向量有哪些有待解決的問題?
本文的關鍵論點包括:
-
即使是在最基本的單詞層面上,在可計算的條件下表徵自然語言文本仍然是個難題。
-
不同單詞的意義或多或少有其相似之處。人們使用連續的向量有效地獲取這種性質,大規模的文本語料讓我們可以自動地發掘許多層面上的詞義相似性。通常,預料詞典中的每個單詞都有一個但以固定的表徵向量。
-
單詞的意義可以隨著其出現的上下文不同而發生很大的變化。最新的研究進展使用 NLP 和機器學習(ML)領域的常用工具識別並學習了這種變化。這些方法在諸多對比基準上展示出了巨大的性能提升。
1、早期方法:離散化表徵
在電腦中,表徵一段文本的最簡單的形式是一個字元序列(根據編碼的不同,存儲一個字元可能需要一個位元組或多個位元組)。一個詞形可以被表徵為一個字元串(字元的有序列表),但是比較兩個字元串是否相同的計算成本卻很高。
在之前,單詞往往都會被整數化處理。這樣一來,每個詞形都會被賦予一個唯一的(或多或少任意的)非負整數值。這樣做的優點是每個詞形都以相同大小的空間被存儲下來,基於數組的數據結構可以被用來通過詞形索引其它的資訊(如單詞的字元串,對屬於該詞形的詞例進行技術,或者包含單詞潛在語義的細節資訊的更豐富的數據結構)。當遇到新的詞形時,辭彙表就會被不斷地擴展(直到單詞數達到整型數據類型的上限,對於 4 位元組無符號整數來說,這一上限超過了 40 億)。當然,我們可以很快地測試兩個整數是否相同。
整數本身並不具有任何意義。為整數分配意義的過程可以是隨機的,也可以是按照字母順序進行的,或者是或根據詞例在生成單詞表的參考文本語料中出現的順序進行(也就是說,第一個出現的詞例的詞形被賦予整數 0;如果第二個出現的詞例與第一個不同,則將整數 1 賦予它對應的詞形)。具有相關語義的兩個詞形將會被賦予具有一定「距離」的整數,兩個在分配的空間中「相近」的詞形彼此之間可能沒有任何關係。
使用整數只是遵循當下流行的程式語言中可用的數據類型的一種方便的表示方法。例如,在 Lisp 語言中, 「gensym」也能達到同樣的目的(儘管效率可能低一些)。因此,我們將基於整數的詞形表徵稱為「離散化表徵」。
考慮到 NLP 程式大多都是使用監督式機器學習構建的,我們認為「單詞或多或少存在相似性」的思路是十分重要的。
2、以向量形式存儲詞
為了解釋 NLP 從業者為什麼不再通過離散化的方式處理詞形,很有必要思考單詞是如何在 NLP 程式中被使用的。下面是一些示例:
觀測給定文檔中的一個詞例,以此為證據(evidence)預測文檔的類別。
例如,在一段電影影評中出現的「delightful」單詞,說明影評人可能很喜歡這部電影,並給予它一個正面評價。
觀測給定文檔中的一個詞例,以此為證據在句子翻譯中預測一個詞例。例如,在英語句子中出現單詞「cucumber」說明在法語翻譯中可能出現單詞「concombre」。
相反,給定證據的全部權重,在給定的上下文中,選擇一個詞形並輸出一個它的詞例。
在以上各種情況下,對詞形進行離散化處理有一個嚴重的缺點:有關如何將一個特定的詞用作證據,或者是否生成一個輸出詞例的資訊,不能在具有相似特性的單詞之間共享。舉個簡單的例子,請考慮填補下面句子中的空缺:
「S.will eat anything, but V. hates _」
根據你對世界的先驗知識,你可能會傾向於很有把握地填上詞形為「豌豆」(pears)、「豆芽菜」(sprouts)、「雞肉」(chicken)的詞例,或其它代表食物的複數名詞。這樣的詞形共有一些性質(和其它表示食物的單詞一起),我們希望使用這些單詞的模型能夠用到這樣的資訊。兩個不同的單詞可能或多或少具有一些相似性。
考慮到 NLP 程式大多都是使用監督式機器學習構建的,我們認為「單詞或多或少具有一些相似性」的思路是十分重要的。在這裡,監督式機器學習指的是我們擁有代表一個任務的輸入和輸出的示例(二者中至少有一個是由單片語成的),並且有一套根據這些「輸入-輸出」對泛化的機制。理想狀況下,這樣的機制應該能夠利用相似性:它發現的關於某個單詞的性質可以遷移到相似的單詞上。
在本文中,探討兩種將相似性資訊引入程式的方法(理性主義和經驗主義)。
-
理性主義告訴我們,人類(尤其是受過人類語言科學方面訓練的人)會知道這些相似性資訊,我們可以設計數據結構顯式地對其進行編碼,讓我們的程式在需要時訪問這些資訊。一個代表性的工作是 WordNet,它使用 13 個詞法資料庫存儲單詞及其之間的關係(例如,同義:兩個單詞意味著同樣的事情;上下位關係:一個詞的意思是另一個詞更加具象化的表現)。WordNet 也顯式地捕獲了一詞多義的現象(例如,風扇:吹動空氣的機器,有時也指「粉絲」)。句子結構(句法)的語言學理論提供了另一種方法來思考名詞、動詞這種形式的詞的相似性。
-
經驗主義告訴我們,針對 NLP 應用,我們可以使用一組獨立的程式收集並組織資訊。隨著網路上的文本數據越來越多,這種方式逐漸佔據了主導地位。被用於從語料庫中提取資訊的程式已經經歷了幾個階段的發展(從基於技術的統計,到使用更先進的統計方法建模,再到越來越強大的機器學習工具)。
基於以上兩種思路,我們都會想到通過向量而不是整數來表示詞形。此時,我們需要確定向量的維度,並賦予不同的維度不同的目的。例如:
為每個詞形賦予一個維度,該維度上賦值為 1(而其它所有的詞形對應的維度上的值為 0)。這種方式本質上相當於對單詞進行整數化處理,單詞被表徵為一個獨熱(one-hot)編碼。
對於屬於已知類型的詞形(例如,一周的七天),我們可以使用給定了二進位值的維度。
對於具有相同詞根的變體詞形,我們同樣可以使用一個維度將其歸於同一類。例如,「know」、「known」、「knew」、「knows」的某一個維度上都被賦值為 1,而其它與 know 詞根不同的單詞則在該維度上被賦值為 0。
更寬泛地說,我們可以使用表面的屬性將看起來相似的詞形綁定在一起:例如大小寫的模式,長度,出現某個數字。
如果詞形的存在表示大小關係的意義,我們可能會分配一些維度來捕獲這樣的大小資訊。
在 NLP 領域中,有很多通過賦予向量某些維度,從而表徵詞形(或多單詞序列)的例子。這些維度被稱為「特徵」,它們可以由專家設計,也可以通過自動化的演算法得到。
3、將詞表徵為分散式的向量
在語言學中,一個重要的思想是:可以通過相似的方式使用的單詞(或表達)趨向於擁有相關的語義。在一個大型語料庫中,我們可以收集有關詞形「w」被使用的方式的資訊(例如,統計它子其它詞形附近出現的次數)。當我們研究語料庫中存在 w 的上下文(附近的單詞或句子)的完整分布時,我們採取了一種詞義的分散式視角。
「聚類」就是基於這種思想生成特徵的一種成功的方法。例如,Brown 等人提出的聚類演算法根據語料庫中出現的上下文自動地將單片語織成一些聚類簇。傾向於出現在相同的鄰居上下文的單詞會被劃分到同一個簇中。如圖 1 所示這種方法具有驚人的可解釋性和實用性,我們還可以使用任意給定的語料庫重新構建它,包含所有觀測到的單詞。
圖 1:Brown 聚類示意圖。該結果是根據 56M 條 tweet 生成的,本圖中給出了以 00110 二進位串為前綴的簇的層次結構,以及簇中 10 個出現頻率最高的單詞。樹中的中間節點對應於包含後繼節點中所有單詞的簇。
另一類方法在一開始需要創建單詞向量,其中每個維度對應於詞性在某些上下文中出現的頻率。例如,一個維度可能對應於「the」,並且包含在一個詞例「the」附近的一個小的窗口中某單詞出現的次數。該向量可能包括單詞左側、右側,以及不同距離和長度的上下文模式。這樣創建的單詞向量可能比辭彙表的還要行很多倍。我們可以利用線性代數的降維方法,將這些向量壓縮地更短,從而減少維度之間的冗餘。
圖 2:計算單詞向量的方法示意圖。
降維之後的向量有以下優點:首先,NLP 程式設計師可以根據程式的需要選擇合適的維度。更緊湊的向量計算效率更高,也可能由於特定語料庫的雜訊在壓縮過程中消失而受益。然而,壓縮的代價則是犧牲了一部分原始資訊。由於壓縮後的向量中單獨的維度是很難被解釋的,我們可以使用一些常見的演算法找到單詞在向量空間中的最近鄰,它們往往是具有相關語義的單詞。
實際上,這些觀測結果催生了「向量空間語義」的思想,我們可以對單詞向量進行算術運算,從而理解學習到的單詞「意義」。一個著名的例子是:
降維後的向量的缺點在於:獨立的維度並不是可解釋的特徵,不能夠直接被映射回構建單詞意義的模組。單詞的意義是分布在整個向量上的;因此,這些向量有時被稱為分布的表徵。
隨著語料庫規模不短增長,可伸縮性成為了一個重大的挑戰。所有詞向量演算法底層的思想是:詞形向量的每個維度上的值是一個有待優化的參數。我們通過優化這些參數,最佳地擬合觀測到的數據中的單詞模式。由於我們將這些參數視為連續的值,而且擬合數據的概念可以作為光滑、連續的目標函數來操作,因此可以通過基於梯度下降的迭代式演算法完成優化。
研究人員對獲取分散式詞向量的方法進行了大量的探索。接下來,我們將列舉出一些有趣的想法:
如圖 3 所示,我們首先將每個輸入的詞例映射到其向量上,然後將詞向量輸入到神經網路模型中,該神經網路執行類似於翻譯的任務。向量可以預先給定(或使用上述方法根據一個語料庫預訓練得到),也可以作為神經網路模型的參數,根據特定任務進行調整。「調優」(fine-tuning)是指通過預訓練初始化向量,然後通過特定任務的學習演算法來調整他們。我們也可以隨機初始化詞向量,從頭開始學習。
圖 3:一個簡單的神經網路示意圖。神經網路是一種將向量映射到向量的函數。例如,將二維輸入映射到二維輸出上的函數:
我們可以使用 WordNet 這種專家構建的數據結構作為額外的輸入來創建詞向量。「retrofitting」方法首先從語料庫中提取出詞向量,然後試圖自動地對其進行調整,使得在 WordNet 中那個相關的詞形在向量空間中更接近。
我們可以使用雙語詞典,將兩種語言狀態下的詞向量「對齊」到同一個向量空間中。這樣一來,例如英語詞形「cucumber」和法語詞形「concombre」的向量之間的歐氏距離就很小了。
根據部分(或全部的)字元序列計算詞向量。這種方法傾向於使用神經網路將任意長度的序列映射為固定長度的向量。這樣做有兩個有趣的作用:在具有複雜單詞構造系統的語言中,具有相同底層詞根的變體會擁有相似的詞向量;同一單詞的不同拼寫方式將有詳細的詞向量。
4、上下文相關詞向量
首先,我們要區分詞例和詞形。一直以來,在我們的 NLP 程式中,我們都假設每個詞形都會使用一個固定的數據對象(一開始是整數,後來又發明了詞向量)來表徵。這樣做是很方便,但是它又對語言做出了一些不符合現實情況的假設。最重要的一點是,單詞在不同的上下文中應該有不同的意思。
在粗粒度的級別上,專家們在構建 WordNet 時捕獲了這種特性。例如,在 WordNet 中「get」被映射到了 30 多種不同的含義上。然而,應該給各個單詞分配多少種詞義(或者確定詞義之間的邊界)一直都是一個難以取得共識的問題。詞義也有可能是隨語境動態變化的。
事實上,在很多基於神經網路的 NLP 程式中,首先要做的就是將每個單詞詞例所屬的詞形向量輸入到一個函數中,然後基於該詞例附近的上下文對這個向量進行變換。變換過程如圖 4、圖 5 所示。
圖 4:圖 2 中計算的 3-單詞向量之間的關係大致的可視化結果。
圖 5:圖 2 和圖 4 中的詞例「astronomers」、「bodies」、「objects」的上下文相關詞向量的假想的可視化結果。
根據相似性的基本概念,我們期望相似的單詞彼此之間能夠很好地相互替換。有時僅僅根據詞形是很難確定相似性的,而當我們考慮上下文語境時,這個問題就會簡單很多。
在大型語料庫上預訓練得到的 ELMo(基於語言模型的嵌入),以詞例向量(針對上下文中的單詞的向量,上下文相關向量)的形式帶來了巨大的進步。EMLo 背後有兩個主要的思想:
如果每個詞例都有自己的向量,那麼這個向量應該依賴於附近單片語成的任意長度的上下文。為了獲得「上下文向量」,我們首先得到詞形向量,然後將它們傳遞給一個神經網路,該神經網路可以將任意長度的左右上下文詞向量序列轉換為一個固定長度的向量。詞形向量本質上是查找表,與之不同的是,上下文相關詞向量是由代表單詞類型的向量和將每個單詞置於上下文中的神經網路參數構建的。ELMo 訓練一個神經網路處理左側的上下文(往回觀測到出現某詞例的句子的開頭),另一個神經網路處理右側的上下文(直到句子的結尾)。原則上說,ELMo 也可能處理更長的上下文。
回想一下,估計單詞向量需要通過求解優化問題來擬合數據(在這裡是語料庫)。語言建模是 NLP 領域中一個長期存在的數據擬合問題,它指的是根據歷史單詞序列預測接下來的單詞。已經被人們所使用的許多詞形向量演算法都是基於固定大小的上下文工作的,這些上下文是從語料庫中詞形的所有實例中收集的。ELMo 涉及的語料範圍更廣,它使用任意長度的歷史單詞序列,並直接引入了對應情況下最有效的語言模型(基於循環神經網路)。儘管循環神經網路已經在 NLP 領域中被廣泛使用,但是將它們訓練為語言模型,然後使用它們為每個詞例提供的上下文向量作為與訓練的詞例向量還是很新穎的。
這樣的研究進展為什麼令人振奮呢?上下文相關的詞向量是否能完全解決歧義詞帶來的挑戰仍然有待研究。人們往往會在對比基準測試中使用客觀的性能評價指標測試 NLP 領域新的思路。研究人員發現,ELMo 在以下領域中極大提升了 NLP 程式的性能:
-
給定一段文字,回答有關其中內容的問題(在 SQuAD 對比基準上將誤差降低了 9%)。
-
標註動詞的語義論元(在 Ontonotes 語義角色標註對比基準上將誤差降低了 16%)。
-
解析那些指稱表達指代的是相同的實體(在 CoNLL 2003 對比基準上將誤差降低了 4%)。
在語言學中,一個重要的思想是:可以通過相似的方式使用的單詞(或表示)可能擁有相同的語義。
Howard 和 Ruder 介紹了一種簡單的方法「ULMFiT」,顯示了上下文相關向量在文本分類問題上的優勢。接著,基於 Transformer 的雙向編碼器表徵在學習方法上引入了一些創新之處,並利用更多的數據進行學習,在第一個任務中相較於 ELMo 進一步降低了 45% 的誤差,在第二個任務中降低了 7% 的誤差。
在 SWAG 對比基準測試中,Devlin 等人近期在常識推理任務中發現 ELMo 相對於上下文無關詞向量降低了 5% 的誤差,而 BERT 則相對於 EMLo 又降低了 66%。自此之後,一系列論文紛紛湧現了出來,如 GPT-2、RoBERTa、T5、XLM、XLNet。
在作者撰寫本文時,有許多關於不同方法的相對性能的開放性問題。對於不同的學習演算法,特別是神經網路架構的完整解釋超出了本文介紹的範圍,但是公平地說,上下文相關詞向量的可能學習器還沒有被充分探索。
5、不足之處
詞向量是有偏的。和許多工程產品一樣,電腦程式很可能反映出其製造者的觀點。根據數據構建的電腦程式將反映出數據(在本例中是語料庫)中的內容。如果文本語料庫表示了反應文化偏見的概念之間的聯繫,那麼這些聯繫會在詞向量和使用它們的任何系統中存在。
語言不僅僅是單詞。語言的有效理解和生成不僅僅局限於理解詞義,這還需要知道單詞如何被組合起來形成更加複雜的概念和命題。這只是 NLP 領域研究的冰山一角,關於處理自然語言語法、語義和語用的方法,以及我們如何將人類理解和生成語言的任務轉化為我們可以試著去設計演算法的任務,還有很多有待研究的問題。關於上下文相關詞向量,一個令人驚訝的發現是:當我們使用非常大的語料庫進行訓練時,它們更容易通過各種句法和語義解析來進行排歧。
研究 NLP 問題不應該只局限於某一點來看。雖然上述成果令人印象深刻,但是請記住,它們僅僅反映了在研究社區中出現的少數對比基準上的表現。這些對比基準在某種程度上是有爭議的。只有當我們客觀衡量方法的進展時,NLP 領域才能得以發展我們還需要再設計用於比較的對比基準和評價指標等方面取得突破。
6、接下來,我們該做什麼?
在接下來的一些年中,我們希望看到將各種上下文相關詞向量應用於新的問題所帶來的新發現。例如,構建一個系統可能涉及到複雜的協議,其中就需要在一系列數據集和任務的組合上執行調優和針對特定任務的訓練。
在擁有相對較少的監督訊號的條件下,如何提升 NLP 程式性能的潛力,也是一個有意思的方向。例如,類似於 EMLo 的方法可以提升低資源類型和語言條件下的 NLP 程式性能。同時,計算開銷較小的方法也有更廣闊的應用前景。
希望看到更多人嘗試使用語言學的術語來概括這些方法正在學習的東西(以及那些沒有學習的東西)。
關鍵論點:
請注意,我們有兩種認識「單詞」的角度:
一個「詞例」(word token)指的是在一段文本中觀測到的單詞(A word token is a word observed in a piece of text.)。對於一些語言來說,確定詞例的邊界是一個非常複雜的過程(而且這些語言的使用者可能並不贊同這種將文本劃分為一個個單詞的「正確」規則)。但是在英語環境下,我們傾向於使用空格和標點符號劃分單詞。在本文中,我們假設這種「分詞」(tokenization)問題已經被「解決」了。例如,通常情況下,本段的第一句可以被分詞為 13 個詞例(表示句子結束的句號也被當作獨立的詞例來對待)。
一個「詞形」(word type)指的是一個抽象意義上的有特定意義的單詞,而不是某個特定的示例。我們可以說,每個詞例「屬於」其詞形。在上面的分詞示例中,僅僅有 11 個詞形,因為「word」和「a」都有兩個示例共享同一個詞形。(如果我們不考慮大小寫之間的區別,那麼這裡就只有 10 個詞形,因為第一個單詞「A」和第五、第九個單詞有相同的詞形)。當我們對一個文本集合(也被成為語料庫)中出現的單詞進行計數時,我們就是在統計屬於相同詞形的詞例有多少個。 雷鋒網雷鋒網雷鋒網
Via //dl.acm.org/doi/pdf/10.1145/3347145?download=true