快訊
2026-08-27
AI 教學

Embedding(文字嵌入)是什麼?AI 怎麼把文字變成能算相似度的向量

約 9 分鐘閱讀
廣告

⚡ 站長快讀:核心重點

  • 文章屬性:AI 概念解析 / 原理拆解
  • 核心結論:向量維度不是越多越好,而換一個模型就等於整個知識庫要重新算一次——這兩件事比「Embedding 是什麼」更常讓人踩坑。
  • 適用對象:想搞懂 AI 搜尋、RAG 與語意比對底層怎麼運作的人

📌 快速答案

一句話答案:Embedding 文字嵌入是把文字轉成一串固定長度數字的技術,語意相近的文字向量方向也相近,AI 再用餘弦相似度算夾角,就能比出兩段文字的意思有多像。


🔍 故事的起點

有個現象你八成遇過:在站內搜尋打「筆電開不了機」,結果一篇都找不到,可是站上明明有一篇叫「notebook 無法開機」的文章。傳統關鍵字搜尋是逐字比對,「筆電」不等於「notebook」、「開不了機」不等於「無法開機」,字面對不上就等於不存在——這是長年困擾關鍵字搜尋的老問題。

Embedding 文字嵌入就是為了解決這件事而生的。它不比對字,它比對「意思」:先把每段文字轉成一串固定長度的數字(這串數字就叫向量),再用數學算兩串數字的方向有多接近。方向接近=意思接近,字面完全不一樣也沒關係。

這篇要講的不只是「它是什麼」,還有三個站長我覺得最容易被誤解、但實務上會直接踩到坑的點:第一,維度不是越多越好——Google 為 gemini-embedding-001 公布的 MTEB 分數裡,1536 維(68.17)甚至比 2048 維(68.16)還高一點點;第二,不同模型產生的向量不能混用,Google 在遷移文件裡明講兩代模型的 embedding 空間「不相容」;第三,OpenAI 的向量已經先幫你正規化成長度 1,所以餘弦相似度可以直接用內積算,而且用餘弦或歐氏距離排出來的名次會完全一樣。


🧪 原理拆解

一、文字進去,一串數字出來

先講結論:Embedding 的輸出是一串長度固定的浮點數,長度由模型決定,跟你輸入幾個字無關。 你丟三個字進去、丟三千字進去,拿回來的向量長度都一樣。

以兩家官方文件的現值為例:

模型預設維度輸入上限備註
OpenAI text-embedding-3-small15368,192 tokenMTEB 62.3%
OpenAI text-embedding-3-large30728,192 tokenMTEB 64.6%
Google gemini-embedding-00130722,048 token純文字,支援 task_type
Google gemini-embedding-230728,192 tokenGemini API 首個多模態嵌入模型

三點重點摘要:

廣告
  • 維度=向量裡有幾個數字。1536 維就是 1536 個浮點數,3072 維就是 3072 個。
  • 輸入上限以 token 計,不是以字計,而且新舊模型差很多:gemini-embedding-2 是 8,192 token(所有模態共用同一個額度),舊的 gemini-embedding-001 只有 2,048 token。針對 gemini-embedding-2 的 8,192 token 上限,Google 官方明講超過的輸入會被系統「靜默截斷」——不報錯、直接砍掉後面,這是實務上最容易吃悶虧的地方。想搞懂 token 怎麼算,可以看站內這篇 Context Window 是什麼?搞懂上下文視窗與 Token,AI 為什麼會忘記前文
  • gemini-embedding-2 是多模態:Google 說明它把文字、圖片、影片、音訊與文件對應到同一個嵌入空間,支援 100 種以上語言的跨模態搜尋;純文字場景 gemini-embedding-001 仍然保留可用。

至於「意義座標」怎麼長出來的?模型是在大量文本上訓練時,學會把常在相似脈絡出現的詞推到相近的位置。沒有人手工標註「筆電要靠近 notebook」,那是訓練過程的副產品。

二、餘弦相似度:AI 怎麼算「像不像」

先講結論:算的是兩個向量的夾角,不是距離。 餘弦相似度(cosine similarity)取兩個向量夾角的 cos 值:+1 代表方向完全一致(意思幾乎相同)、0 代表垂直無關、−1 代表完全相反

用生活化的比喻:把每段文字想成從原點射出去的一支箭。箭的長度代表這段文字「講了多少」,箭的方向代表「在講什麼」。我們想比的是主題,所以只看方向、不看長度——這就是為什麼用夾角而不是用兩個箭頭端點的直線距離。

OpenAI 在官方指南裡直接建議使用餘弦相似度,並補了三句很實用的說明:

  • OpenAI 的 embedding 已經正規化成長度 1;
  • 因此餘弦相似度可以只用內積(dot product)計算,速度稍快;
  • 而且在這個前提下,餘弦相似度與歐氏距離排出來的順序完全相同

Google 這邊則要注意版本差異:gemini-embedding-2 對非預設維度會自動重新正規化;但 gemini-embedding-001 如果你用 output_dimensionality 取了 3072 以外的維度,必須自己手動正規化,官方文件甚至附了 NumPy 範例。這一步漏掉,相似度就會歪掉。

三、維度不是越多越好

先講結論:兩家官方都提供「砍維度」的參數,而且砍下去的品質損失比多數人以為的小很多。

廣告

OpenAI 的作法是在 API 帶 dimensions 參數。官方舉的例子很具體:當你的向量資料庫只吃 1024 維,你仍然可以用最強的 text-embedding-3-large,把它從 3072 維縮到 1024 維,用「一點點準確度」換「小很多的向量」。

Google 兩代模型則都用 MRL(Matryoshka Representation Learning,俄羅斯娃娃表示學習)訓練——這個技術讓高維向量的前段(prefix)本身就是一個可用的低維向量,所以直接截斷也不會壞掉。output_dimensionality 支援 128 到 3072,官方建議值是 768、1536、3072。

Google 官方公布的 MTEB 分數最能說明「不是越多越好」這件事:

Gemini Embedding 001 在不同 MRL 維度下的 MTEB 分數長條圖(取官方六列中的五列):2048 維 68.16、1536 維 68.17、768 維 67.99、256 維 66.19、128 維 63.31;圖中未繪出的 512 維為 67.55

官方表完整六列為 2048=68.16、1536=68.17、768=67.99、512=67.55、256=66.19、128=63.31(上圖為版面考量只畫五列,512 維那列補記於此)。從 2048 維一路砍到 768 維,分數只掉 0.17;砍到 256 維也只掉約 2 分;要到 128 維才明顯下滑。

要注意的是,這張官方表最高只到 2048 維,並沒有給 3072 維的基準分數,所以不能拿它去推導「3072 砍成 768 完全沒差」。官方能支持的說法是另外兩句:文件本身寫明可以截斷到較小尺寸「而不失品質」,以及建議值就是 768、1536、3072——換句話說,768 是 Google 自己列出的建議選項之一,不是委屈的妥協值。

⚠️ 一個很重要的誠信提醒:上面 OpenAI 的 62.3%/64.6% 與 Google 的 67.99/68.17,不是同一次評測、不可以直接互比高低。MTEB 有不同版本與不同子集,兩家各自在自家文件公布自家數字,跨廠商比較必須在同一套設定下重跑才有意義。網路上很多「A 模型贏 B 模型」的圖表就是這樣拼出來的。

四、Embedding 的三個天花板

先講結論:它算的是「語意接近」,不是「事實正確」,也不是「永遠通用」。

廣告
  1. 向量空間不通用,換模型等於整庫重算。 Google 在遷移說明中明確寫著 gemini-embedding-001gemini-embedding-2 的 embedding 空間不相容——你不能拿舊模型算好的向量去跟新模型的查詢向量比對。實務上這代表換模型不是改一行參數,而是把整個知識庫重新跑一次。
  2. 輸入長度有硬上限,而且兩家超限後的行為不一樣。 OpenAI 三款嵌入模型都是 8,192 token;Google 這邊 gemini-embedding-2 是 8,192 token(跨模態共用)、gemini-embedding-001 只有 2,048 token。差別在於:Google 對 gemini-embedding-2 的超長輸入是「靜默截斷」,OpenAI 則是直接回 400 錯誤(官方 Cookbook 明示超過 8192 token 會回 invalid_request_error,要不要截斷得自己處理)。前者你可能一直沒發現後半段被吃掉,後者至少會當場報錯。長文件無論如何都必須先切塊(chunking)再各自嵌入,切法會直接影響檢索品質。
  3. 相似不等於正確。 向量只知道「這兩段話在講差不多的事」,它不知道哪一段是對的。這也是為什麼 RAG 是什麼?搞懂 AI 為什麼要「先翻資料再回答」,少騙人又能附出處 那套流程要在檢索之後還要求模型附出處——檢索到相關段落,只是降低胡說的機率,不等於保證答案正確,這點在 AI 幻覺為什麼發生?原理拆解+查證自保 5 招 講得更完整。

💡 總結:冷知識延伸

站長我一直覺得「嵌入」這個譯名有點勸退,但它其實很精準:embed 的原意就是「把某個東西鑲進另一個結構裡」——這裡是把離散、沒有數學結構的文字,鑲進一個連續的、可以做加減與量夾角的向量空間。一旦鑲進去了,原本只能逐字比對的文字,就變成可以用線性代數處理的對象,搜尋、分群、推薦、分類全部一次解決。

實務上我的建議很簡單:先用小的。OpenAI 官方那張表換算下來,text-embedding-3-small 每一美元能處理約 62,500 頁,text-embedding-3-large 只有 9,615 頁,差了六倍多,而 MTEB 分數只差 2.3 個百分點。多數站內搜尋、FAQ 比對這類應用,小模型加上砍維度綽綽有餘;真的比不準了,再往上升級也不遲——反正屆時本來就要整庫重算。

還有一個很多人忽略的細節:gemini-embedding-001 支援 task_type(例如 SEMANTIC_SIMILARITYRETRIEVAL_DOCUMENT),等於先告訴模型「我這次要拿它幹嘛」;但 gemini-embedding-2 拿掉了這個參數,改成把任務寫進提示詞裡。同一家、相鄰兩代,用法就變了——這也是為什麼看官方文件永遠比看去年的教學文可靠。


❓ 常見問題

Q:Embedding 跟一般文字資料到底差在哪?

一般文字資料只能做「有沒有出現這個字」的比對;Embedding 把文字換成向量之後,可以做「方向像不像」的比對。前者是布林判斷,後者是連續的相似度分數,可以排名、可以設門檻。

Q:AI 怎麼算兩句話意思像不像?

把兩句話各自轉成向量,再算餘弦相似度(兩個向量夾角的 cos 值)。越接近 +1 越相近。OpenAI 的向量因為已正規化成長度 1,直接算內積就等於餘弦相似度。

Q:維度砍下去會不會變笨?

依 Google 官方 MTEB 數據,gemini-embedding-001 從 2048 維砍到 768 維只掉 0.17 分,到 512 維為 67.55、256 維掉約 2 分,128 維才明顯下滑(官方表未提供 3072 維的分數)。真正該注意的是:gemini-embedding-001 砍完維度要自己做正規化,gemini-embedding-2 才會自動處理。

Q:同一批文件,可以一部分用 OpenAI、一部分用 Google 的模型嗎?

不行。不同模型的向量空間彼此不相容,連 Google 自家相鄰兩代都明講不相容。同一個索引裡的向量必須來自同一個模型與同一個維度設定。


🔗 延伸閱讀


📎 參考資料來源

📖 第一級|廠商官方:

⚠️ 本文核心事實以第一級官方文件為準;文中所有數字均取自兩家官方說明頁,非站長第一手實測。

📅 本文查證戳記:2026-08-27 依據 OpenAI 與 Google 官方開發者文件撰寫,非第一手實測數據。

模型版本與參數更動頻繁,若你在後續版本遇到規格變動,歡迎在留言區回報,站長會更新文章。


廣告