一句话定义:同义词扩展(Query Expansion)是指在检索时自动给用户输入的查询词补上同义词、近义词、缩写或上下位词,让“手机”也能命中写着“智能机”的文档。
为什么需要它
搜索引擎和向量检索本质上都在算相似度:查词和文档里的词对得上,得分就高。可用户和写文档的人往往用词不同。有人搜“手机”,商品标题写的是“智能机”“移动电话”;有人搜“报销”,制度文档写的是“费用申请”。这种“说的是一回事、字面却不同”的情况,术语叫词汇不匹配(vocabulary mismatch),同义词扩展就是专门解决它的。
打个比方:你只记得“那个卖炸酱面的路口”,热心大爷帮你翻译成“老张家面馆那个十字路口”,他补上的正是同一种说法的不同叫法。但如果大爷听成了“面馆”,把你指到三条街外的拉面店,那就是扩过头了。
常见做法
| 做法 | 怎么扩 | 特点 |
|---|---|---|
| 同义词词典 | 人工维护“手机=移动电话=智能机” | 准,但覆盖有限、维护成本高 |
| 词向量近邻 | 用嵌入(embedding)找语义最近的词 | 覆盖广,但近邻不一定真是同义 |
| 伪相关反馈(Pseudo-Relevance Feedback) | 先检索一批结果,从中提取高频词再检索一次 | 自动,但容易被首轮错误结果带偏 |
| 大模型生成 | 让模型列出若干等价说法 | 灵活,需控制数量,防止跑题 |
工程上还有两点关键:一是加权,原词权重高、扩展词权重低,扩展词只是加分项,不是替换项;二是限量,扩三五个词往往比扩二十个稳。
容易混淆的邻居
同义词扩展只增加“说法”,不改“意图”,所以它和查询改写(Query Rewriting)不同:用户搜“北京到上海 明天”,查询改写会补出“机票”“高铁”这类隐含意图,而同义词扩展只把“明天”换成“明日”。它也和拼写纠错(Spell Correction)不同:纠错是修正错字,扩展是补充正确的另一种写法。向量检索则是另一条路:它不扩词,而是把整句变成向量去比对语义,两者常一起用。
真正的风险:查询漂移
扩展最大的敌人是查询漂移(query drift):补进来的词把原意带偏。搜“苹果”扩成“水果”,笔记本用户就会看到一堆生鲜;搜“Java”扩成“咖啡”,程序员会看到一堆豆子。所以同义词扩展的核心不是“扩得多”,而是“扩得准、给得轻”。
对你的实际意义
做搜索、推荐或 RAG 的人,评估同义词扩展不能只看召回率涨没涨,还要看排序质量掉没掉,最好用一批真实查询做 A/B。对普通用户来说,这条词条也有个实用结论:搜不到东西,很多时候不是没有,而是词不一样;换个说法重搜,往往比翻十页更有效。具体产品怎么实现,以官方页面为准。
