iT邦幫忙

2024 iThome 鐵人賽

DAY 0
0
自我挑戰組

重新開始 elasticsearch 系列 第 19

2024 鐵人賽 Day20: ES as Vector DB I

  • 分享至 

  • xImage
  •  

隨著 LLM (Large Language Model)& RAG (Retrieval-Augmented Generation)應用興起,vector db 成為了兵家必爭之地,ES 原本就以文本貯存作為主要核心,文本轉成的 vector 順理成章的成為了 ES 的拓展區域。

Vector DB

vector db 中的 vector 雖然沒有特別指定是哪一種 vector,但大部分的使用場景應該是 word to vector 的 vector,word to vector 是將文字序列從非結構化轉成結構化數值的一個過程,轉換出來的數值最常見是一串數字。

這串數值是怎麼被轉換出來的恕我沒有辦法在這邊講清楚,為了後續理解,可以把 word to vector 想像成一個黑盒子,一串文字進去會被翻譯成長度為 N 的一串數字,這串數字可以表徵語句在一個 N 維空間中的位置,這個空間中距離比較近的,語意也會比較靠近。

恩,所以把文字變成 vector 存進 vector db 首先需要一個翻譯器,這個翻譯器就是現在很紅的各種 LLM,LLM 為了讓電腦可以『懂』自然語言,所以丟了很多文本給它建構一個超大的語言空間,建構好之後除了可以讓你問他各種問題之外,也可以告訴你某一串文字組合在這個空間維度的 vector 是什麼。

我們取得 vector 之後,把 vector 存進 vector db,就可以透過距離計算,找出相似的語句,這就是 vector db 和其他 db 之間最大的差異點,vector db 特化了高維空間 vector 的存貯和距離計算功能。

ES as Vector DB

ES 拿來存 Vector 這個類別的 field type 是 Dense Vector ,vector 之間距離的計算則是計算則是透過 KNN(k-nearest neighbor)Search

To Store: Dense Vector

Dense Vector field type 相比於其他的 field type 有一些特殊的限制:

  • 不支援 aggregation 和 sorting [1]
  • 不能有 sub field (Multiple value in one field)

Dense Vector field 有幾個可以調整的設定,都是 optional:

  • element_type: vector 內的 element 是什麼型別
    • default: float
    • allowed Value: float, bytebit
  • dims: vector 的維度(長度)
    • default: 第一筆被寫入的資料內 vector 的長度
    • allowed Value: ≤4096
  • similarity: 計算 vector 距離的方法
    • default: cosine / L2_norm for bit type
    • allowed Value: l2_norm, dot_product, cosinemax_inner_product
  • index: 是否要啟用 KNN search 的 index
    • default:

      {
      	type: int8_hnsw,
      	m: 16,
      	ef_construction: 100,
      	confience_interval: 1/(dims + 1)
      }
      
    • allowed Value: 見官網

筆者註:如果你跟我一樣跟高維度的空間數學不是很熟,可以無腦使用預設:)

先到這,我要去研究怎麼產生 vector 寫入 ES,下一篇文章見。


上一篇
2024 鐵人賽 Day19: Sum it up
下一篇
2024 鐵人賽 Day21:ES as Vector DB II
系列文
重新開始 elasticsearch 29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言