?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 上。

實現層

從實現層上來說,至少目前看也是這樣。實現者的重心在 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 做點文章也能很好支持。

只是說,如果就圖片本身而言,你要很好的支持 query,需要采用 CNN 等大型卷積神經網絡來處理,有興趣的可以看看 Yolo,現在發展到YoloV10了,但最經典的我認為還是YoloV2,有時間我也會講下Yolo 系列的算法。今天先寫到這里

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40117.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++知識點總結(36-39):深度優先搜索算法綜合練習

深度優先搜索算法練習 一、遞歸1. 變化的數2. 數字分解 二、DFS1. 八個方向的迷宮2. n 皇后3. 玩具蛇4. 深度優先搜索順序5. 單詞消消樂6. 奇怪的系統7. [USACO23JAN] Air Cownditioning II B 三、排列組合選擇同學 四、剪枝優化1. 走迷宮2. 危險的工作3. 規定時間走迷宮 *本篇…

粗糙度輪廓儀功能簡介:一體型輪廓儀功能亮點

在精密制造和質量控制領域,表面粗糙度和輪廓的精確測量是至關重要的。一體型輪廓儀為這一需求提供了全面的解決方案。它采用超高精度納米衍射光學測量系統、超高直線度研磨級摩擦導軌、高性能直流伺服驅動系統、高性能計算機控制系統技術,為用戶提供了一…

使用機器學習,通過文本分析,輕松實現原本復雜的情感分析

01、案例說明 本期分享案例是:文字分析-情感分析,內容是關于某部電影評論好壞的分析,使用大量的已知數據,通過監督學習的方法,可以對于未知的評論進行判斷其為正面還是負面的評價。 對于數據分析,原來都是…

深?理解分布式鎖常用方案,研究過Redisson和Curator框架的源碼

分布式鎖是分布式系統中確保多個節點對共享資源進行同步訪問的關鍵技術。以下是對分布式鎖常用方案以及Redisson和Curator框架源碼的一些深入理解: ### 分布式鎖常用方案 1. **基于數據庫的樂觀鎖**: - 通過在數據表中添加版本號或時間戳字段&#…

Go語言學習:每日一練3

Go語言學習:每日一練3 目錄 Go語言學習:每日一練3方法接口繼承類型斷言 方法 方法是一類有接收者參數的函數。 接收者的類型定義和方法的聲明必須在一個包里 type MyInt intfunc (m MyInt) Add(add int) int {return int(m) add } //OR func (m *MyInt)…

巴圖制自動化Profinet協議轉Modbus協議模塊連接PLC和電表通信

1、免編寫Modbus輪詢程序實現PLC與電表通信的方法 在智能化時代,工業自動控制中的PLC和電表之間的通信是一個常見的需求。傳統上,為了使PLC與電表通信,通常需要編寫Modbus查詢程序來讀取和控制數據。然而,使用 巴圖制自動化Prof…

235、二叉搜索樹的最近公共祖先

給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結點 p、q,最近公共祖先表示為一個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自…

用 AI 生成繪本,含大量 prompt

畫圖過程,為了保證繪本輸出的風格統一,角色連貫,畫面內容與故事保持一致 1、畫風統一的解決辦法:固定一個插畫師的風格,可以輸入插畫師的名字,或者墊圖,即上傳你需要借鑒風格的圖片 2、角色連貫…

Spring Security6.3.0版本出現無法解析符號

Spring Security 6.3.0版本出現“無法解析的符號”錯誤通常意味著項目中缺少了必要的類或者資源,或者可能是因為項目的依賴關系配置不正確。 解決方法: 確認依賴:檢查pom.xml或build.gradle文件中是否正確添加了Spring Security的依賴&…

Redis中測試Stream的例子

當你想要測試 Redis 中的 Stream 功能時,可以通過 Redis 的命令行客戶端或者使用任何支持 Redis 的編程語言來操作。下面我會給出一個簡單的例子,使用 Redis 的命令行客戶端 redis-cli 來測試 Stream 的基本功能。 準備工作 確保你已經安裝并啟動了 Re…

聚焦西安應博會|2024西安城市安全應急產業展9月精彩呈現

2024西安城市安全應急產業博覽會 時間:2024年9月12日-14日 地點:西安國際會展中心 運營:西安西部文化產業博覽會有限公司 【展會簡介】 為推動安全應急裝備向智能化、成套化、專業化方向發展,迎接新質生產力在應急產業新技術…

應廣PMS150C系列 應廣8位OTP IO單片機

1、特性 ?不建議使用于AC 阻容降壓供電或有高EFT 要求的應用。應廣不對使用于此類應用而不達安規要求負責 ?工作溫度范圍:-20C~70C 2、系統特性 ?1KW OTP 程序內存 ?64字節數據存儲器 ?硬件 16位定時器 ?1個8位硬件PWM生成器 ?1個通用比較器 ?快速喚醒功能 ?…

nccl-test多機多卡測試

ssh免密登錄 ubuntu默認安裝有SSH client,還需要安裝 SSH server sudo apt install openssh-server本機生成公私鑰 cd ~/.ssh ssh-keygen -t rsa在.ssh/目錄下,會生成兩個文件:id_rsa和id_rsa.pub 注意:正確配置.ssh目錄以及其…

linux下Java11無jre文件夾的問題

項目升級需要更高級的Java版本,于是下載了jdk-11.0.22_linux-x64_bin.tar.gz,解壓后jdk-11.0.22下沒有jre,導致eclipse下“build path”無法加載jre。 Java11以上版本不在提供jre,Java11安裝后,需要如下處理&#xff1…

貝葉斯優化算法(Bayesian Optimization)及其Python 和 MATLAB 實現

貝葉斯優化算法(Bayesian Optimization)是一種基于貝葉斯統計理論的優化方法,通常用于在復雜搜索空間中尋找最優解。該算法能夠有效地在未知黑盒函數上進行優化,并在相對較少的迭代次數內找到較優解,因此在許多領域如超…

ElementUI中的el-table解決寬度問題 - 根據內容自動撐開

在使用element-ui中,會發現表格組件el-table在未指定寬度情況下,會自動計算并給表格寬度賦值。但實際開發中,有時需要根據內容實際長度自動撐開顯示,由內容的多少而決定表格的寬度,而不是默認寬度為100%。在默認情況下…

監控平臺zabbix對接grafana

目錄 1.安裝grafana并啟動 2.瀏覽器訪問 3.導入zabbix數據,對接grafana 4.如何導入模板 5.使用zabbix監控nginx并發量連接數 5.1 修改nginx配置 5.2 編寫監控數據腳本 5.3 設置鍵值 5.4 在zabbix web端完成自定義監控項 5.5 連接到grafana 以上一篇博客&l…

使用CubeIDE調試項目現stm32 no source available for “main() at 0x800337c:

使用CubeIDE調試項目現stm32 no source available for "main() at 0x800337c: 問題描述 使用CubeIDE編譯工程代碼和下載都沒有任何問題,點擊Debug調試工程時,出現stm32 no source available for "main() at 0x800337c 原因分析&a…

聊聊C++20的三向比較運算符 `<=>`

C20標準引入了許多新特性&#xff0c;其中之一是三向比較運算符 <>&#xff0c;也被稱為太空船運算符。這個新運算符為C程序員提供了一種全新的比較對象的方式&#xff0c;它能有效簡化比較邏輯&#xff0c;避免編寫多個比較運算符重載的情況。 為什么需要三向比較運算符…

VirtualBox Ubuntu Sever配置雙網卡

Ubuntu 版本&#xff1a;Ubuntu Server 2404 vitrualBox 網卡配置&#xff1a; 如上配置后&#xff0c;ifconfig 只能看到 網卡1 應用了。要應用 網卡2 需要更改文件 /etc/netplan/50-cloud-init.yaml&#xff08;不同的ubuntu版本這個文件名可能不同&#xff09; 首先 ifcon…