参考说明:
动手学RAG:Part6 文本多路召回与重排序_哔哩哔哩_bilibili
Coggle 30 Days of ML(24年1/2月):动手学RAG - 竞赛学习 - Coggle竞赛论坛
一、RAG解决的问题及原理步骤
1.大模型存在的问题
在自然语言处理领域,大型语言模型(LLM)如GPT-3、BERT等已经取得了显著的进展,它们能够生成连贯、自然的文本,回答问题,并执行其他复杂的语言任务。然而,这些模型存在一些固有的局限性,如“模型幻觉问题”、“时效性问题”和“数据安全问题”。为了克服这些限制,检索增强生成(RAG)技术应运而生。问题1.1模型幻觉问题:生成内容可能不准确或不一致问题1.2时效性问题:生成的内容不具有当前时效性问题1.3数据安全问题:可能存在敏感信息泄露风险
RAG技术结合了大型语言模型的强大生成能力和检索系统的精确性。它允许模型在生成文本时,从外部知识库中检索相关信息,从而提高生成内容的准确性、相关性和时效性。这种方法不仅增强了模型的回答能力,还减少了生成错误信息的风险。
2.RAG步骤
如果使用RAG,主要包括信息检索和大型语言模型调用两个关键过程。信息检索通过连接外部知识库,获取与问题相关的信息;而大型语言模型调用则用于将这些信息整合到自然语言生成的过程中,以生成最终的回答。
在问题理解阶段,系统需要准确把握用户的意图。用户提问往往是短文本,而知识库中的信息可能是长文本。 将用户提问与知识库中的知识建立有效的关联是一个难点,特别是考虑到用户提问可能模糊,用词不规范,难以直接找到相关的知识。
知识检索是RAG流程中的关键步骤,但也是面临挑战的步骤之一。用户提问可能以多种方式表达,而知识库的信息来源可能是多样的,包括PDF、PPT、Neo4j等格式。
知识库问答(Knowledge Base Question Answering,简称KBQA)是一种早期的对话系统方法,旨在利用结构化的知识库进行自然语言问题的回答。这种方法基于一个存储在图数据库中的知识库,通常以三元组的形式表示为<主题,关系,对象>,其中每个三元组都附带相关的属性信息。
在KBQA中,有两种主流方法用于处理自然语言问题:
主题识别与实体链接:该方法从识别问题中的主题开始,将其链接到知识库中的实体(称为主题实体)。通过主题实体,系统能够在知识库中查找相关的信息并回答问题。
多跳查询:基于图数据库的优势,KBQA能够进行多跳查询,即通过多个关系跨越多个实体来获取更深层次的信息。这种灵活性使得系统能够更全面地理解和回答用户的复杂问题。
技术模块 | 描述 |
---|---|
意图理解 | 意图理解模块负责准确把握用户提出的问题,确定用户的意图和主题。处理用户提问的模糊性和不规范性,为后续流程提供清晰的任务目标。 |
文档解析 | 文档解析模块用于处理来自不同来源的文档,包括PDF、PPT、Neo4j等格式。该模块负责将文档内容转化为可处理的结构化形式,为知识检索提供合适的输入。 |
文档索引 | 文档索引模块将解析后的文档分割成短的Chunk,并构建向量索引。或通过全文索引进行文本检索,使得系统能够更快速地找到与用户问题相关的文档片段。 |
向量嵌入 | 向量嵌入模块负责将文档索引中的内容映射为向量表示,以便后续的相似度计算。这有助于模型更好地理解文档之间的关系,提高知识检索的准确性。 |
知识检索 | 知识检索模块根据用户提问和向量嵌入计算的相似度检索或文本检索打分。这一步骤需要解决问题和文档之间的语义关联,确保检索的准确性。 |
重排序 | 重排序模块在知识检索后对文档库进行重排序,以避免“Lost in the Middle”现象,确保最相关的文档片段在前面。 |
大模型回答 | 大模型回答模块利用大型语言模型生成最终的回答。该模块结合检索到的上下文,以生成连贯、准确的文本回答。 |
其他功能模块 | 可根据具体应用需求引入其他功能模块,如查询搜索引擎、融合多个回答等。模块化设计使得系统更加灵活,能够根据不同场景选择合适的功能模块组合。 |
3.RAG和SFT对比
二、 获取模型的API
chatGPT/GLMAPI可以通过Python的库进行调用,也可以通过HTTP方式进行调用。
调用对话模型和embedding模型的api、也可以用ollama来生成api。
function call-一种agent的实现。tools,在调用时指定具体的functions实现对应的功能。
三、读取数据
- 数据(百度云盘)链接: https://pan.baidu.com/s/19_oqY4bC_lJa_7Mc6lxU7w?pwd=v4bi 710 提取码: v4bi
- 效果评测地址:Coggle竞赛
四、文本索引与检索
文本检索是一个多步骤的过程,其核心是构建倒排索引以实现高效的文本检索:
- 步骤1(文本预处理):在文本预处理阶段,对原始文本进行清理