簡體   English   中英

如何計算WordNet中沒有出現的英文單詞的相似度?

[英]How to calculate the similarity of English words that do not appear in WordNet?

一種特殊的自然語言實踐是使用WordNet計算兩個單詞之間的相似性。 我用以下python代碼開始我的問題:

from nltk.corpus import wordnet
sport = wordnet.synsets("sport")[0]
badminton = wordnet.synsets("badminton")[0]
print(sport.wup_similarity(badminton))

我們將得到0.8421

現在如果我尋找“haha”和“lol”如下:

haha = wordnet.synsets("haha")
lol = wordnet.synsets("lol")
print(haha)
print(lol)

我們將得到

[]
[]

然后我們不能考慮它們之間的相似性。 在這種情況下我們能做些什么?

您可以使用像Dissect (Distributional SEmantics Composition Toolkit)這樣的工具從共生矩陣創建語義空間,然后設置為測量單詞或短語之間的語義相似性(如果您組成單詞)。

在你的halol的情況下,你需要收集這些同謀。

另一件要嘗試的是word2vec。

有兩種可能的其他方式:

CBOW:連續的一句話

跳過克模型:這個模型與CBOW模型相反

看看這個: https//www.quora.com/What-are-the-continuous-bag-of-words-and-skip-gram-architectures-in-laymans-terms

這些模型在這里很受歡迎: https//www.tensorflow.org/tutorials/word2vec,GENSIM也是一個很好的python庫來做這些事情


嘗試尋找Tensorflow解決方案,例如: https//github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py

或者嘗試尋找word2vec: https ://en.wikipedia.org/wiki/Word2vec

有不同的測量相似度的模型,例如word2vec或手套,但你似乎更多地尋找包含社交,非正式短語如“lol”的語料庫。

但是,我要提出word2vec,因為它會導致我認為是你問題的答案。

word2vec(以及其他單詞嵌入模型,如手套)的基本概念是向量空間中的單詞表示,其中包含單詞之間的關系。 這非常適合測量相似性,因為矢量有很多已建立的數學可供繪制。 您可以在原始論文中閱讀有關word2vec技術細節的更多信息但我非常喜歡這篇博 文,因為它寫得很好而且簡潔。

同樣,由於word2vec只是一個模型,你需要將它與正確的訓練集配對,以獲得你所尋求的那種范圍。 網絡上有一些預先訓練好的模型,比如這一組。 訓練集實際上允許您查詢更多種類的術語,而不是模型。

如果他們有像您正在尋找的社交短語,您當然可以使用這些預先訓練的模型。 但是,如果您沒有看到在合適的語料庫中訓練過的模型,您可以自己輕松地訓練模型。 我建議使用Twitter或Wikipedia作為語料庫(訓練集),並將gensim中word2vec的實現作為單詞嵌入模型。

您可以使用其他框架。 我也嘗試了NLTK,但終於登陸了spacy(spacy.io)非常快速和功能的框架。 有一種稱為“相似性”的單詞的方法,它可以用於其他單詞(但它也適用於句子,文檔等)。 它是使用word2vec實現的。 實際上我不知道他們的詞匯量有多大,以及如果這個詞不為人知,它會如何掙扎但是值得嘗試。

我也玩了一下這個: https//radimrehurek.com/gensim/models/word2vec.html在2行中你可以加載google的大word2vec模型(這個項目將google word2vec c ++庫移植到python中) : https//docs.google.com/file/d/0B7XkCwpI5KDYaDBDQm1tZGNDRHc/edit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM