Gensim 的“model.wv.most_similar”返回语音相似的单词

dze*_*lee 3 python embedding gensim data-science word-embedding

gensimwv.most_similar返回语音上接近的单词(相似的声音),而不是语义上相似的单词。这是正常的吗?为什么会发生这种情况?

以下是有关的文档most_similarhttps://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.most_similar

In [144]: len(vectors.vocab)
Out[144]: 32966

... 

In [140]: vectors.most_similar('fight')
Out[140]:
[('Night', 0.9940935373306274),
 ('knight', 0.9928507804870605),
 ('fright', 0.9925899505615234),
 ('light', 0.9919329285621643),
 ('bright', 0.9914385080337524),
 ('plight', 0.9912853240966797),
 ('Eight', 0.9912533760070801),
 ('sight', 0.9908033013343811),
 ('playwright', 0.9905624985694885),
 ('slight', 0.990411102771759)]

In [141]: vectors.most_similar('care')
Out[141]:
[('spare', 0.9710584878921509),
 ('scare', 0.9626247882843018),
 ('share', 0.9594929218292236),
 ('prepare', 0.9584596157073975),
 ('aware', 0.9551078081130981),
 ('negare', 0.9550014138221741),
 ('glassware', 0.9507938027381897),
 ('Welfare', 0.9489598274230957),
 ('warfare', 0.9487678408622742),
 ('square', 0.9473209381103516)]
Run Code Online (Sandbox Code Playgroud)

训练数据包含学术论文,这是我的训练脚本:

from gensim.models.fasttext import FastText as FT_gensim
import gensim.models.keyedvectors as word2vec

dim_size = 300
epochs = 10
model = FT_gensim(size=dim_size, window=3, min_count=1)
model.build_vocab(sentences=corpus_reader, progress_per=1000)
model.train(sentences=corpus_reader, total_examples=total_examples, epochs=epochs)

# saving vectors to disk
path = "/home/ubuntu/volume/my_vectors.vectors"
model.wv.save_word2vec_format(path, binary=True)

# loading vectors 
vectors = word2vec.KeyedVectors.load_word2vec_format(path)
Run Code Online (Sandbox Code Playgroud)

goj*_*omo 6

您已选择使用该FastText算法来训练向量。该算法专门利用子词片段(例如'ight''are')来为不在训练集中的“词汇外”单词合成良好的猜测向量,这可能是您的结果的一个贡献者正在看到。

然而,通常单词的独特含义占主导地位,此类子词的影响仅对未知单词起作用。而且,健康的词向量集中的任何词的最相似列表很少有如此多的0.99相似之处。

所以,我怀疑你的训练数据中有一些奇怪的或有缺陷的东西。

它是什么类型的文本?它包含示例用法的总字数是多少?

训练期间信息级日志中显示的训练进度/速度是否存在任何令人困惑的方面?

(对于只有 33K 个唯一单词的词汇表,300 个维度也可能有点过多;这是处理数十万到数百万个唯一单词和大量训练数据时常见的向量大小。)