给定一个包含大量(短)文档(约 100 万)的索引或数据库,我正在尝试对每个新传入的文档进行某种新颖性检测。
我知道我必须计算新文档与索引中每个文档的相似度。如果相似度低于某个阈值,则可以认为该文档是新颖的。一种常见的方法——我想做的——是使用向量空间模型并计算余弦相似度(例如,通过使用 Apache Lucene)。
但是这种方法有两个缺点:1)计算量大,2)没有分别包含文档和单词的语义。
为了克服这些缺点,我的想法是使用 LDA 主题分布或命名实体来增强 Lucene 索引和带有语义的查询(即文档集合和每个新文档)。
现在,我对具体的实现完全迷失了。我已经使用 Mallet 训练了一个 LDA 主题模型,并且我还能够在语料库上进行命名实体识别。但是我不知道如何使用这些主题和命名实体来实现新颖性检测。更具体地说,我不知道如何使用这些功能来创建索引和查询。
例如,将一个文档的所有命名实体作为单独的字段存储在索引中、添加某些权重(即提升它们)并使用 MultiFieldQuery 是否已经足够?我不认为这已经为相似性检测增加了某种语义。这同样适用于 LDA 主题:将每个术语的主题概率添加为有效负载并实现新的相似度分数是否足够?
如果您能提供一些关于如何在 Lucene 中合并 LDA 主题或命名实体以进行某种新颖性检测或语义相似性测量的提示甚至代码片段,我将非常高兴。
先感谢您。