分享
RAG实战全解析:一年探索之路
输入“/”快速插入内容
RAG实战全解析:一年探索之路
2024年7月15日修改
1.
背景介绍
RAG(Retrieval Augmented Generation,检索增强生成 )方法是指结合了基于检索的模型和生成模型的能力,以提高生成文本的质量和相关性。该方法是Meta在2020年发表的文章《
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
中提出的,该方法让LM(Language Model,语言模型)能够获取内化知识之外的信息,并允许LM在专业知识库的基础上,以更准确的方式回答问题。而在大模型时代,它更是用于解决幻觉问题、知识时效问题、超长文本问题等各种大模型本身制约或不足的必要技术。
2.
RAG的挑战
RAG主要面临三个方面的挑战:检索质量、增强过程和生成质量。
2.1 检索质量
•
语义歧义:向量表示(例如词嵌入)可能无法捕捉概念之间的细微差别。例如,“苹果”一词可能指的是水果或科技公司。嵌入可能会混淆这些含义,导致不相关的结果。
•
用户输入变复杂:与传统关键词或者短语搜索逻辑不太一致,用户输入问题不再是词或者短句,而是转变成自然对话声知识多轮对话数据,问题形式更加多元,紧密关联上下文,输入风格更加口语化。
•
文档切分:文档切分主要有两种方式:一种是基于形式的切分,比如利用标点和段落的结束;另一种是基于文档内容的意义进行切分。如何将这些文档块转换成电脑能够理解和比较的形式(即“嵌入”),进而影响这些块与用户搜索内容的匹配程度。
•
多模内容的提取及表征(例如表格、图表、公式等):如何对多模内容进行提取及动态表征,是目前面临的现实问题,尤其是处理那些含糊或负面的查询,对 RAG 系统的性能有显著影响。
2.2 增强过程
•
上下文的集成:这里的挑战是将检索到的段落的上下文与当前的生成任务顺利地集成。如果做得不好,输出可能会显得脱节或缺乏连贯性。
•
冗余和重复:如果多个检索到的段落包含相似的信息,则生成步骤可能会产生重复的内容。
•
排名和优先级:确定多个检索到的段落对于生成任务的重要性或相关性可能具有挑战性。增强过程必须适当权衡每个段落的价值。
2.3 生成质量
•
过度依赖检索内容:生成模型可能过于依赖增强信息,导致幻觉问题突出,而不是增加价值或提供合成。
•
无关性:这是另一个令人担忧的问题,即模型生成的答案无法解决查询问题。
•
毒性或偏见:这也是另一个问题,即模型生成的答案有害或令人反感。
3.
整体架构
3.1 产品架构
从图上可以清晰的看出,整个产品架构包含如下四层:
•
最底层是模型层。在模型层屏蔽掉了模型的差异,不仅可以支持自研的序列猴子,也可以支持开源的大模型,第三方的模型。此外,为了优化embedding的效果,提出一种跨语言Embedding模型,有效的解决跨语言检索问题,同时提高了模型的效果。
•
离线理解层。在该层,主要围绕智能知识库和搜索增强两个模块设计的。关于智能知识库主要负责将非结构化的文本进行处理,从而转化为检索知识库,主要包括文本解析,表格识别,OCR识别等。搜索增强通过引入问句改写、重排等模块,保证检索的精准度。
•
在线问答层,为了满足产品设计需要,这里支持多文档、多轮次、多模态及安全性与拒识等,在一定程度上提高了产品的竞争力,同时也满足了不同场景的用户需求。
•
场景层,针对不同行业的特点,预制多种场景类角色,降低产品使用门槛。
3.2 技术架构
为了理解检索增强生成框架,我们将其分为三个主要组成部分:query理解、检索模型和生成模型。
•
query理解:该模块旨在对用户的query进行理解或者将用户的query生成结构化的查询,既可以查询结构化的数据库也可以查询非结构化的数据,进而提高召回率。该模块包括四部分,他们分别是query改写,query扩写和意图识别等。各个模块的介绍我们将在之后的章节进行详细介绍。
•
检索模型:该模型旨在从给定的文档集或知识库中检索相关信息。 他们通常使用信息检索或语义搜索等技术来根据给定的查询识别最相关的信息。基于检索的模型擅长查找准确且具体的信息,但缺乏生成创意或新颖内容的能力。从技术上来讲, 检索模型主要包括文档加载、文本转换、Embedding等模块。我们将在之后的章节中详细介绍。
•
生成模型:该模型旨在根据给定的Prompt或上下文生成新内容。 目前,生成模型可以生成富有创意且连贯的文本,但它们可能会在事实准确性或与特定上下文的相关性方面遇到困难。在RAG框架中,生成模型主要包括chat系统(长期记忆和短期记忆)、Prompt优化等。这些内容在之后的章节中也会介绍。
总之,检索增强生成结合了检索模型和生成模型优势,克服它们各自的局限性。 在此框架中,基于检索的模型用于根据给定的查询或上下文从知识库或一组文档中检索相关信息。 然后,检索到的信息将用作生成模型的输入或附加上下文。通过整合检索到的信息,生成模型可以利用基于检索的模型的准确性和特异性来生成更相关、更准确的文本。这有助于生成模型立足于现有知识,生成与检索信息一致的文本。
4.
Query理解
目前,RAG系统可能会遇到从知识库中检索到与用户query不相关的内容。这是由于如下问题:(1)用户问题的措辞可能不利于检索,(2)可能需要从用户问题生成结构化查询。为了解决上述问题,我们引入query理解模块。
4.1 意图识别
意图识别是指接收用户的query和一组"选择"(由元数据定义)并返回一个或多个选定的"选择模块"。它既可以单独使用(作为 "选择器模块"),也可以作为查询引擎或检索器使用(例如,在其他查询引擎/检索器之上)。它是原理简单但功能强大的模块,目前主要利用 LLM 实现决策功能。
它可以应用于如下场景:
•
在各种数据源中选择正确的数据源;
•
决定是进行摘要(如使用摘要索引查询引擎)还是进行语义搜索(如使用矢量索引查询引擎);