本文做者:在線實驗室javascript
文章結構:html
詞向量java
本教程源代碼目錄在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)模型或神經元網絡模型。在用神經網絡求詞向量以前,傳統作法是統計一個詞語的共生矩陣XX。XX是一個|V|×|V||V|×|V| 大小的矩陣,XijXij表示在全部語料中,詞彙表VV(vocabulary)中第i個詞和第j個詞同時出現的詞數,|V||V|爲詞彙表的大小。對XX作矩陣分解(如奇異值分解,Singular Value Decomposition [5]),獲得的UU即視爲全部詞的詞向量:ide
但這樣的傳統作法有不少問題:
基於神經網絡的模型不須要計算和存儲一個在全語料上統計產生的大表,而是經過學習語義信息獲得詞向量,所以能很好地解決以上問題。在本章裏,咱們將展現基於神經網絡訓練詞向量的細節,以及如何用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
, 加載字典裏的單詞和對應訓練特徵結果獲得,咱們將在模型應用中詳細描述用法。
參考文獻
本教程 由 PaddlePaddle 創做,採用 知識共享 署名-相同方式共享 4.0 國際 許可協議進行許可。