想象你是一位分析师,在你的工作流程中,你可以使用一个大型语言模型。你对它带来的前景感到兴奋。但是,当你向它询问最新的股票价格或当前的通货膨胀率时,它却告诉你:
“对不起,我无法提供实时或截止时间之后的数据。我的最后训练数据只到2022年1月。”
大型语言模型,在语言方面具有强大的能力,但却缺乏把握“现在”的能力。而在快节奏的世界里,“现在”就是一切。
研究表明,大型预训练语言模型(LLMs)也是事实知识的存储库。
它们经过训练并吸收了大量的事实和数据。在进行精细调整后,它们可以在各种自然语言处理任务上取得显著的结果。
但问题在于:它们访问和操作这些存储的知识的能力有时并不完美。特别是当任务具有较高的知识含量时,这些模型可能落后于更专业的架构。就好像有一个拥有全世界所有图书的图书馆,但没有目录来找到你需要的书籍。
OpenAI的ChatGPT获得了浏览升级
OpenAI最近对ChatGPT的浏览能力进行了重大升级,这是向检索增强生成(RAG)的方向迈出的重要一步。现在,ChatGPT能够搜索互联网以获取当前和权威的信息,这与RAG的方法类似,动态地从外部源获取数据来提供丰富的回应。
ChatGPT can now browse the internet to provide you with current and authoritative information, complete with direct links to sources. It is no longer limited to data before September 2021. pic.twitter.com/pyj8a9HWkB
— OpenAI (@OpenAI) September 27, 2023
目前,浏览功能仅适用于Plus和Enterprise用户,OpenAI计划很快将此功能推广到所有用户。用户可以在GPT-4选项下选择“使用Bing浏览”来激活此功能。
Chatgpt新的“Bing”浏览功能
提示工程是有效但不足的
提示作为访问LLM知识的入口。它们指导模型,为其回应提供方向。然而,设计一个有效的提示并不是从LLM中获取想要的内容的全面解决方案。但还是让我们看看一些写提示时需要考虑的良好实践:
- 清晰度:明确定义的提示消除了歧义。它应该直截了当,确保模型理解用户的意图。这种清晰度通常会转化为更连贯和相关的回应。
- 上下文:对于较长的输入,指令的放置位置可能会影响输出。例如,将指令移到长提示的末尾通常会产生更好的结果。
- 准确的指令:问题的力度,通常通过“谁、什么、在哪里、何时、为什么、如何”的框架来传达,可以引导模型产生更加专注的回应。此外,指定所需的输出格式或大小可以进一步精细化模型的输出。
- 处理不确定性:在模型不确定时,指导模型如何回应是很重要的。例如,当不确定时指示模型回复“我不知道”可以防止它生成不准确或“产生幻觉的”回应。
- 逐步思考:对于复杂的指令,引导模型系统地思考或将任务分解为子任务可以获得更全面和准确的输出。
关于提示在指导ChatGPT中的重要性,可以在Unite.ai的一篇全面文章中找到。
生成型AI模型的挑战
提示工程涉及对模型的指令进行微调,以增强其性能。这是一种非常具有成本效益的方法,可以提高生成型AI应用的准确性,只需进行轻微的代码调整。虽然提示工程可以显著提升输出结果,但理解大型语言模型(LLM)的固有限制至关重要。两个主要挑战是产生幻觉和知识截断。
- 幻觉:这指的是模型自信地返回不正确或虚构的响应的情况。尽管先进的LLM内置了识别和避免这种输出的机制。
LLM中的幻觉
- 知识切断:每个LLM模型都有一个训练结束日期,在此日期后,模型对事件或发展无感知。这个限制意味着模型的知识在其上次训练日期的点上被冻结。例如,一个在2022年之前训练的模型将不会知道2023年的事件。
LLM中的知识切断
检索增强生成(RAG)提供了解决这些挑战的方法。它允许模型访问外部信息,通过提供专有或领域特定数据来减轻幻觉问题。对于知识切断,RAG可以获取当前日期之后的信息,确保输出是最新的。
它还允许LLM实时从各种外部来源获取数据。这可能是知识库、数据库,甚至是互联网的广阔领域。
检索增强生成简介
检索增强生成(RAG)是一个框架,而不是一个具体的技术,它使大型语言模型能够利用它们没有训练的数据。有多种实现RAG的方式,最适合的方式取决于您的特定任务和数据的性质。
RAG框架以结构化方式运作:
输入提醒
该过程始于用户的输入或提醒。这可以是一个寻求特定信息的问题或陈述。
从外部来源检索
模型不再根据其训练直接生成响应,而是在检索组件的帮助下通过外部数据源进行搜索。这些源可以包括知识库、数据库和文档存储等可访问互联网的数据。
理解检索
从本质上讲,检索类似于搜索操作。它的目的是根据用户的输入提取最相关的信息。该过程可以分解为两个阶段:
- 索引化:整个RAG过程中最具挑战性的部分可能是对知识库进行索引。索引化过程可以大致分为两个阶段:加载和拆分。在像LangChain这样的工具中,这些过程被称为“加载器”和“分割器”。加载器从各种来源获取内容,无论是网页还是PDF。获取后,分割器将此内容分割成适合嵌入和搜索的小块。
- 查询:这是根据搜索词提取最相关的知识片段的行为。
虽然有许多方法可以进行检索,从简单的文本匹配到使用Google等搜索引擎,但现代检索增强生成(RAG)系统依赖于语义搜索。语义搜索的核心概念是嵌入。
嵌入是大型语言模型(LLM)理解语言的核心。当人们试图解释他们如何从单词中获得意义时,解释往往回归到内在的理解。在我们的认知结构深处,我们认识到“child”和“kid”是同义词,或者“red”和“green”都表示颜色。
扩展提示
然后将检索到的信息与原始提示结合,创建一个增强或扩展的提示。这个增强的提示为模型提供了额外的上下文,特别是当数据是领域特定的或不是模型原始训练语料库的一部分时,它具有很大的价值。
生成完成
手握增强提示后,模型生成了完整的回答或响应。这个回答不仅基于模型的训练,还受到实时检索到的数据的影响。
检索增强生成
第一个RAG LLM的体系结构
Meta在2020年发表的研究论文“知识密集型自然语言处理任务的检索增强生成”提供了对这一技术的深入解析。检索增强生成模型通过外部检索或搜索机制增强了传统的生成过程。这使得模型能够从大规模的数据集中提取相关信息,增强其生成上下文准确的能力。
具体工作原理如下:
- 参数化存储:这是您传统的语言模型,类似于seq2seq模型。它在大量数据上进行训练并具有丰富的知识。
- 非参数化存储:将其视为搜索引擎。它是一个密集的向量索引,比如维基百科,可以使用神经检索器进行访问。
这两者的结合创建了一个准确的模型。RAG模型首先从非参数化存储中检索相关信息,然后利用参数化知识生成连贯的响应。
Meta的原始RAG模型
1.两步法:
RAG LLM采用两步法:
- 检索:模型首先从大型数据集中搜索相关文档或段落。这是通过使用密集检索机制实现的,该机制使用嵌入表示查询和文档。然后使用嵌入计算相似度得分,并检索排名靠前的文档。
- 生成:拿到排名靠前的相关文档后,它们与初始查询一起输入到序列生成器中。该生成器随后根据查询和获取的文档的上下文生成最终输出。
2.密集检索:
传统检索系统常常依赖于如TF-IDF的稀疏表示。然而,RAG LLM采用密集表示,其中查询和文档都嵌入到连续的向量空间中。这样可以进行更细致的相似度比较,捕捉语义关系而不仅仅是关键词匹配。
3.序列到序列生成:
检索到的文档充当生成模型的扩展上下文。这种模型通常基于Transformer等架构,然后生成最终的输出,确保其连贯性和上下文相关性。
文档搜索
文档索引和检索
为了高效检索信息,尤其是从大型文档中,数据通常存储在向量数据库中。每个数据或文档根据嵌入向量进行索引,该向量捕捉内容的语义精髓。高效的索引确保基于输入提示快速检索到相关信息。
向量数据库
来源:Redis
向量数据库,有时称为向量存储,是专门用于存储和获取向量数据的数据库。在人工智能和计算机科学领域中,向量实质上是表示多维空间中的点的数字列表。与更加适应表格数据的传统数据库不同,向量数据库在管理自然适合向量格式的数据方面具有优势,例如来自AI模型的嵌入。
一些值得注意的向量数据库包括Annoy、Meta的Faiss,Milvus和Pinecone。这些数据库在AI应用中起着关键作用,可以支持从推荐系统到图像搜索等多种任务。AWS等平台也提供专门针对向量数据库需求的服务,如Amazon OpenSearch Service和Amazon RDS for PostgreSQL。这些服务针对特定的用例进行了优化,确保高效的索引和查询。
为相关性分块
鉴于许多文档可能很长,通常会使用一种称为“分块”的技术。这涉及将大型文档分解为更小且语义上一致的块。然后对这些块进行索引和检索,确保使用文档的最相关部分进行及时增强。
上下文窗口考虑
每个基于检索的语言模型(LLM)都在一个上下文窗口内操作,这基本上是它可以同时考虑的最大信息量。如果外部数据源提供的信息超过了此窗口,就需要将其分解为适合模型上下文窗口的较小块。
利用检索增强生成的优点
- 增强准确性:通过利用外部数据源,RAG LLM可以生成不仅仅基于其训练数据的响应,还基于检索语料库中最相关和最新的可用信息。
- 克服知识差距:RAG有效地解决了LLM的固有知识限制,无论是由于模型的训练截断还是由于其训练语料库中缺乏领域特定数据。
- 多用途性:RAG可以与各种外部数据源集成,从组织内的专有数据库到公开可访问的互联网数据。这使其适应各种应用和行业。
- 减少产生幻觉:LLM的一个挑战是可能产生事实不正确或虚构的信息。通过提供实时数据上下文,RAG可以显著降低这些输出的可能性。
- 可扩展性:RAG LLM的主要优点之一是其可扩展性。通过分离检索和生成过程,模型可以有效处理大量数据集,使其适用于数据丰富的实际应用。
挑战和考虑因素
- 计算开销:这个两步骤的过程可能会在处理大型数据集时造成计算负担。
- 数据依赖性:检索到的文档的质量直接影响生成质量。因此,拥有全面且经过精心策划的检索语料库至关重要。
结论
通过整合检索和生成过程,检索增强生成为知识密集型任务提供了一个强大的解决方案,确保输出既有信息又具有相关性。
RAG的真正优势在于其潜在的实际应用。对于像医疗保健这样及时准确的信息至关重要的领域,RAG能够无缝地从大量医学文献中提取和生成见解。在金融领域,市场每分钟都在变化,RAG可以提供实时的数据驱动见解,帮助做出明智决策。此外,学术界和研究领域的学者们可以利用RAG来扫描大量的信息仓库,使文献综述和数据分析更加高效。