向量檢索 (ANN)
向量檢索:讀心者
演算法背後的故事:意義的幾何空間
想像妳向圖書館員借一本關於「荒漠星球上的孤獨機器人」的書。 在過去,圖書館員會尋找這些精確的關鍵字。如果那本書的名字叫《沙海中的寂靜自動機》,搜尋可能會失敗,因為「孤獨」和「機器人」這兩個詞並沒有出現在標題裡。
但在 向量檢索 (Vector Search) 的世界裡,文字被轉化為了一個巨大、高維空間裡的 座標。在這個空間中,「機器人」和「自動機」就像住在同一條街上的鄰居,「荒漠」和「沙海」則住在同一棟樓裡。
這項由深度學習研究者(如 Word2Vec 和後來的 Transformers 的作者們)開創的技術,允許電腦透過 「意思」 而不僅僅是拼寫來進行搜尋。它是 ChatGPT、Pinterest 影像搜尋和 Spotify 推薦背後的核心大腦。
為什麼需要它?
向量檢索解決了「語言鴻溝」問題。
- 語義搜尋: 搜尋「如何修理漏氣的輪胎」,能找到關於「更換爆胎」的文章。
- 影像搜尋: 在沒有任何文字標籤的情況下,找到一張「紅色跑車」的照片。
- 推薦系統: 找到聽起來和妳喜歡的歌「感覺很像」的曲子,哪怕她們是另一種語言。
演算法是如何「思考」的
這個演算法是一個使用幾何學來尋找真相的 空間探索者。
嵌入 (Embedding): 利用 AI 模型(如 OpenAI 的
text-embedding-3),我們將一段內容轉化為一串數字(向量),比如[0.12, -0.54, 0.88, ...]。這就是她在「意義空間」裡的經緯度。鄰里關係 (索引): 由於空間中有數億個向量,我們無法計算所有向量之間的距離。我們使用 ANN (近似最近鄰) 演算法,如 HNSW (分層可導航小世界)。這些演算法在空間中建置了一張「快捷路網」,類似於我們先走高速公路接近城市,再走小路尋找目的地。
鄰近性 (搜尋): 當妳搜尋時,妳的查詢請求也被轉化為一個向量。演算法隨後尋找那些在物理位置上與妳 距離最近 的項(通常使用 餘弦相似度)。
工程決策:向量資料庫時代
我們正處於「向量資料庫」的黃金時代 (Pinecone, Milvus, Weaviate)。
- 準確率 vs 時延: 因為我們使用的是「近似」搜尋,我們可能找不到絕對最近的那一個,但能在毫秒內找到 99% 接近的項。
- 多模態: 妳可以搜尋文字「貓」,找到一張貓的照片,因為她們在多模態空間中共享相同的座標。
實作參考 (Python - 鄰近邏輯)
import numpy as np
def cosine_similarity(v1, v2):
# 空間中「親密度」的數學表達
dot_product = np.dot(v1, v2)
norm_v1 = np.linalg.norm(v1)
norm_v2 = np.linalg.norm(v2)
return dot_product / (norm_v1 * norm_v2)
# 範例:尋找最相似的概念
concepts = {
"king": np.array([0.9, 0.1, 0.5]),
"queen": np.array([0.8, 0.2, 0.6]),
"apple": np.array([0.1, 0.9, 0.1])
}
query = np.array([0.85, 0.15, 0.55]) # 一個接近皇室的概念向量
for name, vector in concepts.items():
sim = cosine_similarity(query, vector)
print(f"與 {name} 的相似度: {sim:.4f}")
# 輸出:
# 與 king 的相似度: 0.999...
# 與 queen 的相似度: 0.998...
# 與 apple 的相似度: 0.231...小結
向量檢索教會我們:萬物皆由意義相連。透過從平面的字串世界躍遷到深邃的向量世界,我們賦予了機器理解人類意圖的能力,而不僅僅是記錄按鍵。它提醒我們,在浩瀚的數據宇宙中,通往目標的捷徑往往穿過其意義的核心。
