embedding 模型把每段文字變成一個向量——一串把「意思」定位成空間中一個點的數字。相似度就是兩個向量夾角的 cosine,這裡以 0 到 1 呈現:談同一件事的段落即使沒有共用任何詞,位置也會靠近。工具把你的 query 與每段候選都轉成向量、依對 query 的 cosine 相似度排名,並畫出 top-k 邊界——在檢索管線裡,只有線以上的段落會被回傳。字面重疊則同步計算每段候選涵蓋多少 query 的詞,那大致就是關鍵字搜尋引擎獎勵的東西。
因為這兩種裁決恰好在「檢索壞掉」的場景意見相左。一段文字可以共用 query 的大多數詞卻在講別的事——關鍵字搜尋會選它,語意檢索把它留在 top-k 外;另一段可以沒有任何共用詞卻正是答案——關鍵字搜尋漏掉它,embedding 把它撈進來。旗標把兩種情況都標出來,證據檢視把共用詞逐一攤開。語意分數則無法用同樣方式拆解:它來自整段向量,工具直說這件事,不去發明逐詞歸因。
query 與段落常夾帶業務資料,所以一切都不離開瀏覽器:示範模式內建預先構造的向量,真實模式把模型下載進瀏覽器、在本機推論——不呼叫 API、不記錄。誠實邊界:示範數字是為演示構造的並明確標示;真實模型是英文小模型,其他語言的分數不可靠;字面重疊是刻意簡化的關鍵字搜尋近似,不是 BM25 實作。
關於這個主題的常見疑問與實用解答。
把使用者的查詢貼進 Query,再把你以為該中的段落與實際被檢索回來的段落一起貼成候選。排名會告訴你模型是不是真的把你的段落排在別人後面、差距有多少、以及它是不是只差一點就進 top-k。如果它在這裡排名很高、上線卻仍檢索不到,問題就在管線的其他環節——chunk 切分、過濾條件,或線上用的是另一個 embedding 模型。
它衡量兩段文字在「意思」上有多接近,與用了哪些詞無關。embedding 模型把每段文字對映成向量,讓談同一件事的文字彼此靠近;相似度分數就是兩個向量夾角的 cosine。這就是為什麼「my laptop will not turn on」和「the computer fails to boot」一個詞都沒共用仍能拿到高分——也是語意搜尋與 RAG 管線實際用來排序的量。
這裡的分數介於 0 到 1,越高代表意思越近。但沒有通用門檻:0.7 在某個模型下是強匹配、在另一個模型下可能只是普通——絕對值會隨模型與文字類型漂移。跨模型可信的是「比較」:哪段排第一、與下一名差距多大。這也是檢索管線取排名前 k 而不是取「分數高於某固定值」的原因,以及本工具以排名為主、原始數字為輔的理由。
關鍵字搜尋獎勵共用的詞;語意相似度獎勵共用的意思。兩者多數時候一致——有趣的失敗都發生在不一致的地方。塞滿 query 詞彙卻在講別的事的段落,是關鍵字的誤中;一個詞都沒共用的同義改寫,是關鍵字的盲點。每列的兩條分數把兩種裁決並排,旗標標的正是這兩種分歧。正式系統常把兩種訊號合併使用(hybrid search),正因為它們壞掉的方式不同。
embedding 模型用海量「被標成相關」的文字對訓練——問題與其答案、同義改寫、標題與其文章。訓練把相關對的向量推近、無關對的推遠;例子夠多之後,空間的幾何本身就編碼了語意:方向與距離反映了什麼東西傾向於作為「同一主題」共同出現。模型並沒有同義詞字典——「近」是訓練的統計結果,這也是為什麼不同模型畫出的地圖略有不同、對同一對文字給的分數也不同。
它把一個 query 對最多 12 段候選計分,內建兩個示範情境與真實模型模式。示範分數來自為演示構造的向量——明確標示,且字面重疊、排名與結論跑的都是真實程式。真實模式把約 23 MB 的英文 embedding 小模型下載進瀏覽器;其他語言的分數不可靠,工具會明說。字面重疊是刻意簡化的關鍵字視角近似,不是 BM25。它不切 chunk、不呼叫任何 embedding API、也不重現你正式環境模型的精確分數——它讓你看懂那些系統據以排序的機制。