向量嵌入適合用來表示非結構化資料,因為這類嵌入內容會以 n 維度向量空間中的距離表示語意相似度,藉此對應內容。這樣就能輕鬆搜尋相似度、在知識庫中尋找相關內容,或擷取最符合使用者自製複雜查詢的項目。
雖然某些專用資料庫僅支援向量嵌入,但其他資料庫除了向量嵌入外,也支援許多其他資料和查詢類型。如果想利用豐富的實際資料建構生成式 AI 應用程式,就必須支援各種資料類型和查詢類型。隨著使用向量嵌入進行語意查詢的好處變得顯而易見,大多數資料庫也將新增向量支援。因此,我們確信未來每個資料庫都會成為向量資料庫。
瞭解 Vertex AI 向量搜尋如何助您建構高效能的生成式 AI 應用程式。Vertex AI 的向量搜尋採用 Google 研究開發的 Scalable Nearest Neighbor Search (簡稱 ScaNN) 向量搜尋技術,兼具擴充性與效率,非常適合用來處理大型資料集和即時搜尋需求。如要進一步瞭解向量搜尋與嵌入,請觀看這部影片,並參閱這份快速入門指南。
與其他資料類型一樣,有效率地查詢大量向量需要索引,而向量資料庫支援向量的專用索引。與許多採用單一邏輯順序的其他資料類型 (例如文字或數字) 不同,向量並不具備與實際用途相對應的自然順序。相反地,最常見的用途是根據距離指標 (例如點積、餘弦相似度或歐氏距離) 查詢最接近其他向量的 k 向量。這類查詢稱為「k (精確) 最近鄰」或「KNN」查詢。
不過,對於有效的 KNN 查詢來說,並沒有通用的演算法 - 必須計算 q 與其他每個向量之間的距離,以確保找到與指定向量 q 最接近的 K 個最近鄰。不過,其實還是有一些高效率的演算法可以找到 k 個近似最近鄰 (「ANN」)。這些 ANN 演算法會捨棄部分準確率 (尤其是「喚回度」,這些演算法可能會省略部分實際最近鄰),以大幅提升速度。許多應用實例已將運算向量嵌入的過程視為不甚精確,因此通常可以容許損失部分喚回度,而藉此大幅改善效能。
為了能夠根據與其他向量之間的距離對向量進行 ANN 查詢,向量索引的結構是通常將鄰近向量的叢集歸為一組。常見的向量索引類型結構可為一組清單,其中每個清單都代表指定叢集中的向量;一個圖表,將每個向量連結至最鄰近的幾個鄰點;樹形結構,其中的分支對應於父項節點叢集的子集等等。每種索引類型都會在查詢速度、喚回度、記憶體消耗量、索引建立時間和其他因素因素之間權衡取捨。
然而,大部分的資料庫查詢並非只是根據語意相似度而決定。舉例來說,使用者可能正在尋找內容說明為「關於小孩和狗的溫馨故事」之類的書籍,但也希望能將書籍限制在以平裝本販售且價格低於 $20 美元。特殊用途的向量資料庫可能會提供一些有限的額外篩選功能 (有時稱為「限制」),而一般用途的資料庫可以使用 SQL 等標準語言來撰寫豐富的述詞,這些述詞可與向量相似度排序結合,以執行功能強大且表達能力良好的查詢。
透過向量嵌入呈現非結構化資料的語意含義,以及讓向量資料庫能夠有效率地搜尋鄰近向量,將這兩項能力相結合可應用在許多重要用途:
向量資料庫很重要,因為可用來解決單獨透過關聯述詞或文字搜尋技術難以或無法解決的各種問題。
向量資料庫非常適合生成式 AI 應用程式,因為這類資料庫能輕鬆擷取重要的業務和應用程式結構定義 (例如相關即時通訊記錄或特定業務的非結構化內容),協助 LLM 回應複雜的使用者查詢。
還能輕鬆使用自然語言搜尋內容或是透過範例進行查詢。