生产环境中的文档相似性

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

我们有n个文件。在用户提交新文档后,我们的目标是告知他可能的现有文档重复(就像stackoverflow建议问题可能已经有答案)。

在我们的系统中,新文档每分钟上传一次,主要是关于同一主题(重复的可能性更大)。

我们当前的实现包括在文档上训练的gensim doc2vec模型(标记有唯一文档ID)。我们推断新文档的向量,并用它找到most_similar docs(ids)。选择doc2vec模型背后的原因是我们希望利用语义来改善结果。据我们所知,它不支持在线培训,因此我们可能需要安排一个定期更新模型的cron或其他东西。但是,随着文件的爆发,调度cron将是不利的。当模型尚未针对新数据进行培训时,用户可以上传重复项。同时给予大量数据,培训时间也会更长。

所以我想知道大公司如何处理此类案件。有没有更好的选择?或更好的算法来解决这个问题?

python machine-learning nlp gensim doc2vec
1个回答
0
投票

您不必将旧模型降低以开始训练新模型,因此尽管存在任何训练滞后或新文档突发,您仍然可以使用最佳模型。

根据文档空间随时间变化的程度,您可能会发现重新培训可以获得微不足道的好处。 (建立在大型历史记录上的一个好模型可能无限期地推断出新的向量。)

请注意,调整推理以使用更多steps(特别是对于短文档)或较低的起始alpha(更像是训练默认值0.025)可能会产生更好的结果。

如果单词向量可用,则还有“文字移动距离”(WMD)计算文档相似度,这可能更好地识别紧密重复。但请注意,计算起来可能非常昂贵 - 您可能只想针对可能的候选子集​​进行此操作,或者必须添加许多并行处理器才能进行批量处理。另一个更新的距离度量称为“软余弦相似度”(在最近的gensim中可用),介于简单的矢量与矢量余弦相似性和完整的WMD之间,可能值得尝试。

如果词汇量没有扩展,你可以加载一个旧的Doc2Vec模型,并继续train()它 - 从一个已经工作的模型开始可以帮助你用更少的传递实现类似的结果。但请注意:它目前不支持学习任何新词,最安全的做法是重新训练所有已知例子的交错。 (如果您只训练增量新示例,模型可能会失去对未重新呈现的旧文档的平衡理解。)

(如果您主要关注的是复制精确词语的文档,而不仅仅是类似的模糊主题,您可能会考虑混合使用其他技术,例如将文档分解为字符包,或者' shingleprinting'在抄袭检测应用程序中的共同点。)

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