Coggle数据科学 | 小白学RAG:架构、策略和应用

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。

原文链接:小白学RAG:架构、策略和应用

大型语言模型(LLMs)在语言理解和生成方面展示了革命性的能力,但它们仍然面临着一些固有的局限性,比如幻觉和过时的内部知识。鉴于RAG在提供最新和有帮助的辅助信息方面的强大能力,检索增强型大型语言模型(Retrieval-Augmented Large Language Models, RA-LLMs)应运而生。RA-LLMs利用外部权威知识库,而不仅仅依赖模型的内部知识,来提高LLMs的生成质量。

本文全面回顾 RA-LLMs三个主要技术视角:架构、训练策略和应用。并详细说明了每个领域的挑战以及RA-LLMs的相应能力。

1 Large Language Models (LLMs)

LLMs通常在大量数据上进行预训练,具有数十亿参数,能够理解和生成类似人类的文本,从而在诸如文本生成和信息检索等自然语言处理任务中取得进展。LLMs可以通过在特定数据集上微调来适应各种下游任务,使它们能够专注于特定领域或应用。

现有的LLMs大致可以分为三类仅编码器(Encoder-only)、仅解码器(Decoder-only)和编码器-解码器(Encoder-Decoder)模型

  • 仅编码器模型,如BERT(Bidirectional Encoder Representations from Transformers),通过将输入文本编码到高维空间来处理文本。这类模型的关键是它们的双向特性,即在编码时可以同时考虑每个标记的左右上下文。这种双向性使得仅编码器模型能够更好地理解上下文中的词义,这对于情感分析、评论阅读和文本分类等任务至关重要。

  • 仅解码器模型,如GPT(Generative Pre-trained Transformer),以从左到右的方式生成文本。它们基于前一个标记提供的上下文预测序列中的下一个标记。这种架构使它们特别适用于语言生成、代码生成和创意写作等任务。

  • 编码器-解码器模型,如T5(Text-To-Text Transfer Transformer),独特地将各种自然语言处理任务转化为文本生成问题。具体来说,T5的编码器处理输入序列以捕获其含义,而解码器基于编码的信息生成输出序列。这种T5架构非常适合涉及将一个序列转换为另一个序列的任务,如机器翻译、摘要和对话响应生成。

2 提示学习(Prompt Learning)

2.1 提示学习

由于LLMs拥有庞大的参数量,提示学习作为一种范式出现,利用LLMs的能力来执行各种任务,而不是广泛地微调LLMs。

提示学习通过精心设计输入来引导模型在LLMs中执行下游任务。例如,早期方法提供手工制作的模板来处理自然语言处理(NLP)中的各种任务。编码器模型如BERT通常采用填空提示,因为它们非常符合其预训练任务的形式。

对于像GPT这样的其他模型,前缀提示更适合,因为它们与生成任务相吻合。然而,手工设计的提示依赖于人类经验,没有有效性保证。为了解决这个限制,发展了软提示调整,学习可训练的连续提示嵌入。

2.2 上下文学习(ICL)

为了克服传统提示学习的局限性,近期的研究发展了上下文学习。ICL是提示学习的一种特定方法,它在提示中给模型一些任务的示例。这种范式允许预训练的LLMs根据示例提供的模式来理解解决新任务,无需微调。例如,通过仔细选择一些示例,GPT-3已经展示了执行少次任务的能力。这一成功表明LLMs具有根据特定任务知识迅速适应新任务的显著能力。

3 Retrieval-Augmented Large Language Models, RA-LLMs

RAG框架由几个主要过程组成:检索、生成和增强,以及确定是否需要检索的机制。

3.1 Retrieval

给定LLMs的输入查询,RAG中的检索过程旨在从外部知识源提供相关信息,这些知识源可以是开源或闭源的。检索的具体流程进一步由是否包括预检索和后检索过程来确定。

RAG框架的核心功能之一是检索过程,它的作用是从外部数据源中提取与用户查询相关的信息。这个过程需要一个关键的组件,即检索器,它的任务是评估查询与数据库中文档的相关性,并据此检索出有用的信息。

3.1.1 检索器类型

检索方法通常可以分为两种类型:稀疏(sparse)和密集(dense),这基于信息编码方式的不同。稀疏检索是基于词的,主要应用于文本检索;而密集检索则是将查询和外部知识嵌入到向量空间中,可以应用于各种数据格式。

稀疏检索(例如TF-IDF和BM25)通常依赖于倒排索引匹配以及原始数据输入。例如,许多研究直接应用BM25进行段落级别的检索以支持它们的RAG,其中段落被特别表示为词袋,并根据词项和逆文档频率进行排名。

密集检索与稀疏检索相反,它根据特定的标准(例如语义相似性)将查询和文档嵌入到连续的向量空间中。密集检索方法通常是可训练的,因此在适应性上具有更多的灵活性和潜力。

一种简单的设计是直接使用生成模型的一部分作为检索器的嵌入层,这可能能够增强检索和生成过程之间的一致性。基于BERT的结构在检索模型中得到了广泛应用。在RAG中常见的一种检索器设计是构建双流编码器,使用BERT结构(一个编码器用于查询,另一个用于文档),这也被称为双编码器。

3.1.2 检索粒度

检索粒度指的是在索引语料库时所使用的检索单位,例如文档、段落、标记或其他级别,如实体。对于RAG来说,选择检索粒度可以显著影响模型的整体性能,包括有效性和效率,因为它们决定了数据库的存储空间以及搜索的计算成本。

  1. 文档级检索:早期的检索增强型语言模型提出检索整篇文档,然后应用机器理解模型来检测文档中的答案段落,这种方法更侧重于语言阅读和文档中关键信息的定位。

  2. 段落级检索(Chunk retrieval):在生成性语言模型中很常见,被称为段落检索。段落可以包含紧凑且完整的信息,冗余和不相关信息较少,因此成为RAG中主流的检索文本粒度。

  3. 实体级检索(Entity retrieval):与上述类型的粒度不同,实体检索从知识而非语言的角度设计。

3.1.3 预检索和后检索增强

为了确保检索质量,即提高检索结果的准确性和相关性,已经提出了各种预检索和后检索策略,以进一步增强检索器的输入和输出。

  • 预检索增强:包括查询扩展、查询改写和查询增强等方法。

    • 查询扩展(Query Expansion):如Query2doc方法,通过少量提示LLMs生成伪文档,使用伪文档中的相关信息扩展查询,以提高查询消歧能力并引导检索器。这种方法可以提升稀疏和密集检索器在信息检索数据集上的性能。

    • 假设文档嵌入(HyDE):指导LLM生成给定查询的假设文档,然后将这些假设文档作为新查询进行嵌入和检索。

    • 查询改写:旨在缩小输入文本与检索所需知识之间的差距,将原始问题改写成更有利于检索的版本。例如,Rewrite-Retrieve-Read框架,提示LLM为检索功能生成查询。

  • 后检索增强:指在将检索到的前k个文档提供给生成器之前,对其进行处理的程序,以改善检索和生成阶段之间的对齐,特别是对于闭源生成器如LLMs。

    • PRCA:使用可插拔的奖励驱动上下文适配器,对特定数据集上的轻量级适配器进行微调,并通过生成器产生的奖励进行强化学习,提取检索文档。

    • R2G方法:将不同检索方法检索到的文档进行重新排序,以增强检索结果的稳健性。

    • 知识过滤:如BlendFilter方法,同时考虑预检索查询生成混合和后检索知识过滤,以解决复杂问题和检索知识噪声问题,从而全面提高RA-LLM性能。

3.1.4 外部数据库

RAG中的检索是基于外部知识源进行的,这些知识源可以是闭源或开源的。闭源数据库通常存储键值对形式的知识,这些数据库可以以各种方式构建。键主要用于相似性匹配,可以是稀疏向量,如BM25中的向量,或者是检索编码中的密集嵌入。

值取决于具体的检索目标,大多数情况下是原始文本。例如,维基百科的每篇文章被分割成不重叠的100词段落,形成早期RAG中的2100万个文档。每个文档由密集嵌入编码并作为值和键分别保存在数据库中。

使用互联网搜索引擎,如Bing和Google,避免了维护搜索索引的工作,并可以访问最新的知识。同时,它提供了比闭源数据库更广泛的知识库。经过数十年的调整,它还可以提供高质量的排名。

3.2 检索增强的必要性和频率

基于LLM的生成操作通常旨在补充知识以增强生成能力。尽管检索增强型模型显示出了很有前景的结果,但它们也因为并非万能解决方案而受到批评。不加选择地用不相关的段落增强LLM可能会覆盖LLM已经拥有的潜在正确知识,从而导致错误的响应。

检索增强的必要性

  • 大多数现有方法基于LLM的初步答案或其内部推理结果来确定检索的必要性。

  • 例如,Self-RAG引入特殊标记来评估检索的必要性并控制检索行为。

  • 其他方法设计迭代提示,在生成过程中决定是否需要额外信息,这就需要为LLM调用检索或其他操作。

检索频率

  • 在很少考虑检索必要性的传统RAG中,检索频率(也称为检索步长)是确定在生成中使用检索程度的重要设计方面,从而大大影响RAG模型的整体性能。

  • 检索频率控制了依赖检索结果的程度,从而影响模型的效率和效果。

  • 当不考虑检索必要性时,检索频率通常是预定义且固定的,有三种常见设置:一次性、每n个标记一次和每个标记一次。

    • 一次性检索:仅在生成过程的开始调用检索功能一次,并尝试在那次操作中找到所有所需信息。

    • 每n个标记一次检索:在生成过程中应用,以实现更好的增强。

    • 每个标记一次检索:在生成过程中为每个标记的预测检索信息。

不同的检索频率应用可以影响整个RAG方法的有效性和效率。例如,更频繁的检索可以带来更好的性能,但也会增加计算成本。选择检索频率几乎是在计算成本和性能之间的权衡。

通俗来说,检索增强是一把双刃剑,它能够为LLMs提供额外的知识来提升生成内容的质量,但也可能引入不相关的信息,干扰模型的判断。

4 RAG 各种应用

4.1 NLP应用

由于在文本生成方面的固有能力,RAG在NLP领域有多种应用,如问答(QA)系统、聊天机器人(ChatBot)和事实验证。

4.1.1 QA系统

QA系统旨在为用户提供查询的精确答案。然而,即使在大量数据上训练,这些系统也可能缺乏最新信息或特定领域知识,这些信息并未包含在它们的训练数据中。RAG集成了一个知识检索器,在预训练、微调和推理期间能够从大语料库中检索信息,这种方法允许REALM有效检索,从而提高其回答的准确性。

4.1.2 ChatBot

ChatBot旨在以自然和会话的方式与用户互动。与QA系统不同,ChatBot专注于与用户进行连贯且内容丰富的对话。为了增强这些能力,最近的方法专注于集成RA-LLMs,以增强ChatBot与用户进行更吸引人和内容丰富的互动的能力。

4.2 下游任务

4.2.1 推荐系统

推荐系统在模拟用户偏好和提供个性化推荐方面发挥着重要作用。最近,RA-LLMs通过整合检索和生成过程,展示了在提供个性化和上下文相关推荐方面的巨大潜力。

4.2.2 代码生成

RAG的出现影响了软件工程的许多方面。例如,一些研究提出了用于代码生成和程序修复的检索增强生成范式。RAG也可以应用在表格数据处理和Text-to-SQL人物中。

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

### RAG Framework in IT Context In the Information Technology (IT) domain, Retrieval-Augmented Generation (RAG) represents a significant advancement in integrating retrieval-based and generative models to enhance performance on knowledge-intensive tasks[^1]. The core concept of RAG involves augmenting language generation with information retrieved from external sources or databases. #### Architecture Overview The architecture of RAG consists primarily of two components: - **Retriever**: This component retrieves relevant documents or passages based on input queries. Typically implemented using dense vector representations like BERT embeddings. - **Generator**: After retrieving pertinent content, this part generates responses by conditioning on both the query and the fetched documents. Transformers such as T5 are commonly employed here due to their effectiveness in text-to-text transfer learning tasks. This dual-stage process allows systems built upon RAG principles not only to generate coherent replies but also ensure these outputs remain grounded within factual data provided through retrievals. #### Implementation Example Below demonstrates how one might implement a simple version of an RAG system utilizing Python libraries including `transformers` for handling transformer models and `faiss` for efficient similarity search operations over large document collections. ```python from transformers import RagTokenizer, RagTokenForGeneration import torch tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq") model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq") def rag_query(query_string): inputs = tokenizer([query_string], return_tensors="pt", truncation=True) generated_ids = model.generate(input_ids=inputs["input_ids"]) output = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] return output ``` Through leveraging pre-trained weights available via Hugging Face's Model Hub, developers can quickly prototype applications that benefit from enhanced contextual understanding without extensive training requirements.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值