摘要在教培机构的AI推荐系统中检索质量直接决定了推荐效果。但很多开发者只关注向量检索、重排序等环节却忽视了一个更前置、更关键的步骤查询理解Query Understanding。家长在AI系统里提出的问题往往不是标准的检索查询。它们可能是模糊的、口语化的、多实体的、甚至有歧义的。如果AI系统不能正确理解家长的问题后续检索再精准也没有意义。本文从技术角度拆解查询理解的4个核心步骤并用可运行的代码示例说明如何在教培场景中实现查询理解与改写帮助开发者构建更精准的AI推荐系统。一、为什么查询理解对教培AI推荐很重要1.1 家长提问的独特性教培场景的家长提问有几个显著特点特点示例检索挑战模糊性孩子数学不好怎么办意图不明确想找辅导想找方法想找原因多实体本地小学三年级数学一对一辅导需提取多个实体地点、年级、科目、班型口语化孩子做题老是粗心怎么办需理解粗心计算错误歧义性哪个机构好缺少比较维度什么科目什么年级隐含需求孩子不想写作业可能需要学习规划、心理辅导、或托管服务1.2 查询理解的作用查询理解是检索系统的第一道工序它的作用是理解用户意图家长到底想要什么提取关键实体问题中包含哪些重要信息消除歧义问题有没有多种理解方式改写查询把原始问题转换成更适合检索的形式如果查询理解做不好后续检索再精准也找不到正确的内容。二、查询理解的4个核心步骤步骤1查询意图识别Intent Classification目标判断家长的问题属于什么意图。教培场景的常见意图类型意图类型示例检索策略找机构本地好的数学辅导机构检索机构列表找方法孩子数学不好怎么办检索学习方法/建议找原因孩子为什么不想学数学检索原因分析比较机构A机构和B机构哪个好检索对比信息了解价格数学辅导多少钱检索价格信息了解师资你们的老师怎么样检索师资介绍技术实现意图识别可以用分类模型如BERT分类器或规则系统实现。# 简化的意图分类示例实际生产环境用预训练模型 INTENT_KEYWORDS { 找机构: [机构, 辅导, 培训, 补习, 哪里好, 推荐], 找方法: [怎么办, 怎么提高, 方法, 技巧, 如何], 找原因: [为什么, 原因, 为什么不想, 为什么学不好], 比较: [哪个好, 对比, 区别, vs], 价格: [多少钱, 价格, 费用, 收费], 师资: [老师, 师资, 教学], } def classify_intent(query): 简单的关键词匹配意图分类 scores {} for intent, keywords in INTENT_KEYWORDS.items(): score sum(1 for kw in keywords if kw in query) scores[intent] score # 返回得分最高的意图 best_intent max(scores, keyscores.get) return best_intent if scores[best_intent] 0 else 未知 # 测试 queries [ 本地好的数学辅导机构, 孩子数学不好怎么办, A机构和B机构哪个好, 数学辅导多少钱, ] for q in queries: print(f查询: {q}) print(f意图: {classify_intent(q)}\n)步骤2实体提取Entity Extraction目标从查询中提取关键实体信息。教培场景的关键实体实体类型示例值检索作用科目数学、英语、物理限定科目范围年级小学三年级、初一限定年级范围班型一对一、小班、大班限定班型范围地点本地、XX区、XX商圈限定地域范围时间周末、工作日晚上限定时间范围技术实现实体提取可以用NER命名实体识别模型或规则系统。import re # 教培场景的实体提取规则 ENTITY_PATTERNS { 科目: [数学, 英语, 物理, 化学, 语文, 生物], 年级: [ r小学[一二三四五六\d]年级, r初一|初二|初三, r高一|高二|高三, r幼升小, r小升初, r中考, r高考 ], 班型: [一对一, 小班, 大班, 精品班], 时间: [周末, 工作日, 晚上, 暑假, 寒假], } def extract_entities(query): 基于规则的实体提取 entities {} for entity_type, patterns in ENTITY_PATTERNS.items(): for pattern in patterns: matches re.findall(pattern, query) if matches: entities[entity_type] list(set(matches)) break return entities # 测试 query 本地小学三年级数学一对一辅导 entities extract_entities(query) print(f查询: {query}) print(f提取实体: {entities}) # 输出: {年级: [小学三年级], 科目: [数学], 班型: [一对一]}步骤3查询扩展Query Expansion目标补充同义词、相关词扩大检索覆盖面。教培场景的查询扩展策略原始查询扩展词说明数学不好数学提分, 数学补习, 数学辅导同义表达粗心计算错误, 马虎, 审题不清口语→书面语不想学厌学, 没兴趣, 抗拒同义表达辅导培训, 补习, 教学同义词技术实现查询扩展可以用词向量Word2Vec/GloVe或同义词词典。# 简化的同义词扩展示例 SYNONYMS { 数学不好: [数学提分, 数学补习, 数学辅导, 数学补差], 粗心: [计算错误, 马虎, 审题不清, 粗心大意], 不想学: [厌学, 没兴趣, 抗拒学习, 学习动力不足], 辅导: [培训, 补习, 教学, 辅导课], } def expand_query(query): 查询扩展添加同义词 expanded [query] for original, synonyms in SYNONYMS.items(): if original in query: expanded.extend(synonyms) return expanded # 测试 query 孩子数学不好怎么办 expanded expand_query(query) print(f原始查询: {query}) print(f扩展查询: {expanded}) # 输出: [孩子数学不好怎么办, 孩子数学提分怎么办, 孩子数学补习怎么办, ...]步骤4查询改写Query Rewriting目标把原始查询转换成更适合检索的形式。查询改写的常见策略策略示例说明口语→书面语孩子做题老是粗心 → 学生计算错误频繁标准化表达模糊→具体数学不好怎么办 → 小学三年级数学提分方法添加上下文拆分本地小学三年级数学一对一辅导 → 多路查询提高召回去噪请问一下本地有没有好的数学辅导机构啊 → 本地数学辅导机构去除无用词技术实现查询改写可以用规则系统或序列到序列模型Seq2Seq。def rewrite_query(query, intent, entities): 查询改写根据意图和实体生成优化后的查询 # 1. 去噪去除语气词和无用词 noise_words [请问, 一下, 有没有, 啊, 呢, 吗] cleaned query for word in noise_words: cleaned cleaned.replace(word, ) # 2. 根据意图改写 if intent 找机构: # 提取关键实体生成结构化查询 rewritten_parts [] if 年级 in entities: rewritten_parts.extend(entities[年级]) if 科目 in entities: rewritten_parts.extend(entities[科目]) if 班型 in entities: rewritten_parts.extend(entities[班型]) rewritten .join(rewritten_parts) 辅导机构 elif intent 找方法: # 提取问题关键词生成方法查询 rewritten cleaned.replace(怎么办, 方法) rewritten rewritten.replace(如何提高, 提高方法) else: rewritten cleaned return rewritten.strip() # 测试 query 请问一下本地小学三年级数学一对一辅导 intent classify_intent(query) entities extract_entities(query) rewritten rewrite_query(query, intent, entities) print(f原始查询: {query}) print(f意图: {intent}) print(f实体: {entities}) print(f改写查询: {rewritten})三、完整查询理解管线把4个步骤串起来形成一个完整的查询理解管线class QueryUnderstandingPipeline: 查询理解管线 def __init__(self): self.intent_keywords INTENT_KEYWORDS self.entity_patterns ENTITY_PATTERNS self.synonyms SYNONYMS def process(self, query): 处理查询返回理解结果 # 步骤1意图识别 intent self.classify_intent(query) # 步骤2实体提取 entities self.extract_entities(query) # 步骤3查询扩展 expanded_queries self.expand_query(query) # 步骤4查询改写 rewritten_query self.rewrite_query(query, intent, entities) return { original_query: query, intent: intent, entities: entities, expanded_queries: expanded_queries, rewritten_query: rewritten_query, } def classify_intent(self, query): 意图识别 scores {} for intent, keywords in self.intent_keywords.items(): score sum(1 for kw in keywords if kw in query) scores[intent] score best_intent max(scores, keyscores.get) return best_intent if scores[best_intent] 0 else 未知 def extract_entities(self, query): 实体提取 entities {} for entity_type, patterns in self.entity_patterns.items(): for pattern in patterns: matches re.findall(pattern, query) if matches: entities[entity_type] list(set(matches)) break return entities def expand_query(self, query): 查询扩展 expanded [query] for original, synonyms in self.synonyms.items(): if original in query: expanded.extend(synonyms) return expanded def rewrite_query(self, query, intent, entities): 查询改写 noise_words [请问, 一下, 有没有, 啊, 呢, 吗] cleaned query for word in noise_words: cleaned cleaned.replace(word, ) if intent 找机构: rewritten_parts [] if 年级 in entities: rewritten_parts.extend(entities[年级]) if 科目 in entities: rewritten_parts.extend(entities[科目]) if 班型 in entities: rewritten_parts.extend(entities[班型]) rewritten .join(rewritten_parts) 辅导机构 elif intent 找方法: rewritten cleaned.replace(怎么办, 方法) else: rewritten cleaned return rewritten.strip() # 使用示例 pipeline QueryUnderstandingPipeline() test_queries [ 本地小学三年级数学一对一辅导, 孩子数学不好怎么办, 孩子做题老是粗心怎么办, A机构和B机构哪个好, ] for q in test_queries: result pipeline.process(q) print(f\n原始查询: {result[original_query]}) print(f意图: {result[intent]}) print(f实体: {result[entities]}) print(f改写查询: {result[rewritten_query]})四、查询理解对教培机构的启示理解了查询理解的技术机制后教培机构可以从以下角度优化自己的内容4.1 覆盖多种问法家长提问方式是多样的你的内容需要覆盖多种表达主题多种问法数学辅导数学辅导数学补习数学培训数学提分数学补差计算粗心粗心计算错误马虎审题不清粗心大意不想学不想学厌学没兴趣抗拒学习学习动力不足建议为同一主题准备多种表达方式覆盖家长可能使用的不同问法。4.2 包含关键实体你的内容需要明确包含关键实体信息科目明确写出数学英语物理等年级明确写出小学三年级初一高一等班型明确写出一对一小班大班等地点明确写出地址、商圈、区域建议不要只写我们提供辅导服务而是写我们提供小学三年级数学一对一辅导。4.3 使用自然语言家长提问是口语化的你的内容也要用自然语言书面语口语化学生计算错误频繁孩子做题老是粗心学习动力不足孩子不想学数学成绩不理想孩子数学不好建议用家长能理解、会使用的语言来描述你的课程和服务。4.4 提供上下文信息帮助AI理解你的定位你的机构适合什么样的学生你的课程解决什么问题你的教学有什么特色建议不要只写我们很好而是写我们特别适合基础薄弱、需要补差的学生采用6人小班教学重点解决计算粗心和应用题理解困难。五、技术总结查询理解是AI推荐系统的第一道工序它决定了后续检索的方向和质量。步骤作用技术意图识别判断用户想要什么分类模型/规则实体提取提取关键信息NER/规则查询扩展扩大检索覆盖面同义词/词向量查询改写优化查询形式规则/Seq2Seq对教培机构而言理解查询理解机制可以帮助你优化内容让你的内容更容易被AI正确理解和检索。六、延伸阅读如果你对教培AI推荐系统的其他技术环节感兴趣以下方向可以深入混合检索BM25DenseRRF融合策略Rerank重排序Cross-Encoder精排优化知识图谱教培机构知识构建链路内容质量评分多维度评分机制
企业数字化 ERP 产品动态
相关推荐
AI Gateway 指南:用 TaoToken 统一网关管理多模型 API 的虚拟密钥配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:08:17
建基于 ChatGPT 的问答系统(四) 第七章 检查结果检查有害内容使用 Moderation API 对模型生成的输出进行二次审核,确保输出安全。代码示例: 调用 openai.Moderation.create 检查 final_response_to_customer。检查是否符合产品信息要求模型评估回复是否充分回答了问题,并验证… · 2026/9/26 11:08:17
案例 3.4 微信小程序数据和事件绑定(新增学生专业属性) 前言本次案例《3.4 数据和事件绑定》,练习微信小程序数据绑定与事件绑定,在原有学生对象结构基础上,新增专业属性,实现页面展示学生信息,通过按钮事件修改数据。一、知识点说明数据绑定:WXML 使用{{ }}插值… · 2026/9/26 11:08:17
IEC 60601医疗设备安规设计:漏电流与爬电距离实战要点 我第一次真正读懂IEC 60601,不是在标准文件里,而是在检测实验室的会议室。当时我带一款血氧模块送检,自认为原理、EMC、安规都考虑得很周全,结果报告草稿上一行“患者漏电流超限”直接把整个项目周期拉长了一个半月。那种感觉就是… · 2026/9/26 14:31:23
AUTOSAR网络管理:整车协同休眠与唤醒的神经节律设计 1. AUTOSAR网络管理:不是“加个模块就完事”的通信调度,而是整车ECU协同呼吸的神经节律AUTOSAR网络管理(Network Management, NM)这个词,最近在汽车电子开发圈里被反复提起,但很多人一听到就下意识觉得&… · 2026/9/26 14:31:16
ArcGIS Pro 3.4安装避坑指南:从环境配置到arcpy验证一次通过 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 14:31:10
Java进销存ERP源码解析:从跑通到二次开发 简介:这是一套面向Java后端开发者与中小企业信息化建设者的进销存ERP管理系统源码,适合用于二次开发、课程设计或企业级项目参考。系统覆盖零售、采购、销售、仓库、财务及报表查询等核心模块,并支持预付款、收入支出、仓库调拨、组装拆卸与订… · 2026/9/26 14:31:10
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46