RAG 如何消除大模型幻觉

什么是大模型幻觉

假设我们有一个基于大型生成模型(如GPT-3)的问答系统,该系统用于回答药企内部知识库中的问题。我们向其提出一个问题:“阿司匹林的主要药理作用是什么?”

正确的答案应该是:“阿司匹林主要通过抑制环氧酶(COX)酶的活性,降低前列腺素和血栓素的生成,从而起到抗血小板聚集、镇痛和解热的作用。”

然而,由于大模型幻觉问题,生成模型可能会给出一个在语法和流畅性上看似合理,但实际上并不准确的答案,例如:“阿司匹林的主要药理作用是通过抑制多巴胺受体来改善心血管功能。”这个答案中的信息是错误的,因为阿司匹林的药理作用与多巴胺受体无关。

如何减少幻觉

解决大模型幻觉问题需要采取多种策略来提高生成模型在自然语言处理任务中的准确性和可靠性。以下是一些常见的方法:

  1. 结合检索和生成:使用像RAG(Retrieval-Augmented Generation)这样的模型,在生成过程中结合检索相关文档或信息。这样可以在生成阶段利用更多外部知识,从而减少幻觉现象。
  2. 模型可解释性和后处理:分析生成模型的输出,以识别和纠正潜在的幻觉问题。这可以通过使用可解释性工具、规则引擎或其他后处理方法来实现。
  3. 模型融合与集成:将多个生成模型的输出进行融合或集成,以提高生成文本的准确性。这可以通过投票、加权平均或其他集成方法来实现。
  4. 优化生成策略:在生成过程中采用更合适的概率抽样策略,如束搜索(beam search)、拓扑抽样(top-k sampling)或者核心抽样(nucleus sampling),以平衡生成文本的多样性和准确性。
  5. 更精细的预训练和微调(fine-tuning):在预训练生成模型时,使用更高质量、更具代表性的数据集。更多有标签的数据或强化学习方法来提高模型。在微调阶段,使用与目标任务更相关的数据集,以便模型更好地适应特定场景。
  6. 提示词工程:使用更好的提示词进行正确性引导。
  7. 增加多样性:在生成回答时,可以引入一些随机性或多样性,以避免模型过于依赖于检索到的特定信息。例如,可以通过引入不同的词汇、短语或句子结构来增加生成的多样性。

通过采取这些方法,研究人员和工程师可以在一定程度上解决大模型幻觉问题,提高生成模型在自然语言处理任务中的表现。然而,这仍然是一个具有挑战性的研究领域,需要进一步的探索和创新。

RAG是什么

RAG(Retrieval-Augmented Generation)是一种结合了检索和生成的技术,旨在提高自然语言处理任务的性能。在RAG中,外部检索(或搜索)系统和大模型被集成在了一起,它会首先根据用户词从外部的文本数据中检索与当前任务相关的信息,然后利用这些信息和用户词一起构建一个更丰富的上下文信息,从而生成回答或完成任务。

191BF910-61EE-4CBA-AA66-188DA4C77D7B.png

RAG(中文为检索增强生成) = 检索技术 + LLM 提示

RAG(Retrieval-Augmented Generation)的详细过程主要包括以下步骤:

  1. 输入:首先,RAG接收一个输入,这个输入可以是一个问题、一个句子或者一个段落,取决于具体的任务需求。
  2. 检索阶段:RAG模型会从预先构建的知识库或文档集合中检索出与输入相关的文档或片段。这个过程通常使用一个检索模型,例如基于BM25的模型或者基于向量空间模型的最近邻搜索。检索到的文档或片段将作为上下文信息,供下一阶段的生成模型使用。
  3. 上下文整合:检索到相关文档或片段后,RAG模型会将这些文档与输入整合在一起,形成一个统一的上下文。
  4. 生成阶段:在这个阶段,RAG模型会使用一个预训练的生成模型(例如GPT-3)来生成回答或输出。这个过程是条件生成的,意味着生成的文本不仅依赖于输入,还依赖于检索阶段提供的上下文信息。生成模型会考虑这些上下文信息,以生成一个与输入相关,且在内容上更准确和可靠的回答或输出。
  5. 输出:最后,RAG模型会输出生成的文本。这个输出应该充分考虑了检索到的相关文档中的信息,从而减少了幻觉现象,提高了生成文本的准确性和可靠性。

通过这种结合检索和生成的方式,RAG模型能够在生成过程中利用更多的外部知识,从而提高生成文本的质量,并减少生成模型的幻觉现象。然而,RAG模型的效果往往依赖于检索阶段的效果,如果检索阶段不能提供足够相关和有用的文档或片段,那么生成阶段的效果可能会受到影响。因此 ,如何优化检索阶段的效果,是RAG模型的一个重要研究方向,也是一个非常大的挑战

检索技术

RAG中模型的检索阶段主要用于从大规模知识库或文档集合中检索与输入问题或文本相关的文档或片段。这个阶段主要决定了最终的效果。

目前主流的检索技术包括以下几种:

  1. 基于关键词的检索:这种方法主要依赖于关键词匹配来检索相关文档。一个常用的技术是BM25,它是一种基于词频-逆文档频率(TF-IDF)的信息检索算法。BM25为每个文档计算一个得分,该得分表示文档与查询之间的相关性。然后,根据得分对文档进行排序,并返回最相关的文档。
  2. 基于向量空间的检索:这种方法使用词嵌入或句子嵌入技术将文本表示为高维向量。对于输入问题或文本,也计算其向量表示。然后,使用余弦相似度或欧几里得距离等度量方法计算输入向量与文档向量之间的相似性。最后,根据相似性得分对文档进行排序,并返回最相关的文档。常用的向量表示方法包括Word2Vec、GloVe、BERT等。
  3. 基于深度学习的检索:这种方法使用深度学习模型(如神经网络)来学习输入问题或文本与文档之间的相关性。训练时,模型学习从输入问题或文本到相关文档的映射。在检索阶段,模型根据输入计算每个文档的相关性得分,并返回最相关的文档。这种方法通常需要大量的有标签训练数据,以便模型能够学习到有效的映射。
  4. 混合检索技术:在实际应用中,可能会将以上多种检索技术结合在一起,以实现更高效和准确的检索。例如,可以先使用基于关键词的检索方法进行粗略筛选,然后使用基于向量空间的检索方法进一步优化结果。

向量数据库

向量数据库是一种专门用于存储和检索高维向量数据的数据库。与传统的关系型数据库或文档数据库不同,向量数据库针对向量数据的特点进行了优化,以实现高效的相似性搜索和最近邻查询。

向量数据库的过程通常是把资料或者文档等所有内容转化成向量(这个过程称之为 Vector Embedding),然后当用户发起检索时,会将用户的搜索内容转换成向量,然后在数据库中搜索最相似的向量,匹配最相似的几个上下文,最后将上下文返回。

64FE8AC3-A89E-434A-B0AF-60D23CBF58FE.png

近似最近邻算法

向量数据库中的搜索算法主要用于实现最近邻搜索,即在高维向量空间中找到与给定向量最接近的其他向量。

各种向量搜索层出不穷的目的在于提升效率,这主要有两个方向:1. 降低向量大小(降维、降低长度)2. 缩小搜索空间。

以下是一些常见的ANN(Approximate Nearest Neighbors)算法实现:

  1. KD树(K-Dimensional Tree):KD树是一种空间划分树,用于在多维空间中组织数据。KD树的搜索过程可以高效地剪枝,从而减少搜索空间。然而,KD树在处理高维数据时效率会降低。
  2. 球树(Ball Tree):球树是一种以超球体来划分空间的树形数据结构,比KD树更适合处理高维数据。球树可以更好地处理数据的内在结构,从而提高搜索效率。
  3. 局部敏感哈希(Locality-Sensitive Hashing,LSH):LSH是一种哈希方法,可以将相近的点映射到相同或相近的哈希桶。LSH适用于大规模数据的相似性搜索,但精度较低。
  4. 乘积量化(Product Quantization):乘积量化是一种用于大规模最近邻搜索的向量量化方法。乘积量化可以将高维向量映射到紧凑的代码,从而大幅度减少存储和计算需求。
  5. 层次化导航(Hierarchical Navigable Small World,HNSW):HNSW是一种基于图的搜索方法,利用小世界网络的性质来加速最近邻搜索。HNSW可以处理大规模高维数据,且在精度和效率之间有良好的平衡。

向量数据库产品

目前市场上有许多向量数据库可供选择,包括开源和商业产品。一些常见的向量数据库包括:

  1. Faiss:由Facebook AI Research开发的一款高性能的向量数据库。Faiss提供了多种索引结构和算法,支持大规模的相似性搜索和最近邻查询。
  2. Annoy:由Spotify开发的一款近似最近邻搜索库,适用于推荐系统和其他需要高效相似性搜索的场景。
  3. Milvus:一个开源的向量数据库,提供多种索引和查询算法,支持分布式部署和可扩展性。
  4. Weaviate:一个开源的、实时的、可扩展的和基于语义的向量搜索引擎。Weaviate允许用户通过RESTful API或者GraphQL API进行数据的存储、检索和搜索。
  5. Elasticsearch:虽然Elasticsearch主要是一个文档数据库,但它也支持向量数据的存储和相似性搜索。通过内置的向量字段类型和相似性度量函数,Elasticsearch可以实现基本的最近邻查询。

RAG的架构

实现检索增强生成系统的方案很多,实践过程中我们可以参考具体的需求和数据的细微差别。下面是一个常用的工作流程,加深对于流程的基本理解。

BE908360-A55B-4A3F-A89A-E850DE98FE5C.png

代码实现

使用langchain加载文档

python
复制代码
import requests
from langchain.document_loaders import TextLoaderurl = "xxx"
res = requests.get(url)
with open("test.txt", "w") as f:f.write(res.text)loader = TextLoader('./test.txt')
documents = loader.load()

对文档切分,保证处于LLM窗口限制之下

python
复制代码
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

嵌入并存储这些文本块,使用 Weaviate 向量数据库

python
复制代码
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Weaviate
import weaviate
from weaviate.embedded import EmbeddedOptionsclient = weaviate.Client(embedded_options = EmbeddedOptions()
)vectorstore = Weaviate.from_documents(client = client,documents = chunks,embedding = OpenAIEmbeddings(),by_text = False
)

检索并增强生成

python
复制代码
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParsertemplate = """You are an assistant for question-answering tasks.
Use the following pieces of retrieved context to answer the question.
If you don't know the answer, just say that you don't know.
Use three sentences maximum and keep the answer concise.
Question: {question}
Context: {context}
Answer:
"""
prompt = ChatPromptTemplate.from_template(template)print(prompt)retriever = vectorstore.as_retriever()llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)rag_chain = ({"context": retriever,  "question": RunnablePassthrough()}| prompt| llm| StrOutputParser()
)query = "阿司匹林的主要药理作用是什么?"
rag_chain.invoke(query)

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

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

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

相关文章

记录一次汇川PLC通信的问题(06,16功能码相关)

先看下图,使用的06功能码,但其实在汇川的功能码选项内选择的是16,汇川的软件内根本没有06功能码,它会在你使用16功能码的时候去判断如果写寄存器的个数是1个就默认切换到06功能码,这就非常难受了,因为对接设…

【数据可视化包Matplotlib】Matplotlib基本绘图方法

目录 一、Matplotlib绘图的基本流程(一)最简单的绘图(仅指定y的值)(二)更一般的绘图(同时指定x和y的值)(三)增加更多的绘图元素 二、布局相关的对象——Figur…

SAP 技巧篇:Script脚本模拟人工操作批量录入数据

“ 现在大环境都讲人工智能、自动化办公等场景的应用,这里我们介绍一下SAP本身自带的自动化工具” 文章最后附最终脚本 01 — 背景需求 SAP:批量录入工具:LSMW/BDC/Script 三大工具 LSMW:应用场景多,实现方法多&am…

测出Bug就完了?从4个方面教你Bug根因分析

01 现状及场景 🎯 1.缺失bug根因分析环节 工作10年,虽然不是一线城市,也经历过几家公司,规模大的、规模小的都有,针对于测试行业很少有Bug根因环节,主流程基本上都是测试提交bug-开发修改-测试验证-发送报…

Docker部署MongoDB数据库

文章目录 官网地址docker 网络部署 MongoDB部署 mongo-expressdocker-compose.ymlMongoDB shell 官网地址 https://www.mongodb.com/zh-cn docker 网络 # 创建 mongo_network 网络 docker network create mongo_network # 查看网络 docker network list # 容器连接到 mongo_…

CANoe中LIN工程主节点的配置(如何切换调度表)

1:前置条件 1)工程已经建立,simulation窗口已经配置好(包括且不限于通道mappin好,数据库文件已经添加) 2)我已系统自带sampleCfg工程,作为例子。如下图 2 :主节点的配置…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接:ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf62…

element日期时间选择器,禁止选择当前时间以后的时间

效果如下&#xff1a; 源码附上&#xff1a; pickerOptions 对象包含一个disabledDate函数&#xff0c;该函数会对超出当前日期一年后的日期进行禁用。Date.now() - 8.64e7计算当前日期减去一年的毫秒数&#xff0c;从而禁用当年之后的所有年份。 <xx-date-picker v-model…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片&#xff0c;没有网络爬虫滥竽充数的图片&#xff0c;可直接用来训练。以上图片均一一手工标注&#xff0c;标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

vue3中单框双时间选择模式

在单框双时间选择下&#xff0c;给当前时间框赋值&#xff0c;可以使用vue中的v-model双向绑定方式 如前端元素代码&#xff1a; <el-form-item label"创建时间" style"width: 308px;"><el-date-pickerv-model"dateRange"value-forma…

公钥基础设施 (PKI) 助力物联网安全

物联网&#xff08;InternetofThings&#xff0c;缩写IoT&#xff09;在制造业、农业、家居、交通和车联网、医疗健康等多个领域广泛应用&#xff0c;让我们进入万物互联时代&#xff0c;实现智能生产、智慧生活。然而&#xff0c;随着物联网的发展&#xff0c;网络威胁日益增加…

高风险IP的来源及其影响

随着互联网的发展&#xff0c;网络安全问题越来越引人关注。其中&#xff0c;高风险IP的来源成为了研究和讨论的焦点之一。高风险IP指的是那些经常涉及到网络攻击、恶意软件传播以及其他不良行为的IP地址。它们的存在不仅对个人和组织的网络安全构成威胁&#xff0c;还可能给整…

MYSQL5.7详细安装步骤

MYSQL5.7详细安装步骤&#xff1a; 0、更换yum源 1、打开 mirrors.aliyun.com&#xff0c;选择centos的系统&#xff0c;点击帮助 2、执行命令&#xff1a;yum install wget -y 3、改变某些文件的名称 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base…

第四百六十二回

文章目录 1. 概念介绍2. 实现方法3. 示例代码4. 内容总结 我们在上一章回中介绍了"关于MediaQuery的优化"相关的内容&#xff0c;本章回中将介绍readMore这个三方包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的readMore是一个…

一文读懂Javascript中var、let和const的区别,包括提升hoisting(文章非常简短易懂,适合小白)

一张表格整理var、let和const的区别 关键词 范围 提升 可以重新分配 可以重新声明 var 函数作用域 是 是 是 let 块作用域 否 是 否 const 块作用域 否 否 否 相信在上面的表格中&#xff0c;大家有疑问的应该是提升&#xff0c;那么下面就给大家来讲讲js…

Excel VBA技术:编织数据之梦的魔法语言

想要让你的Excel技能瞬间升级&#xff0c;成为数据处理与展示的顶尖高手吗&#xff1f;Excel VBA技术正是你不可错过的魔法武器&#xff01;它能让你轻松驾驭复杂的数据任务&#xff0c;自动化处理繁琐操作&#xff0c;释放你的双手和大脑。通过VBA&#xff0c;你可以创建精美的…

媒体邀约采访的分类?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约采访可以根据不同的标准进行分类。以下是一些常见的分类方式&#xff1a; 1. 按照邀约形式&#xff1a; - 电话邀约&#xff1a;通过电话与媒体联系&#xff0c;说明采访或报道…

吴恩达2022机器学习专项课程(一) 第二周课程实验:实践线性回归

目标 假设您是一家餐厅连锁店的首席执行官&#xff0c;并正在考虑在不同的城市开设新店。您希望将您的业务扩展到可能为您的餐厅带来更高利润的城市。该连锁店已经在各个城市设有餐厅&#xff0c;您已经获得了这些城市的利润和人口数据。您还拥有关于新餐厅候选城市的数据。对…

机器学习算法快速入门

文章目录 0.简介1.常用术语1) 模型2) 数据集3) 样本&特征4) 向量5) 矩阵6)假设函数&损失函数7&#xff09;拟合&过拟合&欠拟合 2.线性回归3.梯度下降求极值4.Logistic回归算法&#xff08;分类问题&#xff09;5.KNN最邻近分类算法6.朴素贝叶斯分类算法7.决策树…

前端开发攻略---在页面上渲染大量元素,使用defer减少白屏等待时间,优化页面响应速度

1、优化前 2、优化后 3、优化思路 1、在元素数量不变的情况下&#xff0c;进行一步一步的渲染&#xff0c;先渲染一些重要的元素或者需要用户第一时间看到的元素。 2、使用Hooks封装优化函数 4、优化代码 拥有大量元素的组件&#xff08;Item&#xff09;&#xff1a;文件位置&…