如何產生好的詞向量?網絡
詞向量、詞嵌入(word vector,word embedding)也稱分佈式表示(distributed representation),想必任何一個作NLP的研究者都不陌生。現在詞向量已經被普遍應用於各自NLP任務中,研究者們也提出了很多產生詞向量的模型並開發成實用的工具供你們使用。在使用這些工具產生詞向量時,不一樣的訓練數據,參數,模型等都會對產生的詞向量有所影響,那麼如何產生好的詞向量對於工程來講很重要。中科院自動化所的來斯唯博士對此進行了詳細的研究。本篇博客也是我閱讀來博士發表的論文《How to Generate a Good Word Embedding?》和其博士論文的筆記,並結合本身平時實驗的經驗總結出來的,但願對你們在訓練詞向量時有所幫助。分佈式
1 詞的表示技術函數
在來博士的博士論文中概述了現有的主要詞表示技術,我在此也先簡單進行介紹。工具
1.1 獨熱表示技術(早期傳統的表示技術)性能
![](http://static.javashuo.com/static/loading.gif)
1.2 分佈表示技術(與獨熱表示技術相對應,基於分佈式假說[即上下文類似的詞,其語義也類似],把信息分佈式地存儲在向量的各個維度中的表示方法,具備緊密低維,捕捉了句法、語義信息特色)字體
![](http://static.javashuo.com/static/loading.gif)
經過聚類手段構建詞與其上下文之間的關係。表明模型:布朗聚類(Brown clustering)。優化
神經網絡語言模型(NNLM)spa
![](http://static.javashuo.com/static/loading.gif)
Log雙線性語言模型(LBL)blog
![](http://static.javashuo.com/static/loading.gif)
C&W模型ip
![](http://static.javashuo.com/static/loading.gif)
Continuous Bag-of-Words(CBOW)
Skip-gram(SG)
Word2vec工具中的兩個模型
![](http://static.javashuo.com/static/loading.gif)
Order模型
在上面CBOW模型的在輸入層是直接進行求和,這樣並無考慮詞以前的序列順序,因此來博士把直接求和改成了詞向量之間的順序拼接來保存序列順序信息。
![](http://static.javashuo.com/static/loading.gif)
模型理論比較
![](http://static.javashuo.com/static/loading.gif)
2各類模型的實驗對比分析
整個實驗是圍繞下面幾個問題進行的:
- 如何選擇合適的模型?
- 訓練語料的大小及領域對詞向量有什麼影響?
-
如何選擇訓練詞向量的參數?
評價任務
詞向量的語言學特性
- 詞義相關性(ws): WordSim353數據集,詞對語義打分。皮爾遜係數評價。
- 同義詞檢測(tfl): TOEFL數據集,80個單選題。準確率評價
- 單詞語義類比(sem): 9000個問題。queen-king+man=women。準確率
- 單詞句法類比(syn): 1W個問題。dancing-dance+predict=predicting。準確率
詞向量用做特徵
- 基於平均詞向量的文本分類(avg): IMDB數據集,Logistic分類。準確率評價
- 命名實體識別(ner): CoNLL03數據集,做爲現有系統的額外特徵。F1值
詞向量用做神經網絡模型的初始值
- 基於卷積的文本分類(cnn): 斯坦福情感樹庫數據集,詞向量不固定。準確率
- 詞性標註(pos): 華爾街日報數據集,Collobert等人提出的NN。準確率
實驗結果(紅色字體爲博主本身總結,黑色字體爲論文結論)
模型比較
- 對於評價語言學特性的任務,經過上下文預測目標詞的模型,比上下文與目標詞聯合打分的C&W模型效果更好。
- 對於實際的天然語言處理任務,各模型的差別不大,選用簡單的模型便可。
- 簡單模型在小語料上總體表現更好,而複雜的模型須要更大的語料做支撐。
語料影響
- 同領域的語料,通常語料越大效果越好
- 領域內的語料對類似領域任務的效果提高很是明顯,但在領域不契合時甚至會有負面做用。
- 在天然語言任務上,同領域的語料10M效果明顯差,可是100M以上擴大語料,任務結果的差別較小。
規模和領域的權衡
- 語料的領域純度比語料規模更重要。(特別是在任務領域的語料比較小時,加入大量其餘領域的語料可能會有很負面的影響)
參數選擇
迭代次數
- 根據詞向量的損失函數選擇迭代次數不合適。
- 條件容許的話,選擇目標任務的驗證集性能做爲參考標準。
- 具體任務性能指標趨勢同樣,能夠選簡單任務的性能峯值。
- 使用word2vec工具中demo的默認參數,15~25次差很少。
詞向量維度
- 對於分析詞向量語言學特性的任務,維度越大效果越好。
- 對於提高天然語言處理任務而言,50維詞向量一般就足夠好。(這裏我以爲只能說是某些任務,不過趨勢是一致的,隨着詞向量維度的增長,性能曲線先增加後趨近於平緩,甚至降低)
3 總結
- 選擇一個合適的模型。複雜的模型相比簡單的模型,在較大的語料中才有優點。(在word2vec工具中我通常使用SG模型)
- 選擇一個合適領域的語料,在此前提下,語料規模越大越好。使用大規模的語料進行訓練,能夠廣泛提高詞向量的性能,若是使用領域內的語料,對同領域的任務會有顯著的提高。(訓練語料不要太小,通常使用同領域語料達到100M規模)
- 訓練時,迭代優化的終止條件最好根據具體任務的驗證集來判斷,或者近似地選取其它相似的任務做爲指標,可是不該該選用訓練詞向量時的損失函數。(迭代參數我通常使用根據訓練語料大小,通常選用10~25次)
-
詞向量的維度通常須要選擇50維及以上,特別當衡量詞向量的語言學特性時,詞向量的維度越大,效果越好。(一般根據具體任務進行實驗,最後根據性能和實驗需使用的時間選擇合適的詞向量維度)
主要參考文獻
[1] Lai S, Liu K, Xu L, et al. How to Generate a Good Word Embedding?. arXiv preprint arXiv:1507.05523, 2015.
[2] 來斯唯. 基於神經網絡的詞和文檔語義向量表示方法研究. 中科院自動化所,博士論文,2016.