資料庫-SQL_duckdb向量化計算-vector

辰令發表於2024-07-15

duckdb

DuckDB 0.10.0引入了新的資料型別Array
   Array 不同於Postgres的陣列型別(Postgres的是可變長度的),DuckDB的 Array 列儲存固定大小的陣列
      目前相似度計算支援 單精度浮點數(4 位元組)
     DuckDB的 FLOAT4  = numpy.float3
目前vss功能還有待豐富--持續關注

Vector

向量(Vector)是連線知識庫和LLMs的關鍵媒介,未來的一切都是向量化的,
透過向量嵌入(Vector Embedding)來實現一切物件的向量化表示,而向量嵌入、向量計算與大模型一起構建智慧應用的技術	
向量(Vector)的儲存和搜尋是向量資料庫的基本功能,也是構建智慧應用的關鍵技術	

外掛

VSS(Vector Similarity Search (VSS) Extension)擴充套件外掛,支援vss 搜
  SELECT extension_name, installed, description FROM duckdb_extensions();	
    安裝和載入VSS外掛
 duckdb為支援向量搜尋,引入VSS (Vector Similarity Search (VSS) Extension) 外掛擴充套件,
    VSS外掛擴充套件引入一個新的索引型別:
	  HNSW(Hierarchical Navigable Small Worlds),這是一種基於圖的索引結構,特別適用於高維向量相似性搜尋

duckdb資料型別

   DuckDB's new fixed-size ARRAY type
duckdb 支援ARRAY 資料型別,Array列儲存固定大小的陣列。
  列中的所有欄位必須具有相同的長度和相同的基礎型別。
  陣列通常用於儲存數字陣列,但可以包含任何統一的資料型別,包括ARRAY、LIST和STRUCT型別。
  Array 資料型別可用於儲存諸如詞嵌入(word embeddings )或影像嵌入(image embeddings)之類的向量(vectors )

HNSW索引建立語句中傳遞一個度量引數來決定使用何種距離度量。支援的度量有l2sq、cosine和inner_product,
分別對應三種內建的距離函式
  :array_distance、array_cosine_similarity和array_inner_product。預設值是l2sq,它使用歐氏距離(array_distance)
命令
   array_value(index):建立一個包含引數值的陣列	
   array_cosine_similarity(array1, array2):計算大小相同的兩個陣列之間的餘弦相似度
 
loading the vss extension and then ATTACHing the database file, 
   which ensures that the HNSW index functionality is available during WAL-playback 
 hnsw_enable_experimental_persistence   

PostgreSQL

PostgreSQL中使用開源pg_vector擴充套件來查詢向量資料	 
     生成向量嵌入是一個計算密集型過程
	   儲存方面:PostgreSQL的TOAST系統允許大型列值跨多個頁面儲存,而不是內聯存
	   索引方面:HNSW 索引是基於圖的 Hierarchical Navigable Small Worlds
 
    PostgreSQL中的快速最近鄰連線(Fast Nearest Neighbor Search)是一種用於在資料庫中高效地查詢最近鄰資料點的技術。
      它可以幫助我們在大規模資料集中快速找到與給定資料點最接近的資料點。
    快速最近鄰連線的分類:
       基於索引的方法:透過構建索引結構來加速最近鄰搜尋,常見的索引結構包括KD-Tree、R-Tree等。
       基於圖的方法:將資料點之間的關係表示為圖結構,利用圖演算法來進行最近鄰搜尋,常見的圖演算法包括最短路徑演算法、最小生成樹演算法等
	   
    pgvector 支援兩種主要型別的搜尋:精確最近鄰搜尋(ENN)和近似最近鄰搜尋(ANN)
	   索引技術:不同的 ANN 演算法(如 HNSW 和 IVF)提供了不同的效能和準確性權衡。

 K-means本質上是無監督學習,而KNN是監督學習;
   K-means是聚類演算法,KNN是分類(或迴歸)演算法
 The k-nearest neighbors (KNN) 
   最近鄰演算法是「基於例項的」,這就意味著其需要保留每一個訓練樣本觀察值。最近鄰演算法透過搜尋最相似的訓練樣本來預測新觀察樣本的值
      KNN是有監督學習的分類演算法,有對應的類別輸出-
	    由於KNN是一種基於例項的學習方法,‌它不需要顯式的訓練階段,‌只需在檢測時計算距離
	 依次計算每個樣本點與它最近的K個樣本的平均距離,再利用計算的距離與閾值進行比較,如果大於閾值,則認為是異常點
K 均值聚類 
   k均值聚類演算法(k-means clustering algorithm)是一種迭代求解的聚類分析演算法	

參考

https://duckdb.org/docs/extensions/vss	  
https://github.com/duckdb/duckdb_vss
使用SNB 探索DuckDB的向量相似性搜尋(Vector Similarity Search):發揮GenAI潛能  https://zhuanlan.zhihu.com/p/698477442	
DuckDB也要加入向量資料庫的戰局? https://www.modb.pro/db/1760486338210123776
 國內使用者如何使用 DuckDB 訪問 Hugging Face 上超15萬 資料集?  https://www.modb.pro/db/1811574404587020288	

相關文章