我训练了一个doc2vec模型。
doc2vec = Doc2Vec(vector_size= 300,
window=10,
min_count=100,
dm=1,
epochs=40)
doc2vec.build_vocab(corpus_file=train_data, progress_per=1000)
doc2vec.train(....)
文档用增量整数 0、1、...1000 进行标记。
为了获取与 tag=0 的文档最相似的单词,我使用了:
doc_vector = doc2vec.dv[tag]
sims = doc2vec.wv.similar_by_vector(doc_vector, top_n=20)
相似度是有道理的,但是,相似度分数确实看起来很“奇怪”,几乎都是
1.0
。我检查了top_n=3000
,仍然在1.0左右。获取所有具有高相似度分数的单词是否有意义。
在将此算法用于各种自然语言文本的传统用途中,不,最相似的“最近邻居”文本都具有接近
1.0
相似度的情况并不常见。
这表明您的设置可能存在问题 - 除非您的数据确实包含大量几乎相同的“文本”。
您是否可能使用一些非典型语料库,也许不是自然语言,其中这么多超接近的相似度分数仍然准确且有用?这就是最终的考验。
也就是说:如果对于一堆文档探针,“相似词”有所不同,并且对于原始文档而言单独合理/有用,我就不会太担心相似性分数的绝对大小。
这些分数相互比较比任何绝对量表都更有意义。
0.9
的相似度不能被有意义地解释为“X% 相似”,甚至“在前 X% 最相似的候选者中”。它仅意味着“比具有 0.8 相似度的项目更相似,并且比具有 0.95 相似度的项目更不相似” .
如果想更好地了解是否出现问题,需要注意一些事项:
是否至少有一些单词的相似度分数要低得多,这些单词有意义吗?文档与文档之间的比较似乎大致合理吗?
您的数据的大致特征和大小是什么?您的语料库中有多少文档和独特单词?训练后的模型中还剩下多少幸存单词(应用
min_count=100
截止后)?
如果您在启用日志记录的情况下运行,各种步骤和进度报告是否表明正在创建预期大小和培训工作的模型?