我正在使用 Doc2vec 模型。我使用包含维基百科中超过 2 万篇文章的数据集来预训练模型。之后,我尝试通过计算两个句子之间的相似度来测试结果。
我有两句话:
1. The process of searching for a job can be very stressful.
2. The job search process can be very stressful.
经过预处理和标记化后,我得到了句子 1 的单词列表是
list_1 = ['process', 'search', 'job', 'stress']
,句子 2 的单词列表是 list_2 = ['job', 'search', 'process', 'stress']
。
但是当我使用vec_1 = doc2vec_model.infer_vector(list_1)
和vec_2 = doc2vec_model.infer_vector(list_2)
之后。我使用gensim.matutils.full2sparse
和gensim.matutils.cossim
来计算相似度cossim。
我得到的结果接近 0 值,如
0.00709335870
。
看来不对。我认为结果应该接近 1。
我的问题是什么以及如何修复此错误?
这是我的代码的一部分:
//model.tokenize_word(data['document_1'] is ['process', 'search', 'job', 'stress']
vec_1 = doc2vec_model.infer_vector(model.tokenize_word(data['document_1']))
doc2vec_model.random.seed(0)
// model.tokenize_word(data['document_2'] is ['job', 'search', 'process', 'stress']
vec_2 = doc2vec_model.infer_vector(model.tokenize_word(data['document_2']))
vec_1 = gensim.matutils.full2sparse(vec_1)
vec_2 = gensim.matutils.full2sparse(vec_2)
similarity = gensim.matutils.cossim(vec_1, vec_2)
print(similarity) // 0.00709335870
您尚未展示您如何进行
Doc2Vec
训练;那里可能出了问题。如果完全相同的 4 个单词集给出非常不同的 infer_vector()
结果 - 而不是只有一点点不同的结果,正如这种随机算法的正常情况 - 一些问题可能是:
我建议:
INFO
级别,然后重新运行训练,仔细观察输出日志。验证训练是否需要时间,并报告模型词汇表中唯一单词数量和语料库中单词总数的合理值,并且不显示错误/警告len(doc2vec_model.dv)
和len(doc2vec_model.wv)
等值对于预期文档和已知单词数量是否合理如果您仍然遇到问题,请展开您的问题文本以显示您用于初始化和训练
Doc2Vec
模型的代码和参数,以及日志记录中的一些有意义的摘录,这些摘录使您相信事情在其他方面正常工作,以及一些详细信息语料库的大小(例如总字数、总文档数以及每个文档的平均字数)。
另请注意:
0.0
值,它们应该保持在密集表示中