⚡ 站長快讀:核心重點
- 文章屬性: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-small | 1536 | 8,192 token | MTEB 62.3% |
OpenAI text-embedding-3-large | 3072 | 8,192 token | MTEB 64.6% |
Google gemini-embedding-001 | 3072 | 2,048 token | 純文字,支援 task_type |
Google gemini-embedding-2 | 3072 | 8,192 token | Gemini 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 分數最能說明「不是越多越好」這件事:

官方表完整六列為 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 的三個天花板
先講結論:它算的是「語意接近」,不是「事實正確」,也不是「永遠通用」。
- 向量空間不通用,換模型等於整庫重算。 Google 在遷移說明中明確寫著
gemini-embedding-001與gemini-embedding-2的 embedding 空間不相容——你不能拿舊模型算好的向量去跟新模型的查詢向量比對。實務上這代表換模型不是改一行參數,而是把整個知識庫重新跑一次。 - 輸入長度有硬上限,而且兩家超限後的行為不一樣。 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)再各自嵌入,切法會直接影響檢索品質。 - 相似不等於正確。 向量只知道「這兩段話在講差不多的事」,它不知道哪一段是對的。這也是為什麼 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_SIMILARITY、RETRIEVAL_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 自家相鄰兩代都明講不相容。同一個索引裡的向量必須來自同一個模型與同一個維度設定。
🔗 延伸閱讀
- 模型蒸餾 Distillation 是什麼?小模型怎麼跟大模型「偷學功夫」
- LoRA 微調是什麼?QLoRA 不用重新訓練整個模型也能改造 AI 的原理
- AI 的 Temperature 是什麼?調成 0 就真的不會亂回答嗎
- MCP 是什麼?Model Context Protocol 讓 AI 接上你的工具與資料
📎 參考資料來源
📖 第一級|廠商官方:
- Embedding texts that are longer than the model’s maximum context length — OpenAI Cookbook(超過 8192 token 會回 400
invalid_request_error,截斷須自行處理;官方已於頁首標示為封存範例,本文僅取其超限錯誤行為之示例) — 2026-08-27 查證 - Vector embeddings — OpenAI API Docs(預設 1536/3072 維、
dimensions參數、建議餘弦相似度、向量已正規化為長度 1、MTEB 62.3%/64.6%、最大輸入 8192) — 2026-08-27 查證 - Embeddings — Gemini API, Google AI for Developers(
gemini-embedding-2多模態、MRL、output_dimensionality128–3072、MTEB 分數表、正規化差異、兩代空間不相容;model card 之輸入上限gemini-embedding-2=8,192、gemini-embedding-001=2,048) — 2026-08-27 查證
⚠️ 本文核心事實以第一級官方文件為準;文中所有數字均取自兩家官方說明頁,非站長第一手實測。
📅 本文查證戳記:2026-08-27 依據 OpenAI 與 Google 官方開發者文件撰寫,非第一手實測數據。
模型版本與參數更動頻繁,若你在後續版本遇到規格變動,歡迎在留言區回報,站長會更新文章。
