閱讀202 返回首頁    go gooseeker集搜客


初識word2vec

       word2vec是google在2013年推出的做詞嵌入(word embedding)的開源工具。簡單的說,它在給定的語料庫上訓練一個模型,然後會輸出所有出現在語料庫上的單詞的向量表示,這個向量稱為"word embedding"。基於這個向量表示,可以計算詞與詞之間的關係,例如相似性(同義詞等),語義關聯性(中國-北京=英國-倫敦)等。
       NLP(自然語言處理)中傳統的詞表示方法是one-hot representation,即把每個單詞表示成dim維的稀疏向量,dim等於詞匯量的大小。這個稀疏向量隻有一個維度(該單詞的index)上是1,其餘全是0。這個表示方法使得單詞之間是孤立的。Word embedding則是把單詞的表示降維到n維的稠密向量,n<<><>< span=""><><>              除了google自己的word2vec工具,各位對詞向量感興趣的牛人們也相繼編寫了各自不同的版本.包括:
  • C 版本             https://word2vec.googlecode.com/svn/trunk/
  • python版本    https://radimrehurek.com/gensim/
  • JAVA版本       https://github.com/ansjsun/Word2VEC_java
  • C++版本         https://github.com/jdeng/word2vec
              最權威的當然是C語言版本,但是閱讀起來比較困難一點。Python版本有優化處理,所以速度相對來說也不慢,但隻是實現了分層softmax方法對skip-gram模型進行訓練。Java版本分別實現了分層softmax方法對CBOW模型和skip-gram模型進行訓練。C++版本代碼可以在windows下編譯運行,但需要編譯器支持c++11。
       下麵介紹word2vec的基本功能。
       1.    計算相似的詞
       word2vec可以計算詞與詞之間的距離,把詞看成向量空間上的一個點,distance看成向量空間上點與點的距離。如下圖所示,通過對已有文本進行訓練,可以計算出與釣魚島相似的詞,原則上文本量越大,訓練處的結果越準確。

             2.    潛在的語言學規律       在對demo-analogy.sh修改後得到下麵幾個例子:法國的首都是巴黎,英國的首都是倫敦, vector("法國") - vector("巴黎) + vector("英國") --> vector("倫敦")


       3.   詞的聚類
       根據詞與詞之間的相關性進行聚類:如下圖所示,摩托羅拉,諾基亞,蘋果、三星等手機品牌都聚類到一起。


       4.   短語分析
       訓練詞語短語之間的關係,通過東北和地區兩個詞,就能找出與這些詞相關的短語。


參考鏈接:

1. 利用word2vec對關鍵詞進行聚類

2.  word2vec使用指導

3. 利用中文數據跑Google開源項目word2vec

最後更新:2017-01-09 14:08:09

  上一篇:go 為編寫網絡爬蟲程序安裝Python3.5
  下一篇:go Scrapy入門程序點評