gpt4 book ai didi

python - Doc2Vec - 查找测试数据中的文档相似性

转载 作者:行者123 更新时间:2023-11-30 09:43:27 24 4
gpt4 key购买 nike

我正在尝试使用训练数据训练 doc2vec 模型,然后使用以下方法查找测试数据中特定文档的测试数据中的相似性经过训练的 doc2vec 模型。但是,我无法确定如何执行此操作。

我目前使用model.docvecs.most_similar(...) 。但是,此函数只能查找训练数据中每个文档与测试数据中特定文档的相似性。

我尝试使用 model.docvecs.n_similarity(inferred_vector.tolist(), testvectors[i].tolist()) 手动将测试数据中特定文档的推断向量与测试数据中每个其他文档的推断向量进行比较但这会返回 KeyError: "tag '-0.3502606451511383' not seen in training corpus/invalid"因为字典中没有向量。

最佳答案

训练 Doc2Vec 模型的行为会留下从训练数据中学习到的文档向量的记录,是的,most_similar() 只是看起来在这些向量中。

通常,对新文档执行任何不属于训练的操作都需要使用 infer_vector()。请注意这样的推论:

  • 忽略新文档中的任何未知单词
  • 可能会受益于参数调整,尤其是对于短文档
  • 目前在单个线程中一次只完成一个文档 - 因此,获取一大批 N 千个文档的推断向量实际上可能比在相同的 N 千个文档上训练新模型要慢
  • 不一定是确定性的,除非您采取额外的步骤,因为底层算法在训练/推理期间使用随机初始化和随机选择过程
  • 只是为您提供向量,而不将其加载到任何方便的存储对象中以执行进一步的类似 most_similar() 的比较

另一方面,来自“卡住”模型的此类推理可以跨进程或机器并行化。

您提到的 n_similarity() 方法并不真正适合您的需求:它需要现有文档向量的查找键(“标签”)列表,不是 像您提供的原始向量。

您在答案中提到的 similarity_unseen_docs() 方法有点合适,但只需要一对文档,每次重新计算它们的向量 - 如果单个新文档的文档向量有点浪费需要与许多其他新文档的文档向量进行比较。

您可能只想使用“训练文档”和“测试文档”来训练一个全新的模型。然后,作为批量训练的一部分,所有“测试文档”都会计算其文档向量,并将其存储在模型中。对于许多可能的应用程序来说,这是一个适当的选择,并且确实可以基于仅以完全无监督的方式出现在“测试文档”中的单词来学习有趣的关系。而且您的问题中还没有任何部分可以解释为什么这里不能考虑它。

或者,您需要infer_vector()所有新的“测试文档”,并将它们放入类似于中的各种KeyedVectors实用程序类的结构中>gensim - 记住一个数组中的所有向量,记住从 doc-key 到向量索引的映射,并在一组向量上提供高效的批量 most_similar()

关于python - Doc2Vec - 查找测试数据中的文档相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com