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、也不重现你正式环境模型的精确分数——它让你看懂那些系统据以排序的机制。