新來的朋友,一樣先建議先回顧先前的文章,才會比較明白整個 Indexing pipeline 的流程以及這章是在哪個環節噢!
文章在這:Day 3|Indexing pipeline:如何為 RAG 建立知識庫。
終於來到 Indexing pipeline 最後的環節了!
當我們已經把文字轉成了向量(Embeddings),那這些向量要存到哪裡?要怎麼在海量資料裡快速找出最接近的?
這也是我們今天要談的「向量資料庫(Vector Database)」。
這邊先來解釋一下向量資料庫是甚麼呢?
顧名思義,就是用來存向量的,哈哈哈,聽到這肯定會覺得這不是廢話嗎!!!
當然它不僅僅是儲存向量而已,除了儲存向量外,它比較像是 結合「字典 + 搜尋引擎」的工具,你問它一個詞;你輸入一段話,它能在海量資料中快速找出最相近的段落。
舉個例子來說,你可以問它「英雄聯盟」的相關訊息。
如果是一般的關鍵字搜尋,可能只會找到標題或文字裡面剛好有「英雄聯盟」三個字的文章。
但 向量資料庫 不一樣,它去找「語意最接近」的內容。
所以它不只會找到「英雄聯盟」的介紹,還可能幫你連帶找到「LOL 世界賽」、「電競選手 Faker」、「MOBA 遊戲」這些本質上有語意關聯的資料。
至於他實際是怎麼操作呢?
簡單來說,它會幫你做三件事:
- 存:把 embeddings(文字轉成的座標點)存在資料庫裡。
- 比:當你丟一個問題進來時,它也會把問題轉成向量。
- 找:接著用相似度計算(像是餘弦相似度)來比對,但因為資料通常很多,資料庫底層會用一些近似最近鄰(ANN)演算法加速搜尋,讓你不用真的逐筆比,卻能快速找到最接近的答案。
相信大家基本概念都有了,那最後再來介紹一下向量資料庫的分類吧!
類型 | 功用 | 工具 |
---|---|---|
向量索引工具(Vector Indexes) | 專注「比對速度」,只負責快速搜尋,缺乏完整資料管理功能 | FAISS |
專門型向量資料庫(Specialized Vector DBs) | 含資料管理、非向量支援、擴充性佳,RAG 最常用 | ChromaDB, Pinecone |
搜尋平台(Search Platforms) | 原本是關鍵字搜尋,加上向量檢索功能 | ElasticSearch, OpenSearch |
SQL 資料庫向量擴充(SQL DBs with Vector Support) | 傳統 SQL DB 增加向量處理功能 | PostgreSQL (pgvector), Azure SQL, CloudSQL |
NoSQL 資料庫向量擴充(NoSQL DBs) | NoSQL 資料庫加入向量查詢 | MongoDB |
圖形資料庫向量支援(Graph DBs) | 圖資料庫加入語意檢索功能 | Neo4j |
這邊向量資料庫的分類有參考了相關教材內容,整理過後畫出來的!
向量資料庫其實都有各自的差異,在選擇的時候還是建議考慮一下你的實用情境,以及使用的過程中要考量的要件。
今天的介紹就到先這邊啦~Indexing pipeline 也差不多告一個段落了呢!