黄昏时分,老王的面馆门口排起长队。一个小伙子冲进来喊:“老王!还是那个,老样子!再来一份不辣的!”老王一边下面,一边扭头向后厨喊:“一碗牛肉面,二两,不加辣,多放香菜。”小伙子惊呆了:“我啥都没说清啊!”老王笑了:“你那句'老样子',我早就听懂了。” 搜索引擎遇到的正是这个难题。用户敲下“那家和平饭店附近第一的餐厅”,这句话对机器来说像外星语。用户心里门儿清,可屏幕上只是一串可能带错别字、方言、口语的词。查询理解与改写要做的就是当那个“老王”:先判断你想干嘛,再把你话里的错字、别称、模糊说法都翻译成检索系统听得懂的“菜名”,让搜索意图一目了然。 这篇文章会用一个“面馆老王点单”的比喻,从意图识别、拼写纠错、查询归一化、语义改写、大模型改写和质量评测七个角度,拆解一套完整的查询理解流水线。

岗位关联

掌握这块知识,你就能理解搜索引擎、电商平台和语音助手背后的“翻译官”:用户输入再乱,你都能把它变成高质量检索请求。这是搜索、推荐和 NLP 从业者的核心技能之一。

目录
  1. 可视化演示
  2. 整体认知:先听懂,再动手
  3. 意图识别:判断顾客想干嘛
  4. 拼写纠错:口音与错别字的翻译
  5. 查询归一化:同一道菜,多种叫法
  6. 语义改写:绕来绕去说需求
  7. 大模型改写:智能助手老王
  8. 质量评测优化:服务好不好,数据说了算
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

通过意图识别分类、拼写纠错归一化、语义改写扩展三个模式,展示搜索引擎查询理解系统的核心处理流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

查询意图识别与分类 将用户查询分类为导航、信息、交易、娱乐等意图类型 基于分类结果选择不同检索策略,提升搜索准确率 Intent = argmax P(intent_i | query) 意图识别是查询理解的第一步,决定后续处理路径

整体认知:先听懂,再动手

老王听到一句“老样子”,不会立刻下锅,而是先在心里快速拆解:这句话是点菜吗?是哪个菜?有什么忌口?这个过程就是“听懂”。搜索引擎面对用户输入的原始查询,第一步也不是直接全网检索,而是先做一次理解:这句话想表达什么需求?用户是新手还是老手?查询质量怎么样?

查询理解(Query Understanding)要做的事,是把用户输入的原始文本,翻译成下游检索和排序都“看得懂”的结构化表达。它的上游是用户输入,可能带着错别字、口语词、方言甚至emoji;下游是搜索系统,需要的是干净的词、准确的意图、可扩展的改写候选。

一条完整的理解链路通常长这样:先纠错,再归一化,接着识别意图,最后决定要不要做语义改写。每一步都在把“人话”往“机器话”方向推进一步。

老王把这套流程刻在脑子里,搜索引擎把这套流程写在代码里。接下来每一节,都像剥洋葱一样走进老王的大脑:先看意图,再纠错,再归一化,再改写,最后用数据证明这套流程到底有没有用。

Understand(q):q→纠错q′→归一化q′′→改写q∗\text{Understand}(q):\quad q \xrightarrow{\text{纠错}} q' \xrightarrow{\text{归一化}} q'' \xrightarrow{\text{改写}} q^{*}
这条公式不是某个数学模型,而是一条“翻译流水线”的缩写:原始查询经过纠错、归一化、改写三个阶段,最终变成高质量查询。
  1. 原始查询$q$ 代表用户敲进搜索框的原话,比如“和平饭店附近的排行第一的餐馆”,越乱越真实。
    qq
  2. 纠错后$q'$ 表示修正了错别字之后的查询,比如“排行”没变,但“付近”被改成“附近”。
    q′q'
  3. 归一化后$q''$ 表示统一了大小写、繁简、全半角和同义词的查询,比如“番茄”和“西红柿”归成一个词。
    q′′q''
  4. 改写后$q^{*}$ 表示最优改写结果,可能是一句更贴近文档库表达的话,也可以是多个候选查询。
    q∗q^{*}

意图识别:判断顾客想干嘛

老王听到“来碗面”是点菜,听到“你们几点打烊”是问营业时间,听到“和平饭店往哪走”是找路。三种话,三种应对方式,这就是意图识别。搜索里的意图识别,本质是对查询做分类:你到底想干什么?

业界最通用的粗粒度分法是三类:导航类意图(用户想找一个具体网站或页面,比如“B站官网”)、信息类意图(用户想查知识或资料,比如“番茄炒蛋怎么做”)、交易类意图(用户想完成购买等动作,比如“买一部手机”)。有些系统还会继续细化到“影视类”“天气类”“购物类”等类目,但这需要足够的标注样本支撑。

常用的建模方法是朴素贝叶斯分类:先从历史日志里统计每个意图出现的频率,再统计在这个意图下每个词出现的概率,最后把查询里所有词的贡献乘起来,选分数最高的那个意图。

老王心里有一张“意图分诊台”,听到话先盖章:点菜?问路?还是买单?搜索引擎也一样,识别出意图,才知道后面该走哪条流水线——导航类直接去查站点库,交易类去拉起商品检索,信息类则走常规网页搜索。

Intent(q)=arg⁡max⁡c∈C P(c)∏w∈qP(w∣c)\text{Intent}(q) = \arg\max_{c \in \mathcal{C}}\ P(c) \prod_{w \in q} P(w \mid c)
这条公式是在“投票”:每个词都投一票“我更像信息类还是交易类”,最后票数最多的类别胜出。
  1. 意图类别集合$\mathcal{C}$ 是所有意图的候选集合,比如 {信息类,导航类,交易类},机器只能从中选一个。
    C={信息,导航,交易}\mathcal{C} = \{\text{信息}, \text{导航}, \text{交易}\}
  2. 先验概率$P(c)$ 表示在全部历史查询中,类别 $c$ 出现的比例,相当于老王记忆中“十个顾客里六个是来点面的”。
    P(c)P(c)
  3. 词的条件概率$P(w \mid c)$ 表示在意图 $c$ 下,词 $w$ 出现的概率,比如“官网”在导航意图下概率很高。
    P(w∣c)P(w \mid c)
  4. 连乘与最大后验$\prod_{w \in q}$ 把所有词的概率乘起来,$\arg\max$ 挑出总分最高的类别,即最终意图。
    arg⁡max⁡c∈C\arg\max_{c \in \mathcal{C}}

拼写纠错:口音与错别字的翻译

“老王,来一份牛肉肥面!”其实顾客想吃的是“牛肉肥肠面”,只是手一滑打成了“肥”。老王没有愣住,而是瞬间脑补出正确菜名。搜索引擎每天都会收到“宫保鸡丁”被敲成“工保鸡丁”、“附近”被敲成“付近”这样的查询,拼写纠错就是要自动完成老王的脑补。

拼写纠错的基本思路分两步:第一步是候选生成,从词典里找出所有可能正确的词;第二步是候选排序,用编辑距离判断哪个候选和原词最接近。编辑距离(Levenshtein Distance)衡量的是:把字符串 a 变成字符串 b,最少需要多少次“插入、删除、替换”操作。

计算编辑距离时不需要暴力尝试所有路径,可以用动态规划填一张表:用 $d(i,j)$ 表示 a 的前 i 个字符和 b 的前 j 个字符之间的最小编辑次数,每个格子都从左上、上方、左方三个邻居推导而来。

老王不用“牛肉费”来搪塞你,是因为他心里有一本“邻字混淆账”。编辑距离就是那本账的算盘:把每个相近的候选都掂量一遍,再挑最像的那个。当然,真实系统中还要配合词频统计——“工保”和“宫保”距离一样近时,选那个大家更常搜的词。

d(i,j)=min⁡{d(i−1,j)+1, d(i,j−1)+1, d(i−1,j−1)+[ai≠bj]}d(i,j) = \min\{d(i-1,j)+1,\ d(i,j-1)+1,\ d(i-1,j-1)+[a_i \neq b_j]\}
这个递推公式像老王在脑中同时试三条路:删一个字、加一个字、换一个字,哪个动作最省事就选哪个。
  1. 状态定义$d(i,j)$ 表示 a 的前 i 个字符与 b 的前 j 个字符之间的最小编辑操作次数,表格右下角就是最终答案。
    d(i,j)d(i,j)
  2. 删除操作$d(i-1,j)+1$ 表示删掉 a 的第 i 个字符,然后继承前面的代价,加一次删除操作。
    d(i−1,j)+1d(i-1,j)+1
  3. 插入操作$d(i,j-1)+1$ 表示在 a 中插入 b 的第 j 个字符,同样需要在原有代价上加 1。
    d(i,j−1)+1d(i,j-1)+1
  4. 替换或匹配$d(i-1,j-1)+[a_i \neq b_j]$,当两个字符相等时代价为 0,不相等则加 1 次替换操作。
    d(i−1,j−1)+[ai≠bj]d(i-1,j-1)+[a_i \neq b_j]

查询归一化:同一道菜,多种叫法

同一个菜,有人叫“番茄炒蛋”,有人叫“西红柿炒蛋”,还有人说“柿子炒鸡蛋”。老王心里只有一盘标准菜名,谁都听得懂。查询归一化处理的正是这种“同一意义,多种写法”的问题。

归一化操作看起来琐碎,但作用很大:去掉首尾空格、统一大小写、繁体转简体、全角转半角、数字统一成阿拉伯数字,最后做同义词映射。这些操作让“HELLO“变成”hello“,让”番茄“和”西红柿“指向同一个标准词,从而减少检索系统”认错人”的概率。

工程上,归一化常被实现成一条简单流水线:先去掉首尾空白,再统一字符形式,最后过一张别名映射表。中文场景里还会结合分词,把分词后的每个词都做一次同义词归一化。

老王从不说“柿子炒鸡蛋”,他永远写“番茄炒蛋”。查询归一化就是给后厨一本统一菜谱,减少检索系统认错的概率。这一步成本低、见效快,是很多搜索引擎的“第一行代码”。

Norm(q)=AliasMap(Lower(Trim(q)))\text{Norm}(q) = \text{AliasMap}\big(\text{Lower}(\text{Trim}(q))\big)
公式描述的是“先清洁再翻译”:先把字符串表面的杂质去掉,再查别名表换成标准词。
  1. 去空白$\text{Trim}(q)$ 去掉查询首尾多余的空格,避免用户手滑多敲出来的空格干扰后续处理。
    Trim(q)\text{Trim}(q)
  2. 统一字符$\text{Lower}(q)$ 把大写转小写,在中文场景还包含繁体转简体、全角转半角,让字符形态只有一个标准。
    Lower(q)\text{Lower}(q)
  3. 同义映射$\text{AliasMap}(x)$ 查别名表,把“番茄/西红柿/柿子炒鸡蛋”都映射成标准词,保证后厨只认一本菜谱。
    AliasMap(x)\text{AliasMap}(x)

语义改写:绕来绕去说需求

顾客不上菜谱,直接说“最近老失眠,有没有什么汤水”,老王自己翻译成“莲子百合安神汤”。这就是语义改写——用户没有直接说出标准菜名,而是用描述性、场景化的语言表达需求,系统要负责把这种抽象诉求落到具体的检索词上。

归一化处理的是“写法不一致”,语义改写处理的是“表达方式不同但意思接近”。常见手法有三种:同义替换(“宵夜”换成“夜宵”)、语序调整(“牛肉面大碗”换成“大碗牛肉面”)、成分补齐(“红色手机”补齐成“红色手机 128G 全新”)。

怎么判断改写得好不好?一个常用方法是向量相似度:把改写前后的查询都映射成向量,然后计算余弦相似度。夹角越小,说明两个查询在语义空间里越靠近,改写质量越高。

老王要的不是和顾客说得一模一样,而是“你说东,我理解成东边那家店”。语义改写就是那个“敢猜心思”的中间人,把抽象的诉求翻译成具体的检索词,让本来检索不到的结果变得可以触达。

cos⁡θ=q⃗⋅q′⃗∥q⃗∥⋅∥q′⃗∥\cos\theta = \frac{\vec{q} \cdot \vec{q'}}{\|\vec{q}\| \cdot \|\vec{q'}\|}
这个公式衡量的是两个查询向量的“方向是否一致”——方向越一致,语义越接近,就像老王猜顾客心思猜得越准。
  1. 查询向量$\vec{q}$ 和 $\vec{q'}$ 分别是改写前、后查询的向量表示,可以由词向量平均或句子编码器得到。
    q⃗, q′⃗\vec{q},\ \vec{q'}
  2. 点积$\vec{q} \cdot \vec{q'}$ 计算两个向量对应维度的乘积之和,值越大说明重叠信息越多。
    q⃗⋅q′⃗\vec{q} \cdot \vec{q'}
  3. 模长归一化$\|\vec{q}\|$ 是向量的长度,用它做分母可以消除查询长短带来的影响,让相似度落在 -1 到 1 之间。
    ∥q⃗∥\|\vec{q}\|
  4. 余弦相似度整个分数 $\cos\theta$ 越接近 1,说明改写前后的查询语义越接近,改写越成功。
    cos⁡θ\cos\theta

大模型改写:智能助手老王

现在店里来了个 AI 助手。顾客站在门口碎碎念:“哎呀最近老加班,想找个能待一下午又有插座的地方,最好有咖啡……”助手三秒钟总结成一句干净的点单:“24小时咖啡店 充电 工作”。这就是大模型改写的能力——它不仅能纠错、归一,还能理解完整语境,生成更自然、更贴近需求的查询。

传统改写依赖词典和规则,遇到没见过的口语、网络新词、复杂长句就容易“卡壳”。大模型把查询改写当成一个条件生成任务:输入原始查询,输出改写后的查询。因为大模型在训练时见过海量文本,它天然理解“帮我找个能待一下午又有插座的位置”其实是在找“咖啡店 充电 自习”。

从数学上看,改写模型的打分逻辑很简单:在所有可能的输出改写中,选择条件概率最大的那个。

老王不会丢了老手艺去全用 AI,而是让 AI 处理那些“猜不透的长尾需求”,遇到实在吃不准再回头问顾客。工程上这叫“规则兜底 + 模型增强”:常见查询走规则和词典,保证速度和稳定;长尾复杂查询才上大模型,发挥泛化能力。

q∗=arg⁡max⁡q′ Pθ(q′∣q)q^{*} = \arg\max_{q'}\,P_{\theta}(q' \mid q)
公式的意思是:给定输入查询 $q$,大模型在心里生成无数种改写方案,然后选出它觉得最靠谱的那一个。
  1. 条件概率$P_{\theta}(q' \mid q)$ 表示在模型参数 $\theta$ 下,给定原始查询 $q$,输出改写 $q'$ 的概率。
    Pθ(q′∣q)P_{\theta}(q' \mid q)
  2. 所有候选$\arg\max_{q'}$ 遍历模型能生成的所有候选改写,找出概率最高的那一个。
    arg⁡max⁡q′\arg\max_{q'}
  3. 最优改写$q^{*}$ 就是最终选中的改写结果,它既保留了原始需求,又比原查询更适合检索系统匹配。
    q∗q^{*}

质量评测优化:服务好不好,数据说了算

老王好不好,不能光听他自己说。得看顾客是不是常来、点的菜是不是刚好合口味、后厨出菜有没有返工。查询改写系统也一样,改得好不好,要用数据说话。

评估分两类。离线评估:在标注数据集上计算精确率、召回率和 F1,验证改写候选的质量。在线评估:通过小流量 A/B 实验,观察点击率、无结果率、转化率等真实业务指标。离线是“模拟考试”,在线才是“真实战场”。

最常用的综合指标是 F1 值。精确率 P 回答“改出来的查询检索结果里有多少是相关的”,召回率 R 回答“相关结果里有多少被检索出来了”,F1 把两者揉成一个分数,避免只看其中一个而偏科。

老王的改进有闭环:先记下顾客点错的菜,再改菜谱,最后观察翻台率。查询理解系统也一样:离线算 F1 → 上线跑小流量实验 → 观察点击率和无结果率 → 继续优化。循环往复,慢慢逼近“搜索意图一目了然”的终极目标。

F1=2×P×RP+RF1 = \frac{2 \times P \times R}{P + R}
F1 是精确率和召回率的“调和平均”:它不会让某个指标特别高、另一个特别低的人蒙混过关。
  1. 精确率$P = \frac{TP}{TP+FP}$,检索出的结果中真正相关的比例,相当于老王端上来的菜里顾客真正爱吃的比例。
    PP
  2. 召回率$R = \frac{TP}{TP+FN}$,所有相关结果中被检索出来的比例,相当于店里所有招牌菜里给顾客推荐到位的比例。
    RR
  3. 调和平均$\frac{2PR}{P+R}$ 把两者合并成一个 0 到 1 之间的分数,越接近 1 说明系统越“又准又全”。
    F1=2PRP+RF1 = \frac{2PR}{P+R}

AI 应用场景

电商搜索:把“大白话”变成商品关键词

阶段:意图识别 + 语义改写

解决的问题:用户不熟悉商品标准命名,直接搜“性价比高的手机”会丢失品牌词,导致召回差、结果不精准。传统搜索只会做字面匹配,AI 能识别购买意图,并把描述性需求改写成一个或多个商品检索词。

具体案例:某电商平台上线“改写通道”后,用户搜索“学生用轻薄本”,系统自动改写出“轻薄笔记本 学生 便宜”“联想小新 学生优惠”等多路候选查询,合并召回再统一排序,最终搜索点击率提升了 12%,无结果率下降了一半。

智能语音助手:把口语碎碎念翻译成服务指令

阶段:拼写纠错 + 大模型改写

解决的问题:语音输入自带口音、停顿和口语词,直接识别结果往往语义残缺。比如用户说“找个地方吃宵夜”,字面可能识别成“找个地方吃小夜”,意图误判为问路。AI 先纠错,再判断这是本地生活的“导航类意图”,最后改写出“附近 烧烤店 营业到凌晨”。

具体案例:某车载语音助手对“帮我找个能看书的地方”改写出“附近 24小时书店”“图书馆 自习座位”等多路候选,再拉起本地生活检索,任务完成率从 61% 提升到 83%。

企业内部知识库:把员工口语对齐到制度文档

阶段:查询归一化 + 语义改写

解决的问题:员工用“报销流程是啥来着”这种口语查制度文档,和标准文档名“费用报销管理办法”完全不匹配。传统关键词搜索几乎无结果。AI 先将“报销/费用报销”归一化,再语义改写为贴近文档标题的表达,大幅提升命中率。

具体案例:某公司内部搜索系统上线归一化与改写后,员工搜索“开销中报”这类错词也能命中“费用报销管理办法”,知识库客服工单量减少了 30%。

Python 演示

python70 行
# -*- coding: utf-8 -*-import re INTENT_KEYWORDS = {    "info": ["怎样", "如何", "是什么", "做法", "区别", "为什么"],    "navigate": ["官网", "网址", "网站", "首页", "在哪"],    "transaction": ["买", "购买", "多少钱", "价格", "下单", "优惠"],} SYNONYM_MAP = {    "番茄": "西红柿",    "洋芋": "土豆",    "马铃薯": "土豆",    "山芋": "红薯",    "地瓜": "红薯",    "泡面": "方便面",} def detect_intent(query):    score = {key: 0 for key in INTENT_KEYWORDS}    for intent, words in INTENT_KEYWORDS.items():        for word in words:            if word in query:                score[intent] += 1    best = max(score, key=score.get)    return best if score[best] > 0 else "info" def normalize(query):    for alias, std in SYNONYM_MAP.items():        query = query.replace(alias, std)    return re.sub(r"\s+", "", query).strip() def edit_distance(a, b):    m, n = len(a), len(b)    dp = [[0] * (n + 1) for _ in range(m + 1)]    for i in range(m + 1):        dp[i][0] = i    for j in range(n + 1):        dp[0][j] = j    for i in range(1, m + 1):        for j in range(1, n + 1):            cost = 0 if a[i - 1] == b[j - 1] else 1            dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost)    return dp[m][n] def correct(query, candidates):    norm = normalize(query)    best = norm    best_score = 999    for cand in candidates:        dist = edit_distance(norm, cand)        if dist < best_score:            best = cand            best_score = dist    return best, best_score def main():    candidates = ["西红柿炒蛋", "土豆炖牛肉", "红薯粥", "方便面评测"]    queries = ["番茄吵蛋", "洋芋炖牛肉", "地瓜粥", "泡面侧评"]    for query in queries:        fixed, dist = correct(query, candidates)        intent = detect_intent(query)        print("原始=>{} 纠正=>{} 距离={} 意图={}".format(query, fixed, dist, intent))     demo_queries = ["B站官网", "番茄炒蛋怎么做", "买一部手机"]    for query in demo_queries:        print("意图识别 => {} -> {}".format(query, detect_intent(query))) if __name__ == "__main__":    main()
目的:演示了一个微型查询理解流水线——同义词归一化、编辑距离纠错和关键词意图识别三件事,串起来就是老王点单的核心逻辑。
  1. INTENT_KEYWORDS = {...}用关键词词典快速分意图,相当于老王脑中“点菜、问路、买单”的常用话术列表。
  2. score[intent] += 1统计每个意图命中了几个关键词,像老王数着顾客话里出现了几次“买”“官网”这样的信号词。
  3. return re.sub(r"\s+", "", query).strip()先做归一化预处理,把空格和噪音去掉,避免影响距离计算。
  4. dp[i][j] = min(...)编辑距离的核心递推,对应删除、插入、替换三种操作,是拼写纠错的地基。
  5. best = max(score, key=score.get)选出得分最高的意图类别,相当于老王的意图分诊台最终盖章。
  6. for alias, std in SYNONYM_MAP.items():做同义映射,把“番茄/洋芋/泡面”等别名统一成标准词供检索使用。

常见误区

误区“改写得越多越好,比如把'苹果手机'扩成'苹果手机红色内存128G价格优惠',这样检索召回肯定更全。”

正解改写不是堆词,而是补“意图相关”的信息。检索系统会把每个词当成一个候选维度,多出无关词反而引入噪声,拉低精确率。更合理的改写是“红色 iPhone”这样结构清晰、权重明确的表达。老王加料也得看顾客点什么菜,不能什么都往碗里放。

为何常见:人脑看句子觉得“信息越多越清楚”,但检索系统是按词频和权重计算的,不相关词只会稀释相关性。

误区“算编辑距离,选距离最小的候选就行,比如'工保鸡丁'改'宫保鸡丁'只有一步,肯定是它。”

正解编辑距离只是候选质量的一个信号。真实场景里“老吧”既能改成“老板”也能改成“老爸”,到底改哪个,要看上下文、词频和用户行为。老王听到“老吧”时也会先愣一下,结合前面聊的“打工”才判断是“老板”。

为何常见:算法的“数学正确”给人安全感,让人忽略了现实中大量同音、同形歧义需要数据来决策。

误区“把所有同义词列在词典里,遇到就替换,问题就解决了。”

正解词典永远追不上新词、口语和流行语,而且同义词有上下文依赖——“苹果”指水果还是手机,词典帮不上忙。所以工业界常用“词典 + 向量相似度 + 大模型扩展”的多路混合方案,像老王既靠经验又靠 AI 助手。

为何常见:规则系统可解释性强、实现简单,容易让人误以为穷举能覆盖所有场景。

误区“用大模型做改写能搞定一切 query,规则和词典可以淘汰了。”

正解大模型有幻觉风险、延迟高、成本大,不可能每个查询都走一遍大模型。真实工程常用分层策略:高频简单查询走规则和词典,保证低延迟;长尾复杂查询才上大模型,并且上线前要做人工抽检和 A/B 评测。老王再信任 AI 助手,也不会让助手替自己端所有碗。

为何常见:热门技术容易让人忽视稳定性、成本和效果验证的复杂性,尤其是线上系统的“平均响应时间”红线。

面试题

Q1. “查询理解与改写”最核心的目标是什么?

单选题 · easy

  • A.把模糊输入转成清晰需求← 正确答案
  • B.把网页内容压缩得更小
  • C.把广告位置排得更靠前
  • D.把用户注册流程简化掉

答案:A。查询理解的核心是把用户含糊的、有噪声的输入,翻译成检索系统能准确执行的需求表达,就像老王把“老样子”翻译成“牛肉面二两不加辣”。压缩网页、排广告、简化注册都不是它的职责。

Q2. 用户搜索“番茄炒蛋怎么做”,意图应判为?

单选题 · easy

  • A.信息类,想学习菜谱教程← 正确答案
  • B.导航类,想登录某个网站
  • C.交易类,想直接下单购买
  • D.娱乐类,想浏览搞笑内容

答案:A。“怎么做”是典型的求知表达,用户想获取烹饪方法,属于信息类意图。导航类是找具体网站,交易类是完成购买,娱乐类需要明确的娱乐信号,这里都没有。

Q3. 用户搜索“B站官网”,意图应判为?

单选题 · easy

  • A.导航类,想直接进入特定网站← 正确答案
  • B.信息类,想了解B站发展史
  • C.交易类,想购买B站会员卡
  • D.情感类,想表达对B站喜爱

答案:A。“官网”是强烈的导航信号,用户明确想到达某个指定的网站页面,这和顾客问“和平饭店往哪走”一模一样,属于导航类意图。

Q4. 编辑距离中的“距离”指的是?

单选题 · mid

  • A.两个字符串最小增删改次数← 正确答案
  • B.两个词在词典里的间隔数
  • C.两个文档的字节数之差
  • D.两个用户点击数之差

答案:A。编辑距离衡量把一个字符串变成另一个字符串所需的最少“插入、删除、替换”操作次数,是拼写纠错的核心工具。它跟词典位置、字节数、点击数都没关系。

Q5. “番茄炒蛋”和“西红柿炒蛋”是通过哪种方式关联起来的?

单选题 · mid

  • A.同义词映射表的归一化← 正确答案
  • B.编辑距离的自动纠错
  • C.用户意图的人工标注
  • D.页面排名的点击反馈

答案:A。“番茄”和“西红柿”是同义词,通过别名映射表可以归一化成同一个标准词,这属于查询归一化。编辑距离解决的是错别字问题,意图标注解决的是分类问题,点击反馈解决的是排序问题。

Q6. 下面哪些属于查询改写的常见手段?

多选题 · mid

  • A.同义替换与别名映射← 正确答案
  • B.语序调整与成分补齐← 正确答案
  • C.用大模型生成候选表达← 正确答案
  • D.删除全部标点符号

答案:ABC。同义替换、语序调整、成分补齐是传统语义改写的三大手段,大模型改写是更高阶的生成式方法。删除全部标点不是改写目标,反而会丢失语义边界,属于破坏性操作。

Q7. 想判断改写前后的两个查询语义是否接近,常用:

单选题 · mid

  • A.向量余弦相似度打分← 正确答案
  • B.页面加载速度对比
  • C.用户手机型号分析
  • D.服务器内存占用率

答案:A。语义改写质量常用查询向量之间的余弦相似度来衡量——夹角越小语义越接近。页面速度、手机型号、内存占用都和语义相似度无关。

Q8. 下面哪些是大模型改写相比传统规则改写的优势?

多选题 · hard

  • A.能理解长句中的隐含意图← 正确答案
  • B.能生成更自然流畅的表达← 正确答案
  • C.完全不需要训练语料
  • D.推理成本一定更低

答案:AB。大模型基于海量预训练语料,能捕捉隐含意图并生成自然表达。但它仍然需要微调和评估数据,且推理成本通常比规则高得多,所以 C 和 D 都不成立。

Q9. 在编辑距离递推公式 d(i,j)=min(d(i-1,j)+1,……) 中,"+1"对应哪种操作?

单选题 · extreme

  • A.删除或插入一个字← 正确答案
  • B.同时替换两个字符
  • C.交换相邻的两个字符
  • D.直接把整个字符串反转

答案:A。$d(i-1,j)+1$ 表示删除 a 的第 i 个字符,$d(i,j-1)+1$ 表示插入 b 的第 j 个字符,两个“加一”分别对应删除和插入。替换操作由第三项 $d(i-1,j-1) + [a_i \neq b_j]$ 负责。

Q10. 查询改写效果上线前,正确评估方式包括?

多选题 · mid

  • A.离线计算精确率和召回率← 正确答案
  • B.小流量 A/B 对比实验← 正确答案
  • C.观察点击率等在线指标← 正确答案
  • D.只靠产品经理拍脑袋

答案:ABC。规范的评估流程是“离线打分 → 上线 A/B 实验 → 观察在线指标”,像老王先试菜再推新品,最后看翻台率。产品经理拍脑袋缺少数据支撑,不能作为评估依据。