Word2Vec如何解決多義詞的問題?

由於最近Google的開源項目發布,Word2Vec貌似又有了一種新的方法。我一直不是很理解用Word2Vec這種方法算同義詞是否有很大很大的局限性。按照我們常識來說,多義詞比比皆是,比如指針,可以是手錶上的也可以是C語言裡面的;比如逼,可以是個動詞,也可以是個髒話。如果按照Word2Vec這個模型去建模這個世界,那麼每一個Word只有固定的一個向量吧(我沒有具體研究過,我猜每一個word只會對應一個Vector),那麼指針和手錶是近義詞,指針和內存也是近義詞,所以手錶和內存在計算相似度上也會很像。這樣是不是就說明了這個模型還是有很大的局限性。

我一直覺得詞不放到句子或者短語中,其實建模的意義比較一般,不知道大家怎麼看這個問題。


我一直覺得這個東西不該叫「相似性」(similarity)而該叫關聯性(relatedness)

因為如果是近義詞(算similarity)的話,不僅兩個詞出現的語境(context)要相似,還有很多信息需要考慮,比如這兩個詞的POS tag應該一樣(同一個詞的名詞和形容詞語境相似,是不是近義詞?)。word2vec應該沒考慮過類似信息(私貨:歡迎關注Stefan Thater相關工作)

回到題主的問題,vector的表達取決於語料,這是一個很關鍵的問題。

如果你的語料里出現的「指針」都說編程相關的內容,那麼你得到的結果就是這個「指針」。

如果你的語料是一個很平衡的語料,我們假設「指針」有一半時間說的是編程的指針,一半是手錶的指針。我認為這樣也不會出現題主所說的「手錶和內存在計算相似度上也會很像」的問題,因為在這種語料中,指針和手錶的相關程度,以及指針和內存的相關程度都 不會 很高,畢竟,在這種語料中,當我們在談論「指針」的時候,我們在談論的是一種「半是C指針半是手錶指針」的東西 【雷蒙德卡佛粉飄過】。

Word Sense Disambiguation一直都是語言學和NLP里很有意思的問題,就不拓展了【我才不會告訴你們這個問題我一點兒都不熟悉根本沒法拓展呢。。。

每個模型肯定都有局限性,這也正是計算機沒法完全理解人類語言的原因之一,只要它有它適用的場景,那就是個好模型,對不


word2vec其實只是利用distributional hypothesis的方法之一,題主問的基於word2vec model解決多義詞的問題呢,有些工作是講這個故事的,簡單的說就是對每個詞學多個vector。

比如ACL-12的這篇Improving Word Representations via Global Context and Multiple Word Prototypes,通過加入global的信息,將star的多個含義(比如明星、星星)學出不同的vector。

再比如COLING-14這篇A Scalable Probabilistic Model for Learning Multi-Prototype Word Embeddings,基於skip-gram和EM演算法對每個詞學多個vector的,也挺有意思。


是的每一個詞只有一個向量,而且整個網路只有一組權重。其實就是普通神經網路多算了一步bp。

現在有的研究人員也開始研究把不同上下文的詞賦予不同權重,然後加入一下語言學的信息,你可以參看:

Parsing with Compositional Vector Grammars

http://www.socher.org/uploads/Main/SocherBauerManningNg_ACL2013.pdf

文章大意是把POS標籤也算進來,因為POS標籤對於不同上下文的詞不是一定的,所以實際是考慮了上下文信息,然後每一個constitute都給了不同權重。所以整個網路的表達能力提高了。

另外一方面,現在的詞典大小都是百萬級別的,增加不同含義會讓詞典膨脹好幾倍,這對計算性能提出了更高要求。


同意 @Eastdog的說法,如果你深入了解word2vec的模型還有他的原版C語言代碼的話,那麼你就會知道,算出來的詞向量是關聯詞向量,並不是語意詞向量。

------------------------------------------------------------------------------------------------------------

詞意是信號的高級表達,句子更是詞義的非線形累加。詞向量的模型和求解都是基於同一種假設,那就是上下文相似的詞所表達的詞義也是相似的,這條假設現在來看好像並不是特別的準確(誰也沒有做過統計)。所以訓練出來的詞向量有的時候你在使用distance看「近義詞」的時候,你會發現「好」和「不好」有的時候計算出來的相似度很高,那是因為你預料中這兩個詞的上下文絕大部份都是一樣的。最後得到的相似度只能說明你的單詞在預料中的上下文的相似程度。

------------------------------------------------------------------------------------------------------------

影響詞向量結果的因素如下:

1.模型

2.語料

3.模型參數

對於模型來說,最早的模型NNLM是最基本的,當然求解複雜度最高,光那個softmax層就能累死。之後出現的CBOW和Skip-gram則是簡化的NNLM。還有一種CW模型,是將context和target-word同時放在網路的同一層。與NNLM的思想不太一樣。還有GloVe模型,目前主流的就是Word2Vec和Glove了吧。

對於語料的話,如果你選的是特定領域的語料的話,那麼訓練的結果會好很多,尤其是互聯網評論,因為是short-text並且主題就那麼幾個,用語也很少,無非就是表達情感。如果你用公開的**語料庫的話,那麼你的訓練結果則是一種相當平均化的結果,就像你說的那種指針出現的情況。

模型的參數的話,無非就是使用哪種模型,哪種求解方式,然後詞向量的維度等調參數的工作。一般來說就是詞向量的維度越大,輸出的效果越好。

對於第二個問題,一詞多義的情況,這個很難,首先你人工也不好判斷一個詞的意思,具體的還需要考慮上下文的情況。深度網路就是的學習過程就是用大量的權重去模擬你人工的規則,只不過有的模擬的好,有的模擬的差些。人工規則的構建我們則是先考慮規則,然後去實例結果,機器則是從大量的結果中找出規則。結果的好壞直接影響到你規則的構建(所以說語料庫很重要)。

--------------------------------------------------------------------------------------------------------------

英文有結合CNN網路訓練的,或是multi-channel CNN來訓練詞向量的,中文的話有清華大學劉志遠 @劉知遠 老師所在團隊做的字詞同時訓練的效果也不錯。不知道最近的研究熱點是什麼啊。

--------------------------------------------------------------------------------------------------------------

中國科學院大學-大數據與數據挖掘重點實驗室

鄭元春

海淀區 中關村東路80號 中國科學院大學 6號樓 211室

--------------------------------------------------------------------------------------------------------------


簡單方法就是可以對不同的上下文進行聚類啊,聚類後再進行針對每個類的上下文計算詞向量。


word2vec算出來的詞向量存在解釋一詞多義的局限。

要解決一詞多義問題,可以通過人為對詞進行語義標註,通過word+semantic進行訓練,得出word+ semantic的向量。

另外就是尋找一種方法,讓機器自己總結出一詞多義的詞。


做過相關實驗,新聞語料(3G-4G)250維度,得到向量表,對搜狗詞表中每一個詞計算餘弦距離最近的詞(閾值限定),僅依靠餘弦距離再進行拓展。得到同義詞詞表,準確率40%-50%,召回率不易估計。

=============

做的是同義詞(synonyms),比如鴨和雞,谷歌和百度就不是正確結果,而餘弦距離較近的那些結果,我們認為更多的是關聯詞(relatedness word)同意Eastdog的說法


快去做個推廣版的,叫word2tensor


word2vec輸出的是同主題詞


推薦閱讀:

《Improving Document Clustering by Eliminating Unnatural Language》閱讀筆記
為什麼word2vec出來以後,大家還在用distributional hypothesis找近義詞?
Galactic Dependencies依存關係數據集+細粒度語言類型學預測 | 實錄·PhD Talk
自然語言處理是計算機實現通用人工智慧的最難挑戰嗎?

TAG:數據挖掘 | 機器學習 | 自然語言處理 |