Anthropic的新RAG方法——提升大型语言模型在特定领域的表现

2024/11/1 21:03:24

本文主要是介绍Anthropic的新RAG方法——提升大型语言模型在特定领域的表现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

大规模语言模型的兴起

大型语言模型是超级强大的工具。我记得ChatGPT第一次发布的时候,我说不行,绝对不行,但……然后我发现它跟我们一样,在Ubuntu上选CUDA版本时也是一筹莫展,哈哈。

总之,如果你问一个对AI不太了解的人关于ChatGPT,他们可能会说这就像从互联网上进行语义搜索一样。差不多就是这样,但其实更复杂。这些模型将海量的信息压缩进了自身的权重中,并逐字(子词)进行预测。

尽管这些大型语言模型在聊天和回答问题方面表现出色,例如编写API使用Flask或为我们准备单元测试,但在特定的专业领域它们的表现不够理想。

自己动手微调训练LLM?

要怎么微调训练你自己的LLM呢?

尽管大型语言模型(LLMs)在通用知识任务上表现出色,但在特定领域中却常常表现不佳。但这种广泛的能力是以牺牲特定领域的专业知识为代价的,更像通才而非专才。

这一限制使得微调变得重要。微调是将一个大规模语言模型调整到特定领域或任务,从而使其在特定领域的表现更加出色。然而,这一过程远比仅仅让模型接触特定领域的数据复杂得多。

微调面临的挑战

对大型语言模型(LLM)进行微调面临着重大挑战,组织通常有两个选择:

  1. 对开源模型进行微调
  2. 使用提供专有模型微调服务的API接口

无论选择哪条路径,财务因素是最重要的。成本可能包括API使用费用或训练所需的云GPU资源费用。即使有足够的财力资源,组织也可能会面临高质量、相关数据的短缺,这些数据对于进行有效微调来说是必要的。

数据的敏感性带来了额外的复杂性。组织必须确保数据来源的适当归属和可追溯性,在研究论文中引用某个LLM可能引发一些质疑。此外,防止专有信息泄露给LLM提供商是主要顾虑。

虽然对大语言模型进行微调是人工智能社区中的热门话题,但这绝不是一个轻率的决定。这个过程需要仔细权衡资源、数据质量和潜在风险,就像引入一个高维护成本的技术栈一样。

检索增强生成(RAG)

检索增强生成(RAG)为这些挑战提供了一个潜在的解决方案。RAG直接将大型语言模型连接到组织的知识库,从而可以在不重新训练模型的情况下检索相关数据。这种方法提高了特定领域的性能,同时确保了数据的安全,并减少了微调的复杂性。

提示设计

RAG系统是如何工作的

检索增强生成(RAG)系统由两个主要部分组成:

1. 创建知识体系

这是准备阶段,您的文件将在这里被处理和存储。

  • 文档切分: 首先,将文档拆分成更小、更易于管理的子文档或片段。
  • 嵌入计算: 然后,对每个这些片段计算其嵌入。这些数值表示捕获了文本的语义信息。
  • 向量数据库: 接着,将计算出的嵌入存入向量数据库中,以便以后进行高效的相似性搜索。
2. 生成环节:

系统在此响应用户的问题,这是运行时或推理环节。

  • 查询处理: 当用户提出一个问题时,系统会计算该查询的语义向量。
  • 检索: 系统根据查询语义向量与存储的片段嵌入向量之间的相似度,从向量存储中检索出最相关的片段。
  • 大型语言模型集成: 系统将检索到的片段与原始查询一起输入到大型语言模型 (LLM) 中。
  • 响应生成: 系统根据查询和检索到的片段提供的上下文生成响应。
提升检索的准确性

尽管这种方法在语义相似性方面表现很好,它仍然可能存在失效点。为了提高准确性,许多系统会将这种语义搜索与传统的关键词搜索结合使用。

  • BM25集成: 当用户查询和数据库包含特定关键词时,BM25算法可以发挥关键作用。
  • 混合方法: 通过将语义搜索与基于关键词的方法相结合,RAG系统可以提供更强大且准确的结果,特别是在需要精确术语匹配的场景下。

这种方法的混合策略使RAG系统能够结合语义理解和传统信息检索技术的优势,从而提供更可靠和语境相关的回答。据Anthropic报道,这种方法使得结果提高了大约1个百分点。

.zh: 这个链接 ("contextual retrieval")(来自Anthropic网站)

BM25(一种检索算法):

有时,系统有时候会错过重要的精确匹配。这时,BM25 就能帮上大忙了。它就像一个超级版的“Ctrl+F”(查找功能),专门用来找完全匹配的词或短语。

BM25大放异彩的应用示例

  1. 错误代码:精确查找“错误代码XYZ-123号”。
  2. 产品编号:精确查找“型号AB-9000号”。
  3. 特定术语:查找生物书中“线粒体”。
回顾一下再继续

一个标准的RAG系统首先将大量文档拆分成更小的部分来运作。这些部分被转换成数字(称为嵌入),以捕捉其意义,并存储在一个特殊数据库中,以便快速搜索。当你提问时,系统会浏览这些存储的部分,并使用两种方法选择最相关的部分:一种基于词的重要性(TF-IDF),另一种基于嵌入。然后,它将这些最佳部分结合起来,并使用一个智能模型来生成一个清晰的答案。

链接:

这种方法哪里不对劲

这里举一个标准RAG系统(RAG)可能失败的例子。

2023年药物X在临床试验中的长期影响是什么?

系统检索到的相关片段可能包括以下文本:

> 治疗后,参与者有了显著的进步。

然而,这一段并没有指明使用了哪种药物,是否指的就是2023年的试验,或者改进是否具有长期性。没有这些额外的背景信息,系统就无法给出准确的回答,可能会给出误导性或不完整的答复。

上下文检索介绍

实际上,这会是这样的。你将从你的语料库中选择一个PDF文件或文档,然后将其拆分为多个部分。之后,你一次处理一个部分,并将其与原始文档一起输入如下类似的提示。

    <document>   
    {{全文}}   
    </document>   
    这里是我们希望在整篇文档中定位的片段   
    <chunk>   
    {{片段内容}}   
    </chunk>   
    请简短描述此内容在全文中的位置,以帮助改善搜索。只回答上下文,不要其他内容。

这将为每个片段生成上下文信息,然后将其与相关上下文信息结合。你将给定的片段通过嵌入模型处理,然后这些嵌入将存储在标准的向量数据库中。另一方面,我们也会更新BM25索引,这实际上是使用TF-IDF,即“词频逆文档频率”。这基本上是一种基于关键词的搜索方式。因此,在每个片段中,你需要添加50到100个令牌。我认为你可以看到这种方法的一些潜在问题。其中一个问题是这将带来大量的额外开销,不仅因为你为每个片段都添加了大量令牌,还因为每个片段都要通过一个大型语言模型进行处理,这会累积大量的不同令牌,这会进一步增加处理的复杂性。

性能提升

基于上下文的嵌入将前20块检索失败的几率降低了35%(从5.7%降到3.7%)。

将基于上下文的嵌入与上下文BM25结合使用将前20块检索失败的几率降低了49%(从5.7%降到2.9%)。

重新排序

检索模型被设计用来提取信息块,这些模型简洁且高效。然而,它们依赖于基本的提取技术,例如向量间的欧氏距离或余弦相似度。这种方法可能会导致次优的结果,因为它更重视提取的速度和量,而不是准确性。

相比之下,重排模型更为繁重且运行速度更慢,因此不适合直接处理大规模提取内容。相反,它们可以用于重排检索器识别出的较小范围片段。

关键区别在于重排序器能够对用户提问和每个片段内容进行跨注意力机制。这使它们能够发现这两段文本之间的重要关系,而这些关系可能被更简单的相似度计算方法所忽略。

点击这里了解更多关于重排器的内容

Rerank 是一个强大的语义增强工具,可提升搜索质量。利用 Rerank 的语义增强来提高搜索的准确性和相关性。了解更多,请访问 cohere.com/rerank。
重排引擎当收到一个查询和多个文档时,返回这些文档与查询的相关性排名。
资源库
Anthropic公司介绍其上下文检索功能Anthropic是一家致力于开发可靠、透明且可控的人工智能的人工智能安全与研究公司
给定一个查询和多个文档,重排序器会返回这些文档与查询的相关性排名。详情请参见:重排序器(重排序器:https://docs.voyageai.com/docs/reranker?source=post_page-----e0c24a68893b--------------------------------)
Rerank 是一个能显著提升搜索质量的强大的语义增强工具。利用 Rerank 的语义增强功能来提高搜索精度……


这篇关于Anthropic的新RAG方法——提升大型语言模型在特定领域的表现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程