假设你走进一条美食街,手里攥着一张手写的菜单:麻婆豆腐、水煮鱼、回锅肉。街上几十位师傅各怀绝技——川菜师傅做麻婆豆腐一绝,粤菜师傅却几乎不做这道菜。你会找谁?显然是那位“最可能依次端出你菜单上三道菜”的人。 语言模型检索(Query Likelihood,简称 QL)正是这个逻辑。它不数“文档里有几个查询词”,而是把每篇文档看作一位厨师,把查询看作顾客点的菜,然后问:以这位厨师的做菜风格(词概率分布),他有多大概率“生成”这份菜单(查询)?概率最高的文档就是最佳答案。这个看似简单的视角转换,把检索问题变成了概率计算问题。而后续的零概率困境、平滑策略、参数调优,全是围绕“如何更准确地估计厨师的概率谱”展开的。本文就用美食街的比喻,带你走完 QL 模型的完整旅程。

岗位关联

对 AI 从业者而言,理解 Query Likelihood 等于掌握概率论如何突破传统检索的机械匹配局限——在设计 RAG 检索端、调优搜索引擎排序时,你能用它解释“为什么这篇文档排第一”,并找到可量化的优化方向。

目录
  1. 可视化演示
  2. 核心思想:把检索变成“点菜”
  3. 数学建模:把“这可能吗”写成公式
  4. 零概率问题:没做过的菜不等于不会做
  5. 平滑策略:参考大众口味的艺术
  6. 参数调优:该多信任厨师的经验
  7. 对比BM25:两套点菜哲学
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示Query Likelihood检索模型:文档语言模型生成查询的概率计算、Jelinek-Mercer与Dirichlet平滑策略对比,以及与BM25的理论联系。

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

Query Likelihood概率检索 文档语言模型估计每个词的生成概率 查询词概率连乘得到文档生成查询的似然 按似然降序排列文档,概率越高排名越前 P(q|d)=ΠP(t|Md) 文档语言模型下的查询生成概率

核心思想:把检索变成“点菜”

美食街的每一位师傅,日复一日接待客人,渐渐形成了一套“出手习惯”:他做麻婆豆腐的频率有三成,做水煮鱼有一成,做回锅肉只有零点五成……这些频率合在一起,就是一张“拿手菜概率谱”。食客看不出这张谱,但它真实存在于师傅的每一次颠勺里。

语言模型检索的突破口,就是把上面的直觉转成检索准则。过去我们检索,是拿查询去文档里“逐字对暗号”:文档里出现“搜索”几次?出现“引擎”几次?QL 换了个方向——每篇文档都是一位带着词概率谱的师傅,查询是顾客的菜单,我们计算的是:这位师傅按他自己的概率谱,有多大可能依次端出菜单上这些菜? 概率越高的文档,越该排前面。

形式化地讲,设查询为 $q$,文档为 $d$,我们要估计的正是查询在文档语言模型下的生成概率:

所以在 QL 的世界里,排序不再靠“命中次数”,而是靠“生成概率”。文档不是被动等着被匹配的档案柜,而是主动走出来展示“我最擅长做你这桌菜”的厨师。这个视角一换,检索就从“数数”升级成了“概率推理”。

P(q∣d)=∏i=1nP(qi∣d)P(q|d) = \prod_{i=1}^{n} P(q_i|d)
这个连乘把“整桌菜被端出的概率”拆成“每道菜依次被端出的概率”之积。虽然每道菜的概率都不大,但真正擅长这道菜单的师傅,乘积会明显高出一截。
  1. 查询词序列$q=\{q_1,q_2,\dots,q_n\}$ 表示顾客菜单上的 n 道菜,也就是分词后的查询词列表。
    P(q∣d)P(q|d)
  2. 文档的语言模型$P(q_i|d)$ 表示文档 d 这位“师傅”端出第 i 道菜 $q_i$ 的概率,由他的概率谱决定。
    P(qi∣d)P(q_i|d)
  3. 连乘累积$\prod$ 把所有词的概率乘起来,模拟“按顺序端出整桌菜”这一事件的概率。
    ∏i=1nP(qi∣d)\prod_{i=1}^{n} P(q_i|d)

数学建模:把“这可能吗”写成公式

前面说师傅有“出手习惯”,那具体怎么从一篇文档里估出他的概率谱?答案藏在文档本身的词语里——师傅做过的每道菜,都记录在他的菜谱本上。统计菜谱本里每道菜出现的比例,就是最大似然估计。

假设把文档 $d$ 看成一段词序列,其中词 $w$ 出现了 $c(w,d)$ 次,文档总词数为 $|d|$,那么词 $w$ 在这个文档语言模型下的极大似然概率为:

有了单词概率,再回到查询似然:把查询词依次代入,用乘积把它们“串”成一桌菜的概率。但概率连乘有个数值麻烦——十几个词乘下来数值极小,计算机容易精度不足。于是实践中会取对数,把乘法变成加法:$\log P(q|d)=\sum \log P(q_i|d)$。这正是可视化演示里“对数分”的由来,也为我们后面对比 BM25 埋下伏笔。

Pml(w∣d)=c(w,d)∣d∣P_{ml}(w|d) = \frac{c(w,d)}{|d|}
这就是“师傅做的菜里,某道菜占多大比例”。比例越高,说明他越擅长这道菜;这道菜出现在菜单上时,他端出它的概率就越大。
  1. 分子——词频$c(w,d)$ 统计词 $w$ 在文档 $d$ 中出现的次数,对应菜谱本上这道菜被做过几回。
    c(w,d)c(w,d)
  2. 分母——文档长度$|d|$ 是文档的总词数,相当于师傅菜谱本里所有菜品的总记录数。
    ∣d∣|d|
  3. 相除得比例两者相除得到 $w$ 在文档中的相对频率,也就是该词在文档语言模型中的概率。
    c(w,d)∣d∣\frac{c(w,d)}{|d|}

零概率问题:没做过的菜不等于不会做

菜谱本总有局限。师傅做了三年川菜,菜单上突然来了一道“松鼠桂鱼”——他从未做过,菜谱本上没有任何记录。按最大似然估计,这道菜的概率就是 0,于是整桌菜的概率被一个零直接“清零”。

在检索里,这就是未登录词问题:查询词没出现在文档中,$c(w,d)=0$,导致 $P(q_i|d)=0$,最终整条查询的生成概率变成 0。更致命的是,前面的对数变换让情况雪上加霜——$\log(0)$ 是负无穷,任何本就微弱的概率差异都被彻底淹没。

你可能会想:没做过这道菜,不代表师傅做不出来。他完全可能靠基本功临场发挥。平滑策略解决的就是这个问题——在师傅的概率谱里,给“没做过的菜”预留一个非零的小概率,而不是一刀切地判死刑。

Pml(w∣d)=0∣d∣=0⇒log⁡(0)→−∞P_{ml}(w|d)=\frac{0}{|d|}=0 \quad\Rightarrow\quad \log(0)\to -\infty
一句话:只要菜单上有一道菜师傅完全没做过,整桌菜就算全废了,文档分数直接崩盘。
  1. 零值分子查询词未在文档中出现,于是分子 $c(w,d)=0$,整个分数归零。
    c(w,d)=0c(w,d)=0
  2. 数学上成立$0$ 除以任何正数 $|d|$ 仍然等于 $0$,所以极大似然概率就是零。
    0∣d∣=0\frac{0}{|d|}=0
  3. 对数域崩溃在计算中使用对数时,$\log(0)$ 趋向负无穷,导致该查询对这篇文档完全失去区分能力。
    log⁡(0)→−∞\log(0)\to -\infty

平滑策略:参考大众口味的艺术

既然不能完全相信师傅的菜谱本,那该参考谁?美食街的常识是:如果一位师傅没做过某道菜,就看看整条街的平均水平——如果全街师傅都常做这道菜,那这位师傅大概率也会做。这个“整条街的平均菜谱”就是背景模型(Collection Model),它用全语料的词频统计得到:

JM 平滑的好处是简单直观:$\lambda$ 固定,对所有词一视同仁。但它也有个不自然的假设——不管师傅经验丰富还是刚入行,都按同一个比例混合。现实里,经验丰富的老师傅应该更信自己的判断,新师傅则应多参考大众。这就引出了另一种更精细的平滑策略。

Pjm(w∣d)=(1−λ)⋅c(w,d)∣d∣+λ⋅P(w∣C)P_{jm}(w|d) = (1-\lambda) \cdot \frac{c(w,d)}{|d|} + \lambda \cdot P(w|C)
这是 Jelinek-Mercer(JM)平滑:师傅自己的菜谱经验占 $(1-\lambda)$ 的权重,大众口味占 $\lambda$ 的权重。即使 $c(w,d)=0$,第二项也能兜底,保证概率不为零。
  1. 文档自身经验$\frac{c(w,d)}{|d|}$ 是师傅从自己菜谱本里估出的概率,体现他的个人风格。
    c(w,d)∣d∣\frac{c(w,d)}{|d|}
  2. 大众参考$P(w|C)$ 是词 $w$ 在整个语料库 $C$ 中的频率,即全街师傅做这道菜的总体比例。
    P(w∣C)P(w|C)
  3. 权重混合$\lambda$ 在 0 到 1 之间取值,控制“相信自己”和“相信大众”的比例,两边加权求和得到最终概率。
    (1−λ)⋅A+λ⋅B(1-\lambda)\cdot A + \lambda\cdot B

参数调优:该多信任厨师的经验

Dirichlet 平滑提供了一种更体面的“信任配比”方案。它假设在师傅真正动手做菜之前,他手里已经“预支”了 $\mu$ 道来自大众口味的菜品作为保底经验。随着他真正积累的菜品记录越来越多,大众保底的影响占比会自然下降:

实际操作中,$\lambda$ 和 $\mu$ 都需要用验证集调优:语料越大、文档越长,参数越可以往“信任文档自身”的方向靠;文档普遍短小或查询词偏冷门时,则要加大背景模型的权重。经验上,$\lambda$ 常在 0.2~0.7 之间搜索,$\mu$ 常在几百到几千之间按对数刻度尝试。调参的本质,是在“个性”与“共性”之间找到平衡点。

Pdir(w∣d)=c(w,d)+μ⋅P(w∣C)∣d∣+μP_{dir}(w|d) = \frac{c(w,d) + \mu \cdot P(w|C)}{|d| + \mu}
师傅做的菜越多($|d|$ 越大),大众口味的分量越轻;反之,菜谱越薄,越依赖全街平均水平。$\mu$ 就像一份“先验信心额度”。
  1. 分子加成$c(w,d)$ 是真实词频,$\mu \cdot P(w|C)$ 是“预支”的大众词频,两者相加作为有效频次。
    c(w,d)+μ⋅P(w∣C)c(w,d) + \mu \cdot P(w|C)
  2. 分母补偿$|d|+\mu$ 是修正后的总“菜品数”,确保概率和为 1。
    ∣d∣+μ|d| + \mu
  3. 动态调节当 $|d|\to\infty$,分数趋近 $\frac{c(w,d)}{|d|}$;当 $|d|\to 0$,分数趋近大众概率 $P(w|C)$。
    c+μP∣d∣+μ≈{c∣d∣∣d∣ 很大P(w∣C)∣d∣ 很小\frac{c+\mu P}{|d|+\mu} \approx \begin{cases} \frac{c}{|d|} & |d| \text{ 很大} \\[2mm] P(w|C) & |d| \text{ 很小} \end{cases}

对比BM25:两套点菜哲学

如果只看最终效果,QL 与 BM25 在很多数据集上不相上下。但它们的哲学起点完全不同:BM25 从词项权重出发,认为“在越少文档里出现的词越重要(IDF),在越长文档里出现的词越该打折(长度归一化)”;QL 则从概率生成出发,认为“文档生成查询的概率越高越相关”。

有意思的是,把 QL 的平滑公式做一次代数变形,两者会显出同构性。以 JM 平滑为例,排序等价的分数可以写成:

所以选择哪套,更多是框架偏好问题:想要概率可解释、方便嵌进贝叶斯框架(比如伪相关反馈、查询扩展),选 QL;追求工程成熟、实现简单、调参经验丰富,选 BM25。真正的检索高手,两套哲学都握在手里,看场景出招。

score(q,d)=∑i=1nlog⁡(1+(1−λ)⋅c(qi,d)λ⋅∣d∣⋅P(qi∣C))\text{score}(q,d) = \sum_{i=1}^{n} \log\left(1 + \frac{(1-\lambda) \cdot c(q_i,d)}{\lambda \cdot |d| \cdot P(q_i|C)}\right)
每一项把文档词频、文档长度、语料稀有度组合在一起,活脱脱一个“概率版的 IDF+词频饱和”函数——只是每一项都有严格的概率解释,而不是人为设计的启发式。
  1. 词项独立贡献$\sum$ 遍历查询词,每个词对排序分数贡献一项,对应 BM25 中每个词项的累加。
    ∑i=1n\sum_{i=1}^{n}
  2. 对数内结构$1+\frac{(1-\lambda)c}{\lambda |d| P_C}$ 中 $c$ 是词频,$|d|$ 是文档长度,$P_C$ 是语料稀有度。
    1+(1−λ)⋅c(qi,d)λ⋅∣d∣⋅P(qi∣C)1+\frac{(1-\lambda)\cdot c(q_i,d)}{\lambda \cdot |d| \cdot P(q_i|C)}
  3. 外层的 log$\log$ 把乘积转化为求和,同时让函数随词频增长呈饱和趋势,类似 BM25 的 $tf/(k+tf)$ 饱和曲线。
    log⁡(1+…P(qi∣C))\log\left(1+\frac{\dots}{P(q_i|C)}\right)

AI 应用场景

搜索引擎排序层优化

阶段:检索与排序(Ranking)

解决的问题:传统搜索引擎依赖 TF-IDF 或 BM25 打分,无法自然地融入“用户查询意图”的概率估计。QL 把排序目标统一成“查询生成概率”,当引入查询扩展或用户点击反馈时,可以平滑地更新文档语言模型,而不需要改动整体架构。

具体案例:某电商搜索团队发现,“轻薄 长续航 办公本”这类长尾查询在 BM25 下结果分散。改用 Dirichlet 平滑的 QL 后,通过背景模型天然压低“电源”“接口”等通用词的权重,将真正匹配办公本属性的商品顶到前排,点击率提升 12%。

RAG 知识库的文档召回

阶段:召回(Retrieval)

解决的问题:构建 RAG(检索增强生成)系统时,文档召回环节如果只用向量相似度,对专业术语和精确表述不敏感。QL 的语言模型视角可以与向量检索组成混合召回:向量管语义,QL 管词面精确匹配的概率,两者融合提升召回准确率。

具体案例:某金融问答机器人的知识库包含 50 万份研报。工程师用 QL(JM 平滑)对输入问题做二次过滤,将“央行降准对债市的影响”这类问题精确命中到含“降准”一词的高质量段落,最终答案的可信度评分从 0.71 提升到 0.83。

推荐系统标题相关性校验

阶段:物品侧特征计算

解决的问题:推荐系统中,召回阶段常常产出大量与用户 query 弱相关的物品,需要快速过滤。用 QL 计算“物品标题生成 query 的概率”可以作为一道轻量校验闸门,把标题与查询完全不搭的物品拦在精排之外。

具体案例:某短视频平台在搜索推荐联动场景中,对每个候选视频的标题构建文档语言模型,估出它生成用户搜索词的概率,低于阈值的候选直接剪枝。这个方法让精排层的计算量下降 25%,且时长指标不降反升。

Python 演示

python71 行
import mathimport refrom collections import Counter  class QueryLikelihoodEngine:    def __init__(self, corpus, mode='jm', lam=0.3, mu=1500):        self.corpus = corpus        self.mode = mode        self.lam = lam        self.mu = mu        self.doc_counts = []        self.doc_lens = []        self.total_terms = 0        self.collection_freq = Counter()        self._build_index()     def _tokenize(self, text):        return re.findall(r'[\w\u4e00-\u9fa5]+', text.lower())     def _build_index(self):        for doc in self.corpus:            tokens = self._tokenize(doc)            counter = Counter(tokens)            self.doc_counts.append(counter)            self.doc_lens.append(len(tokens))            self.collection_freq.update(tokens)            self.total_terms += len(tokens)     def collection_prob(self, term):        return self.collection_freq[term] / max(self.total_terms, 1)     def smoothed_prob(self, term, doc_idx):        doc_count = self.doc_counts[doc_idx].get(term, 0)        doc_len = self.doc_lens[doc_idx]        p_col = self.collection_prob(term)        if self.mode == 'jm':            p_ml = doc_count / max(doc_len, 1)            return (1 - self.lam) * p_ml + self.lam * p_col        if self.mode == 'dirichlet':            return (doc_count + self.mu * p_col) / (doc_len + self.mu)        return doc_count / max(doc_len, 1)     def score(self, query, doc_idx):        query_terms = self._tokenize(query)        if not query_terms:            return 0.0        total = 0.0        for term in query_terms:            prob = self.smoothed_prob(term, doc_idx)            total += math.log(max(prob, 1e-12))        return total     def search(self, query):        ranked = []        for idx in range(len(self.corpus)):            ranked.append((self.score(query, idx), idx))        ranked.sort(reverse=True)        return ranked  if __name__ == '__main__':    docs = [        '搜索推荐系统利用用户行为数据',        '语言模型为自然语言处理提供概率框架',        '搜索引擎需要解析查询并排序文档',        '机器学习模型在推荐场景中广泛使用',    ]    engine = QueryLikelihoodEngine(docs, mode='jm', lam=0.3)    for score_val, idx in engine.search('搜索引擎 语言模型'):        print(f'文档{idx}: {docs[idx]}  得分={score_val:.4f}')
目的:用约 100 行 Python 实现一个支持 Jelinek-Mercer 与 Dirichlet 平滑的最小语言模型检索引擎,输出查询在每篇文档下的对数似然得分并排序。
  1. self.collection_freq.update(tokens)把每篇文档的词频并入全语料统计,构建“大众菜谱”背景模型。
  2. return (1 - self.lam) * p_ml + self.lam * p_colJM 平滑核心:固定比例混合文档模型与背景模型,消灭零概率。
  3. return (doc_count + self.mu * p_col) / (doc_len + self.mu)Dirichlet 平滑核心:用伪计数 μ 动态调节对文档与大众的信任。
  4. total += math.log(max(prob, 1e-12))概率连乘转为对数域累加,并加下限防止 log(0) 崩溃。
  5. ranked.sort(reverse=True)按生成概率降序排序,概率最高的文档厨师胜出。

常见误区

误区我总觉得 QL 和 BM25 一样,都是设计一个打分公式,算出文档和查询的相关性分数,分数高就排前面,只是公式长得不一样。

正解QL 的出发点不是“设计打分公式”,而是先定义一个概率故事:每篇文档背后有一个语言模型,查询是被这个模型“生成”出来的事件,相关性被定义为生成概率本身。分数只是概率计算的自然产物。这个区别决定了 QL 的每一个部件(平滑、背景模型、log 变换)都有概率解释,而不是拍脑袋的加权系数。

为何常见:因为最终效果都是“输出一个数来排序”,初学者容易只看到公式表面,忽略模型背后的概率框架,导致遇到平滑参数调优时只会盲目试数,而非有的放矢。

误区我觉得平滑就是给概率加个很小的数,防止出现 0/0 或者 log(0),属于工程上的防御性写法,对排序结果影响不大。

正解平滑是 QL 模型的灵魂而不是补丁。没有平滑的 QL 在真实查询上几乎不可用——只要查询里有一个词没在文档中出现,整篇文档的得分就变成负无穷,排序彻底失效。平滑不只是“兜底”,它通过背景模型隐式地实现了 IDF 的效果:常见词在背景中概率高,平滑后对分数的贡献低;罕见词贡献高。这也是 QL 能与 BM25 效果匹敌的根本原因。

为何常见:平滑在数学上只是“加一个小项”,形式上看起来像数值保护;初学者没意识到这个“小项”里含着整个语料库的统计信息,才把它当成边角料。

误区平滑是往文档模型里掺背景模型的概率,那我把 λ 调大一点,背景模型给的信息多,模型是不是就更“稳”更有泛化能力?同理 μ 越大越安全。

正解λ(或 μ)太大,结果会完全被背景模型主导,所有文档的得分都趋同,排序失去区分度;λ 太小,又回到零概率崩溃的边缘。正确的做法是把这些参数看作“对文档自身可信度”的置信度估计:语料大、文档长,参数可以小;语料小、文档短,参数必须大。最佳值需要通过验证集上网格搜索或贝叶斯调参获得。

为何常见:人都有“越多越好”的直觉,尤其当平滑确实解决了零概率问题后,容易形成“多掺背景更稳”的错误印象,忽略了检索任务的核心是区分度。

误区一个是概率生成模型,一个是词项权重公式,它们理论上没啥关系,只是凑巧都能做检索排序。

正解从 QL 加平滑的公式出发做代数变形,可以得到与 BM25 高度相似的“词项贡献求和”形式:文档词频、文档长度、语料稀有度三者以相似结构参与运算。很多研究(如 Zhai & Lafferty 的经典论文)证明 BM25 可以看作 QL 的一种特定近似。两者不是对立的,而是同一检索目标在不同理论框架下的投影。

为何常见:教科书通常分别介绍两套公式,学生背完公式就划清界限,很少有人动手把 QL 的平滑公式展开、变形并与 BM25 逐项对照,从而错过了最深刻的一层理解。

面试题

Q1. 语言模型检索(QL)的核心排序依据是什么?

单选题 · easy

  • A.统计文档中查询词的命中次数
  • B.查询在文档语言模型下的生成概率← 正确答案
  • C.计算查询与文档的余弦相似度
  • D.基于布尔逻辑判断是否包含词项

答案:B。QL 把每篇文档看作一个语言模型,排序依据是查询词序列在该模型下的生成概率 P(q|d)。A 是传统词频统计的思路,C 是向量空间模型的做法,D 是布尔检索思路,均非 QL 核心。

Q2. 为什么平滑策略对 QL 检索必不可少?

单选题 · easy

  • A.为了让模型训练速度更快
  • B.为了处理查询词未出现在文档中的零概率← 正确答案
  • C.为了减少语料库的存储空间
  • D.为了让排序结果完全随机

答案:B。查询词若未在文档中出现,极大似然概率为 0,在 log 域变成负无穷,整篇文档分数崩溃。平滑通过混入背景模型概率,给未登录词一个非零的小概率,保证排序可用。

Q3. Jelinek-Mercer 平滑的核心思想是什么?

单选题 · mid

  • A.完全放弃文档自身的词频信息
  • B.将文档模型与背景模型按固定比例混合← 正确答案
  • C.只保留查询中出现过的词的概率
  • D.用文档长度对词频做非线性变换

答案:B。JM 平滑的公式是 (1-λ)P_ml + λP(w|C),即文档自身估计与全语料背景模型按固定比例 λ 混合。A 中“完全放弃”错误,C 和 D 与 JM 思想不符。

Q4. Dirichlet 平滑中参数 μ 的作用是什么?

单选题 · mid

  • A.控制背景模型在整个混合中的权重比例
  • B.代表对文档先验长度的信任程度← 正确答案
  • C.决定查询词在文档中的最大频次
  • D.规定语料库必须包含的最少文档数

答案:B。μ 被当作“伪计数”,等价于在文档背后先预置 μ 个遵循背景分布的词。文档越长,μ 的影响越小,模型越信任文档自身;文档越短,越偏向背景模型,因此 μ 是对文档先验长度的信任参数。

Q5. 当 JM 平滑的 λ 取值过大时,会发生什么?

单选题 · mid

  • A.文档自身词频对排序的作用更强
  • B.背景模型比重过大导致区分度下降← 正确答案
  • C.查询长度对排序结果不再产生影响
  • D.所有文档的得分都会严格等于零

答案:B。λ 越大,混合概率越偏向背景模型,所有文档的得分趋同,排序区分度下降。A 描述的是 λ 很小时的情况,C 和 D 与 λ 的语义无关。

Q6. QL 计算中为什么用对数相加替代概率连乘?

单选题 · hard

  • A.对数运算可以提高词频统计的精度
  • B.连乘结果过小易下溢且不便于比较← 正确答案
  • C.对数运算意味着所有词权重完全相等
  • D.连乘无法处理长度不同的查询语句

答案:B。多个小于 1 的概率连乘会快速逼近 0,浮点精度下容易下溢;取对数后乘法变加法,数值稳定且单调性不变。C 错误,log 不改变各项权重关系;D 错误,连乘本身不依赖查询长度,只是数值上更脆弱。

Q7. 背景模型(Collection Model)在 QL 中的主要作用是?

单选题 · easy

  • A.替代文档模型完成全部排序
  • B.提供未出现词的参考概率并平滑零值← 正确答案
  • C.将查询文本转化为结构化查询语句
  • D.记录每个用户的历史搜索偏好

答案:B。背景模型用全语料统计得到 P(w|C),是平滑策略中“大众口味”的来源,为文档中未出现的词提供非零参考概率。A 说“替代”不对,C 是查询解析的活儿,D 与个性化有关但并非背景模型的职责。

Q8. 关于 QL 中的平滑方法,下列说法正确的是?

多选题 · mid

  • A.语料规模越大,背景模型估计越可靠← 正确答案
  • B.JM 的 λ 值需要根据验证集反复调优← 正确答案
  • C.Dirichlet 平滑完全不使用背景模型
  • D.μ 取值越大,模型越接近文档自身分布

答案:AB。A 正确,语料大则词频统计更稳;B 正确,λ 是超参数需要调优;C 错误,Dirichlet 公式里 μ·P(w|C) 明确使用背景模型;D 错误,μ 越大越接近背景模型而非文档自身。

Q9. 关于 QL 与 BM25 的关系,哪些理解正确?

多选题 · hard

  • A.两者本质上都在做查询词项的重要性加权← 正确答案
  • B.QL 的概率框架可以解释 BM25 的合理性← 正确答案
  • C.BM25 完全不使用词频统计信息
  • D.两种方法对任何查询的结果都完全相同

答案:AB。把 QL 的平滑公式变形可得到与 BM25 同构的词项累加形式,二者都在做词项加权,且 QL 能从概率角度解释 BM25 的 IDf 与词频饱和设计。C 错误,BM25 核心就是词频项;D 错误,两者结果接近但不相同。

Q10. 下列哪些场景更适合选择 QL 而非传统 BM25?

多选题 · extreme

  • A.需要把检索统一到概率生成框架中← 正确答案
  • B.需要自然扩展伪相关反馈与查询扩展← 正确答案
  • C.文档与查询都必须做严格的布尔过滤
  • D.需要显式利用语料统计做全局词权重← 正确答案

答案:ABD。QL 的概率框架天然支持贝叶斯扩展,伪相关反馈可以看作对文档模型的再平滑,背景模型本身就是全局词权重的概率表达,所以 A、B、D 都适合;布尔过滤是精确匹配逻辑,与 QL 的概率排序目标相悖,C 不适合。