大型文档相似性的通用句子编码器

6
我需要创建一个“搜索引擎”体验:从简短的查询(几个词)中,我需要在数千个文档的语料库中找到相关的文档。
经过分析几种方法后,我使用了Google的通用句子编码器获得了非常好的结果。问题是我的文档可能非常长。对于这些非常长的文本,性能似乎正在下降,因此我的想法是将文本分割成句子/段落。
于是我最终得到了每个文档的向量列表(表示文档的每个部分)。
我的问题是:是否有一种最先进的算法/方法可以从向量列表中计算得分? 我不太想将它们合并为一个,因为这会产生与之前相同的效果(相关部分将被稀释在文档中)。是否有评分算法来总结查询和文本不同部分之间的多个余弦相似性?
重要信息:我可以有短文和长文。 因此,我的文档可以有1到10个向量。

为什么不测试哪个更好用:最大值还是平均值? - Sam H.
你找到答案了吗?我正在做类似的事情,我的文档很大,有22-45段落,收集中大约有10K个文档。目前,我无法确定是否应该使用USE。 - Vineet
1个回答

1
一种做法是将所有文档的所有句子嵌入其中(通常将它们存储在诸如FAISS或elastic之类的索引中)。存储每个句子的文档标识符。在Elastic中,这可以是元数据,但在FAISS中,需要在外部映射中保存。 然后:
  1. 嵌入查询
  2. 计算查询和所有句子嵌入之间的余弦相似度
  3. 对于前k个结果,按文档标识符分组并取总和(此步骤是可选的,具体取决于您是要寻找最相似的文档还是最相似的句子,此处假设您正在寻找最相似的文档,从而提高具有更高相似性的文档)。
然后,您应该拥有一个有序的相关文档标识符列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接