AI之旅-語義搜尋:初識 vector embedding 與部署向量資料庫 qdrant

博客园团队發表於2024-11-20

AI之旅實現的第一個功能是基於大模型的 vector embedding 進行語義搜尋(semantic search)。

(圖片來源:kdnuggets.com

基於大模型實現的聊天機器人雖然能打字和你聊天,但大模型大字不識一個,它只識數(向量)與只會計算,它不會玩文字遊戲,只會玩數字遊戲。

任何一段文字,在大模型的眼裡只是一個向量,這個向量是包含n個元素的浮點型陣列(n對應大模型的n維空間),陣列中的一組浮點數字表示的是大模型n維空間中的座標,大模型n維空間可以理解為大模型在自己的「大腦」中對文字的語義進行建模的空間,大模型將對一段文字的理解對映到n維空間中的一個點。不顧多麼長多麼複雜的一段文字,都可以用一個點表示,這就是多維空間的神奇力量。這個向量,這個陣列,這個座標,這個點,就是大名鼎鼎的 vector embedding,大模型透過 vector embedding 將文字的語義嵌入到自己的n維空間,然後透過對向量的計算操作玩轉數字,從而玩轉文字。如果你想更多瞭解 vector embedding,推薦閱讀 Embeddings: What they are and why they matter

(圖片來源:simonwillison.net

由於有了 vector embedding,只要計算向量之間的距離,大模型就可以知道兩段文字在語義上是否相似,語義搜尋就是基於這個原理。

(圖片來源:causewriter.ai

(圖片來源:datastax.com

我們要實現園子博文的語義搜尋,只要使用一種大模型生成博文內容的 vector embedding 存入向量資料庫(類似於傳統搜尋的建索引),然後搜尋時將搜尋文字透過大模型生成 vector embedding,透過 vector embedding 在向量資料庫中查詢語義相近的博文內容即可。

第一步的準備工作是選擇一種向量資料庫並完成部署,我們選擇的是開源向量資料庫 qdrant,由於我們的應用都部署在 k8s 叢集上,所以我們選擇在 k8s 叢集上部署 qdrant,qdrant 提供了 helm chart,讓 k8s 上的部署更便捷。

先新增 qdrant 的 helm 倉庫

helm repo add qdrant https://qdrant.github.io/qdrant-helm
helm repo update

然後編寫 qdrant-values.yaml 清單檔案

config:
  service:
    enable_tls: false

persistence:
  storageClassName: nas-db
  size: 50G

snapshotPersistence:
  storageClassName: nas-db
  size: 50G

resources: 
  limits:
    cpu: 2
    memory: 4Gi
  requests:
     cpu: 1
     memory: 1Gi

需要注意的是,這是資料庫,需要將資料檔案儲存在 nas 儲存上,上面的 storageClassName 就用於指定所使用的 nas 儲存,nas-db 是我們的 k8s 叢集之前已經部署好的使用阿里雲 nas 的 StorageClass。

透過下面的命令進行部署

helm upgrade -i qdrant qdrant/qdrant -f qdrant-values.yaml

然後檢視部署是否成功

pod/qdrant-0               1/1          Running
service/qdrant             ClusterIP    10.99.106.66    6333/TCP,6334/TCP,6335/TCP 
service/qdrant-headless    ClusterIP    None            6333/TCP,6334/TCP,6335/TCP
statefulset.apps/qdrant    1/1          45h

pod 處於 Running 狀態,說明部署成功了。

第一步準備工作完成了,接下來就是呼叫大模型(我們選用的是通義千問)把園子的博文內容生成 vector embedding 存入 qdrant 向量資料庫,然後就可以實現語義搜尋,這將是AI之旅下一篇博文的主要內容。

參考資料:

  • Embeddings: What they are and why they matter
  • What is vector embedding?
  • What are Vector Embeddings? Understanding the Foundation of Data Representation
  • LLM Basics: Embedding Spaces - Transformer Token Vectors Are Not Points in Space
  • From Words to Vectors: Inside the LLM Transformer Architecture

相關文章