Embedding 检索时会获得问题与文本之间的相似分,以往的 RAG 服务直接基于相似分进行排序,但是事实上向量检索的相似分是不够准确的。
原因是 Embedding 过程是将文档的所有可能含义压缩到一个向量中,方便使用向量进行检索。但是文本压缩为向量必然会损失信息,从而导致最终 Embedding 检索的相似分不够准确。
可以看到 Embedding 过程包含两步:
- 运行单个 Transformer 计算以创建查询向量。
- 将查询向量与具有余弦相似性的文档向量进行比较,获取相似文档。
而 Rerank 阶段不会向量化,而是将查询与匹配的单个文档 1 对 1 的计算相似分,没有向量化带来的信息损失,必然会得到更好的效果,对应的过程如下所示:
那直接执行 Rerank 是否可行呢?肯定也是不行的,Rerank 需要 1 对 1 计算相似分的,在海量的文档中一一比对查找文档,效率肯定是不能接受的。
除了这个原因以外,拆分 Rerank 阶段也提供了更加灵活的筛选文档的能力,比如 Ragflow 就是在 Rerank 中使用 0.3 * 文本匹配得分 + 0.7 * 向量匹配得分 加权得出综合得分进行排序,Rerank 阶段可以提供类似这种灵活的选择手段。
标签:检索,RAG,相似,Rerank,ReRank,文档,Embedding,向量 From: https://blog.csdn.net/u014297502/article/details/143000495