假設你有幾萬份文件,現在有人問:「公司出差住飯店最多可以報多少錢?」最笨的方法,是要求使用者輸入和文件裡一模一樣的字。文件如果寫的是「住宿費上限」,使用者卻問「飯店可以報多少」,傳統關鍵字搜尋可能就開始漏東西。人看得出這兩句在問差不多的事情,電腦卻不能只靠字面就知道。Embedding 做的,就是替這種「內容彼此有多相關」的比較,建立一個可以計算的表示方式。

Embedding 可以先理解成:模型把一段資料轉成一串數字,也就是一個向量,讓相似的資料在這個向量空間裡通常更接近。 文字可以做 embedding,圖片、聲音、商品、使用者行為也可以。真正重要的不是那串數字本身長什麼樣,而是模型把資料之間的關係編進了這些數值裡,後面的系統才有辦法計算「哪兩個比較像」。

先記一句:Embedding 不是答案,也不是資料庫。它是一種讓資料可以被比較的數值表示。

一段文字變成數字之後,發生了什麼?

一個 embedding model 收到文字後,會輸出一個固定長度的向量。為了方便想像,可以把它寫成下面這樣:

「台北今天可能下雨」 → [0.18, -0.42, 0.07, 0.91, …]

實際的向量通常會比這長很多,而且不同模型的維度也不同。這些數字不是人工設定的標籤,不是第一維代表「天氣」、第二維代表「台北」、第三維代表「下雨」。模型是在訓練過程中學出一個高維空間,讓對任務而言有關聯的資料形成某種幾何結構。我們可以使用這個結構,但通常不能把每一個維度直接翻成一個人類看得懂的概念。

所以常見的「把意思變成座標」這句話可以拿來入門,但不能當成完整定義。Embedding 的確是一個位置,但那個位置存在於很多維的向量空間裡,而且「什麼叫接近」取決於模型怎麼被訓練。換一個 embedding model,同一句話得到的向量就可能完全不同,也不能直接拿兩個不同模型產生的向量混在一起比較。

我們真正拿來用的,是向量之間的距離

有了向量之後,系統就可以計算兩段資料有多接近。常見方法之一是 cosine similarity,也就是比較兩個向量的方向有多一致;也有人使用 dot product 或 Euclidean distance。實際該用哪種方式,要看 embedding model 和系統設計,不是所有情況都固定用同一種公式。

假設資料庫裡有三段文字:「員工住宿費每晚最高 3,000 元」、「公司附近有一家新飯店」、「差旅申請必須在出發前送出」,而使用者問「出差住飯店最多能報多少?」系統先把問題轉成 embedding,再和三段文件的 embedding 比較。第一段即使沒有出現完全一樣的句子,通常仍有機會得到更高的相似度,於是被排到前面。

問題 → Embedding → 比較向量 → 找到最相近的資料

這就是 semantic search,也就是語意搜尋很常見的基礎。它和傳統關鍵字搜尋最大的差異,不是「完全不用文字」,而是搜尋時多了一個新的判斷方式:不只看字有沒有一樣,也看模型認為內容彼此有沒有關聯。成熟的搜尋系統甚至會把關鍵字搜尋、向量搜尋和 reranking 混在一起,而不是要求 embedding 一個人解決所有問題。

這就是 Embedding 為什麼一直跟 RAG 一起出現

在 RAG 裡,系統需要在大量文件中先找出和問題最相關的內容,再把那些內容交給 LLM。Embedding 很適合拿來做前面這段檢索。文件可以先切成較小的片段,各自產生 embedding 存起來;使用者提問時,再把問題也轉成 embedding,搜尋附近的文件片段。

文件 → 切片 → Embedding → 儲存向量
問題 → Embedding → 相似度搜尋 → 取回文件 → LLM 回答

這也是「向量資料庫」這個詞常出現的地方。向量資料庫或支援向量搜尋的資料庫,主要工作不是替你理解文章,而是有效率地存放向量、建立索引,再從大量向量中快速找出最接近的幾個。真正產生 embedding 的通常是 embedding model;資料庫負責保存與搜尋。兩件事常一起用,但不是同一件事。

Embedding 跟 LLM 裡面的 token embedding 是同一件事嗎?

概念上有親戚關係,但實務上最好不要混成一件事。LLM 內部也會把 token 轉成向量表示,讓 Transformer 可以處理文字;而我們在 semantic search 或 RAG 裡說的 text embedding,通常指的是把一段文字壓成一個適合做檢索或相似度比較的向量。兩者都使用向量表示資料,但用途、產生方式和訓練目標可以不同。

這個差別很重要,因為不是「只要模型裡有 embedding」就代表它自然適合拿來搜尋文件。專門的 embedding model 通常會針對相似度、檢索或相關任務訓練,讓得到的向量空間更適合比較資料之間的關聯。

相似,不代表正確

Embedding 很好用,但它沒有把「真實世界的意義」完整封進向量。搜尋結果只是在某個模型的表示空間裡比較接近,不代表那份文件一定正確、最新,也不代表它真的能回答問題。兩個句子可能談相近主題,卻給出相反結論;舊版規章也可能和新版規章非常相似。如果系統只按向量距離排序,這些差異不一定會自動消失。

所以真正的檢索系統還要處理 metadata、時間、權限、文件來源、版本,甚至在第一次搜尋後再做 reranking。Embedding 解決的是「怎麼比較大量非結構化資料」的一部分,不是替整套知識系統保證答案。

Embedding 擅長的是相關性,不是真假判定。 它能幫你把可能相關的資料找回來,但最後拿到什麼、能不能用,仍然需要其他規則或模型判斷。

所以 Embedding 到底是什麼?

如果把前面的細節全部收回來,Embedding 就是一種學習出來的數值表示。模型把文字、圖片或其他資料放進一個高維向量空間,讓資料之間的某些關係可以透過數學方式比較。因為電腦終於可以計算「這兩段內容有多接近」,semantic search、推薦系統、分群、去重,以及很多 RAG 檢索流程才有辦法建立在上面。

所以當你看到「先把文件做 embedding,再存進 vector database」,不用把它想成 AI 把整份文件背進腦袋。比較接近的意思是:系統先替每段資料做出一個可以比較的數值表示,等問題進來,再用這些表示把可能相關的內容找回來。

下一步真正值得理解的,就是這些向量怎麼被拿去搜尋,也就是 semantic search 和 vector database。