首页 > 其他分享 >大模型检索增强生成RAG原理介绍

大模型检索增强生成RAG原理介绍

时间:2024-03-29 19:59:47浏览次数:27  
标签:检索 RAG 模型 知识库 构建 向量

大家好,我是程序锅。

github上的代码封装程度高,不利于小白学习入门。

常规的大模型RAG框架有langchain等,但是langchain等框架源码理解困难,debug源码上手难度大。

因此,我写了一个人人都能看懂、人人都能修改的大模型RAG框架代码。

整体项目结构如下图所示:

手把手教你大模型RAG框架架构

本篇文章将介绍2.RAG原理介绍,不需要编程,理解整体思路。

一、为什么要用RAG?

LLM会产生误导性的 “幻觉”,训练数据会过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。

正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generation,RAG)应时而生,成为大模型时代的一大趋势。

RAG通过在语言模型生成答案之前,先从广泛的专业文档数据库中检索相关信息,然后利用这些专业信息来引导大模型生成的结果,极大地提升了内容的准确性和相关性。

RAG有效地缓解了幻觉问题,提高了知识更新的速度(大模型+搜索引擎),并增强了内容生成的可追溯性,使得大型语言模型在实际应用中变得更加实用和可信。

二、RAG的技术路线

RAG整体技术路线可分为3大块8个小点见图1,其中包含知识库构建、知识检索和知识问答。其中核心在于知识库构建

图1.RAG技术路线

知识库的构建

由图1可知涉及4个小点,分别为:文件预处理、文件切分、向量化和构建索引。

1.文件预处理

输入:原始文件(比如pdf、word等非结构化数据)

输出:纯文本

技术手段:pdf、word解析器,也涉及表格转文本、图片OCR等技术。

2.文件切分

文件预处理后,由于大模型的输入token的限制(因为不可能一次性将所有文件,一次输入大模型),需要对文本分段。

技术手段:一般采用识别\n字符的方式分段。

 lines = text.split('\n')
3.向量化

将文本、图像、音频和视频等转化为向量矩阵的过程,也就是变成计算机可以理解的格式。

输入:分段后的文本

输出:向量化后的向量组

技术手段:通过远程调用智谱、OpenAI的embedding模型。

输出结果展示:

4.构建索引

段落向量化后,我们需要构建索引,为后续快速向量匹配打下基础。当然,我们也可以不构建索引,写一个for循环挨个匹配,消耗时间长一点而已。

后续这个小项目没有设置索引,大家如何感兴趣可以引入ES、向量数据库等工具构建索引。

向量检索

由图1可知向量检索涉及2个小点,分别为:向量化、知识库检索。

知识库构建完成后,用户输入一个问题,需要对用户的问题向量化。这里的向量检索所涉及到向量化模型需要和上面知识库构建里面向量化所使用到的模型保持一致。

一般根据实际需求,会匹配到k个结果。(一般是按照向量化后的问题与知识库里的向量计算相似度,并从高到低排序,选前k个)

k是一个超参数,用户提供。

匹配的算法一般采用欧氏距离、曼哈顿距离、余弦等。

后续小项目中,我们采用最简单的余弦相似度来衡量向量之间的相似度。

余弦相似度公式:

余弦相似度公式

  def cosine_similarity(cls, vector1: List[float], vector2: List[float]) -> float:
        """
        calculate cosine similarity between two vectors
        """
        dot_product = np.dot(vector1, vector2)
        magnitude = np.linalg.norm(vector1) * np.linalg.norm(vector2)
        if not magnitude:
            return 0
        return dot_product / magnitude

知识问答

由图1可知涉及2个小点,分别为:调用提示工程模板、调用大模型LLM。

1. 提示工程模板设计

输入:用户输入的问题和知识库中得到k个相关的段落。

输出:结合提示工程模板,将用户输入的问题、知识库中得到top k个相关的段落组成一个完成的context。

RAG_PROMPT_TEMPALTE="""使用以上下文来回答用户的问题。如果你不知道答案,就说你不知道。总是使用中文回答。
        问题: {question}
        可参考的上下文:
        ···
        {context}
        ···
        如果给定的上下文无法让你做出回答,请回答数据库中没有这个内容,你不知道。
        有用的回答:"""

上面代码中的question就是用户问题,context是top k个相关的段落。

2. 大模型调用

如何调用大模型API有详细描述。

三、最后

相信通过上面的介绍,大家对为什么要用RAG、RAG的技术路线有了大概了解。下一篇文章,我们将开始环境部署,准备开发自己的大模型RAG应用。

标签:检索,RAG,模型,知识库,构建,向量
From: https://blog.csdn.net/qq_35054222/article/details/137087487

相关文章

  • Yolov8训练识别模型
    本文手把手教你用YoloV8训练自己的数据集并实现物体识别操作环境:系统:Windows10Python:3.9Pytorch:2.2.2+cu121环境安装安装CUDA以及cudnn 参考博客《Windows安装CUDA12.1及cudnn》(https://www.cnblogs.com/RiverRiver/p/18103991)安装torch,torchvision对应版本,这里先......
  • darknet框架训练YOLOv7模型与工业缺陷检测
    1.darkne介绍Darknet是一个开源的深度学习框架,由JosephRedmon(YOLO~YOLOv3作者或参与者)开发,主要用于实现神经网络模型。这个框架最初是为了实现计算机视觉任务而创建的,尤其是目标检测。其中最著名的应用之一就是YOLO(YouOnlyLookOnce)系列目标检测算法。以下是......
  • 万字详解PHP+Sphinx中文亿级数据全文检索实战(实测亿级数据0.1秒搜索耗时)
    Sphinx官方文档:http://sphinxsearch.com/docs/sphinx3.html极简概括:由C++编写的高性能全文搜索引擎的开源组件,C/S架构,跨平台(支持Linux、Windows、MacOS),支持分布式部署,并可直接适配MySQL。解决问题:因为MySQL的like%keyword%不走索引,且全文索引不支持中文,所以需要借助其它......
  • TSINGSEE青犀多模型、算力调度与智能分析AI算法中台介绍及应用
    TSINGSEE青犀AI算法中台是一款平台型产品,专注于提供各行业中小场景中部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点,可提供丰富的视图接入能力和智能分析能力。平台将不同类型、不同协议前端设备,支持通过不同网络环境进行传输、汇聚、处理,并能在平台内部进......
  • 【投稿优惠-EI稳定检索】2024年新能源技术与动力工程国际学术会议(ICNETPE 2024)
    2024InternationalConferenceonNewEnergyTechnologyandPowerEngineering(ICNETPE2024)●会议简介2024年新能源技术与电力工程国际会议汇聚了全球新能源与电力工程领域的精英。会议旨在推动新能源技术创新,探索电力工程前沿应用,促进国际学术交流与合作。与会者将分......
  • 深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的
    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的算法原理与实现,本文介绍了一种用于处理分类数据不平衡问题的过采样方法——SMOTE算法。SMOTE算法通过在少数类的样本之间插值来创建新的样本,从而增加少......
  • OBJ模型简化工具:提升性能与效率的利器
    在计算机图形学领域,OBJ模型简化工具是一种强大的工具,用于减少模型的面数,以提高模型在渲染和处理过程中的性能。本文将全面介绍为何需要简化模型、简化的方法、常见的简化算法以及一款简化工具的使用方法,帮助读者更好地了解和应用这一技术。为何需要简化模型随着计算机图形技......
  • DICE模型教程
    原文链接:DICE模型教程https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247599474&idx=6&sn=bd716d5719ddd8bd6c565daa0f361b72&chksm=fa820495cdf58d83360a402cb2a05042e0f13e6d84d96ee36708e4c5ce90fa124ad9a30b9717&token=1105644014&lang=zh_CN#......
  • ViewPager2 FragmentManager is already executing transactions
    一、概述双层Fragment+ViewPager2嵌套来回切换导致如下异常ViewPager2FragmentManagerisalreadyexecutingtransactions 二、解决办法FragmentStateAdapter的默认构造函数使用的是:publicFragmentStateAdapter(@NonNullFragmentActivityfragmentActivity......
  • R语言广义线性混合模型(GLMM)bootstrap预测置信区间可视化
    全文链接:https://tecdat.cn/?p=35552原文出处:拓端数据部落公众号通过线性模型和广义线性模型(GLM),预测函数可以返回在观测数据或新数据上预测值的标准误差。然后,利用这些标准误差绘制出拟合回归线周围的置信区间或预测区间。置信区间(CI)的重点在于回归线,其可以解释为(假设我们绘制的......