在搜索引擎里输入「找一些适合周末看的自然类纪录片」,传统做法是先切词再匹配,系统看到的是「周末」「自然」「纪录片」。但人真正想表达的是:轻松、画面好、时长适中、可以分两次看完。语义检索要做的,就是尽量靠近后一种理解。
一、从关键词到意图:先判断你在问什么
检索系统的第一步并不是找结果,而是判断意图。我们把常见的检索意图分为四类:找具体事物、找同类替代、找操作说明、找趋势判断。不同意图对应不同的召回策略,例如「找操作说明」更依赖结构化内容,而「找同类替代」依赖相似度扩展。
在实际处理中,系统会结合历史点击模式判断意图。比如同一个关键词「开源工具」,如果多数用户随后筛选了「效率办公」分类,那么下一次检索时,这个分类会被适度加权。
二、近义扩展:让一个词覆盖更多表达
中文表达高度多样,「高清纪录片」可能被写成「高画质纪实」「4K 自然影像」。如果只做字符串匹配,命中率会非常低。我们通过同义词表与向量近邻两套机制并行扩展:
- 词表扩展:覆盖领域内的固定说法与缩写,结果可控、误召回低。
- 向量近邻:捕捉语义相近但字面不同的表达,适合处理长尾描述。
- 双向校验:两套结果交叉验证,避免单一机制带来的偏差。
扩展并不是越多越好。过度扩展会把无关结果带进列表,因此系统会为每个扩展词设置权重上限,并在排序阶段回收低贡献的扩展词。
三、排序权重:把合适的放在前面
召回解决「有没有」,排序解决「先看哪个」。我们采用多因子加权模型,主要考虑四个维度:语义相关度、内容完整度、来源稳定性与近期热度。四个维度并非固定比例,而是随查询类型动态调整。
举个直观的例子:搜索「公开课程」时,内容完整度权重上调,因为用户更在意课程是否成体系;搜索「本周热点」时,近期热度权重上调。这样的动态调整让结果列表在不同场景下都更符合预期。
四、可解释性:让用户知道为什么是它
排序模型越复杂,越需要可解释。我们在结果条目上保留命中原因标签,例如「标题命中」「分类匹配」「相关词扩展」。这不仅是透明度问题,也能帮助用户快速判断是否值得点开,减少无效浏览。
五、下一步:把检索变成对话
语义检索的终点不是一次命中,而是持续理解。我们正在尝试让检索支持追问:当用户在第一轮结果中筛选了某个条件,系统会记住这个偏好,在下一轮检索时自动带入,减少重复操作。
如果你对这套机制有改进建议,欢迎通过联系我们页面反馈,我们会认真阅读每一条意见。