預計閱讀時間: 9 minuti
最近幾週,投資者對矢量數據庫的興趣有所增加。 自 2023 年初以來,我們注意到:
讓我們更詳細地了解什麼是矢量數據庫。
矢量數據庫在很大程度上依賴於矢量嵌入,這是一種數據表示形式,其中包含對 AI 理解和維持長期記憶至關重要的語義信息,以便在執行複雜活動時加以利用。
矢量嵌入就像一張地圖,但它們不是向我們展示事物在世界上的位置,而是向我們展示事物在某個叫做 向量空間。 向量空間有點像一個大遊樂場,一切都有它玩耍的地方。 想像一下,你有一群動物:一隻貓、一隻狗、一隻鳥和一條魚。 我們可以通過在操場上給它一個特殊的位置來為每個圖像創建一個矢量嵌入。 貓可能在一個角落,狗在另一邊。 鳥可以在天上,魚可以在池塘里。 這個地方是一個多維空間。 每個維度對應著它們的不同方面,比如魚有鰭,鳥有翅膀,貓狗有腿。 它們的另一個方面可能是魚屬於水,鳥主要屬於天空,而貓和狗則屬於地面。 一旦我們有了這些向量,我們就可以使用數學技術根據它們的相似性對它們進行分組。 根據我們掌握的信息,
因此,向量嵌入就像一張地圖,可以幫助我們找到向量空間中事物之間的相似性。 就像地圖可以幫助我們環遊世界一樣,矢量嵌入可以幫助我們在矢量遊樂場中導航。
關鍵思想是語義相似的嵌入之間的距離更小。 為了找出它們有多相似,我們可以使用向量距離函數,例如歐氏距離、餘弦距離等。
矢量庫 將向量的嵌入存儲在內存中的索引中,以便執行相似性搜索。 矢量庫具有以下特徵/限制:
有許多矢量搜索庫可用: Facebook 的 FAISS,惹惱了 通過 Spotify 和 掃描神經網絡 由谷歌。 FAISS 使用聚類方法,Annoy 使用樹,ScanNN 使用向量壓縮。 每個都有性能權衡,我們可以根據我們的應用程序和性能指標進行選擇。
矢量數據庫與矢量庫的主要區別在於能夠存檔、更新和刪除數據。 矢量數據庫有 CRUD 支持 完全(創建、讀取、更新和刪除)解決了矢量庫的局限性。
簡而言之,矢量數據庫通過解決前面討論的自包含矢量索引的局限性,為處理矢量嵌入提供了一個更好的解決方案。
但是是什麼讓矢量數據庫優於傳統數據庫呢?
傳統數據庫旨在使用關係模型存儲和檢索結構化數據,這意味著它們針對基於數據列和行的查詢進行了優化。 雖然可以在傳統數據庫中存儲向量嵌入,但這些數據庫並未針對向量操作進行優化,無法有效地對大型數據集執行相似性搜索或其他復雜操作。
這是因為傳統數據庫使用基於簡單數據類型(例如字符串或數字)的索引技術。 這些索引技術不適用於矢量數據,矢量數據具有高維性,需要專門的索引技術,如倒排索引或空間樹。
此外,傳統數據庫並非旨在處理通常與矢量嵌入相關的大量非結構化或半結構化數據。 例如,一個圖像或音頻文件可能包含數百萬個數據點,傳統數據庫無法有效處理這些數據點。
另一方面,矢量數據庫專為存儲和檢索矢量數據而設計,並針對大型數據集上的相似性搜索和其他復雜操作進行了優化。 他們使用專為處理高維數據而設計的索引技術和算法,使它們比傳統數據庫更有效地存儲和檢索矢量嵌入。
現在您已經閱讀了很多關於矢量數據庫的內容,您可能想知道,它們是如何工作的? 讓我們來看看。
我們都知道關係數據庫的工作原理:它們在行和列中存儲字符串、數字和其他類型的標量數據。 另一方面,矢量數據庫對矢量進行操作,因此其優化和查詢方式大不相同。
在傳統數據庫中,我們通常查詢數據庫中的行,其中的值通常與我們的查詢完全匹配。 在向量數據庫中,我們應用相似性度量來找到與我們的查詢最相似的向量。
矢量數據庫結合了幾種算法,這些算法都參與最近鄰搜索 (ANN)。 這些算法通過散列、量化或基於圖形的搜索來優化搜索。
這些算法被組裝成一個管道,可以快速準確地檢索查詢向量的鄰居。 由於向量數據庫提供了近似結果,我們考慮的主要權衡是在準確性和速度之間。 結果越精確,查詢就越慢。 然而,一個好的系統可以提供超快速的搜索和近乎完美的準確性。
矢量數據庫是對大型數據集進行相似性搜索和其他復雜操作的強大工具,而傳統數據庫無法有效執行這些操作。 要構建功能向量數據庫,嵌入是必不可少的,因為它們捕獲數據的語義並實現準確的相似性搜索。 與矢量庫不同,矢量數據庫旨在適應我們的用例,使其成為性能和可擴展性至關重要的應用程序的理想選擇。 隨著機器學習和人工智能的興起,矢量數據庫對於包括推薦系統、圖像搜索、語義相似性在內的廣泛應用變得越來越重要,而且這個例子不勝枚舉。 隨著該領域的不斷發展,我們可以期待在未來看到更多矢量數據庫的創新應用。
Ercole Palmeri