Cassandra 文件

版本

您正在查看預發行版本的說明文件。

資料建模

在使用向量搜尋開發 AI 和機器學習 (ML) 應用程式時,以下是資料建模的一些考量因素。這些因素有助於有效利用向量搜尋,在應用程式中產生準確且有效的搜尋回應。

資料表示

向量搜尋依賴於將資料點表示為高維向量。向量表示的選擇取決於資料的性質。

對於由文字文件組成的資料,可以使用詞嵌入(例如,Word2Vec)或文件嵌入(例如,Doc2Vec)等技術將文字轉換為向量。也可以使用大型語言模型 (LLM) 來產生嵌入,例如 OpenAI GPT-4Meta LLaMA 2 等更複雜的模型。Word2Vec 是一個相對簡單的模型,它使用淺層神經網路根據詞彙的上下文來學習詞彙嵌入。其關鍵概念是 Word2Vec 會為每個詞彙產生一個固定的向量,而與詞彙在何種上下文中使用無關。LLM 是更複雜的模型,它們使用深度神經網路(特別是變壓器架構)根據詞彙的上下文來學習詞彙嵌入。與 Word2Vec 不同,這些模型會產生上下文嵌入,這表示相同的詞彙可以有不同的嵌入,具體取決於其使用的上下文。

可以使用深度學習技術(例如 卷積神經網路 (CNN))或預先訓練的模型(例如 對比語言影像預訓練 (CLIP))來表示影像。選擇一個向量表示,以擷取資料的基本特徵。

資料集維度

向量搜尋僅在向量具有相同維度時才有效,因為向量運算(例如 點積餘弦相似度)需要向量具有相同的維度數。

對於向量搜尋,所有嵌入都必須在相同的向量空間中建立至關重要。這表示嵌入應遵循相同的原則和規則,以進行適當的比較和分析。使用相同的嵌入函式庫可以保證這種相容性,因為函式庫會以特定且明確的方式將資料持續轉換為向量。例如,比較 Word2Vec 嵌入與 BERT(LLM)嵌入可能會出現問題,因為這些模型具有不同的架構,並以根本不同的方式建立嵌入。

因此,向量資料類型是浮點數的定長向量。維度值由您使用的嵌入模型定義。有些機器學習函式庫會告訴您維度值,但您必須使用嵌入模型定義它。為您的資料集選擇一個嵌入模型,透過確保相關物件在嵌入空間中彼此相鄰,來建立良好的結構非常重要。您可能需要測試不同的嵌入模型,以確定哪一個最適合您的資料集。

預處理嵌入向量

正規化是針對資料進行縮放,使其長度為一。這通常是透過將向量中的每個元素除以向量的長度來完成。

標準化是針對資料進行位移(減去平均值)和縮放(除以標準差),使其平均值為零,標準差為一。

請務必注意,在嵌入向量的背景下,標準化和正規化並不相同。正確的預處理方法(標準化、正規化,甚至其他方法)取決於資料的特定特徵,以及您嘗試透過機器學習模型達成什麼目標。預處理步驟可能包含清理和標記化文字、調整影像大小和正規化影像,或處理遺失值。

正規化嵌入向量

正規化嵌入向量是一個程序,可確保向量空間中的每個嵌入向量長度(或範數)為一。這透過將向量的每個元素除以向量的長度(也稱為其歐幾里得範數或L2範數)來完成。

例如,請查看向量搜尋快速入門中的嵌入向量及其正規化對應項,其中所有向量都使用一致的長度

  • 原始

  • 正規化

[0.1, 0.15, 0.3, 0.12, 0.05]
[0.45, 0.09, 0.01, 0.2, 0.11]
[0.1, 0.05, 0.08, 0.3, 0.6]
[0.27, 0.40, 0.80, 0.32, 0.13]
[0.88, 0.18, 0.02, 0.39, 0.21]
[0.15, 0.07, 0.12, 0.44, 0.88]

在處理嵌入時正規化向量的主要原因是,它使向量之間的比較更有意義。透過正規化,您可以確保比較不受向量比例的影響,並且僅基於其方向。這對於計算向量之間的餘弦相似性特別有用,其中重點在於向量之間的角度(方向關係),而不是其大小。

正規化嵌入向量是一種標準化高維資料的方法,以便不同向量之間的比較更有意義,且較不受原始向量比例的影響。由於點積和餘弦對於正規化向量是等效的,但點積演算法快 50%,因此建議開發人員將點積用於相似性函數。

但是,如果嵌入未正規化,則點積會靜默傳回無意義的查詢結果。因此,點積未設定為向量搜尋中的預設相似性函數。

當您使用 OpenAI、PaLM 或 Simsce 來產生嵌入時,它們預設會正規化。如果您使用不同的程式庫,您會想要正規化向量,並將相似性函數設定為點積。請參閱向量搜尋快速入門中如何設定相似性函數。

並非所有向量搜尋範例都需要正規化。

標準化嵌入向量

標準化嵌入向量通常是指一個類似於統計中使用的程序,其中資料標準化為平均值為零,標準差為一。標準化的目標是轉換嵌入向量,使其具有標準常態高斯分布的特性。

如果你使用的是使用點之間距離的機器學習模型(例如最近鄰居或任何使用歐幾里得距離或餘弦相似度的模型),標準化可以確保所有特徵對距離計算的貢獻相同。如果不進行標準化,較大尺度的特徵可能會主導距離計算。

例如,在神經網路的背景下,具有相似尺度的輸入值可以幫助網路更有效地學習,因為它確保沒有任何特定特徵僅因其尺度而主導學習過程。

索引和儲存

SAI 索引和儲存機制是針對大型資料集(例如向量搜尋)量身打造的。目前,SAI 使用 JVector,一種近似最近鄰居 (ANN) 搜尋演算法,並且是階層可導航小世界 (HNSW) 的近親。

像 JVector 這樣的 ANN 搜尋演算法的目標是找到資料集中最接近(或最相似)給定查詢點的資料點。然而,找到確切的最近鄰居在計算上可能很昂貴,特別是在處理高維資料時。因此,ANN 演算法旨在近似找到最近鄰居,優先考慮速度和效率,而不是精確度。

JVector 通過建立一個圖形層級來實現這個目標,其中層級的每個層級對應於一個可導航的「小世界」圖形。它受到 DiskANN(一個磁碟備份 ANN 函式庫)的啟發,將圖形儲存在磁碟上。對於圖形中的任何給定節點(資料點),很容易找到通往任何其他節點的路徑。層級的較高層級節點較少,用於粗略導航,而較低層級節點較多,用於精細導航。這樣的索引結構通過將搜尋空間縮小到潛在匹配項,實現快速擷取。

JVector 還使用 Panama SIMD API 來加速索引建立和查詢。

相似度量

向量搜尋依賴於計算向量之間的相似度或距離,以識別相關匹配項。選擇適當的相似度量至關重要,因為不同的度量可能更適合特定類型的資料。常見的相似度量包括餘弦相似度、歐幾里得距離或傑卡德相似度。度量的選擇應與資料的特性和所需的搜尋行為保持一致。

向量搜尋支援三種相似性量度:餘弦相似度點積歐幾里得距離。向量搜尋索引的預設相似性演算法為餘弦相似度。建議在大部分應用程式中對標準化嵌入使用點積,因為點積餘弦相似度快 50%。

可擴充性和效能

隨著資料集擴充,可擴充性是一項重要的考量因素。向量搜尋演算法應設計為能有效率地處理大型資料集。使用向量搜尋的 Cassandra 資料庫會有效率地分配資料,並透過平行處理存取資料以提升效能。

評估和反覆運算

持續評估和反覆運算資料,以根據已知事實和使用者回饋改善搜尋結果。這也有助於找出需要改進的地方。反覆改善向量表示、相似性量度、索引技術或前處理步驟,可以提升搜尋效能和使用者滿意度。

使用案例

具有最佳化嵌入的向量資料庫能提供新的資料搜尋和關聯方式,產生傳統資料庫以前無法做到的結果。

範例

  • 搜尋與特定項目相似的項目,而不需要知道確切的項目名稱或 ID

  • 根據內容和脈絡的相似性,而非確切的字串或關鍵字比對,來擷取文件

  • 在不類似的項目中擴充搜尋結果,例如搜尋產品並從不同類別中擷取脈絡相似的產品

  • 執行字詞相似性搜尋,並向使用者建議重新表述查詢或段落的方式

  • 將文字、影像、音訊或影片編碼為查詢,並擷取在概念上、視覺上、聽覺上或脈絡上與輸入相似的媒體

  • 透過自動產生資料關聯,減少花費在元資料和策展上的時間

  • 透過自動辨識和移除重複資料,改善資料品質

最佳實務

  • 在資料表的其他欄位中儲存與向量相關的元資料。例如,如果向量是影像,請將原始影像儲存在同一資料表中。

  • 根據需要對資料庫執行的查詢,選擇預先訓練的模型。

限制

儘管向量嵌入可以取代或擴充傳統資料庫的某些功能,但向量嵌入並非其他資料類型的替代品。由於限制,嵌入最適合作為現有資料的補充

  • 向量嵌入無法由人類閱讀。在尋求直接從資料表中擷取資料時,不建議使用嵌入。

  • 模型可能無法擷取資料中的所有相關資訊,導致結果不正確或不完整。