我们首先创建或读取矢量化数据

Connect Asia Data learn, and optimize business database management.
Post Reply
suchona.kani.z
Posts: 192
Joined: Sat Dec 21, 2024 5:24 am

我们首先创建或读取矢量化数据

Post by suchona.kani.z »

相反,我们尝试通过搜索尽可能多的相关文档来最大化检索召回率(找到的相关部分的比例)。同时,通过向法学硕士移交尽可能少的高度相关的文档,以最大限度地提高法学硕士的召回率。

最后一步是通过所谓的排名或交叉编码模型实现的。这些为通过将用户查询和相应文档嵌入在一起而找到的每个文档生成高度相关的相似度分数。与经典 RAG 系统中的初始嵌入相比,嵌入文档时可以考虑用户请求的特定上下文。然而,缺点是嵌入发生在推理运行时,因此导致查询延迟明显更高。最后一步,通过相似性搜索识别出的文档根据其排名分数进行排序,并将 k 个最相关的文档转移到法学硕士。

重新排序编码示例
我们借鉴了关于 RAG 的第一篇博客文章的经验(参见上文 1),并在此再次依赖 Python 和 LlamaIndex 作为连接 AI 模型和算法的框架。可执行环境的基础知识可以在 LlamaIndex 文档中找到。



此代码用于创建新的向量存储或读取现有的向量存储。索引对象为我 护理院电子邮件列表 们提供了一个文档结构,然后我们可以使用它创建一个查询对象query_engine。


程序如下:

我们首先使用相似性搜索来搜索 10 个相关块。通常这个数字要低得多,为三到五。随着数量的增加,我们可以优化检索召回,并可以更好地利用重新排名。
在后处理步骤中,我们创建一个后处理器来调用重新排名,然后返回三个最相关的命中。
现在有多种方法可以具体实施重新排名。例如,使用 LLMRerank 模块,可以调用不同的语言模型,并请求相应的提示来重新评估之前的命中。

上下文扩展/丰富
问题 B 和 C 可以通过所谓的上下文扩展或上下文丰富来弥补。一种相对简单的方法是将相似性搜索的嵌入限制为单个或几个句子,从而增加所找到内容的相关性。然而,当找到的部分被传递到语言模型时,周围的句子也会被传递,以丰富答案生成的上下文。周围句子的数量或附加内容的范围代表一个(可优化的)参数。

所谓的父子分块方法更进一步。分块时,不是将单个固定块大小指定为参数,而是至少指定较大(“父”)和较小(“子”)部分大小。作为父块一部分的子块在(向量)数据库中相互引用。较小且因此更相关的部分用于相似性搜索。但是,如果为父块找到多个子块,则父块将传递到 LLM 进行响应生成,而不是几个较小的部分。
Post Reply