RAG 修炼手册|一文讲透 RAG 背后的技术

alt

在之前的文章中《RAG 修炼手册|RAG敲响丧钟?大模型长上下文是否意味着向量检索不再重要》,我们已经介绍过 RAG 对于解决大模型幻觉问题的不可或缺性,也回顾了如何借助向量数据库提升 RAG 实战效果。

今天我们继续剖析 RAG,将为大家详细介绍 RAG 背后的例如 Embedding、Transformer、BERT、LLM 等技术的发展历程和基本原理,以及它们是如何应用的。

alt

01.什么是 Embedding?

Embedding 是将离散的非结构化数据转换为连续的向量表示的技术。

在自然语言处理中,Embedding 常常用于将文本数据中的单词、句子或文档映射为固定长度的实数向量,使得文本数据能够在计算机中被更好地处理和理解。通过 Embedding,每个单词或句子都可以用一个实数向量来表示,这个向量中包含了该单词或句子的语义信息。这样,相似的单词或句子就会在嵌入空间中被映射为相近的向量,具有相似语义的词语或句子在向量空间上的距离也会较近。这使得在进行自然语言处理任务时,可以通过计算向量之间的距离或相似度来进行词语或句子的匹配、分类、聚类等操作。

alt

Word2Vec

Word2Vec 是 2013 年由谷歌提出了一套词嵌入方法。Word2vec 是 Word Embedding 方式之一,这种方式在 2018 年之前比较主流。Word2Vec 作为词向量的经典算法之一,被广泛应用于各种自然语言处理任务。它通过训练语料库来学习单词之间的语义和语法关系,将单词映射到高维空间中的稠密向量。Word2Vec 的问世开创了将单词转化为向量表示的先河,极大地促进了自然语言处理领域的发展。

Word2vec 模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。下图是展示一个 2 维的向量空间的例子(实际可能是比较高的维度)。

alt

从图中可以看到,在这个 2 维空间内,每个 word 的分布有明显的特征。比如从 man到 woman,要加上一个向右上方向的向量,可以认为这个向量是一种“把男性转换到女性的向量”。如果把 king 也加上这个向量,可以得到 queen 的位置。在图中可以看到从 Paris 到 France 也有一种像是“从国家变为首都”的结构向量。

这一神奇的现象表明了向量在 embedding 内空间并不一是个杂乱无章随意的分布。在哪个区域表示哪些类别,区域和区域之间的差异,这些都有明显的特征。这样可以推出一个结论:向量的相似度代表的就是原始数据的相似度。所以向量的搜索实际上代表的就是原始数据的语义搜索。这样,我们就可以用向量搜索来实现很多语义相似搜索的业务。

然而,作为一种早期的技术,Word2Vec 也存在一定的局限性:

由于词和向量是一对一的关系,所以多义词的问题无法解决。比如下面这几个例子的 bank 就不全是同样一个意思。

...very useful to protect banks or slopes from being washed away by river or rain...
...the location because it was high, about 100 feet above the bank of the river...
...The bank has plans to branch throughout the country...
...They throttled the watchman and robbed the bank...

Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化。

Transformer 的变革

虽然 Word2Vec 在词向量的表示上有不错效果,但它并没有捕捉到上下文之间的复杂关系。为了更好地处理上下文依赖和语义理解,Transformer 模型应运而生。

Transformer 是一种基于自注意力机制(self-attention)的神经网络模型,最早在 2017 年由 Google 的研究员提出并应用于自然语言处理任务。它能够对输入句子中不同位置的单词关系进行建模,从而更好地捕捉上下文信息。Transformer 的提出标志着神经网络模型在自然语言处理领域的一次重大革新,使得文本生成、机器翻译等任务取得了显著的性能提升。

最初,Transformer 被提出来用于机器翻译任务,并取得了显著的性能提升。这个模型由“编码器(Encoder)”和“解码器(Decoder)”组成,其中编码器将输入语言序列编码为一系列隐藏表示,解码器则将这些隐藏表示解码为目标语言序列。每个编码器和解码器由多层自注意力机制和前馈神经网络组成。

Transformer 与传统的 CNN(卷积神经网络)和 RNN(循环神经网络)相比,Transformer 可以实现更高效的并行计算,因为自注意力机制使得所有位置的输入都可以同时计算,而 CNN 和 RNN 需要按顺序进行计算。传统的 CNN 和 RNN 在处理长距离依赖关系时会遇到困难,而 Transformer 通过使用自注意力机制可以学习长距离的依赖关系。

alt

由于原始 Transformer 模型在大规模任务上表现出色,研究人员开始尝试调整模型的大小以提高性能。他们发现,在增加模型的深度、宽度和参数数量的同时,Transformer 可以更好地捕捉输入序列之间的关系和规律。

Transformer 的另一个重要发展是大规模预训练模型的出现。通过在大量的无监督数据上训练,预训练模型可以学习到更丰富的语义和语法特征,并在下游任务上进行微调。这些预训练模型包括 BERT(Bidirectional Encoder Representations from Transformers)、GPT(Generative Pre-trained Transformer)等,它们在自然语言处理的各个任务上都取得了巨大的成功。

Transformer 的发展给人工智能带来了巨大的变革,比如 encoder 部分发展为 BERT 系列,随后发展成各类 Embedding 模型。而 decoder 部分发展为 GPT 系列,从而引发了后面 LLM 的革命,包括现在 ChatGPT。

BERT 和 sentence embedding

Transformer 的 Encoder 部分发展为 BERT。

BERT 使用了两个阶段的预训练方法,即 MLM(Masked Language Model) 完型填空和 NSP(Next Sentence Prediction)。MLM 阶段让 BERT 预测被遮挡词汇,以帮助它理解整个序列的上下文;NSP 阶段让 BERT 判断两个句子是否是连续的,以帮助它理解句子之间的关系。这两个阶段的预训练使得 BERT 具备了强大的语义信息学习能力,并能够在各种自然语言处理任务中取得优秀性能。

BERT 的一个非常重要的应用就是句子嵌入,即通过一句话生成 embedding 向量。这个向量可以用于多种下游自然语言处理任务,如句子相似度计算、文本分类、情感分析等。通过使用句子嵌入,可以将句子转换为高维空间中的向量表示,从而实现了计算机对句子的理解和语义表达。

相比传统的基于词嵌入的方法,BERT 的句子嵌入能够捕捉到更多的语义信息和句子级别的关系。通过将整个句子作为输入,模型能够综合考虑句子内部词汇的上下文关系,以及句子之间的语义相关性。这为解决一系列自然语言处理任务提供了更为强大和灵活的工具。

为什么 Embedding 搜索比基于词频搜索效果好?

基于词频搜索的传统算法包括如 TF-IDF、BM25。词频搜索只考虑了词语在文本中的频率,而忽略了词语之间的语义关系。而 Embedding 搜索通过将每个词语映射到一个向量空间中的向量表示,可以捕捉到词语之间的语义关系。因此,当搜索时,可以通过计算词语之间的相似度来更准确地匹配相关的文本。

词频搜索只能进行精确匹配,对于近义词或者语义关联词的搜索效果较差。而 Embedding 搜索可以通过计算词语之间的相似度,实现对近义词和语义关联词的模糊匹配,从而提高了搜索的覆盖范围和准确性。Embedding 搜索能够更好地利用词语之间的语义关系,提高搜索结果的准确性和覆盖范围,相对于基于词频搜索,具有更好的效果。

使用基于词频的搜索方法,如果我们查询"cat",那么结果中可能会将包含"cat"词频较高的文章排在前面。但是这种方法无法考虑到"cat"与其他动物的语义关系,比如与"British Shorthair(英国短毛猫)"、"Ragdoll(布偶猫)"等相似的动物。而使用 Embedding 搜索方法,可以将单词映射到高维空间中的向量,使得语义相似的单词在空间中距离较近。当我们查询"cat"时,Embedding 搜索可以找到与"cat"语义相似的单词,如"British Shorthair"、"Ragdoll"等,并将这些相关文章排在结果的前面。这样就能提供更准确、相关性更高的搜索结果。

02.LLM 的发展

目前,大多数大型语言模型(LLMs)都是基于 “仅解码器”(decoder-only)的 Transformer 架构的衍生版本,比如GPT。相比于 BERT 这种只用 Transformer 的 encoder 的结构,LLM 这种只用 decoder 的结构可以用于生成具有一定上下文语义的文本。

Language Model 的训练任务是基于历史上下文来预测下一个词的出现概率。通过不断循环预测和添加下一个词,模型可以获得更准确、流畅的预测结果。这样的训练过程可以帮助语言模型更好地理解语言规律和上下文信息,从而提高其自然语言处理的能力。

alt

从 GPT-1 到 GPT-3

GPT 系列是由 OpenAI 从 2018 年以来,持续迭代和改进的 LLM 模型。

最早的 GPT-1 在生成长文本时容易出现语义上的不连贯或重复的问题。GPT-2 是于 2019 年发布的改进版本,在GPT-1 的基础上进行了多项改进,包括使用更大规模的训练数据、更深层的模型结构,以及更多的训练迭代次数。GPT-2 在生成文本的质量和连贯性方面有了显著提升,并且引入了零样本学习(zero-shot learning)的能力,可以对未曾见过的任务进行推理和生成文本。GPT-3 则是在GPT-2 的基础上进一步增强并扩展了模型规模和能力。GPT-3 模型拥有1750亿个参数,它具备了强大的生成能力,可以生成更长、更具逻辑性和一致性的文本。GPT-3 还引入了更多的语境理解和推理能力,可以对问题进行更加深入的分析,并能够提供更准确的答案。

alt

从 GPT-1 到 GPT-3,OpenAI 的语言生成模型在数据规模、模型结构和训练技术上都有了重大的改进和提升,从而实现了更高质量、更具逻辑性和一致性的文本生成能力。发展到 GPT-3 时,已经显现出了一些和以往 LLMs 不同的效果,GPT-3 主要有下面这些能力:

  • 语言续写:给定一个提示词(prompt),GPT-3 可以生成补全提示词的句子。

  • 上下文学习 (in-context learning): 遵循给定任务的几个示例,GPT-3 可以参考它们,并为新的用例生成类似的解答。一般也可以称作 few-shot learning。

  • 世界知识:包括事实性知识 (factual knowledge) 和常识 (commonsense)。

ChatGPT

2022年11月,OpenAI 发布 ChatGPT,这是一个可以为你回答几乎任何问题的你聊天机器人。它的效果出奇的好,你可以让他帮你总结文档,翻译,写代码,写任何文案。搭配上一些 Tools,你甚至可以让它帮你点外卖,订机票,帮助接管你的电脑,完成各种你之前无法想象的事情。

这强大的功能背后,是从人类反馈中强化学习(Reinforcement Learning from Human Feedback,RLHF)等技术的支持,通过这些技术使得它和人类的对话更让人满意。RLHF是一种通过人类反馈来强化学习的方法,旨在使模型的输出与人类的偏好相一致。具体操作流程包括:模型根据给定的提示生成多个潜在答案,人类评估者对这些答案进行排序,然后使用这些排序结果来训练一个偏好模型,该模型学习如何给出反映人类对答案偏好程度的评分,最后,利用偏好模型对语言模型进行进一步微调。所以这也是为什么你觉得 ChatGPT 这么好用的原因。相比于 GPT-3,ChatGPT 更进一步,解锁了强大的能力:

  • 响应人类指令:GPT-3 的输出一般是接着提示词往下说,如果提示词是一个指令,GPT-3可能会续写更多的指令,而ChatGPT则能够很好地回答这些指令。

  • 代码生成和代码理解:模型使用大量的代码训练过,因此可以使用ChatGPT来生成高质量,可运行的代码。

  • 利用思维链 (chain-of-thought) 进行复杂推理:初代 GPT-3 的模型思维链推理的能力很弱甚至没有。这一能力,使得上层应用可以通过提示词工程使ChatGPT更加强大和准确。

  • 详尽的回答:ChatGPT 的回应一般都很详细,以至于用户必须明确要求“用一句话回答我”,才能得到更加简洁的回答。

  • 公正的回答:ChatGPT 通常对涉及多方利益给出非常平衡的回答,尽可能让所有人满意。同时也会拒绝回答不当问题。

  • 拒绝其知识范围之外的问题:例如,拒绝在 2021 年 6 月之后发生的新事件,因为它没在这之后的数据上训练过。或者是拒绝回答一些它训练数据从没见过的数据。

然而,ChatGPT 目前也存在一些不足:

  • 数学能力相对较差:ChatGPT 的数学能力相对较差。它在解决复杂的数学问题或者涉及高级数学概念的情况下,可能会表现出困惑或者给出不准确的答案。

  • 有时会产生幻觉:有时 ChatGPT 会产生幻觉。它在回答与现实世界相关的问题时,有时会提供虚假或不准确的信息。这可能是因为模型在训练数据中遇到了不准确或误导性的例子,从而导致它对某些问题的回答产生偏差。

  • 无法实时更新知识:ChatGPT 无法实时更新知识。它无法像人类一样通过持续学习来更新和获得最新的知识。这限制了其应用于那些需要及时更新信息的领域,例如新闻报道或金融市场分析。

好在,我们可以使用 Retrieval Augmented Generation (RAG) 技术解决产生幻觉,和无法实时更新知识这两点不足。RAG 是结合向量数据库和 LLM 的一项技术应用,关于 RAG 的介绍以及优化技巧,可以参考其它的文章。

03.总结

在这篇文章中,我们从 Embedding 出发,介绍了 Deep Learning 尤其是 NLP 领域目前主流的模型和应用。从早期的 Word Embedding,到现在 ChatGPT 的火热,AI 的发展正在越来越快。随着技术的不断进步和数据的丰富,我们可以期待更加强大的模型的出现。深度学习的应用将更加广泛,不仅仅局限于自然语言处理领域,而是覆盖到更多的领域,如视觉、语音等。相信随着技术的不断突破和社会的发展,会看到未来更多令人振奋的进展和创新。

阅读原文


  • 好消息,Milvus 社区正全网寻找「 北辰使者」!!! ​
  • 如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。 ​
  • 欢迎关注微信公众号“Zilliz”,了解最新资讯。

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker-compose 之 OpenGauss

使用 docker 启动高斯数据库的示范脚本如下: docker-compose.yml version: 3.7 services:opengauss:image: enmotech/opengauss:5.1.0container_name: opengaussnetwork_mode: "host"privileged: truevolumes:- ./opengauss:/var/lib/opengaussenvironm…

前端mock数据——使用mockjs进行mock数据

前端mock数据——使用mockjs进行mock数据 一、安装二、mockjs的具体使用 一、安装 首选需要有nodejs环境安装mockjs:npm install mockjs 若出现像上图这样的错,则只需npm install mockjs --legacy-peer-deps即可 src下新建mock文件夹: mo…

微服务-网关

在微服务架构中,每个服务都是一个可以独立开发和运行的组件,而一个完整的微服务架构由一系列独立运行的微服务组成。其中每个服务都只会完成特定领域的功能,比如订单服务提供与订单业务场景有关的功能、商品服务提供商品展示功能等。各个微服…

SpringBoot文件上传--头像上传

目录 1.在配置文件中写好物理路径和访问路径 2.写配置文件 3.页面上传 4.控制层 5.效果 1.在配置文件中写好物理路径和访问路径 (自定义)file:uploadPath: D:/upload/img/ 物理路径path: /file/** 访问路径 2.写配置文件 package com.example…

BCLinux8U6系统基线加固致无法su的问题分析

本文对BCLinux8U6系统进行基线加固致无法su的问题分析。 一、问题现象 对BCLinux8U6系统进行基线加固,su切换用户失败,报错信息如下: [ABCDlocalhost ~]$ su - 密码: su: 模块未知 二、问题分析 1、错误排查 出错前&#xf…

探索进程控制第一弹(进程终止、进程等待)

文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么?进程终止的情况代码跑完,结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…

自定义校验(这里是Validation)

1.自定义注解State package com.itheima.anno;import com.itheima.Validator.StateValidator; import jakarta.validation.Constraint; import jakarta.validation.Payload;import java.lang.annotation.*;Documented//元注解 Target(ElementType.FIELD) Retention(RetentionP…

力扣HOT100 - 239. 滑动窗口最大值

解题思路&#xff1a; class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length 0 || k 0) return new int[0];Deque<Integer> deque new LinkedList<>();int[] res new int[nums.length - k 1];// 未形成窗口for(int i 0; i <…

瑞山集团携手数环通iPaaS,实现ERP与CRM无缝对接

01 客户背景 瑞山集团位于粤港澳大湾区核心商圈----佛山市&#xff0c;是一家致力于各种新型材料添加剂应用推广&#xff0c;集科研、销售和服务于一身的新材料企业&#xff0c;产品覆盖了塑料黏胶剂、水性涂料、3D打印材料、电子材料、纳米材料等各种行业。 公司旗下拥有几间不…

pdffactory pro 8注册码序列号下载 附教程

PdfFactory Pro可以说是一款行业专业且技术领先的的PDF虚拟打印机软件。其不仅占用系统内存小巧&#xff0c;功能强大&#xff0c;可支持用户无需使用Acrobat来创建Adobe PDF即可以进行PDF组件的创建和打印。同时&#xff0c;现在全新的PdfFactory Pro 8也正式上线来袭&#xf…

雄安建博会:中矿雄安新区的总部开工建设

中矿落位雄安&#xff1a;助力国家战略与新区发展 雄安新区&#xff0c;作为中国未来发展的重要战略支点&#xff0c;正迎来一系列央企总部的疏解与建设。最近&#xff0c;中国矿产资源集团有限公司&#xff08;简称“中矿”&#xff09;在雄安新区的总部项目正式开工建设&…

在win10上虚拟一个LoongOS系统(类似虚拟机)作为开发环境

文章目录 1.安装1.1.下载这三个东西1.2.安装好qemu。1.3.创建一个启动脚本startup_mate.bat&#xff0c;然后把三部分东西放到一起1.4.然后双击startup.bat就可以启动了。 2.文件的传输2.1.使能虚拟机系统的ssh2.2.连接ssh 3.Qt相关安装Qt安装opencv 1.安装 注意&#xff0c;一…

Web前端—属性描述符

属性描述符 假设有一个对象obj var obj {a:1 }观察这个对象&#xff0c;我们如何来描述属性a&#xff1a; 值为1可以重写可以遍历 我们可以通过Object.getOwnPropertyDescriptor得到它的属性描述符 var desc Object.getOwnPropertyDescriptor(obj, a); console.log(desc);我…

uniapp 2.0可视化开发工具:提升跨平台应用开发效率的新篇章

摘要 随着移动互联网的迅猛发展&#xff0c;跨平台应用开发成为前端开发者关注的热点。uniapp作为一款优秀的跨平台应用框架&#xff0c;其2.0版本的发布为开发者带来了更多的便利和可能性。其中&#xff0c;可视化开发工具的出现更是为前端开发带来了革命性的变革&#xff0c…

Windows下docker-compose部署DolphinScheduler

参照&#xff1a;快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录&#xff0c;进入apache-dolphinscheduler-xxx-…

【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt信号和槽的其他说明及Lambda表达式 文章编号&#xff1a;Qt 学习笔记…

ctfshow--web入门--文件上传--web168--web170

web168 法一免杀脚本 还是检查&#xff0c;准备上传图片马 我写的是<?php eval($_POST[a]);?> 上传之后没反应 那么查一下&#xff0c;原来是发现对eval,system还有$_POST和$_GET进行过滤,$_REQUEST还可以用 那么再写一个马&#xff08;免杀脚本&#xff09; <?…

ht1622不显示无反应问题解决

如果你正在写ht1622 驱动时&#xff0c;怎么看程序都没问题&#xff0c;抓取波形&#xff0c;示波器分析波形&#xff0c;如果都没有问题&#xff0c;那么很大可能是硬件问题&#xff0c;检测看看 ht1622 RD是不是接地了。 RD 低会进入读取模式&#xff0c;所以不用RD 请将RD悬…

2024年河北省职业院校技能大赛高职组“信息安全管理与评估”赛项样题

培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;受赋能的客户院校均…

某次众测的加解密对抗

前言 起源于某次众测中&#xff0c;遇到请求包响应包全密文的情况&#xff0c;最终实现burp中加解密。 用到的工具有 sekiro&#xff08;rpc转发&#xff09;flask&#xff08;autodecoder自定义接口&#xff09;autodecoder&#xff08;burp插件转发&#xff09; debug部分…