NVIDIA 大模型 RAG 分享笔记

文章目录

  • 大语言模型在垂直领域落地的三个挑战:
  • 什么是 RAG以及为什么能解决大预言模型所带来的的这三个问题
  • RAG 不是一项技术而是整体的 Pipeline
    • 非参数化 :数据库部分
      • 加载到数据库中
      • 检索阶段
    • 提升检索效率的技术
      • 检索前:对query做处理
        • use query routing
        • Query transformations
        • Sentence-window retrieval & Auto-merge retriveal
      • 检索中
      • 检索后
        • Re-ranker
        • Meta-data filtering
        • Prompt Compression
      • 总结
    • 参数化的部分:模型的选择和部署
    • 评价
  • NVIDIA 提供的 RAG 端到端解决方案
    • embedding model
    • RAPIDS RAFT 加强的index
    • 大语言基础模型
    • 部署框架 TensorRT-LLM
    • NeMo Guardrails
    • Evaluating RAG Pipeline
    • RAG Pipeline Samples in NVIDIA
  • 借助于RAG-Copilot 如何提升工作效率
    • RAG 技术和微调技术的比较
    • 高级 RAG
      • NVIDIA 的加持

大语言模型在垂直领域落地的三个挑战:

  • 数据是有一定范围的。大量的数据在一定的时间内训练完成的。确定数据对于基础模型是有一定的范围的。对专业领域,垂直领域的应用场景来说,知识是不够全面的。是缺乏专业的知识的。
  • 数据有时间限制的。知识更新迭代快,给的回答可能过时
  • 幻觉

RAG 是一种解决的 pipeline.

在这里插入图片描述

什么是 RAG以及为什么能解决大预言模型所带来的的这三个问题

RAG对于大语言模型来说类比于开卷考试。

三个步骤

  • Retriveal
  • Augmentation: 增强的 prompt
    • 增强的上下文是有理有据的,减少幻觉
  • 参数化的知识,结合传入的数据,生成

技术

  • 非参数化的技术:数据库的部分
  • 预训练的参数化部分
    • 基础大语言模型的选择
    • 部署平台的选择,提升用户的体验

RAG 不是一项技术而是整体的 Pipeline

非参数化 :数据库部分

在这里插入图片描述

加载到数据库中

准备好数据,需要放进数据库中的数据类型
在这里插入图片描述

  • Documents Loader

    • langchain 或其他工具提供的加载方式进行数据加载
    • 数据本身可能涉及到一些冗余重复的文字,比如统一的公司后缀:这是一个关于。。。之类的文档。。。声明之类,在放进数据库之前,应该统一进行清洗处理。
      在这里插入图片描述
    • Chunk
      因为大语言模型对于输入的窗口是有一定的限制的,不能太大。这取决于基础模型在本身的训练过程中或者它的 attention 机制。那么我们在分 chunk 的时候可以有不同的选择。可以用固定大小的chunk,也可以用动态的,动态的是指用一些标志来作为一个分割,比如一个段落按回车符分或者一个完整的句子按句号分,就是尽可能划分为有意义的分块。
      针对纯文本,可以增加重叠部分。好处是有一个承上启下的作用,给到模型的时候会附带逻辑。
      在这里插入图片描述
  • Embedding Model

    • 一般是一个 encoder model.
    • 可能需要加prompt,才能达到比较好的检索效果
      在这里插入图片描述
  • Vector Database

    • 是否支持分布式部署
    • 是否支持需要的索引方式等
      在这里插入图片描述

检索阶段

应用上线之后,真的来了问题,需要把问题转换成向量,去向量空间里面去做一个近似性搜索,找到相关文档进行返回。

  • Database Search
    • precision:检出的文档是否是问题相关的上下文
    • recall: 和问题相关的文档是否全部检出,只返回一两个可能无法提升rag整体效果
      所以如何提高 similarity search 返回整体的精度也是非常重要的一点。
      在这里插入图片描述
      如何采用技术来提升相似性的精确度和准确度。

一个好的向量数据会把含义相近的上下文放在一起,区分单纯的关键词匹配。
索引一般采用的是 ANN 算法。

在这里插入图片描述

提升检索效率的技术

分为检索前、检索中、检索后三个阶段,看可以采用的技术。
在这里插入图片描述

检索前:对query做处理

use query routing

借助 LLM 的能力,可以理解成有一个小小的 LLM agent,拿到用户的问题之后,会去看问题属于哪一类。
比如会在数据库中建立两类索引,一类是和总结相关的,另外的索引就是常规的明细介绍。如果发现问题是和总结相关的,小agent就应该说你应该去 summay index 里面去做检索。
在这里插入图片描述

Query transformations

借助 LLM 的技术,对 query 做一个转换

  • 重写问题。问题问得不好,LLM 重写一个问题再去向量数据库中检索
  • HyDE, 先不用 RAG 这样的增强方式,就让这个问题直接到大语言模型产生一个答案。然后把问题和答案同时送到向量数据库中去做检索
  • 将复杂问题做拆解,拆解之后再进行检索
Sentence-window retrieval & Auto-merge retriveal

chunk 如果太大, 向量表示可能隐藏掉相关文本的语义。
使用从小到大的技术。

  • 使用小的chunk 去生成 embedding vector。
    但是因为chunk比较小,给到大语言模型的上下文是不足够的,让后就使用 “大”(to big)
    • Sentence-window retrieval : 把每个句子都去生成一个多维向量,检索的时候是精确检索到了句子,为了提高上下文的丰富性,可以把前5个句子,后5个句子同时送到大语言模型中做一个上下文的增强。
    • Auto-merge retriveal:采用树型的存储结构,比如知道一个段落产生了这个 vector, 知道段落属于哪个小节,属于哪章节。检索完小的段落之后,可以找到它的父节点,可以把小节的内容,更丰富的内容送进大模型中去做生成。这样就能够保证检索的精度,同时保证上下文够丰富,能够生成符合我们预期的内容。
      在这里插入图片描述

检索中

hybrid: 混合的检索方式 keyword+embedddings.
把 keyword 加到 query 里面,做一个精确的检索?具体做法?
在这里插入图片描述

检索后

Re-ranker

这个是比较重要的,也是建议刚开始建立原型的话也可以去采用的一个技术.

相似性搜索后,和相关不是百分百对应的。检索出来的上下文不一定是相关的。可以再用一个另外一个小型的模型,输入是用户的问题以及检索出来的文档,去看问题和文档的相关性。
再去做一个排序,做一个二级检索。二级检索的时候就要对前面的检索进行一定的调整。(应该只是对第一轮检索做了一个相关性过滤)
第一轮,检索100个或30个,re-ranker 后用 top5, 放进大语言模型做生成
在这里插入图片描述

Meta-data filtering

存储时可以把作者存入
检索时可以增加作者这个元数据去做二次过滤,去提升检索效果

在这里插入图片描述

Prompt Compression

大语言模型有 window 限制, 找到的 chunk,尽管用了一些方法,但是还是存在一些噪声,和query不太相关,但是却不太能把它删除。
再借助另一个语言模型,把增强型的prompt再进行一个压缩,把有用的信息增强,把不相关的信息减弱。

在这里插入图片描述

总结

在这里插入图片描述

参数化的部分:模型的选择和部署

在这里插入图片描述
模型:适合场景的模型,比如代码类,问答类会有对应的模型
部署:低延迟、高吞吐率。是否支撑换模型。

评价

在产品阶段不是一蹴而就,需要多次迭代。需要看实践是否满足需求。如何评价整个 RAG 流程的工作效率是非常重要的一环。

  • RAGAS
  • truelens
  • standford ARES

不同的评估标准的指标都不一样,对标准的计算公式也不太一样,难度也不同,按需选择。
在这里插入图片描述

NVIDIA 提供的 RAG 端到端解决方案

方便上手,建立原型

embedding model

nvidia text qa embedding model
在这里插入图片描述

RAPIDS RAFT 加强的index

提升检索速度
GPU 加速的 ANN 索引
在这里插入图片描述
在这里插入图片描述

大语言基础模型

在这里插入图片描述

部署框架 TensorRT-LLM

在这里插入图片描述

NeMo Guardrails

为输出提供围栏?具体没说,已经开源,可以查看文档。
已经开源,可以查看文档

在这里插入图片描述

Evaluating RAG Pipeline

RAGAS: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines

RAG Pipeline Samples in NVIDIA

NVIDIA/GenerativeAIExamples

借助于RAG-Copilot 如何提升工作效率

Example: ChipNemo
一个借助于RAG制造芯片的例子。里面是结合了RAG和微调两种技术。
Custom tokenizers| Domain-adaptive continued pretraining |
Supervised fine-tuning (SFT) with domain-specific instructions | domain-adapted retrieval models.

RAG 技术和微调技术的比较

在这里插入图片描述

高级 RAG

在这里插入图片描述

NVIDIA 的加持

在这里插入图片描述

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

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

相关文章

2024年MacBookPro电脑数据恢复软件EasyRecovery数据恢复

前天新入手了一台MacBook pro,第一次用Mac激动的心情简直难以言喻,可是随后这激动的心情顿时就烟消云散了,因为对Mac操作系统的不熟练,导致我删除了一份很重要的Word文件。MacBook pro如何恢复误删除的文件?就这件事我向朋友求助…

网站批量管理软件【最新免费】

在网站运营的过程中,站群软件成为提高效率、管理多个网站的得力助手。本文将专心分享三款卓越的站群软件,其中特别推荐147SEO软件,它不仅能够批量管理网站,还能自动更新原创文章,并主动推送各大搜索引擎。不论您运营何…

c语言空指针

系列文章目录 c语言空指针 c语言空指针 系列文章目录c语言空指针 c语言空指针 空指针 没有指向任何的地址(其指向0的地址) 空制指针就是指向内存编号为零的空间,操作该内存空间会报错,一般情况空指针用于程序条件判断 操作空指针 …

AIGC实战——深度学习 (Deep Learning, DL)

AIGC实战——深度学习 0. 前言1. 深度学习基本概念1.1 基本定义1.2 非结构化数据 2. 深度神经网络2.1 神经网络2.2 学习高级特征 3. TensorFlow 和 Keras4. 多层感知器 (MLP)4.1 准备数据4.2 构建模型4.3 检查模型4.4 编译模型4.5 训练模型4.6 评估模型 小结系列链接 0. 前言 …

数据在内存中的存储(整型与浮点数类型)

目录 数据类型详细介绍 数据类型介绍 数据类型的基本归类 整型在内存中的存储 原码、反码、补码 ​编辑 大小端介绍 例题 浮点型在内存中的存储 常见的浮点数 浮点数存储的例子(具体解析浮点数存储) 解析最初的例题 数据类型详细介绍 数据类…

FPGA高端项目:Xilinx Artix7 系列FPGA纯verilog图像缩放工程解决方案 提供4套工程源码和技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应用 3、设计思路框架设计框图视频源选择o…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载:https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注:如果2、3步报错,清除缓…

ClickHouse与Doris数据库比较

概述 都说“实践是检验真理的唯一标准”,光说不练假把式,那么本文就通过实际的测试来感受一下Doris和clickhouse在读写方面的性能差距,看看Doris盛名之下,是否真有屠龙之技;clickhouse长锋出鞘,是否敢缚苍…

JVM 如何判断一个对象可以被回收

Hi, 我是 浮生。 今天分享一道一线互联网公司必问的面试题。 ”JVM 如何判断一个对象可以被回收“ 关于这个问题,来看看高手的回答。 一、问题解析 在 JVM 里面,要判断一个对象是否可以被回收,最重要的是判断这个对象是否还在被…

Web3解密:区块链技术如何颠覆传统互联网

随着区块链技术的崛起,Web3正逐渐成为新一代互联网的代名词。它不再依赖中心化的权威机构,而是通过去中心化、透明、安全的特性,为用户带来更为开放和公正的互联网体验。本文将深入解密Web3,揭示区块链技术如何颠覆传统互联网的基…

ZABBIX根据IP列表,主机描述,或IP子网批量创建主机的维护任务

有时候被ZABBIX监控的主机可能需要关机重启等维护操作,为了在此期间不触发告警,需要创建主机的维护任务,以免出现误告警 ZABBIX本身有这个API可供调用(不同版本细节略有不同,本次用的ZABBIX6.*),实现批量化建立主机的维护任务 无论哪种方式(IP列表,主机描述,或IP子网)创建维护…

【C语言】linux内核ipoib模块 - ipoib_start_xmit

一、ipoib_start_xmit函数定义 static netdev_tx_t ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) {struct ipoib_dev_priv *priv ipoib_priv(dev);struct rdma_netdev *rn netdev_priv(dev);struct ipoib_neigh *neigh;struct ipoib_pseudo_header *phdr…

[AI]文心一言爆火的同时,ChatGPT-4.5的正确打开方式

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

元宇宙:智慧城市建设的未来引擎与价值之源

在21世纪的技术大潮中&#xff0c;元宇宙的出现无疑是一场革命&#xff0c;其独特的概念与价值已经引发了全球范围内的关注。 作为新兴科技的前沿&#xff0c;元宇宙为智慧城市建设带来了无限的可能性和价值&#xff0c;有望成为未来城市发展的核心动力。 元宇宙&#xff0c;这…

【linux】Linux编辑器-vim

rz指令&#xff0c;sz指令 关于 rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过拖拽的方式将文件上传过去 1.查看软件包 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep…

GitHub 一周热点汇总第6期(2024/01/14-01/20)

GitHub一周热点汇总第6期 (2024/01/14-01/20) &#xff0c;梳理每周热门的GitHub项目&#xff0c;这一周的热门项目中AI的比重难得的变低了&#xff0c;终于不像一个AI热门项目汇总了&#xff0c;一起来看看都有哪些项目吧。 #1Maybe 项目名称&#xff1a;Maybe - 个人理财应…

2种数控棋

目录 数控棋1 数控棋2 数控棋1 棋盘&#xff1a; 初始局面&#xff1a; 规则&#xff1a; 规则&#xff1a;双方轮流走棋&#xff0c;可走横格、竖格、可横竖转弯&#xff0c;不可走斜格。每一步均须按棋所在格的数字走步数&#xff0c;不可多不可少。 先无法走棋的一方为…

Java多线程并发篇----第二十五篇

系列文章目录 文章目录 系列文章目录前言一、如何在 Windows 和 Linux 上查找哪个线程使用的CPU 时间最长?二、什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?三、Java Concurrency API 中的 Lock 接口(Lockinterface)是什么?对比同步它有什么优…