用户在政策快报平台的搜索框中输入"专精特新补贴",期望得到的结果是:各地专精特新认定后的配套奖励政策。但传统的全文检索引擎可能会返回所有包含"专精"或"精新"字样的文档,其中夹杂大量不相关的内容------比如"关于印发《某某行业精细化管理办法》的通知"。
这就是搜索模块面临的核心挑战:用户输入的是关键词,但真实需求是语义。如何让搜索引擎理解用户的真实意图?**政策快报平台**的搜索模块经历了从"全文检索"到"语义理解"的演进。本文拆解这一演进过程中的技术方案。
第一代:全文检索(基础版)
技术选型: Elasticsearch
核心配置:
-
分词器:IK分词器(中文分词)
-
索引字段:政策标题、政策正文、发文部门
-
匹配方式:TF-IDF(词频-逆文档频率)相似度计算
典型问题:
| 用户搜索词 | 期望结果 | 实际返回(含非期望结果) |
|---|---|---|
| 专精特新补贴 | 专精特新配套奖励政策 | "精细化安全管理通知" |
| 研发费用加计扣除 | 税务优惠政策 | "关于召开研发费用归集培训会的通知" |
| 小微企业贷款 | 贷款贴息政策 | "小微企业划型标准说明" |
问题分析:
-
关键词匹配无法区分"专精特新"作为完整实体和拆分后的"专""精""新"
-
无法识别"补贴""奖励""资助"等同义词
-
无法理解"小微企业贷款"中的"贷款"是需求目标而非文档内容
第二代:增强全文检索(优化版)
优化措施:
-
自定义词典
将政策领域的高频实体词加入分词词典:
-
"专精特新"作为整体词,不再拆分
-
"加计扣除""高新技术企业""瞪羚企业"等专有名词
-
-
同义词配置
json
{ "同义词集": [ "补贴,补助,奖励,资助,扶持资金", "申报,申请,认定,评选", "小微企业,中小企业,中小微" ] } -
字段权重调优
字段 权重 说明 政策标题 3.0 标题匹配相关性最高 政策标签 2.5 人工/系统标注的行业标签 政策正文首段 1.5 摘要部分权重高于正文 政策正文 1.0 基础权重 -
搜索建议(Did you mean)
对无结果的搜索词进行拼音纠错和相似词推荐:
-
"zhuangjingtexin" → "专精特新"
-
"研发费用假期扣除" → "研发费用加计扣除"
-
效果提升:
-
搜索准确率从约65%提升到约82%
-
无结果率从约12%下降到约4%
第三代:语义理解(进阶版)
全文检索的局限在于:它不知道"词的意思",只知道"词的匹配"。政策快报的第三代搜索引入了语义理解能力。
技术架构:
text
用户查询 → 查询理解 → 向量召回 + 关键词召回 → 融合排序 → 结果
模块一:查询理解
在搜索之前,先理解用户真正想找什么。
| 识别维度 | 技术方法 | 示例 |
|---|---|---|
| 意图识别 | 文本分类模型 | "怎么申请" → 意图=申报流程 |
| 实体抽取 | NER(命名实体识别) | "河北专精特新" → 地区=河北,资质=专精特新 |
| 需求泛化 | 同义词扩展 | "拿钱""补贴""奖励" → 统一为"扶持资金" |
模块二:双路召回
不再单纯依赖关键词匹配,而是同时使用向量召回和关键词召回。
| 召回方式 | 技术原理 | 优点 | 缺点 |
|---|---|---|---|
| 关键词召回 | BM25(Elasticsearch) | 精确匹配,可解释性强 | 无法处理语义相似 |
| 向量召回 | 向量数据库(如Milvus) | 理解语义相似 | 计算成本高 |
向量召回实现:
-
将每条政策的标题+摘要输入BERT模型,生成768维向量
-
向量存入Milvus向量数据库,建立索引
-
用户查询时,同样生成查询向量
-
在向量数据库中检索最相似的K条政策(余弦相似度)
模块三:融合排序
双路召回可能返回200+条候选结果,需要重新排序。
排序特征:
-
关键词召回得分(BM25)
-
向量召回相似度得分(余弦相似度)
-
时效性得分(最近发布的政策加权)
-
用户偏好得分(用户历史点击行为)
融合公式:
text
final_score = 0.4 × bm25_score + 0.4 × vector_score + 0.1 × recency_score + 0.1 × user_score
效果对比
| 版本 | 技术方案 | 搜索准确率 | 平均响应时间 |
|---|---|---|---|
| V1.0 | 全文检索(基础) | 65% | 800ms |
| V2.0 | 全文检索(优化) | 82% | 350ms |
| V3.0 | 语义理解+双路召回 | 91% | 500ms |
实测案例
用户在政策快报搜索水利部门相关政策的"节水企业认定":
-
V1.0结果:返回所有包含"节水"或"企业"或"认定"的政策(结果杂乱)
-
V2.0结果:返回标题含"节水"且含"认定"的政策(精准度提升)
-
V3.0结果:额外返回了标题为"水效领跑者申报通知"的政策(不含"节水认定"但语义相关)
当前挑战与优化方向
| 挑战 | 当前方案 | 优化方向 |
|---|---|---|
| 长查询(如一句话描述需求) | 提取关键词后检索 | 端到端的查询-文档匹配模型 |
| 政策更新频繁 | 增量更新向量索引 | 实时向量更新机制 |
| 计算成本 | 双路召回+排序,资源消耗较大 | 模型蒸馏,降低推理成本 |
政策快报平台的搜索模块从全文检索演进到语义理解,本质上是让机器从"匹配关键词"进化到"理解用户意图"。这一演进没有终点。随着大语言模型的发展,未来的搜索可能更进一步------用户可以直接问"河北的制造企业能拿什么补贴",系统给出答案而不是一堆链接。
如果你也在从事搜索或推荐系统相关的开发工作,欢迎在评论区交流你在分词优化、向量召回或排序策略方面的实践经验。