为什么相同的 tokenize 单词列表 doc2vec 的结果是错误的?

问题描述 投票:0回答:1

我正在使用 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
1个回答
0
投票

您尚未展示您如何进行

Doc2Vec
训练;那里可能出了问题。如果完全相同的 4 个单词集给出非常不同的
infer_vector()
结果 - 而不是只有一点点不同的结果,正如这种随机算法的正常情况 - 一些问题可能是:

  • 模型中没有任何单词
  • 该模型从未接受过真正的训练,可能是由于训练代码或提供的语料库中存在一些错误
  • 模型具有非典型/不合适的参数

我建议:

  • 将日志记录设置为
    INFO
    级别,然后重新运行训练,仔细观察输出日志。验证训练是否需要时间,并报告模型词汇表中唯一单词数量和语料库中单词总数的合理值,并且不显示错误/警告
  • 训练完成后,检查
    len(doc2vec_model.dv)
    len(doc2vec_model.wv)
    等值对于预期文档和已知单词数量是否合理

如果您仍然遇到问题,请展开您的问题文本以显示您用于初始化和训练

Doc2Vec
模型的代码和参数,以及日志记录中的一些有意义的摘录,这些摘录使您相信事情在其他方面正常工作,以及一些详细信息语料库的大小(例如总字数、总文档数以及每个文档的平均字数)。

另请注意:

© www.soinside.com 2019 - 2024. All rights reserved.