Python 如何有效地调整Gensim Doc2Vec的超参数,以实现文档相似性问题的最大准确性?
我有大约20k个60-150字的文档。在这20K份文件中,有400份文件是已知的类似文件。这400个文档作为我的测试数据 目前,我正在删除这400个文档,并使用剩余的19600个文档来培训doc2vec。然后提取列车和测试数据的向量。现在,对于每个测试数据文档,我找到它与所有19600个train文档的余弦距离,并选择余弦距离最小的前5个。如果前5项中有类似的文件标记,则认为其准确无误。准确度%=准确记录数/记录总数 我找到类似文档的另一种方法是使用doc2Vec最相似的方法。然后使用上述公式计算精度 以上两种精度不匹配。每过一个纪元,一个增加,一个减少 我正在使用此处给出的代码:。用于培训Doc2VecPython 如何有效地调整Gensim Doc2Vec的超参数,以实现文档相似性问题的最大准确性?,python,nlp,gensim,doc2vec,sentence-similarity,Python,Nlp,Gensim,Doc2vec,Sentence Similarity,我有大约20k个60-150字的文档。在这20K份文件中,有400份文件是已知的类似文件。这400个文档作为我的测试数据 目前,我正在删除这400个文档,并使用剩余的19600个文档来培训doc2vec。然后提取列车和测试数据的向量。现在,对于每个测试数据文档,我找到它与所有19600个train文档的余弦距离,并选择余弦距离最小的前5个。如果前5项中有类似的文件标记,则认为其准确无误。准确度%=准确记录数/记录总数 我找到类似文档的另一种方法是使用doc2Vec最相似的方法。然后使用上述公式计
我想知道如何调整超参数,以便使用上述公式获得制造精度。我应该使用余弦距离来查找最相似的文档,还是应该使用gensim最相似的函数?您参考的文章对
Doc2Vec
算法进行了合理的阐述,但其示例代码包括一个非常有害的反模式:在循环中多次调用train(),手动管理alpha
时这几乎不是一个好主意,而且很容易出错。
相反,不要更改默认的minu alpha
,只调用train()
一次所需的epoch
,让方法平滑地管理alpha
本身
你的一般方法是合理的:根据之前关于什么的一些想法,开发一种可重复的模型评分方法,然后尝试各种各样的模型参数,选择一个评分最好的
当您说您自己的两种精度计算方法不匹配时,这有点令人担忧,因为most\u similure()
方法实际上会根据所有已知文档向量检查您的查询点,并返回具有最大余弦相似性的查询点。这些应该与计算出的具有最小余弦距离的相同。如果您在问题中添加了确切的代码–您是如何计算余弦距离的,以及如何调用最相似()
–那么可能很清楚导致差异的原因是什么细微的差异或错误。(应该没有什么本质区别,但考虑到这一点:您可能希望使用most_similor()
结果,因为它们是已知的无缺陷的,并且使用可能比您编写的任何循环都快的高效大容量数组库操作。)
请注意,您不必保留一组已知的高度相似的文档对。由于Doc2Vec
是一种无监督的算法,因此在培训过程中,您不会向它提供首选的“确保这些文档相似”结果。对全套文档进行培训是相当合理的,然后选择最能捕获您想要的最相似关系的模型,并相信包含更多文档实际上有助于您找到最佳参数
(然而,这样一个过程可能稍微高估了未来看不见的文档或其他一些假设的“其他20K”培训文档的预期准确性。但根据您的培训数据,它仍然可能找到“最佳”元参数。)
(如果您在训练期间没有将它们全部输入,那么在测试期间您需要使用infer_vector()
对于看不见的文档,而不仅仅是从培训中查找学到的向量。您还没有显示此类评分/推断的代码,但这是另一个可能出错的步骤。如果您只是将所有可用文档的向量一起培训,则错误的可能性将被消除。)
检查所需文档是否在最相似的前5名(或前N名)中只是给模型打分的一种方法。另一种方法是,在两篇原始的“段落向量”(Doc2Vec
)论文中使用的方法是,对于每一对这样的文档,还随机选取另一个文档。每次报告已知的相似文档时,将模型计算为精确,而不是第三个随机选择的文档。在最初的“段落向量”论文中,使用现有的搜索排名系统(报告某些文本片段以响应相同的探测查询)或手动分类(如Wikipedia或Arxiv)生成此类评估对:同一搜索结果页面中的文本,或同一分类,检查他们在模型中是否比其他随机文档更接近
如果您的问题被扩展到更多描述您尝试过的一些初始参数(例如您提供给Doc2Vec
和train()
)的完整参数),以及似乎有帮助或有害的内容,那么可能会建议其他值得检查的参数范围 嘿!非常感谢您提供的宝贵信息。我几乎没有疑问——如果我把双克和三克或者角色木瓦放进去会有意义吗?如果是,那怎么办?如果没有,那么概念上的问题是什么。论文中写到,PV-DM的性能比PV-DBOW好,但对于我的数据集来说,情况完全相反。你能解释一下原因吗?对于你的语料库和最终目的来说,字符n图、单词二元图或单词三元图是否有效,这是你必须评估的。(可能是这样,但这要视情况而定,一旦你对模型进行了可重复的定量评估,并返回你喜欢的结果类型,你就可以检查这些选项。)Doc2Vec
只取你想要的