1. 程式人生 > >自然語言處理(3)——Word2Vec理論

自然語言處理(3)——Word2Vec理論

word2vec是一個將單詞轉換成向量形式的工具。可以把對文字內容的處理簡化為向量空間中的向量運算,計算出向量空間上的相似度,來表示文字語義上的相似度。

一、理論概述

(主要來源於http://licstar.net/archives/328這篇部落格

1.詞向量是什麼

自然語言理解的問題要轉化為機器學習的問題,第一步肯定是要找一種方法把這些符號數學化。

  NLP 中最直觀,也是到目前為止最常用的詞表示方法是 One-hot Representation,這種方法把每個詞表示為一個很長的向量。這個向量的維度是詞表大小,其中絕大多數元素為 0,只有一個維度的值為 1,這個維度就代表了當前的詞。

  舉個栗子,

  “話筒”表示為 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]

  “麥克”表示為 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]

  每個詞都是茫茫 0 海中的一個 1。

  這種 One-hot Representation 如果採用稀疏方式儲存,會是非常的簡潔:也就是給每個詞分配一個數字 ID。比如剛才的例子中,話筒記為 3,麥克記為 8(假設從 0 開始記)。如果要程式設計實現的話,用 Hash 表給每個詞分配一個編號就可以了。這麼簡潔的表示方法配合上最大熵、SVM、CRF 等等演算法已經很好地完成了 NLP 領域的各種主流任務。

  當然這種表示方法也存在一個重要的問題就是“詞彙鴻溝”現象:任意兩個詞之間都是孤立的。光從這兩個向量中看不出兩個詞是否有關係,哪怕是話筒和麥克這樣的同義詞也不能倖免於難。

  Deep Learning 中一般用到的詞向量並不是剛才提到的用 One-hot Representation 表示的那種很長很長的詞向量,而是用 Distributed Representation(不知道這個應該怎麼翻譯,因為還存在一種叫“Distributional Representation”(類似,LDA中用topic表示詞語的詞向量的表示方法)表示的一種低維實數向量。這種向量一般是這個樣子:[0.792, −0.177, −0.107, 0.109, −0.542, ...]。維度以 50 維和 100 維比較常見。

2.詞向量的來歷

Distributed representation 最早是 Hinton 在 1986 年的論文《Learning distributed representations of concepts》中提出的。雖然這篇文章沒有說要將詞做 Distributed representation但至少這種先進的思想在那個時候就在人們的心中埋下了火種,到 2000 年之後開始逐漸被人重視。

3. 詞向量的訓練

  要介紹詞向量是怎麼訓練得到的,就不得不提到語言模型。到目前為止我瞭解到的所有訓練方法都是在訓練語言模型的同時,順便得到詞向量的。

  這也比較容易理解,要從一段無標註的自然文字中學習出一些東西,無非就是統計出詞頻、詞的共現、詞的搭配之類的資訊。而要從自然文字中統計並建立一個語言模型,無疑是要求最為精確的一個任務(也不排除以後有人創造出更好更有用的方法)。既然構建語言模型這一任務要求這麼高,其中必然也需要對語言進行更精細的統計和分析,同時也會需要更好的模型,更大的資料來支撐。目前最好的詞向量都來自於此,也就不難理解了。

    詞向量的訓練最經典的有 3 個工作,C&W 2008、M&H 2008、Mikolov 2010。當然在說這些工作之前,不得不介紹一下這一系列中 Bengio 的經典之作

4. 詞向量的評價

 

詞向量的評價大體上可以分成兩種方式,第一種是把詞向量融入現有系統中,看對系統性能的提升;第二種是直接從語言學的角度對詞向量進行分析,如相似度、語義偏移等。

 

4.1 提升現有系統

  詞向量的用法最常見的有兩種:

  1. 直接用於神經網路模型的輸入層。如 C&W 的 SENNA 系統中,將訓練好的詞向量作為輸入,用前饋網路和卷積網路完成了詞性標註、語義角色標註等一系列任務。再如 Socher 將詞向量作為輸入,用遞迴神經網路完成了句法分析、情感分析等多項任務。

2. 作為輔助特徵擴充現有模型。如 Turian 將詞向量作為額外的特徵加入到接近 state of the art 的方法中,進一步提高了命名實體識別和短語識別的效果。

4.2 語言學評價

  還有一個有意思的分析是 Mikolov 在 2013 年剛剛發表的一項發現。他發現兩個詞向量之間的關係,可以直接從這兩個向量的差裡體現出來。向量的差就是數學上的定義,直接逐位相減。比如 C(king)−C(queen)≈C(man)−C(woman)。更強大的是,與 C(king)−C(man)+C(woman) 最接近的向量就是 C(queen)。

  為了分析詞向量的這個特點, Mikolov 使用類比(analogy)的方式來評測。如已知 a 之於 b 猶如 c 之於 d。現在給出 a、b、c,看 C(a)−C(b)+C(c) 最接近的詞是否是 d。

  在文章 Mikolov 對比了詞法關係(名詞單複數 good-better:rough-rougher、動詞第三人稱單數、形容詞比較級最高階等)和語義關係(clothing-shirt:dish-bowl)

 

這些實驗結果中最容易理解的是:語料越大,詞向量就越好。其它的實驗由於缺乏嚴格控制條件進行對比,談不上哪個更好哪個更差。不過這裡的兩個語言學分析都非常有意思,尤其是向量之間存在這種線性平移的關係,可能會是詞向量發展的一個突破口。

                                       

 

關於Deep Lerning In Nlp的一些相關論文,《Deep Learning in NLP (一)詞向量和語言模型》(http://licstar.net/archives/328這篇部落格總結的非常的好。以上內容大多數都是擷取原部落格內容。