嵌入向量是語義搜索和 RAG 的基礎。它們讓 AI 能夠理解,即使沒有單字重疊,搜尋 “fix login bug” 應該能匹配到關於 “authentication error resolution” 的文件。
嵌入模型會將一段文字——一句話、一段段落、甚至整份文件——壓縮成固定長度的浮點數向量,通常維度介於384到4096之間。其神奇之處在於這些數字的排列方式:在訓練過程中,模型會學習將語義相近的文字在這個高維空間中彼此靠近,而將語義不同的文字分開。標準的訓練方法採用對比學習,模型會看到一對相關的文字(例如問題與答案、句子與同義句),並學習最小化它們的向量距離,同時最大化與不相關對的距離。BAAI的bge-large-en、OpenAI的text-embedding-3,以及Cohere的embed-v3等模型都使用這種基本方法,但架構、訓練資料與優化的對比目標會有所不同。
實際應用中,使用嵌入向量的第一步是將文件編碼成向量,並存入如Qdrant、Pinecone、Milvus或FAISS等向量資料庫。當進行查詢時,會使用相同模型將用戶的問題編碼成向量,並執行最近鄰搜尋以找到最相似的文件向量。距離度量方式至關重要——餘弦相似度最常見,但有些模型是針對點積或歐幾里得距離進行訓練。一個常見的誤區是:你必須使用相同的嵌入模型來處理文件與查詢。不同模型產生的向量位於完全不同的空間中,即使維度數相同,也無法進行比較。
嵌入向量的維度代表了表現力與成本之間的權衡。1536維的向量能捕捉比384維更多的細節,但儲存與搜尋成本也高出四倍。對於一百萬份文件而言,差異可能體現在向量資料庫的RAM用量上,從幾GB到數十GB不等。一些新模型支援Matryoshka嵌入,允許將向量截斷至較少維度且表現漸進退化——例如對最重要的資料集使用完整的1024維,而對較不重要的資料集使用前256維。量化技術也有幫助:將向量存為INT8而非float32,可節省四倍記憶體且準確度損失驚人地小,這也是為什麼生產系統越來越傾向使用量化嵌入。
一個常見的誤解是認為嵌入模型能像人類一樣理解語意。它們在表層語義相似度(如同義詞、同義句、相關概念)表現出色,但可能在否定語句(「這家餐廳不好」與「這家餐廳好」常被判定相似)、複雜邏輯關係,或未在訓練資料中見過的專業術語上遇到困難。這就是為什麼檢索增強生成系統(retrieval-augmented generation)常會結合向量搜尋與關鍵字搜尋(混合搜尋),並使用重排序模型(reranker)作為第二步來提升精準度。嵌入模型會先回傳一組廣泛的候選結果,而較慢但更精準的重排序模型會根據實際相關性進行排序。正確建立這套流程的重要性,遠高於選擇MTEB排行榜上得分最高的嵌入模型。