一、为什么需要重排序?
检索增强生成(Retrieval Augmented Generation,RAG)技术看似充满无限可能,但在实际应用中,许多人发现构建的RAG系统结果并不尽如人意。
尽管RAG相对容易入门,但要真正掌握其精髓却相当困难。实际上,建立一个有效的RAG系统远不止将文档存入向量数据库并叠加一个大语言模型那么简单。虽然这种方法有时会有效,但并非总能保证成功。
我们知道,RAG 通过在大量文本文档中进行语义搜索来工作,这些文档的数量可能达到数十亿。为了实现大规模搜索的快速响应,我们通常采用向量搜索技术。具体而言,就是将文本转化为向量后,放入一个向量空间内,再通过余弦相似度等度量标准来比较它们与查询向量的相似度。
向量搜索的前提是需要向量,这些向量通常将文本背后的意义压缩成768或1536维的形式,这一过程不可避免地会丢失一些信息。因此,我们常常会发现,即使是排名前三的文档,也可能遗漏了一些关键信息。
在此,我们关注的指标是召回率,即“我们检索到的相关文档的比例”。需要注意的是,召回率不考虑检索到的文档总数。
因此,理论上通过返回所有文档可以实现完美的召回率。然而,这在实际操作中是不可行的,因为大语言模型对可处理的文本量有限制,这个限制称为上下文窗口。
如果较低位置的文