當前位置:
首頁 > 知識 > 自然語言處理基礎:上下文詞表徵入門解讀

自然語言處理基礎:上下文詞表徵入門解讀

選自arXiv

作者:Noah A. Smith

機器之心編譯

參與:Panda

自然語言處理的基礎涉及到對詞的表徵。華盛頓大學計算機科學與工程教授 Noah Smith(史諾亞)近日在 arXiv 發布了一篇入門介紹論文,由淺入深通俗易懂地介紹了自然語言處理中對詞的處理和表示方法。機器之心重點編譯介紹了其中涉及上下文的第 4 和 5 節,略過了第 2 和 3 節的基礎介紹。感興趣的讀者可參閱機器之心之前發布的系列文章《詞嵌入系列博客:一、二、三》。

論文:https://arxiv.org/abs/1902.06006

摘要:這篇介紹論文的目的是講述如何讓計算機處理語言的故事。這是自然語言處理(NLP)領域的一部分,而 NLP 又是人工智慧的一個分支領域。本文的目標是讓廣泛的受眾都能獲得對計算機編程的基本理解,但其中避免了詳細的數學描述,並且不會給出任何演算法。本文的重點也並非 NLP 的任何特定的應用,比如翻譯、問答或信息抽取。這裡給出的思想經過了許多研究者數十年的發展,所以引用的文獻並非詳盡無遺,但能為讀者指出一些在作者看來影響深遠的論文。在讀完本文之後,你應當會有對詞向量(也被稱為詞嵌入)的大致理解:它們為何存在、它們解決的是什麼問題、它們來自何處、它們如何隨時間變化、有關它們還有那些有待解決的問題。建議已經熟悉詞向量的讀者跳至第 5 節查看有關當前最新進展「上下文詞向量」的討論。

1 前提準備

我們有兩種談論詞的方式。

word token,這是一段文本形式的詞。在某些語言中,確認 word token 的邊界是一個複雜的過程(而且該語言的說話人可能不認同「正確的」規則),但在英語中,我們往往使用空格和標點符號來分割詞;在本文中,我們假設這已被「解決」。

word type,這是抽象的詞。每個 word token 據說都「屬於」自己的 type。當我們統計一個詞在一段文本(稱為語料庫)中的出現情況時,我們統計的是屬於同一 word type 的 token 的數量。

4 詞即分布向量:上下文即含義

語言學中有一個重要思想:能以類似方式使用的詞(表達)很可能具有相關的含義。在大型語料庫中,我們可以收集有關一種 word type w 的使用方式的信息,比如,通過統計它出現在每個其它詞旁邊的次數。當我們開始調查 w 所在的語料庫中上下文的完整分布時,我們就能從分布的角度看待詞義。

基於這一思想設計的一種自動推導特徵的一種很成功的方法是聚類;比如 Brown et al. (1992) 的聚類演算法能基於詞在語料庫中的上下文自動將片語織成不同的集群。經常出現在同樣的相鄰上下文(其它詞)中的詞會被劃入到同一個集群。然後這些集群會融合成更大的集群。所得到的層次結構儘管與 WordNet 中專家設計的數據結構絕不相同,但在可解釋性和實用性方面好得驚人。它還有可在任意給定語料庫上重建的優勢,而且每個被觀察的詞都會被包含進來。因此,可以為新聞文本或生物醫學文章或微博分別構建合適的詞聚類。

另一類方法首先是創建詞向量,其中每個維度對應於該 word type 出現在某個上下文中的頻率(Deerwester et al., 1990)。比如,一個維度可能對應於 the,包含該詞緊隨 the 之後出現的次數。其中可能包含在左側或右側以及不同的距離和長度的上下文模式。結果可能是一個長度超過詞庫大小許多倍的向量,其中每個維度都包含微量可能有用或沒用的信息。使用來自線性代數的方法(被恰當地稱為「降維」),這些向量可被壓縮成更短的向量,其中各維度間的冗餘可被摺疊起來。

這些降維後的向量有一些優勢。首先,為了滿足程序的需要,NLP 程序開發者可以對這些維度進行選擇。更緊湊的向量可能計算起來更為高效,而且壓縮所造成的信息損失也可能是有益的,因為特定語料的「雜訊」可能就會這樣消失。但也存在一些權衡;更長、壓縮更少的向量能保留分布向量中更多的原始信息。儘管壓縮向量的單個維度難以解讀,但我們可以使用眾所周知的演算法尋找一個詞在該向量空間中的最近鄰,而且已經發現這些詞往往在語義上是相關的。

(實際上,這些觀察催生了向量空間語義(vector space semantics)這一思想(參見 Turney and Pantel, 2010),即可將代數運算應用於這些詞向量以調查其中學習到了何種「含義」。舉一個著名的例子:「男人之於女人相當於國王之於女王」這個類比可以得到一個測試方法,即 v(男人) ? v(女人) = v(國王) ? v(女王)。人們設計了一些遵守這類性質的詞向量演算法。)

降維後的向量也有一個顯著的缺點,即單個維度不再是可解釋的特徵,不能映射回提供了該詞含義的直觀的構建模塊。該詞的含義分布在整個向量上;因此,這些向量有時也被稱為「分散式表徵」。

隨著語料庫的增長,可擴展性就成了一大難題,因為可觀察上下文的數量也會增長。所有詞向量演算法都基於這樣一個概念:每個 word type 的向量中每個維度中的值都是一個可優化的參數,再加上所有其它參數,可以最好地擬合數據中觀察到的詞模式。因為我們將這些參數看作是連續值,而且「擬合數據」的概念可以通過一個平滑的連續的目標函數來操作,所以可以使用基於梯度下降的迭代演算法來選擇這些參數值。使用機器學習領域常用的工具,研究者已經開發出了一些基於隨機優化的更快速的方法。word2vec 軟體包(Mikolov et al., 2013)即是一個廣為人知的演算法集。現在常見的模式是有大型語料庫和強大計算基礎設施的行業研究者會使用已經建立好的(往往成本很高)迭代方法構建詞向量,然後發布這些向量以供任何人使用。

在獲取分布詞向量方面,還有很多人在探索新的方法。這裡提一些有趣的想法:

當我們希望將神經網路用於 NLP 問題時,一個有用的做法是:首先將每個輸入的 word token 映射成它的向量,然後再將這些詞向量「饋送」到執行翻譯等任務的神經網路模型中。這些向量可以是事先固定的(即使用類似上述的方法在一個語料庫上進行過預訓練,通常來自其他人),或它們可被視為神經網路模型的參數,之後針對任務進行具體的調整(比如 Collobert et al., 2011)。微調(fine-tuning)是指先通過預訓練初始化詞向量,然後通過針對具體任務的學習演算法來調整。這些詞向量也可以初始化為隨機值,然後僅通過任務學習來進行評估,我們可以稱之為「從頭學習」。

使用專家構建的數據結構(如 WordNet)作為附加輸入來創建詞向量。一種被稱為 retrofitting 的方法首先是從一個語料庫提取詞向量,然後想辦法調整它們,使得 WordNet 中相關的 word type 在向量空間中更為接近((Faruqui et al., 2015)。

使用雙語詞典將兩種語言中的詞的向量在單個向量空間中「對齊」,使得對應的詞的向量有較小的歐幾里德距離,比如英語 word type「cucumber」和法語 word type「concombre」(Faruqui and Dyer, 2014)。通過構建一個能將所有英語向量重新定位到法語空間(或反過來)的函數,研究者希望能對齊所有的英語詞和法語詞,而不只是雙語詞典中的那些詞。

詞的向量的計算依據有一部分(或完全)是其字元序列(Ling et al., 2015)。這些方法往往是使用神經網路將任意長度的序列映射成固定長度的向量。這有兩個有趣的效果:(1)在具有複雜的構詞體系(形態學)的語言中,同一基本詞根的不同變體可能具有相似的向量,(2)同一詞的不同拼寫的變體會具有相似的向量。這類方法在社交媒體文本方面的應用是相當成功的,因為社交媒體文本中存在豐富的拼寫變體。比如,would 一詞在社交媒體消息中就有多種變體,它們會具有相似的基於字元的詞向量,因為它們具有類似的拼寫:would、wud、wld、wuld、wouldd、woud、wudd、whould、woudl、w0uld。

5 上下文詞向量

我們在一開始就對 word token 和 word type 進行了區分。一直以來,我們都假設在我們的 NLP 程序中,每個 word type 都會由一個固定的數據對象表示(先是整數,之後是向量)。這樣很方便,但這樣一些對語言的假設並不符合實際。最重要的是,很多詞在不同的語境/上下文中會具有不同的含義。專家們在設計 WordNet 時就較粗略地包含了這個現象,比如,get 映射了超過 30 種不同的含義(或領會的意思)。應該為不同的詞分配多少種含義,或一個含義與另一個含義的邊界如何確定?這些問題很難得到人們廣泛認同的一致性意見,何況詞義還可能流動轉變。實際上,在很多基於神經網路的 NLP 程序中,最先做的事情都是將每個 word token 的 type 向量傳遞給一個函數,該函數會基於這個 word token 臨近上下文的詞對其進行變換,給出這個詞向量的一個新版本(現在特定於在自身特有上下文中的 token)。在我們之前的示例句子中,be 的兩個實例就會有不同的向量,因為一個出現在 will 和 signed 之間,另一個則位於 we"ll 和 able 之間。

現在看來,通過獨立於上下文地表徵 word type 實際上會讓問題難度超過必需的程度。因為詞在不同的上下文中會具有不同的含義,我們需要 type 的表徵具備所有這些可能性(比如 get 的 30 個含義)。轉向 word token 向量能簡化這些事情,只需要求 word token 表徵僅獲取該詞在這個上下文中的含義即可。因為同樣的原因,一個 word type 所在的上下文集合能提供有關其含義的線索,一個特定的 token 上下文會提供有關其具體含義的線索。舉個例子,你可能不知道 blicket 一詞的含義,但如果我說「I ate a strawberry blicket for dessert」,你大概就能很好地猜測。

回到相似度的基本概念,我們可以預料:彼此相似的詞能夠很好地互相替代。比如,能夠很好替代 gin 的詞有哪些?只考慮 word type 的話,這個問題很難回答。WordNet 告訴我們,gin 可以指一種酒品、捕獵的陷阱、分離種子與棉花纖維的機器、一種卡牌遊戲。但如果我們考慮了給定的上下文(比如 I use two parts gin to one part vermouth.),就會很簡單。實際上,如果能用 vodka 替代 gin,那麼可以預計 vodka 會有一個相似的上下文詞向量。

ELMo 表示「embeddings from language models(來自語言模型的嵌入)」(Peters et al., 2018a),它為 word token 向量的形式(即詞在上下文中的向量或上下文詞向量)帶來了強有力的進步,這些向量在大型語料庫上進行過預訓練。ELMo 背後有兩個重要的見解:

如果每個 word token 都有自己的向量,那麼該向量就依賴於一個任意長度的臨近詞上下文。為了得到「上下文向量」,我們可以從 word type 向量開始,然後將它們傳遞通過一個神經網路,該神經網路可以將任意長度的上文詞向量和下文詞向量轉換成單個固定長度的向量。不同於 word type 向量(本質上是查找表),上下文詞向量既包括 type 層面的向量,也包括「上下文化(contextualize)」每個詞的神經網路參數。ELMo 會為上文訓練一個神經網路(一直回到 token 所在的句子的起始位置),還會為下文訓練一個神經網路(直到句子結束)。超出句子範圍的更長的上下文也是可能的。

回想一下,估計詞向量需要通過求解一個優化問題來「擬合數據」(這裡的數據是語料庫)。NLP 領域有一個長期存在的數據擬合問題,即語言建模,這是指根據「歷史」詞的序列預測下一個詞。很多已在使用的詞(type)向量演算法都基於概念固定大小的上下文,這收集自該 word type 在一個語料庫中的所有實例。ELMo 走得更遠,使用了任意長度的歷史並且整合了那時候已知最有效的語言模型(基於循環神經網路,Sundermeyer et al., 2012)。儘管那時循環網路已在 NLP 領域有廣泛的應用,但訓練它們作為語言模型,然後使用它們為每個 word token 提供的上下文向量作為預訓練的詞(token)向量的方法是全新的。

了解詞在計算機中的完整處理過程會很有意思。通過觀察詞所處的上下文,文本數據能為詞義提供指導;這個強有力的思想引導我們主要通過 word token 所在的具體上下文來獲取該 word token 的含義。這意味著 plant 的每個實例都有一個不同的詞向量;那些上下文看起來提到了植物的預計會彼此更為接近,而那些上下文可能提到了生產製造中心的則會聚集在向量空間中的另一處。這個發展能否完全解決詞具有不同含義的難題?這一點還有待觀察,但研究已經表明 ELMo 在一些 NLP 程序中是非常有益的,包括:

問答(在 SQuAD 基準上相對誤差下降了 9%)

標記動詞的語義參數(在 Ontonotes 語義角色標註基準上相對誤差下降了 16%)

標註文本中指代人或組織等命名實體的表達(在 CoNLL 2003 基準上相對誤差下降了 4%)

求解哪些指示表達指代同一實體(在 Ontonotes 共指消解基準上相對誤差下降了 10%)

Peters et al. (2018a) 和之後的其他研究者還報告了在其它任務上取得的進展。Howard and Ruder (2018) 引入了一種類似的方法 ULMFiT,研究表明有助於文本分類任務。之後的來自 transformer 的雙向編碼器表徵(BERT; Devlin et al., 2018)提出了一些學習方法的創新,並且學習了更多數據,在第一個任務上實現了進一步的 45% 的誤差下降(相對於 ELMo),在第二個任務上下降了 7%。在 SWAG 基準上,這些方法最近被用來測試基礎常識推理(Zellers et al., 2018),Devlin et al. (2018) 發現 ELMo 相對於非上下文詞向量實現了 5% 的相對誤差下降,BERT 相對於 ELMo 又額外降低了 66%。

在撰寫本文時,在不同方法的相對性能方面還存在很多有待解決的問題。對學習演算法(尤其是神經網路架構)之間的差異進行完整的解釋超出了本文範圍,但可以相當合理地說:學習方法的可能空間尚未得到完全的探索;Peters et al. (2018b) 中有一些探索方向。在 BERT 上的一些發現表明微調可能具有至關重要的作用。儘管 ELMo 源自語言建模,但 BERT 求解的建模問題(即在估計階段最小化的目標函數)卻相當不同。用於學習語言模型的數據集的作用還沒有得到完整的評估,除了這一個並不讓人驚訝的模式:更大的數據集往往更有益。

6 注意

詞向量是有偏差的

語言遠不只是詞

自然語言處理不是一個單一問題

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

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

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


請您繼續閱讀更多來自 機器之心 的精彩文章:

為什麼Julia比Python快?因為天生理念就更先進啊
隱藏著的因果關係,如何讓相同的機器學習模型變得不同

TAG:機器之心 |