python-3.x - 如何提高 Doc2vec 余弦相似度的重现性
问题描述
我正在使用 Gensim 的 Doc2vec 来训练一个模型,我使用 infer_vector 来推断一个新文档的向量来比较模型的相似度文档。但是,重复使用同一个文档可能会产生非常不同的结果。这样就无法准确评估类似的文档。
搜索网络提到,infer_vector 具有随机特性,所以每次产生一个新的文本向量,都会有所不同。
有没有办法解决这个问题?
model_dm =pickle.load(model_pickle)
inferred_vector_dm = model_dm.infer_vector(i)
simsinput =model_dm.docvecs.most_similar([inferred_vector_dm],topn=10)
解决方案
如果您提供一个大于默认值的可选epochs
参数,则生成的向量(从运行到运行单个文本)应该变得更加相似。infer_vector()
(这可能对小文本特别有用。)
也就是说,运行之间应该只有很小的“抖动”,这对你以后的比较不会有太大的影响。(您的下游比较应该容忍小的变化。)使用这样的算法,使用随机化,没有绝对“正确”的结果,只有有用的结果。
如果运行之间的差异仍然很大——例如most_similar()
从运行到运行显着改变结果,那么您的模型或设置可能存在其他问题:
Doc2Vec 在玩具大小的训练集上效果不佳 - 已发表的作品使用的文档集从数千到数百万个文档,其中每个文档包含数十到数千个单词。如果你只使用少量的短句,你将不会得到好的结果。
infer_vector()
需要获取字符串令牌列表,而不是字符串。而且,这些令牌应该已经以与训练数据相同的方式进行了预处理。输入的任何未知单词都infer_vector()
将被忽略,使输入更短(或零长度),使结果更加(或完全)随机。
另外,gensimDoc2Vec
有本机.save()
和.load()
方法,应该使用而不是原始方法pickle
——尤其是在较大的模型上,它们会更有效地做事或没有错误。(虽然注意:他们可能会创建多个保存文件,这些文件应该放在一起,以便加载主文件可以找到附属文件。)
推荐阅读
- android - Android Back Button Keep 在按下时将我带回到第一个屏幕并且如果打开则没有关闭抽屉
- bash - 使用 sed 删除多个主题标签
- java - 使用 Java 8 流 API 的累积和
- javascript - (HTML + JS 问题)将输入类型文件中的图像加载到 img
- java - 使用嵌入式 Postgressql 数据库进行 Spring Boot 测试
- php - 在搜索 Algolia 索引时使关系数据在 eloquent 集合中可用
- db2 - 创建联合(数据虚拟化)服务器时的通信错误(目标为 DB2 on Cloud)
- sql - SQL:根据另一列中的重复值查询一列
- vue.js - vuetify 子组件属性
- video - ffmpeg 录制延时摄影机 v4l2