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

bla*_*ous 5 nlp machine-learning cosine-similarity word-embedding

我需要创建一个“搜索引擎”体验:从一个简短的查询(几个字),我需要在数千个文档的语料库中找到相关文档。

在分析了几种方法之后,我使用 Google 的 Universal Sentence Encoder 得到了非常好的结果。问题是我的文档可能很长。对于这些很长的文本,看起来性能正在下降,所以我的想法是将文本切成句子/段落。

所以我最终得到了每个文档的向量列表(代表文档的每个部分)。

我的问题是:是否有最先进的算法/方法来计算向量列表的得分?我真的不想将它们合并为一个,因为它会产生与以前相同的效果(相关部分会在文档中被稀释)。任何评分算法来总结查询和文本不同部分之间的多个余弦相似度?

重要信息:我可以有短文本和长文本。所以我可以为一个文档有 1 到 10 个向量。

小智 1

一种方法是嵌入所有文档的所有句子(通常将它们存储在 FAISS 或 elastic 等索引中)。存储每个句子的文档标识符。在 Elastic 中,这可以是元数据,但在 FAISS 中,这需要保存在外部映射中。然后:

  1. 嵌入查询
  2. 计算查询和所有句子嵌入之间的余弦相似度
  3. 对于top-k结果,按文档标识符分组并求和(此步骤是可选的,具体取决于您要寻找最相似的文档还是最相似的句子,这里我假设您正在寻找最相似的文档,从而提升相似度较高的文档)。

然后您应该有一个相关文档标识符的有序列表。