如果你不在乎
适当的
群集,您可以使用以下代码:
similar = [[item[0] for item in model.most_similar(word)[:5]] for word in words]
如果你真的想把单词分类,这里有几个注释:
-
可以有几个这样的集群。
-
群集的数量取决于
超参数
,一些阈值。当阈值较大时,所有单词都相似且属于同一簇,当阈值太小时,所有单词都不属于同一簇。
-
词语可以自然包含在内
传递的
进入集群,即。
A
类似于
B
和
B
类似于
C
,所以这三个应该在同一个集群中。这意味着您必须实现某种图遍历算法。
-
性能在很大程度上取决于训练语料库:只有当语料库足够大时,gensim word2vec才能捕获适当的相似度。因此,Gemnsim超参数和文本预处理也很重要。
下面是一个简单但可能不是很有效的算法,用于识别集群:
model = gensim.models.word2vec.Word2Vec(sentences, iter=10, min_count=5, size=300, workers=4)
vocab = model.wv.vocab.keys()
threshold = 0.9
clusters = {}
for word in vocab:
for similar_word, distance in model.most_similar(word)[:5]:
if distance > threshold:
cluster1 = clusters.get(word, set())
cluster2 = clusters.get(similar_word, set())
joined = set.union(cluster1, cluster2, {word, similar_word})
clusters[word] = joined
clusters[similar_word] = joined