NLP之word2vec:word2vec簡介、安裝、使用方法之詳細攻略

NLP之word2vec:word2vec簡介、安裝、使用方法之詳細攻略python

 

 

目錄算法

word2vec簡介數據庫

一、稀疏向量One-Hot Encoder網絡

二、密集向量distributed representation機器學習

三、word2vec的兩大語言模型分佈式

word2vec安裝ide

word2vec使用方法工具


 

 

 

word2vec簡介

     word distributed embedding最先是Bengio 03年的論文"A Neural Probabilistic Language Model"提出來,rnn lm 在10年被mikolov提出。      
      word2vec 是 Google 於 2013 年開源推出的一個用於獲取詞向量(word vector)的工具包,它簡單、高效。word2vec也叫word embeddings,中文名「詞向量」,做用就是將天然語言中的字詞轉爲計算機能夠理解的稠密向量Dense Vector。所謂的word vector,就是指將單詞向量化,將某個單詞用特定的向量來表示。將單詞轉化成對應的向量之後,就能夠將其應用於各類機器學習的算法中去。通常來說,詞向量主要有兩種形式,分別是稀疏向量和密集向量。
     word2vec的思想相似於antodecoder,可是並非將自身做爲訓練目標,也不是用RBM來訓練。 word2vec將 context和word5:別做爲訓練目標,Wskip-gram和CBOW。

       word2vec其實就是two layer shallow neural network,減小了深度神經網絡的複雜性,快速的生成word embedding.    
Skip-gram: works well with small amount of the training data, represents well even rare words or phrases. 
CBOW: several times faster to train than the skip-gram, slightly better accuracy for the frequent words  
     This can get even a bit more complicated if you consider that there are two different ways how to train the models: the normalized hierarchical softmax, and the un-normalized negative sampling. Both work quite differently.學習

一、稀疏向量One-Hot Encoder

       在word2vec出現以前,天然語言處理常常把字詞轉爲離散的單獨的符號,也就是One-Hot Encoder。就是用一個很長的向量來表示一個詞,向量的長度爲詞典的大小N,向量的份量只有一個1,其餘全爲0,1的位置對應該詞在詞典中的索引[1]。
      舉例來講,若是有一個詞典[「比特幣」,」區塊鏈」,」機器學習」],那麼「比特幣」對應的詞向量就是[1,0,0],「區塊鏈」對應的詞向量就是[0,1,0]。這種表示方法不須要繁瑣的計算,簡單易得,可是缺點也很多,好比長度過長(這會引起維數災難),以及沒法體現出近義詞之間的關係,好比「比特幣」和「區塊鏈」顯然有很是緊密的關係,但轉化成向量[1,0,0]和[0,1,0]之後,就看不出二者有什麼關係了,由於這兩個向量相互正交。區塊鏈

       可是使用One-Hot Encoder有如下問題。一方面,城市編碼是隨機的,向量之間相互獨立,看不出城市之間可能存在的關聯關係。其次,向量維度的大小取決於語料庫中字詞的多少。若是將世界全部城市名稱對應的向量合爲一個矩陣的話,那這個矩陣過於稀疏,而且會形成維度災難。以及沒法體現出近義詞之間的關係。

       使用Vector Representations能夠有效解決這個問題。Word2Vec能夠將One-Hot Encoder轉化爲低維度的連續值,也就是稠密向量,而且其中意思相近的詞將被映射到向量空間中相近的位置。 

二、密集向量distributed representation

      又稱distributed representation,即分佈式表示。最先由Hinton提出,能夠克服one-hot representation的上述缺點,基本思路是經過訓練將每一個詞映射成一個固定長度的短向量,全部這些向量就構成一個詞向量空間,每個向量可視爲該空間上的一個點[1]。此時向量長度能夠自由選擇,與詞典規模無關。這是很是大的優點。
      仍是用以前的例子[「比特幣」,」區塊鏈」,」機器學習」],通過訓練後,「比特幣」對應的向量多是[1,0,1,1,0],而「區塊鏈」對應的多是[1,0,1,0,0],而「機器學習」對應的多是[0,1,0,0,1]。這樣「比特幣」向量乘「區塊鏈」=2,而「比特幣」向量乘「機器學習」=0 。這樣就體現出比特幣與區塊鏈之間的關係更加緊密,而與機器學習就沒什麼關係了。這種表示方式更精準的表現出近義詞之間的關係,比之稀疏向量優點很明顯。

      word2vec模型其實就是簡單化的神經網絡。word2vec作的事情很簡單,大體來講,就是構建了一個多層神經網絡,而後在給定文本中獲取對應的輸入和輸出,在訓練過程當中不斷修正神經網絡中的參數,最後獲得詞向量。

三、word2vec的兩大語言模型

     所謂的語言模型,就是指對天然語言進行假設和建模,使得可以用計算機可以理解的方式來表達天然語言。word2vec採用的是n元語法模型(n-gram model),即假設一個詞只與周圍n個詞有關,而與文本中的其餘詞無關。這種模型構建簡單直接,固然也有後續的各類平滑方法。

CBOW模型和skip-gram模型
     word2vec主要分爲CBOW(Continuous Bag of Words)和Skip-Gram兩種模式。CBOW是從原始語句推測目標字詞;而Skip-Gram正好相反,是從目標字詞推測出原始語句。CBOW對小型數據庫比較合適,而Skip-Gram在大型語料中表現更好。
其實這兩個模型很是類似,核心部分代碼甚至是能夠共用的。CBOW模型可以根據輸入周圍n-1個詞來預測出這個詞自己,而skip-gram模型可以根據詞自己來預測周圍有哪些詞。也就是說,CBOW模型的輸入是某個詞A周圍的n個單詞的詞向量之和,輸出是詞A自己的詞向量;而skip-gram模型的輸入是詞A自己,輸出是詞A周圍的n個單詞的詞向量(對的,要循環n遍)。

 

word2vec安裝

pip install word2vec

 

 

 

word2vec使用方法

(1) 分詞 / 詞幹提取和詞形還原。 
(2) 構造詞典,統計詞頻。
(3) 構造樹形結構。
(4)生成節點所在的二進制碼。
(5) 初始化各非葉節點的中間向量和葉節點中的詞向量。
(6) 訓練中間向量和詞向量。

 

一、examples

import word2vec

model = word2vec.load('/Users/drodriguez/Downloads/vectors.bin')

model.vectors.shape

model['_*1']

indexes, metrics = model.cosine('_*1')

model.generate_response(indexes, metrics).tolist()
相關文章
相關標籤/搜索