NVIDIA 大模型 RAG 分享笔记

news2024/11/17 23:34:06

文章目录

  • 大语言模型在垂直领域落地的三个挑战:
  • 什么是 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.coloradmin.cn/o/1395924.html

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

相关文章

FPGA引脚物理电平(内部资源,Select IO)-认知2

引脚电平 The SelectIO pins can be configured to various I/O standards, both single-ended and differential. • Single-ended I/O standards (e.g., LVCMOS, LVTTL, HSTL, PCI, and SSTL) • Differential I/O standards (e.g., LVDS, Mini_LVDS, RSDS, PPDS, BLVDS, and…

【02】mapbox js api加载arcgis切片服务

需求: 第三方的mapbox js api加载arcgis切片服务,同时叠加在mapbox自带底图上 效果图: 形如这种地址去加载: http://zjq2022.gis.com:8080/demo/loadmapbox.html arcgis切片服务参考链接思路:【01】mapbox js api加…

Jupyter-Notebook无法创建ipynb文件

文章目录 概述排查问题恢复方法参考资料 概述 用户反馈在 Notebook 上无法创建 ipynb 文件,并且会返回以下的错误。 报错的信息是: Unexpected error while saving file: Untitled5.ipynb attempt to write a readonly database 排查问题 这个是一个比较新的问…

Improving Generative Modelling in VAEs Using Multimodal Prior

local representation vector r, ϵ \epsilon ϵ is i.i.d Gaussian 额外信息 作者未提供代码

对话吴翰清:把全世界AI联合起来,打败OpenAI这个垄断怪兽

前面坐着吴翰清,这个中国互联网技术圈里多少有点传奇色彩的“黑客”。 不是所有人都会成为某种互联网都市传说的主角,但他却一个人占了好几个,什么单枪匹马黑掉了阿里的网络,什么在拉斯维加斯坐着大巴车一路走一路黑掉了路旁酒店…

【开源】基于JAVA的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

PyTorch各种损失函数解析:深度学习模型优化的关键(1)

目录 详解pytorch中各种Loss functions binary_cross_entropy 用途 用法 参数 数学理论 示例代码 binary_cross_entropy_with_logits 用途 用法 参数 数学理论 示例代码 poisson_nll_loss 用途 用法 参数 数学理论 示例代码 cosine_embedding_loss 用途 …

189.轮转数组(数组翻转,C解法)

题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转…

交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装

AArch64 是随 ARMv8 ISA 一起引入的 64 位架构,用于执行 A64 指令的计算机。而且在 AArch64 状态下执行的代码只能使用 A64 指令集。,而不能执行 A32 或 T32 指令。但是,与 AArch32 中不同,在64位状态下,指令可以访问 …

Vue以弹窗形式实现导入功能

目录 前言正文 前言 由于个人工作原因,偏全栈,对于前端的总结还有些初出茅庐,后续会进行规整化的总结 对应的前端框架由:【vue】avue-crud表单属性配置(表格以及列) 最终实现的表单样式如下:…

文件共享服务(一)——DAS、NAS、SAN存储类型

一、存储类型 存储类型主要有三种 1. DAS直连式存储 通常由数据线直连电脑就可以用,比如一块新硬盘,只需要利用磁盘模拟器分区,创建文件系统,挂载就可以使用了。 PC中的硬盘或只有一个外部SCSI接口的JBOD存储设备(即…

MySQL---经典SQL练习题

MySQL---经典50道练习题 素材:练习题目:解题: 素材: 1.学生表 Student(SId,Sname,Sage,Ssex) SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CId,Cname,TId) CId 课程编号,Cname 课程名称,TId 教师编号 3.教师表 Teacher(T…

一万六千字大章:Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析

Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析 Manifest.json 文件格式 每个扩展程序的根目录中都必须有一个 manifest.json 文件,其中列出了有关该扩展程序的结构和行为的重要信息。 1、Demo 展示 1. 最小文件 {"manifest_version": 3,&quo…

Redis--Zset使用场景举例(滑动窗口实现限流)

文章目录 前言什么是滑动窗口zset实现滑动窗口小结附录 前言 在Redis–Zset的语法和使用场景举例(朋友圈点赞,排行榜)一文中,提及了redis数据结构zset的指令语法和一些使用场景,今天我们使用zset来实现滑动窗口限流&a…

从初学者到专家:Dubbo中Application的终极指南【十一】

欢迎来到我的博客,代码的世界里,每一行都是一个故事 从初学者到专家:Dubbo中Application的终极指南【十一】 前言Application组件的重要性Application 在 Dubbo 中的定义Application 的作用和重要性Dubbo 应用程序的生命周期 配置和使用Appli…

往docker中cloudbeaver的容器添加达梦数据库、impala数据库连接支持(cloudbeaver添加自定义数据连接)

cloudbeaver默认没有开放impala连接,更不会支持国产数据库了 docker安装运行cloudbeaver可以参考文章:docker安装运行CloudBeaver并设置默认语言为中文 本文跳过cloudbeaver镜像拉取,直接就开始实现自定义数据库连接功能 1、初始化cloudbe…

卷级实时备份功能特点及应用场景

为满足部分对RTO和RPO指标敏感的用户需求,云祺科技通过结合卷远程复制技术和持续数据保护技术、以及高可用技术的原理,推出了一款基于卷为最小处理单元的实时容灾备份产品,其对于备份源对象具有良好的兼容性,无论是文件、影音、应…

json-server的基础使用

json-server 是什么? 用来快速搭建模拟的 REST API 的工具包 可以30秒内快速为我们搭建一个假的基于 REST API的服务 我们要如何使用呢? 1.先安装 //全局安装 npm i -g json-server 2.创建文件 db.json 我们需要在db.json放入一点内容 放入示例: {/…

带你解析Git的基础功能(三)

文章目录 前言一.远程仓库的概念二.远程仓库的操作2.1新建远程仓库2.2 克隆远程仓库2.3 向远程仓库推送2.4 拉取远程仓库2.5 忽略特殊⽂件2.6 标签管理 三.Git实战场景3.1 Git多人实战场景一准备工作由开发者1和开发者2新增加文件内容。将dev的文件合并到master上总结 3.2 Git多…

TypeScript实现一个贪吃蛇小游戏

游戏效果 文件目录 准备1&#xff1a;新建index.html&#xff0c;编写游戏静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…