构建开源多模态RAG系统

news2024/10/8 17:06:10

在这个新的冒险中,我们将深入研究使用开源大型语言多模态(LLMM)构建检索增强型生成(RAG)系统的过程。值得注意的是,我们的重点是在不依赖LangChain或Llama索引的情况下实现这一点;相反,我们将利用ChromeDB和Hugging Face框架。

这篇文章探索和了解如何创建一个高效的RAG系统,结合ChromeDB和Hugging Face等开源技术在大型语言多模态应用中的力量。

RAG是什么?

检索增强型生成(RAG):提升人工智能理解和输出能力

在人工智能领域,检索增强型生成(RAG)作为一种变革性技术脱颖而出,优化了大型语言模型(LLMs)的能力。本质上,RAG通过允许模型从外部来源动态检索实时信息,增强了AI响应的特异性。

大型语言模型,如GPT-3,擅长生成类似人类的语言,但在提供最新或特定领域的信息方面存在限制。RAG通过整合检索机制解决了这个问题,从外部知识库中提取相关事实,确保回答在语言上正确且在事实上准确。

该架构将生成能力和动态检索过程无缝结合,使AI能够适应不同领域中不断演变的信息。与广泛的重新训练不同,RAG提供了一种经济高效解决方案,使AI保持最新和相关性,而无需对整个模型进行彻底改造。

换句话说

想象你有一个超级聪明的机器人朋友。这个机器人朋友擅长交谈,会说聪明的话,但有时它并不知道一切。现在,我们有一个特殊的技巧叫做检索增强型生成(Retrieval-Augmented Generation),简称RAG。

RAG通过在需要回答问题或谈论特定事物时从一本事实大书中查找信息,帮助机器人朋友变得更聪明。因此,它不再只是从自己的大脑中说出事情,而是可以检查这本大书,以确保提供最好和最准确的答案。这就像为机器人朋友拥有一本很酷的百科全书一样,使它与我们聊天更加令人敬畏。

为什么选择RAG?

1. 增强的准确性和可靠性:RAG通过将大型语言模型(LLMs)重定向到权威的知识来源,解决了其不可预测性的问题。它降低了呈现虚假或过时信息的风险,确保了更准确和可靠的回答。2. 提高透明度和信任度:生成式AI模型(如LLMs)通常缺乏透明度,使得难以信任其输出结果。RAG引入了透明度,使组织能够对生成的文本输出拥有更大的控制权,解决了关于偏见、可靠性和合规性的担忧。3. 减少幻觉:LLMs容易产生幻觉响应——连贯但不正确或编造的信息。RAG通过确保回答基于权威来源来帮助解决这个问题,减少了在金融等关键领域中出现误导性建议的风险。4. 改善高风险环境中的决策制定:在金融等准确性、可信度和及时性至关重要的领域,RAG显著提高了性能。实时更新和依赖权威来源减少了决策过程中灾难性损失、监管问题或代价高昂的错误的可能性。

5. 成本效益的适应性:RAG提供了一种经济高效的方法来改进AI输出,而无需进行广泛的重新训练/微调。组织可以通过根据需要动态获取特定细节来保持最新和相关性,确保AI能够适应不断演变的信息。

6. 什么是多模态?亲爱的冒险家,请考虑一下:当你听到某人的声音时,你能认出这个人,而当你看到他们时,你也知道他们是谁。本质上,多模态涉及有两个输入——音频和视觉——并产生一个单一的输出,从而实现更丰富和全面的理解。

以CLIP为例的更详细的解释

简单来说,多模态学习涉及教导计算机/AI模型理解和学习不同类型的信息,如图像、文本或语音。这很有用,因为它使模型能够做出更好的预测,模仿人类学习的方式。

该模型对不同的输入做出相同(非常相似)的嵌入向量,这些向量表示相同的事情。

Image2Text:这部分重点在于使用基于transformer的架构来改进复杂图像的字幕生成。Text2Image:在这里,想法是使用文本输入来生成视觉表示。自然语言处理(NLP)的进步使得可以将文本编码为嵌入向量,从而指导图像生成过程。Images supporting Language Models专注于将视觉元素整合到纯文本语言模型中。传统的模型假设单词的意义仅来自文本上下文,而这个任务则探索了将视觉维度纳入以增强语言模型。

OpenAI的CLIP模型通过自然语言监督学习视觉概念。只需提供要识别的视觉类别的名称,CLIP就可以应用于任何视觉分类基准测试,类似于“零次学习”。

简单来说,它为一张猫的图片和单词“猫”生成了相同的(非常相似的)向量。

MLLM(多模态大型语言模型)是一种探索将各种数据类型(包括图像、文本、语言、音频等)整合到一起的多模态语言模型。虽然像GPT-3、BERT和RoBERTa这样的大型语言模型在基于文本的任务上表现出色,但在理解和处理其他数据类型时面临挑战。为了解决这个限制,多模态模型结合了不同的模态,使得对多样化的数据有更全面的理解。

多模态大型语言模型(MLLM)代表了自然语言处理中的一个范式转变,超越了传统的基于文本的方法。这些模型以GPT-4为代表,可以无缝地处理多种数据类型,包括图像和文本,从而实现对信息的更全面的了解。MLLM通过整合各种模态解决了纯文本模型的限制,并在基准测试中展示了人类水平的性能。

我们计划创建RAG管道,其中涉及使用CLIP嵌入图像和文本。接下来,我们打算将这个嵌入的数据存储在ChromDB向量数据库中。最后,我们将利用Hugging Face的MLLM根据检索到的信息参与用户聊天会话。

我们将使用Kaggle上的图像和维基百科上的信息创建一个花专家聊天机器人。

1. 安装所需软件包

2. 预处理数据

在这个步骤中,你应该自己完成,但我将图像和文本放在一个文件夹中,像这样:

创建向量数据库;请随意使用任何工具,但我建议使用ChromaDB。

3.1 首先,您需要确定嵌入函数。我将使用默认的嵌入函数并向您展示如何创建一个自定义的嵌入函数。

自定义嵌入函数

3.2 我们将创建两个集合,一个用于文本,另一个用于图像

我们使用Clip,可以使用文本像这样检索图像

3.3 文本集合

3.4 检索文本。我们在嵌入过程中也使用了CLIP,因此我们可以通过文本或嵌入来获取信息

Embeddings

4. 现在我们应该加载MLLM

我根据它的存储库使用了一个小型的,这就是我们如何使用它的方法。

让我们使用它

现在让我们准备好模型的输入。

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

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

相关文章

Trilium windows上修改笔记目录,创建多个笔记空间方法

一开始使用trilium会非常的不舒服,不像是obsidian可以创建多个笔记空间,指定多个笔记目录。这里摸索到了解决方案 修改目录的方法一 ——修改系统环境变量 打开控制面板-系统-高级系统设置 新增如上条目 修改目录的方法二——直接写bat脚本运行 新建位…

Scope XY Project的使用

1.Scope XY Project的功能介绍与使用方法 添加监控变量 绘制成一个三角形 XY进行对调操作 修改XY轴的比例修改显示输出 2.Cursor的使用方法 游标线的添加测量 3.Reporting功能的使用方法 到处对应的报表数据 添加对应的报告数据

React Suspense的原理

React Suspense组件的作用是当组件未完成加载时,显示 fallback 组件。那么 Suspense 是如何实现的呢?React 的渲染是通过 Fiber 进行的,Suspense 的更新机制也是要围绕 Fiber 架构进行的。Suspense 是由两部分组成,实际 UI 子组件…

Go 语言学习笔记之字典 Map

Go 语言中的字典 Map 大家好,我是码农先森。 概念 在 Go 语言中,字典被称为 map,它是一种无序的集合,用于存储键值对。每个键在 map 中必须是唯一的,并且对应一个值。map 是一种非常常用的数据结构,用于…

iptables(6)扩展匹配条件--tcp-flags、icmp

简介 前面我们已经介绍了不少的扩展模块,例如multiport、iprange、string、time、connlimit模块,但是在tcp扩展模块中只介绍了tcp扩展模块中的”--sport”与--dport”选项,并没有介绍”--tcp-flags”选项,那么这篇文章,我们就来认识一下tcp扩展模块中的”--tcp-flags”和i…

毫米波移动通信系统中的波束赋形— 基于码本的波束训练

基于码本的波束训练算法该方法在收发端都配置波束矢量的码本,通过波束搜索的方式发现最优的波束方向为了加快波束搜索的速度,往往采用逐步缩小搜索范围的方式加快搜索,可以将搜索算法的时间复杂度从O(N)降低到O(logN),其中N表示码…

spring-gateway include-expression 配置说明

在开发过程中遇到的一些配置问题,记录下来以供参考 spring-gateway版本是2.2.9-release,使用的spring cloud dependence 是 Hoxton.SR12 在依赖eureka 服务发现并自动将发现服务器加入到router中的时候,需要指定对应的服务进行添加,根据文档…

NtripShare2024年第二季度主要技术进展

NtripShare Cloud GNSS解算云平台方面 1、解算引擎增加根据卫星多路径效应自动剔除卫星的算法。 2、解算引擎增加解算时间段限制(发现贵州某地在晚12点周期性效果变差)。 3、增加2000坐标至地方坐标系转换的支持(七参数、四参数、TGO高程拟合&#x…

GitHub星标破千!斯坦福大学的284个机器学习小抄(漫画中文版)

说到人工智能必然要了解机器学习,从信息化软件,到电子商务,然后到高速发展互联网时代,到至今的云计算、大数据等,渗透到我们的生活、工作之中,在互联网的驱动下,人们更清晰的认识和使用数据&…

第一百二十三节 Java面向对象的设计 - Java接口继承

Java面向对象的设计 - Java接口继承 接口可以从另一个接口继承。与类不同,接口可以从多个接口继承。 interface Singer {void sing();void setRate(double rate);double getRate(); } interface Writer {void write();void setRate(double rate);double getRate();…

【代码随想录刷题】day02——977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方 方法一&#xff1a;暴力法 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {// 暴力法for(int i 0; i < nums.size(); i){nums[i] * nums[i];}sort(nums.begin(), nums.end());return nums;} };方法二&#…

思考题:相交的几何图形

给定不超过 26 个几何图形&#xff0c;每个图形都有一个唯一大写字母作为其编号。 每个图形在平面中的具体位置已知&#xff0c;请你判断&#xff0c;对于每个图形&#xff0c;有多少个其他图形与其存在交点。 在判断交点时&#xff0c;只考虑边与边相交的情况&#xff0c;如…

探秘神经网络激活函数:Sigmoid、Tanh和ReLU,解析非线性激活函数的神奇之处

引言 在神经网络中&#xff0c;激活函数扮演着至关重要的角色。它们赋予神经网络非线性的能力&#xff0c;使得网络具备学习和表示复杂函数关系的能力。本文将详细解析三种常见的激活函数&#xff1a;Sigmoid、Tanh和ReLU&#xff0c;揭开它们在神经网络中的奥秘。无论你是初学…

【IDEA】扩大虚拟机栈空间操作

输入命令参数-Xss 要更改的空间大小

【转载】Purple Pi OH OpenHarmony开发板使用体验+原创跨屏输入应用

本文原作者&#xff1a;westinyang&#xff0c;本号已被授权仅转载 一、开发板介绍 1.1 产品概述 Purple Pi OH智能主板&#xff0c;配备Rockchip RK3566四核Cortex-A55处理器&#xff0c;主频最高1.8GHz&#xff0c;LPDDR4/LPDDR4X 默认2GB &#xff0c;最大可以支持8GB内存…

华芯微特SWM34-使用定时器捕获快速解码EV1527编码

在无线应用领域&#xff0c;很多433Mhz和315Mhz的遥控器&#xff0c;红外探测器&#xff0c;门磁报警器&#xff0c;无线门铃等都使用EV1527编码格式来发射数据。发射和接收均有对应的RF芯片完成&#xff0c;而且成本极低&#xff08;目前市场价3毛钱不到&#xff09;。接收芯片…

centos7 xtrabackup mysql 基本测试(5)mysql 建立 测试 数据库及内容

centos7 xtrabackup mysql 基本测试&#xff08;5&#xff09;mysql 建立 测试 数据库及内容 登录 mysql -u etc -p 1234aA~1创建数据库 名字是company show databases ; create database company;在 company里面 创建表employee use company; DROP TABLE IF EXISTS employ…

【Mysql】数据库事务-手动提交

数据库事务 ** 什么是事务** 事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有一条SQL出现异常,整个操作就会回滚,整个业务执行失败。 比如: 银行的转账业务,张三给李四转账500元 , 至少要操作两次数据库, 张三 -500, 李四 50…

猫头虎分享已解决Bug: Class Not Found Exception: java.lang.ClassNotFoundException

猫头虎分享已解决Bug: Class Not Found Exception: java.lang.ClassNotFoundException &#x1f42f; 摘要 &#x1f4c4; 大家好&#xff0c;我是猫头虎&#xff0c;一名专注于后端技术的博主。在日常开发中&#xff0c;我们经常会遇到各种各样的Bug&#xff0c;其中Class N…

【昇思初学入门】第六天打卡

函数式自动微分 学习心得 反向传播&#xff1a;神经网络在训练时&#xff0c;会使用一个叫做“反向传播”的方法。这个方法的基本思路是这样的&#xff1a;首先&#xff0c;神经网络会做出一个预测&#xff08;我们称之为“logits”&#xff09;&#xff0c;然后我们将这个预…