首页 > 其他分享 >​RAG与LLM原理及实践(8)--- Chroma 应用场景及限制

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

时间:2024-07-04 18:56:24浏览次数:22  
标签:RAG Chroma --- video LLM query audio 图片

前言

通过前面几节的介绍,你应该对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 系列的算法。今天先写到这里

标签:RAG,Chroma,---,video,LLM,query,audio,图片
From: https://blog.csdn.net/talentyiyy/article/details/140125035

相关文章

  • 前端项目部署之pushstate-server
    pushstate-server 内部的原理是通过 connect 服务器,开启一个端口,将 dist/index.html 文件作为静态模板输出这种方式可以将本地的项目打包成静态文件,以服务的方式提供出去,方便后端人员调用,而自己也不影响dev的开发安装npminstallpushstate-server--save 基......
  • 内存管理-14-内核文档翻译-1-reserved-memory.txt
    本文翻译自:msm-5.4/arch/arm64/boot/dts/vendor/bindings/reserved-memory/reserved-memory.txt***Reserved内存区域***保留内存被指定为/reserved-memory节点下的一个节点。操作系统应将保留内存排除在正常使用之外,可以创建子节点来描述特定的保留(从正常使用中排除)内存区域......
  • day62--若依框架(基础应用篇)
    若依搭建若依版本官方若依官方针对不同开发需求提供了多个版本的框架,每个版本都有其独特的特点和适用场景:前后端混合版本:RuoYi结合了SpringBoot和Bootstrap的前端开发框架,适合快速构建传统的Web应用程序,其中前端和后端代码在同一项目中协同工作。前后端分离版本:RuoYi-Vu......
  • 商务视频推广打造有吸引力的7个秘诀-华媒舍
    商务视频推广是现代企业发展的重要工具,它能够帮助企业吸引更多的目标客户,提升品牌知名度,增加销售量。但是,如何打造一部有吸引力的商务视频推广呢?本文将为您介绍7个秘诀,帮助您在商务视频推广中取得成功。1. 视频内容突出独特性第一个秘诀是要确保您的商务视频内容独具特色。......
  • 《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验
    第九章打印输出实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原子......
  • 记录--淘宝、京东复制好友链接弹出商品详情是如何实现的
    ......
  • 【设计模式(三)】创建型模式--单例模式
    创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。饿汉式类加载就会导致该单实例对象被创建/***饿汉式*静态变量创建类的对象*/publicclassSingleton{//......
  • SpingMvc-Day02
    SpringMVC:表述层作用:1.接受前端参数[SpringMVC简化] 2.调用业务逻辑 3.响应前端数据[SpringMVC简化]SpringMVC组件: 1.DispatcherServlet:处理全部请求 2.handlerMapping:缓存handler方法和地址 3.handlerAdapter:适配器、参数和相应简化 4.ViewResovler视图解释器:查找视图页面......
  • 2024年华为OD机试真题- 电脑病毒感染-(C++/Java/python)-OD统一考试(C卷D卷)
     2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】   题目描述一个局域网内有很多台电脑,分别标注为0~N-1的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。......
  • 2024年华为OD机试真题- 找数字-(C++/Java/python)-OD统一考试(C卷D卷)
    2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】    题目描述小扇和小船今天又玩起来了数字游戏,小船给小扇一个正整数n(1≤n≤1e9),小扇需要找到一个比n大的数字m,使得m和n对应的二进制中1的个数要相同,如:4对应二进制1008对应二进制1000其中1的......