當前位置:
首頁 > 最新 > NLP之Word2Vec模型和Doc2Vec模型

NLP之Word2Vec模型和Doc2Vec模型


Word2Vec

Word2Vec是Google在2013年開源的一款將詞表徵為實數值向量的高效工具,採用的模型有CBOW(Continuous Bag-Of-Words,即連續的詞袋模型)和Skip-Gram 兩種。Word2Vec通過訓練,可以把對文本內容的處理簡化為K維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似度。因此,Word2Vec 輸出的詞向量可以被用來做很多NLP相關的工作,比如聚類、找同義詞、詞性分析等等。

CBOW和Skip-gram原理圖

CBOW模型能夠根據輸入周圍n-1個詞來預測出這個詞本身,而Skip-gram模型能夠根據詞本身來預測周圍有哪些詞。也就是說,CBOW模型的輸入是某個詞A周圍的n個單詞的詞向量之和,輸出是詞A本身的詞向量,而Skip-gram模型的輸入是詞A本身,輸出是詞A周圍的n個單詞的詞向量。Word2Vec最常用的開源實現之一就是gensim,網址為:

http://radimrehurek.com/gensim/

gensim的安裝非常簡單:

gensim的使用非常簡潔,載入數據和訓練數據可以合併,訓練好模型後就可以按照單詞獲取對應的向量表示:

其中Word2Vec有很多可以影響訓練速度和質量的參數。第一個參數可以對字典做截斷,少於min_count次數的單詞會被丟棄掉, 默認值為5:

另外一個是神經網路的隱藏層的單元數,推薦值為幾十到幾百。事實上Word2Vec參數的個數也與神經網路的隱藏層的單元數相同,比如:

那麼訓練得到的Word2Vec參數個數也是200:

以處理IMDB數據集為例,初始化Word2Vec對象,設置神經網路的隱藏層的單元數為200,生成的詞向量的維度也與神經網路的隱藏層的單元數相同。設置處理的窗口大小為8個單詞,出現少於10次數的單詞會被丟棄掉,迭代計算次數為10次,同時並發線程數與當前計算機的cpu個數相同:

其中當前計算機的cpu個數可以使用multiprocessing獲取:

創建字典並開始訓練獲取Word2Vec。gensim的官方文檔中強調增加訓練次數可以提高生成的Word2Vec的質量,可以通過設置epochs參數來提高訓練次數,默認的訓練次數為5:

經過訓練後,Word2Vec會以字典的形式保存在model對象中,可以使用類似字典的方式直接訪問獲取,比如獲取單詞「love」的Word2Vec就可以使用如下形式:

Word2Vec的維度與之前設置的神經網路的隱藏層的單元數相同為200,也就是說是一個長度為200的一維向量。通過遍歷一段英文,逐次獲取每個單詞對應的Word2Vec,連接起來就可以獲得該英文段落對應的Word2Vec:

需要注意的是,出於性能的考慮,我們將出現少於10次數的單詞會被丟棄掉,所以存在這種情況,就是一部分單詞找不到對應的Word2Vec,所以需要捕捉這個異常,通常使用python的KeyError異常捕捉即可。


Doc2Vec

基於上述的Word2Vec的方法,Quoc Le 和Tomas Mikolov又給出了Doc2Vec的訓練方法。如下圖所示,其原理與Word2Vec相同,分為Distributed Memory (DM) 和Distributed Bag of Words (DBOW)。

DM和DBOW原理圖

以處理IMDB數據集為例,初始化Doc2Vec對象,設置神經網路的隱藏層的單元數為200,生成的詞向量的維度也與神經網路的隱藏層的單元數相同。設置處理的窗口大小為8個單詞,出現少於10次數的單詞會被丟棄掉,迭代計算次數為10次,同時並發線程數與當前計算機的cpu個數相同:

其中需要強調的是,dm為使用的演算法,默認為1,表明使用DM演算法,設置為0表明使用DBOW演算法,通常使用默認配置即可,比如:model = gensim.models.Doc2Vec.Doc2Vec(size=50, min_count=2, iter=10)與Word2Vec不同的地方是,Doc2Vec處理的每個英文段落,需要使用一個唯一的標識標記,並且使用一種特殊定義的數據格式保存需要處理的英文段落,這種數據格式定義如下:

其中SentimentDocument可以理解為這種格式的名稱,也可以理解為這種對象的名稱,words會保存英文段落,並且是以單詞和符合列表的形式保存,tags就是我們說的保存的唯一標識。最簡單的一種實現就是依次給每個英文段落編號,訓練數據集的標記為「TRAIN數字」,訓練數據集的標記為「TEST數字」:

創建字典並開始訓練獲取Doc2Vec。與Word2Vec的情況一樣,gensim的官方文檔中強調增加訓練次數可以提高生成的Doc2Vec的質量,可以通過設置epochs參數來提高訓練次數,默認的訓練次數為5:

經過訓練後,Doc2Vec會以字典的形式保存在model對象中,可以使用類似字典的方式直接訪問獲取,比如獲取段落「I love tensorflow」的Doc2Vec就可以使用如下形式:

一個典型的doc2ver展開為向量形式,內容如下所示,為了顯示方便只展示了其中一部分維度的數據:

Doc2Vec的維度與之前設置的神經網路的隱藏層的單元數相同為200,也就是說是一個長度為200的一維向量。以英文段落為單位,通過遍歷訓練數據集和測試數據集,逐次獲取每個英文段落對應的Doc2Vec,這裡的英文段落就可以理解為數據集中針對電影的一段評價:

訓練Word2Vec和Doc2Vec是非常費時費力的過程,調試階段會頻繁更換分類演算法以及修改分類演算法參數調優,為了提高效率,可以把之前訓練得到的Word2Vec和Doc2Vec模型保存成文件形式,以Doc2Vec為例,使用model.save函數把訓練後的結果保存在本地硬碟上,運行程序時,在初始化Doc2Vec對象之前,可以先判斷本地硬碟是否存在模型文件,如果存在就直接讀取模型文件初始化Doc2Vec對象,反之則需要訓練數據:

NLP系列文章

機器學習入門

主要以機器學習常見演算法為主線,利用生活中的例子和具體安全場景來介紹機器學習常見演算法,是機器學習入門書籍,便於讀者可以快速上手。

深度學習實戰

本書將重點介紹深度學習,並以具體的11個案例介紹機器學習的應用,定位是面向具有一定機器學習基礎或者致力於使用機器學習解決工作中問題的讀者。

強化學習與GAN

重點介紹強化學習和生成對抗網路的基礎知識和實際應用,從AI攻防的基礎知識,到智能工具的打造,全面介紹如何使用AI做建設的方法。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 兜哥帶你學安全 的精彩文章:

NLP之詞袋模型和TF-IDF模型
AI 技術在安全領域應用三部曲

TAG:兜哥帶你學安全 |