Vector DBs 筆記
因為最近在搞RAG,所以會需要研究一下Vector Databases,這篇文章就來筆記一下vector databases的概念和用途。
Vector Databases
Embeddings
所謂的embeddings 在自然語言處理 (NLP)中常被使用,因為電腦沒辦法處理一般的文字,所以需要先透過機器學習模型或是演算法將這些文字經過處理之後轉換成可以代表這些文字的向量。如果兩串文字很接近,那麼他們的向量也會很接近,接近程度可以用Euclidean distance, cosine similarity等指標來衡量。
當我們有了文字的embedding,電腦可以利用這些向量來表徵文字之後,就可以進行運算和訓練機器學習模型。
當然,也不是只有文字可以轉換成embedding,圖片、音訊等也可以轉換成embedding。
Why Vector Databases
不同於一般資料庫 (MySQL, MongoDB, etc.)會儲存純量值,Vector Databases則是專門用來儲存多維度的資料點,即向量 (vector)。這些vector dbs會針對這些向量做一些特別的indexing和query機制,或是實作一些基於向量的計算 (e.g. similarity search)。
What can Vector Databases do?
一個Vector Database可以讓我們找到與query的文字vector相近的資料。一開始會先將一個query vector傳入vector db,然後vector db就會回傳一組資料庫中與query vector最接近的資料。
藉此就可以用資料庫來做到語意的搜尋、分類、content-based的推薦系統等功能。所以RAG也會用到,因為RAG就是先利用prompt從資料庫中找到相近的資料然後一起餵給LLM。
實際的流程大概會像這樣:
- 先將已有的資料透過一個機器學習模型轉為一堆向量
- 將這些向量放到vector dbs,會用一些特別的indexing機制
- 將要查詢的文字透過與第一點一樣的模型先轉為向量。
- 利用這組向量來找資料庫中最接近的向量,這個步驟仰賴資料庫本身的query language或是API,以及用來計算相似度的指標
- 透過這個向量來找到原始文字
常見的vector DBs
圖片來源: https://www.datacamp.com/blog/the-top-5-vector-databases
參考資料:
Vector DBs 筆記