如何改进 AI 模型在特定环境中的知识检索

0 阅读6分钟

这世上肯定有某个角落,存在着能完全领会我想表达的意思的人。

—— 村上春树

在当今数字化的时代,AI 模型的应用越来越广泛,而如何提高其在特定环境中的知识检索能力成为了一个关键问题。本文将结合Anthropic 文章,深入探讨改进 AI 模型知识检索的方法。

一、传统 RAG 方法的局限

Retrieval-Augmented Generation(RAG)是一种常见的增强 AI 模型知识的方法。它通常将知识库拆分为小的文本块,进行嵌入编码后存储在向量数据库中。在运行时,根据用户查询的语义相似性查找最相关的块,并添加到提示中。然而,传统的 RAG 方法存在一些问题。

例如,当我们使用一个传统的 RAG 模型来回答关于 “量子力学中的不确定性原理” 的问题时,可能会因为编码信息时丢失了上下文,而无法准确检索到相关的知识块。比如,知识库中有一个关于 “海森堡不确定性原理是量子力学的基本原理之一,它表明无法同时精确地测量一个粒子的位置和动量” 的文本块,但由于缺乏上下文,模型可能无法将这个块与用户的查询准确匹配。

二、Contextual Retrieval 方法

为了解决传统 RAG 的局限,Contextual Retrieval 方法应运而生。它主要包括两个子技术:Contextual Embeddings 和 Contextual BM25。

1. Contextual Embeddings

在嵌入之前为每个块预置特定于块的解释上下文,就像给每个知识块加上了一个独特的标签。比如,对于一个关于 “牛顿第二定律” 的知识块,可以添加 “物理学中,牛顿第二定律描述了物体的加速度与所受外力和物体质量之间的关系” 这样的上下文。这样,在检索时,模型可以更好地理解每个块的含义,提高检索的准确性。

2. Contextual BM25

创建 BM25 索引。BM25 是一种排名函数,基于词频 - 逆文档频率(TF - IDF)概念工作,对于包含唯一标识符或技术术语的查询特别有效。例如,当用户查询 “HTML 中的 <head> 标签有什么作用” 时,BM25 可以通过查找特定的文本字符串 “<head> 标签” 来识别相关文档。

image.png

三、实现 Contextual Retrieval 的方法

实现 Contextual Retrieval 并非易事,需要考虑多个因素。

1. 块边界

确定知识块的合理边界非常重要。如果块划分得太大,可能会包含过多无关信息,影响检索准确性;如果块划分得太小,可能会丢失重要的上下文。例如,在一个关于历史事件的知识库中,将 “第二次世界大战的起因、过程和结果” 划分为一个块可能太大,而将每个单词作为一个块又可能太小。

2. 嵌入模型的选择

不同的嵌入模型具有不同的特点和性能。例如,有些模型在处理自然语言文本时表现出色,而有些模型则更适合处理特定领域的知识。在选择嵌入模型时,需要根据具体的应用场景进行评估和选择。

3. 自定义上下文生成器提示

可以通过自定义上下文生成器提示来提高生成的上下文质量。比如,对于一个关于科技新闻的知识库,可以使用 “简要概括该新闻的主要内容,并提供相关的背景信息” 作为提示,让模型生成更有针对性的上下文。

<document>  

{{WHOLE_DOCUMENT}} 

 </document>  

Here is the chunk we want to situate within the whole document  

<chunk>

  {{CHUNK_CONTENT}}  

</chunk>  

Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else.

4. 块数的考虑

向上下文窗口中添加更多的数据块chunk会增加包含相关信息的机会,但也可能分散模型的注意力。需要在增加块数和保持模型专注度之间找到平衡。例如,在回答一个关于人工智能发展趋势的问题时,可能不需要将整个知识库中的所有块都添加到上下文窗口中,而是选择一些与人工智能发展相关的关键块。

四、Reranking 技术进一步优化性能

Reranking 是一种常用的过滤技术,可以确保只有最相关的块传递给模型。例如,当我们使用一个知识检索系统来回答关于 “全球气候变化的影响” 的问题时,经过初步检索可能会得到多个相关的知识块。通过 reranking 技术,可以对这些块进行重新排序,将最相关的块排在前面,提高模型的回答质量。

但需要注意的是,reranking 会增加少量的延迟。在实际应用中,需要在重新排列更多块以提高性能和减少块数以降低延迟和成本之间找到平衡。

image.png

image.png

五、结论

通过对 Contextual Retrieval 和 reranking 技术的介绍,我们可以看出,这些方法可以结合使用,以最大限度地提高 AI 模型在特定环境中的知识检索准确性。

  1. embeddings+BM25 比单独使用 embedding 要好;

  2. Voyage 和 Gemini 在我们测试过的 Voyage 和 Gemini 中具有最好的嵌入;

  3. 将前 20 个 chunk 传递给模型比只传递前 10 个或前 5 个更有效;

  4. 向块添加上下文可以大大提高检索准确性;

  5. 重新排名总比没有重新排名好;

  6. 所有这些好处叠加在一起:为了最大限度地提高性能,我们可以将上下文嵌入(来自 Voyage 或 Gemini)与上下文 BM25 相结合,再加上重新排名步骤,并将 20 个块添加到提示中。

总之,改进 AI 模型在特定环境中的知识检索是一个复杂而又具有挑战性的问题。但通过不断地探索和创新,我们相信可以找到更加有效的方法,为 AI 技术的发展做出更大的贡献。

那么,你对这些新技术有什么看法?你觉得它们会给我们的生活带来什么样的变化?欢迎在评论区留言讨论!别忘了点赞、收藏、转发哦,你们的支持是我继续探索AI世界的动力!我是小李,我们下期再见!