检索增强生成(RAG):从理论到 LangChain 实现

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。

欢迎关注公众号(NLP Research),及时查看最新内容

原文标题:Retrieval-Augmented Generation (RAG): From Theory to LangChain Implementation

原文地址:https://medium.com/towards-data-science/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2


从原始学术论文的理论到在 Python 中使用 OpenAI、Weaviate 和 LangChain 实现。

自从人们意识到可以用自己的专有数据为大型语言模型(LLM)增效之后,人们就开始讨论如何最有效地弥合 LLM 的常识与专有数据之间的差距。围绕微调还是检索增强生成(RAG)更适合这一问题,人们进行了大量的讨论(剧透:两者都适合)。

本文首先重点介绍 RAG 的概念,并首先介绍其理论。然后,文章将展示如何使用用于协调的 LangChain、OpenAI 语言模型和 Weaviate 向量数据库来实现一个简单的 RAG 管道。

什么是检索增强生成?

检索增强生成(RAG)的概念是为 LLM 提供来自外部知识源的额外信息。这使他们能够生成更准确、更符合上下文的答案,同时减少幻觉。

问题

最先进的 LLM 在大量数据的基础上进行训练,以获得存储在神经网络权重(参数记忆)中的广泛常识。但是,如果提示 LLM 生成一个需要其训练数据中未包含的知识(如较新的、专有的或特定领域的信息)的完形填空,则可能会导致事实不准确(幻觉),如下面的截图所示:

因此,弥合 LLM 的常识与任何额外语境之间的差距非常重要,这样才能帮助 LLM 生成更准确、更符合语境的补全,同时减少幻觉。

解决方案

传统上,神经网络通过微调模型来适应特定领域或专有信息。这种技术虽然有效,但计算密集、成本高,而且需要专业技术知识,因此在适应不断变化的信息方面不够灵活。

2020 年,Lewis 等人在论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 中提出了一种更灵活的技术,称为检索增强生成(RAG)。在这篇论文中,研究人员将生成模型与检索模块相结合,从外部知识源提供更容易更新的附加信息。

简单地说,RAG 对 LLM 的意义就如同开卷考试对人类的意义。在开卷考试中,学生可以携带教科书或笔记等参考资料,用来查找相关信息以回答问题。开卷考试背后的理念是,考试侧重于考察学生的推理能力,而不是记忆特定信息的能力。

同样,事实知识也从 LLM 的推理能力中分离出来,存储在外部知识源中,便于访问和更新:

  • 参数知识:在训练过程中学习到的,隐式存储在神经网络的权重中。
  • 非参数知识:存储在外部知识源中,如矢量数据库。

(顺便说一句,这个天才的比较不是我想出来的。据我所知,这种比较是 JJ 在 Kaggle - LLM 科学考试竞赛中首次提

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492254.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang学习3,golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

JAVA高并发——函数式编程

文章目录 1、FunctionalInterface注释2、接口默认方法3、lambda表达式4、方法引用5、走入函数式编程6、并行流与并行排序6.1、使用并行流过滤数据6.2、从集合得到并行流6.3、并行排序 在正式进入函数式编程之前,有必要先了解一下Java 8为支持函数式编程所做的基础性…

nginx之web服务器 页面配置

4.3.8 自定义 错误页面 我们 可以改变 默认的错误页面,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if in location 格式: error_page code ... [[response]] uri; 页面错误代码 error_page 固定写法 c…

状态空间模型(SSM)

论文:A new approach to linear filtering and prediction problems http://160.78.24.2/Public/Kalman/Kalman1960.pdf 状态空间模型介绍 术语状态空间模型具有非常广泛的含义,它简单地表示任何具有潜在状态的循环过程的概念。 它已被用来指代不同学科…

【Linux运维系列】vim操作

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

分库分表如何管理不同实例中几万张分片表?

大家好,我是小富~ ShardingSphere实现分库分表,如何管理分布在不同数据库实例中的成千上万张分片表? 上边的问题是之前有个小伙伴看了我的分库分表的文章,私下咨询我的,看到他的提问我第一感觉就是这老铁…

森歌集成灶:以冠军标准打造健康厨房,为全民健康保驾护航

在2024年这个实施“十四五”规划的关键之年,健康话题无疑是公众最为关注的焦点之一。随着国家卫健委最新发布的《2022年中国居民健康素养监测情况》报告显示,我国居民健康素养水平稳步提升,厨电高端品牌森歌响应国策、顺应潮流将于2月27日-2月…

防御保护 第8-11天笔记

内容安全 攻击可能只是一个点,防御需要全方面进行 IAE引擎 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包(数据包分片,分段需要重组),之后对数据包的内容进行识别。(应用…

上海亚商投顾:沪指8连阳重新站上3000点 全市场逾百股涨停

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指2月23日继续反弹,成功收复3000点大关,录得8连阳走势。AI概念持续活跃&#xff0c…

MySQL 篇-深入了解 DDL 语言(一)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 MySQL 说明 2.0 DDL 语言 2.1 DDL 语言 - 定义数据库 2.1.1 创建数据库操作 2.1.2 查看数据库操作 2.1.3 使用数据库操作 2.1.4 删除数据库操作 2.2 DDL 语言 …

误操作引发分区危机?数据恢复实战指南!

一、误分区遭遇数据危机 在使用电脑或存储设备的过程中,我们都可能遭遇一个令人头疼的问题——不小心分区了。这通常是由于用户的误操作、软件故障或硬件故障导致的。一旦遭遇误分区,原本存储的重要数据可能会变得难以访问,甚至面临丢失的风…