​RAG与LLM原理及实践(8)--- Chroma 应用场景及限制

前言

通过前面几节的介绍,你应该对Chroma的运作原理有相当透彻的理解。Chroma的设计正如之前描述的:

Chroma提供的工具:

存储文档数据和它们的元数据:store embeddings and their metadata
嵌入:embed documents and queries
搜索: search embeddings
Chroma在设计上优先考虑:

足够简单并且提升开发者效率:simplicity and developer productivity
搜索之上再分析:analysis on top of search
追求快(性能): it also happens to be very quick

它非常适合在属于自己的垂直LLM RAG库上运行。当你的应用主要集中在LLM领域,且要求最好能本地快速部署,又需要兼顾查询效率时,Chroma 绝对是你的local LLM RAG首选。但不得不说,任何事物都有他的限制。说直白点,还是应用场景。如果你的应用或存储信息维度超过了 文本,元数据,url 这些内容,逐步向图片,甚至影音过渡时,Chroma 就显得有些力不从心。我会从代码逻辑及整体思路上给出分析。但熟悉Chroma 的朋友都知道,他有user  交互模块并不断update,毕竟Chroma vector DB 的API 接口适配了目前所有vector DB 共同遵循的接口,未来根据适用场景,包含client 模式,server模式,local 模式,同样会衍生出其他功能的版本。只是当下判断,如果你的应用聚焦在图片或是影音应用,Chroma不是很好的选择。

Chroma场景及限制

机制层

LLM处理的核心,query的语义相似度查询。你如果非常熟悉我前面的几篇文章,Chroma采用了 暴力+HNSW 结合的方式,或者你说是KNN query 也对,进行query 分析。底层采用了 consine,l2,ip 丈量distance方式。

需要指出的是 cosine 方式并不适合做picture,甚至 audio,video 的相似度处理查询处理。提到检测相似度,你可能第一反应就是 cosine 比较,这本身没有问题,但问题是被比较的事物是否可以很好的被向量化,或者说在比较事物向量化的过程中,他们是否丢失了很多信息。LLM与audio , video 的最大不同,前者在于语义相关,后者在于大量信息的存储相关。语义相关的问题,被高维向量表达后,依然能保持其语义的基本特征。虽然这种特征是面向计算机的,就像LLM中的 encoder,attention,decoder 一样。但你如果把audio,video用高维向量进行编码压缩,丢失的信息可能太多,这也是为什么LLM model 与 pictures,audio,video model 中使用的手段不同的原因。在LLM中你很少看到大量 CNN 卷积网络被使用,而在视频相关领域,为了捕获图片,视频等信息,需要多个 filter对甚至一张 picture进行轮番迭代,以求计算机能很好的把握住他的特征。比如相关的yolo 识别物体的训练,无论是v几版本,你可以看到神经网络路径都比较长,且经过多步卷积,池化等操作。所以这也就能说明为什么Chroma 可能在图像方面并不合适的原因。毕竟实现原理及思路限制了他的用途,当然你也可以反过来说,压根我Chroma 就不是为图而生的,我的目标在LLM领域。但另一个vector db, milvus 似乎支持了图片,甚至是audio,video,有时间我再写写他们。但是这里依旧是聚焦在 chroma 上。

但从另一个维度讲,你可能想到了另一个思路,如果说我的embedding后,内容足够好,也是可以的。确实,如果只是做图片比较,的确可以通过使用ResNet-50 等model 对图片进行编码。最后形成类似2048 维的 dim 存到Chroma中。这是另一种可能的解决思路。

实现层

从实现层上来说,至少目前看也是这样。实现者的重心在 LLM,并不在图片上。我们可以看到下面的源码:

这是 collection的add 实现源码:

紧接着,你看到 images 被无情的抛弃了,是我哪里不好吗?你要抛弃我,其实不是,只是在后面 add 的时候,在 collection 的 add 上,就没有image 什么事情了,继续看源码:

很清楚,image 已经没有了。Chroma在底层处理时,虽然想到了image,从给出的sqlite3的数据库字段描述来说,还是有image 的容身之地,但是毕竟可能不太完整。

但尽管如此,chroma 在 LLM 的处理上,非常优秀,而且体积很小,只有7.5k,可以说是 目前 local RAG 最漂亮的实现。你读完了他的源码,内功一定会得到增强。今天就先写到这里。

如何应对图片及video的query

万事都有折中方案,虽然Chroma对image支持目前来说,不太好,但压根儿那就不是别人的强项,主赛道还是在LLM上。如果我硬要用Chroma 可不可以支持图片呢?答案是肯定的,前面我也提过,你可以在uris 做点文章,在 embedding 训练过程中做点文章也能很好支持。

只是说,如果就图片本身而言,你要很好的支持 query,需要采用 CNN 等大型卷积神经网络来处理,有兴趣的可以看看 Yolo,现在发展到YoloV10了,但最经典的我认为还是YoloV2,有时间我也会讲下Yolo 系列的算法。今天先写到这里

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.mkp勒索病毒:深度解析与防范

引言: 在数字化时代,网络安全问题日益严峻,其中勒索病毒作为一种极具破坏性的恶意软件,严重威胁着个人用户和企业机构的数据安全。在众多勒索病毒家族中,.mkp勒索病毒以其强大的加密能力和广泛的传播方式,成…

Amesim中删除计算结果保存计算文件

前言 Amesim在工程应用中计算的结果文件有时会很大,为了节省电脑存储空间,项目结束后可以将计算结果删除进行保存以存档。 操作步骤 具体操作步骤如下: Step1:在①File下打开(Open)需要删除计算结果的项…

PyQt5开发笔记:2. 2D与3D散点图、水平布局和边框修饰

一、装pyqtgraph和PyOpenGL库 pip install pyqtgraph pip install PyOpenGL 注意:一定不要pip install OpenGL,否则会找不到 二、3D散点图效果 import pyqtgraph as pg import pyqtgraph.opengl as gl import numpy as np# 创建应用程序 app pg.mkQ…

《机器学习》读书笔记:总结“第4章 决策树”中的概念

💠决策树 基于树结构进行决策。 一棵决策树包括: 一个 根节点(起点)若干 叶节点(没有下游节点的节点)若干 内部节点(分支节点) 即: #mermaid-svg-Mxe3d0kNg29PM2n8 {font-family:"treb…

leetcode每日一题-3101 交替子数组计数

暴力遍历&#xff1a;看起来像是回溯,实际上就是递归 class Solution { private:long long _res 0; public:long long countAlternatingSubarrays(vector<int>& nums) {backtrack(nums, 0);return _res;}void backtrack(vector<int>& nums, long long st…

黑马|最新AI+若依 |初识项目

本章主要内容是&#xff1a; 1.快速搭建了若依前后端项目在本地 2.实现了单表的增删改查快速生成 文章目录 介绍1.若依介绍2.若依的不同版本3.项目运行环境 初始化前后端项目1.下载若依项目2.初始化后端a.把表导入到数据库中b.更改application.yml文件 3.初始化前端a.安装依赖…

【游戏引擎之路】登神长阶(六)——雅达利2600汇编学习,任天堂居然还真不是抄袭起家

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7…

基于海思Hi3403V100方案开发双目1600万拼接相机测试截图

海思Hi3403V100平台SOC内置四核A55&#xff0c;提供高效且丰富和灵活的CPU资源&#xff0c;以满足客户计算和控制需求&#xff0c;并且集成单核MCU&#xff0c;已满足一些低延时要求较高场景。 多目相机PE108CB板是针对该芯片设计的一款多目凭借相机PCBA&#xff0c;硬件接口支…

node.js_HTTP协议

Hypertext Transfer Protocol 超文本传输协议 1.HTTP报文 请求行 请求头 请求体 它的内容形式很灵活&#xff0c;可以设置任意内容 2.HTTP响应报文 响应状态码 响应状态的描述 遇到陌生的状态码可以参考一下这个网址&#xff1a; https://developer.mozilla.org/zh-C…

期末成绩发布方式

期末考试结束后&#xff0c;成绩单的发放总是让老师们头疼不已。想象一下&#xff0c;每个学生的成绩都需要老师一个个私信给家长&#xff0c;不仅耗时耗力&#xff0c;而且极易出错。 在传统的成绩单发放方式中&#xff0c;老师往往需要通过电子邮件、短信或者微信等方式&…

python爬虫入门(一)之HTTP请求和响应

一、爬虫的三个步骤&#xff08;要学习的内容&#xff09; 1、获取网页内容 &#xff08;HTTP请求、Requests库&#xff09; 2、解析网页内容 &#xff08;HTML网页结构、Beautiful Soup库&#xff09; 3、存储或分析数据 b站学习链接&#xff1a; 【【Python爬虫】爆肝两…

数据合并 26-30题(30 天 Pandas 挑战)

数据合并 1. 知识点1.27 左连接1.28 数据填充与交叉连接1.29 获取列值列表 题目2.26 合作过至少三次的演员和导演2.27 使用唯一标识码替换员工ID2.28 学生们参加各科测试的次数2.29 至少有5名直接下属的经理2.30 销售员 1. 知识点 1.27 左连接 datapd.merge(employees,employ…

什么是五级流水?银行眼中的“好流水”,到底是什么样的?

无论是按揭买房还是日常贷款&#xff0c;银行流水都是绕不开的一环。规划好你的流水&#xff0c;不仅能让你在申请贷款时更有底气&#xff0c;还可能帮你省下不少冤枉钱。今天&#xff0c;咱们就来一场深度剖析&#xff0c;聊聊如何在按揭贷款、个人经营抵押贷款前&#xff0c;…

什么是SysTick?

一&#xff0c;滴答定时器SysTick SysTick&#xff0c;即滴答定时器&#xff0c;是内核中一个特殊的定时器&#xff0c;用于提供系统级的定时服务。是一个24位递减计时器&#xff0c;具有自动重载值寄存器的功能 。当计数器到达自动重载值时&#xff0c;它会自动重新加载新的计…

深入探索Python库的奇妙世界:赋能编程的无限可能

在编程的浩瀚宇宙中&#xff0c;Python以其简洁的语法、强大的功能和广泛的应用领域&#xff0c;成为了众多开发者心中的璀璨明星。而Python之所以能够如此耀眼&#xff0c;很大程度上得益于其背后庞大的库生态系统。这些库&#xff0c;如同一块块精心雕琢的积木&#xff0c;让…

【Linux详解】进程等待 | 非阻塞轮询

引入&#xff1a; 为什么&#xff1f;是什么&#xff1f;怎么办 是什么&#xff1f; 进程等待是指父进程暂停自己的执行&#xff0c;直到某个特定的子进程结束或发生某些特定的事件。 为什么&#xff1f; 僵尸进程刀枪不入&#xff0c;不可被杀死&#xff0c;存在内存泄露…

安卓备忘录App开发

安卓备忘录APP开发,文章末尾有源码和apk安装包 目标用户: 普通安卓手机用户,需要一个简单易用的备忘录App来记录和管理日常事务。 主要功能: 用户注册: 用户可以创建一个账号,输入用户名和密码。 用户登录: 用户可以通过用户名和密码登录到应用。 用户信息存储: 用户名和…

【python】OpenCV—Feature Detection and Matching

参考学习来自OpenCV基础&#xff08;23&#xff09;特征检测与匹配 文章目录 1 背景介绍2 Harris角点检测3 Shi-Tomasi角点检测4 Fast 角点检测5 BRIEF 特征描述子6 ORB(Oriented Fast and Rotated Brief) 特征描述子7 SIFT(Scale Invariant Feature Transform) 特征描述子8 SU…

从一个(模型设计的)想法到完成模型验证的步骤

从有一个大型语言模型&#xff08;LLM&#xff09;设计的想法到完成该想法的验证&#xff0c;可以遵循以下实践步骤&#xff1a; 需求分析&#xff1a; 明确模型的目的和应用场景。确定所需的语言类型、模型大小和性能要求。分析目标用户群体和使用环境。 文献调研&#xff1a…

【全面讲解下iPhone新机官网验机流程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…