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