詞向量(一)

本文做者:在線實驗室javascript

文章結構:html

詞向量java

  1. 背景介紹
  2. 效果展現
  3. 模型概覽
  4. 數據準備
  5. 編程實現
  6. 模型應用
  7. 總結
  8. 參考文獻

本教程源代碼目錄在book/word2vec,初次使用請您參考Book文檔使用說明git

 

背景介紹github

 

本章咱們介紹詞的向量表徵,也稱爲word embedding。詞向量是天然語言處理中常見的一個操做,是搜索引擎、廣告系統、推薦系統等互聯網服務背後常見的基礎技術。算法

 

在這些互聯網服務裏,咱們常常要比較兩個詞或者兩段文本之間的相關性。爲了作這樣的比較,咱們每每先要把詞表示成計算機適合處理的方式。最天然的方式恐怕莫過於向量空間模型(vector space model)。 在這種方式裏,每一個詞被表示成一個實數向量(one-hot vector),其長度爲字典大小,每一個維度對應一個字典裏的每一個詞,除了這個詞對應維度上的值是1,其餘元素都是0。編程

 

One-hot vector雖然天然,可是用處有限。好比,在互聯網廣告系統裏,若是用戶輸入的query是「母親節」,而有一個廣告的關鍵詞是「康乃馨」。雖然按照常理,咱們知道這兩個詞之間是有聯繫的——母親節一般應該送給母親一束康乃馨;可是這兩個詞對應的one-hot vectors之間的距離度量,不管是歐氏距離仍是餘弦類似度(cosine similarity),因爲其向量正交,都認爲這兩個詞毫無相關性。 得出這種與咱們相悖的結論的根本緣由是:每一個詞自己的信息量都過小。因此,僅僅給定兩個詞,不足以讓咱們準確判別它們是否相關。要想精確計算相關性,咱們還須要更多的信息——從大量數據裏經過機器學習方法概括出來的知識。網絡

 

在機器學習領域裏,各類「知識」被各類模型表示,詞向量模型(word embedding model)就是其中的一類。經過詞向量模型可將一個 one-hot vector映射到一個維度更低的實數向量(embedding vector),如embedding(母親節)=[0.3,4.2,−1.5,...],embedding(康乃馨)=[0.2,5.6,−2.3,...]embedding(母親節)=[0.3,4.2,−1.5,...],embedding(康乃馨)=[0.2,5.6,−2.3,...]。在這個映射到的實數向量表示中,但願兩個語義(或用法)上類似的詞對應的詞向量「更像」,這樣如「母親節」和「康乃馨」的對應詞向量的餘弦類似度就再也不爲零了。機器學習

 

詞向量模型能夠是機率模型、共生矩陣(co-occurrence matrix)模型或神經元網絡模型。在用神經網絡求詞向量以前,傳統作法是統計一個詞語的共生矩陣XXXX是一個|V|×|V||V|×|V| 大小的矩陣,XijXij表示在全部語料中,詞彙表VV(vocabulary)中第i個詞和第j個詞同時出現的詞數,|V||V|爲詞彙表的大小。對XX作矩陣分解(如奇異值分解,Singular Value Decomposition [5]),獲得的UU即視爲全部詞的詞向量:ide

 
X=USVTX=USVT

 

但這樣的傳統作法有不少問題:

 

  1. 因爲不少詞沒有出現,致使矩陣極其稀疏,所以須要對詞頻作額外處理來達到好的矩陣分解效果;
  2. 矩陣很是大,維度過高(一般達到106×106106×106的數量級);
  3. 須要手動去掉停用詞(如although, a,...),否則這些頻繁出現的詞也會影響矩陣分解的效果。

 

基於神經網絡的模型不須要計算和存儲一個在全語料上統計產生的大表,而是經過學習語義信息獲得詞向量,所以能很好地解決以上問題。在本章裏,咱們將展現基於神經網絡訓練詞向量的細節,以及如何用PaddlePaddle訓練一個詞向量模型。

 

效果展現

 

本章中,當詞向量訓練好後,咱們能夠用數據可視化算法t-SNE[4]畫出詞語特徵在二維上的投影(以下圖所示)。從圖中能夠看出,語義相關的詞語(如a, the, these; big, huge)在投影上距離很近,語意無關的詞(如say, business; decision, japan)在投影上的距離很遠。

 


圖1. 詞向量的二維投影

 

另外一方面,咱們知道兩個向量的餘弦值在[−1,1][−1,1]的區間內:兩個徹底相同的向量餘弦值爲1, 兩個相互垂直的向量之間餘弦值爲0,兩個方向徹底相反的向量餘弦值爲-1,即相關性和餘弦值大小成正比。所以咱們還能夠計算兩個詞向量的餘弦類似度:

 

please input two words: big huge
similarity: 0.899180685161

please input two words: from company
similarity: -0.0997506977351

 

以上結果能夠經過運行calculate_dis.py, 加載字典裏的單詞和對應訓練特徵結果獲得,咱們將在模型應用中詳細描述用法。

 

參考文獻

 

  1. Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model[J]. journal of machine learning research, 2003, 3(Feb): 1137-1155.
  2. Mikolov T, Kombrink S, Deoras A, et al. Rnnlm-recurrent neural network language modeling toolkit[C]//Proc. of the 2011 ASRU Workshop. 2011: 196-201.
  3. Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.
  4. Maaten L, Hinton G. Visualizing data using t-SNE[J]. Journal of Machine Learning Research, 2008, 9(Nov): 2579-2605.
  5. https://en.wikipedia.org/wiki/Singular_value_decomposition


知識共享許可協議
本教程 由 PaddlePaddle 創做,採用 知識共享 署名-相同方式共享 4.0 國際 許可協議進行許可。

原文連接地址:https://developer.baidu.com/topic/show/290068

相關文章
相關標籤/搜索