想象你是一家出版社的新任主编,桌上堆着数千位签约作家的作品集。某天你收到一句匿名摘抄:“蔚蓝的天空下,海水轻轻拍岸。”你要判断这句话最可能出自哪位作家之手。每位作家的用词习惯都不同:写景作家偏爱“蔚蓝”“拍岸”,海洋作家常用“浪花”“潮汐”,都市小说家则可能写“落地窗”“霓虹灯”。你会翻他们的旧作,数他们用词的频率——谁最可能写出你这句摘抄,谁就是最相关的作者。这就是语言模型检索的朴素原型:给每篇文档(每位作家)建立一套“语言使用档案”,然后用这套档案生成查询(匿名摘抄)的概率来排序。概率越高,文档越相关。围绕这个思路,本文会带你认识查询似然模型、最大似然估计、平滑策略、KL散度框架,并与经典BM25做对比,最后讲如何在真实系统中落地。

岗位关联

学好语言模型检索,你就能理解现代搜索引擎“召回—排序”管线的底层逻辑。它是搜索排序、文档检索、IR 系统工程师的必备基本功,也为学习神经网络检索模型(如Dense Retrieval)提供了概率论基石。

目录
  1. 可视化演示
  2. 检索背景与动机
  3. 查询似然模型
  4. 语言模型估计
  5. 平滑策略
  6. KL散度框架
  7. BM25对比分析
  8. 系统实现与调优
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

查询似然模型 为每篇文档构建语言模型θD 计算查询由文档生成的概率 P(Q|D) = ∏ P(qi|θD) 概率越高相关性越强

检索背景与动机

你回到编辑部那个场景:桌子上堆着几千本作品集,读者递来一张小纸条,上面写着一个模糊的主题。你要把这堆稿件从“可能相关”到“最相关”排好。检索系统的任务本质上就是打分排序——为每篇文档算一个“与查询相关”的分数,然后按分数降序呈现。传统做法各有局限:布尔模型像按目录找书,关键词语义稍有不同就找不到;向量空间模型把文本变成词袋向量,算余弦相似度,已经有了概率的影子;而语言模型检索想得更进一步——不再问“像不像”,而是问“这篇文档能不能生成出这句查询”。

在检索模型演进的谱系里,语言模型检索(Language Model for IR)由Ponte与Croft在1998年提出。它的核心思想非常优雅:为每篇文档建立一个统计语言模型,一个词的概率分布;查询 q 是这份分布上的一次采样;相关性评分就是文档模型生成查询 q 的概率。把问题放进贝叶斯框架,设文档 d 生成查询 q 这件事为 \( P(q \mid d) \),排序时我们关心:

这段推理像给每位作家建一份“用词特征表”,然后转身问读者:“你手里的这句话,最像哪位作家手笔?”后面的所有模型,都是对 \( P(q \mid d) \) 的不同估计方式。

R(q,d)∝P(d∣q)=P(q∣d)⋅P(d)P(q)\displaystyle R(q,d) \propto P(d \mid q) = \frac{P(q \mid d) \cdot P(d)}{P(q)}
这个公式把“相关”转化成一个条件概率:查询和文档关系的分数,等于在给定文档模型后生成查询的概率,再乘上文档本身的先验。
  1. 后验概率登场\( P(d \mid q) \) 表示“看到查询 \( q \) 之后,文档 \( d \) 相关的概率”,这是排序最理想的目标值。
    P(d∣q)\displaystyle P(d \mid q)
  2. 贝叶斯展开后验难以直接估计,借助贝叶斯定理转成可计算的量。
    P(q∣d)⋅P(d)P(q)\displaystyle \frac{P(q \mid d) \cdot P(d)}{P(q)}
  3. 分母常数化同一个查询下 \( P(q) \) 对所有文档相同,排序时可忽略;若事先没有其他偏好,\( P(d) \) 也近似当均匀分布。
    R(q,d)∝P(q∣d)\displaystyle R(q,d) \propto P(q \mid d)

查询似然模型

现在编辑部来了一位老练的审稿人,他提出一个直觉方法:把匿名句子拆分,逐个词问每位作家——“你是不是会这样说这个词?”如果一位作家经常用“蔚蓝”,那“蔚蓝”在他嘴里出现的概率就高。所有词的概率连起来,就是这位作家“说出整句话”的倾向。这就是查询似然模型(Query Likelihood Model):它不为文档单独排序,而是以文档语言模型为生成器,计算整个查询序列的出现概率。

把查询分词为 \( q = w_1 w_2 \dots w_n \),在词项独立性假设下,文档 \( d \) 的相关性打分定义为查询似然:

回到比喻:审稿人把匿名句子拆成一个个词,每位作家的档案本上都有每个词的使用概率,把所有概率相乘便是这位作家的“嫌疑分”。嫌疑分最高的作家,就是最可能的作者。接下来唯一的问题变成:作家档案本上的概率,到底怎么统计出来?

P(q∣d)=∏i=1nP(wi∣d)\displaystyle P(q \mid d) = \prod_{i=1}^{n} P(w_i \mid d)
查询似然模型把“相关”简单定义为:文档的词汇习惯生成查询文本的概率。概率越大,文档越相关。
  1. 查询词序列查询 \( q \) 被切分成 \( n \) 个词项,例如“蓝色 大海”切为“蓝色”和“大海”。
    q=w1,w2,…,wn\displaystyle q = w_1, w_2, \dots, w_n
  2. 词独立性假设假设每个词的出现互不影响,于是联合概率可以用连乘分解。
    ∏i=1nP(wi∣d)\displaystyle \prod_{i=1}^{n} P(w_i \mid d)
  3. 文档模型项\( P(w_i \mid d) \) 是文档 \( d \) 的语言模型对词 \( w_i \) 给出的生成概率,它是整个打分系统的核心输入。
    P(wi∣d)\displaystyle P(w_i \mid d)
  4. 对数等价连乘容易下溢,实际系统取对数,把乘法变加法,排序结果不变。
    ∑i=1nlog⁡P(wi∣d)\displaystyle \sum_{i=1}^{n} \log P(w_i \mid d)

语言模型估计

作家档案本不可能凭空产生,编辑的办法是翻开作家所有旧作,数一数每个词出现了多少次。“蔚蓝”出现了15次,“落地窗”出现3次,“宇宙”从未出现——这就是最大似然估计(MLE)的自然语言版本:用已观察到的词频来估计这位作家的语言模型。把文档 \( d \) 中词 \( w \) 的出现次数记为 \( c(w, d) \),文档总词数为 \( |d| \),则最大似然估计为:

最大似然估计有个致命弱点:假如这位作家从没写过“宇宙”,那么 \( c(\text{宇宙}, d) = 0 \),整篇文档对包含“宇宙”的查询会给出零概率。可现实中作家完全可能在某次聊天里随口说起“宇宙”。这个“零概率问题”正是下一节平滑策略要解决的燃眉之急。

PML(w∣d)=c(w,d)∣d∣\displaystyle P_{\text{ML}}(w \mid d) = \frac{c(w, d)}{|d|}
最大似然估计就是“用频率近似概率”:一个词在文档中出现得越频繁,文档模型给它的概率越大。
  1. 词频分子\( c(w, d) \) 统计词 \( w \) 在文档 \( d \) 中出现的次数,对应作家档案里的“词汇计数”。
    c(w,d)\displaystyle c(w, d)
  2. 长度分母\( |d| \) 是文档的总词数,相当于这位作家总共写过的字数。
    ∣d∣\displaystyle |d|
  3. 频率即概率两者相除得到词 \( w \) 在文档中的相对频率,这就是最大似然估计的表达式。
    c(w,d)∣d∣\displaystyle \frac{c(w, d)}{|d|}

平滑策略

一位海洋题材作家没写过“量子”,不代表他对“量子”一无所知。零概率会一票否决整篇文档,这显然不合理。平滑策略的思路是:当文档内部证据不足时,向整个出版社的“通用词库”借力——这个通用词库就是集合模型 \( P(w \mid C) \),即词 \( w \) 在整个语料库中出现的概率。这样既保留了文档自身特色,又给没见过的词留了余地。

最常见的平滑之一是 Dirichlet 平滑,它像一个随文档长度智能调节的“借力系数”:

另一种常用平滑是 Jelinek-Mercer 平滑,它用固定插值权重直接混合文档频率和集合模型:

用编辑的话说:短稿件词汇少,容易“一叶障目”,要多参考全社通用用语;长篇作品统计充分,就多信它自己的用词风格。两种平滑都是给未知词补一个温柔的底线,让作者不必因为一个生僻词就错失推荐位。

P(w∣d)=c(w,d)+μ⋅P(w∣C)∣d∣+μ\displaystyle P(w \mid d) = \frac{c(w, d) + \mu \cdot P(w \mid C)}{|d| + \mu}
JM平滑用常数 \( \lambda \) 控制“文档自身统计”和“集合通用背景”的权重,实现比Dirichlet更简单。
  1. 线性组合文档频率与集合先验按 \( (1-\lambda) : \lambda \) 加权相加,两部分权重和为 1。
    (1−λ)⋅c(w,d)∣d∣+λ⋅P(w∣C)\displaystyle (1 - \lambda) \cdot \frac{c(w, d)}{|d|} + \lambda \cdot P(w \mid C)
  2. λ的语义\( \lambda \) 大则表示更信任全语料统计;\( \lambda = 0 \) 时退化为纯 MLE;\( \lambda = 1 \) 时所有文档都使用集合模型,失去区分度。
    λ∈[0,1]\displaystyle \lambda \in [0, 1]
  3. 与Dirichlet的差异Dirichlet 的分母含有 \( |d| + \mu \),文档越长越不容易偏离自身统计;JM平滑的 \( \lambda \) 与文档长度无关。
    μ vs λ\displaystyle \mu \text{ vs } \lambda

KL散度框架

前面我们一直在问“文档生成查询的概率有多大”。换个角度看,也可以把查询本身当作文本,也给它建一个语言模型 \( P(\cdot \mid Q) \),然后衡量“查询的口头禅”和“文档的口头禅”是否接近。这就像从读者的便条里提炼出读者的措辞风格,再去编辑部档案库逐个比对作家的文风——如果两位说话风格几乎一致,那便条很可能就是这位作家写的。

衡量两个概率分布差异的数学工具是 KL 散度(Kullback-Leibler Divergence),它对查询模型和文档模型逐词计算对数比值并加权求和:

所以 KL 散度不是另起炉灶,而是给查询似然穿了一件更统一的“外衣”:它把文档建模、查询建模、平滑策略都装进同一个概率框架里。在实际研究中,许多团队喜欢用 KL 框架做扩展,例如对查询也做平滑、加入同义词扩展,这个框架都更容易扩展。

KL(PQ∥PD)=∑w∈VP(w∣Q)⋅log⁡P(w∣Q)P(w∣D)\displaystyle KL(P_Q \| P_D) = \sum_{w \in V} P(w \mid Q) \cdot \log \frac{P(w \mid Q)}{P(w \mid D)}
KL散度衡量“如果用文档模型去近似查询模型,信息损失有多大”。KL值越小,文档模型越贴近查询模型,文档越相关。
  1. 查询语言模型\( P(w \mid Q) \) 是从查询中估计出的词分布,查询只有寥寥几词,通常把每个查询词平均分一份概率,其他词为 0。
    P(w∣Q)=1n,w∈q\displaystyle P(w \mid Q) = \frac{1}{n}, \quad w \in q
  2. 对数比值\( \log \frac{P(w \mid Q)}{P(w \mid D)} \) 表示对同一个词,查询模型与文档模型给出的概率倍率。
    log⁡P(w∣Q)P(w∣D)\displaystyle \log \frac{P(w \mid Q)}{P(w \mid D)}
  3. 加权求和按查询词的权重累加所有词项,就得到两个模型间的“风格距离”。
    ∑w∈VP(w∣Q)log⁡P(w∣Q)P(w∣D)\displaystyle \sum_{w \in V} P(w \mid Q) \log \frac{P(w \mid Q)}{P(w \mid D)}
  4. 排序等价性当查询模型在查询词上均匀分布时,KL中与文档相关的部分恰好是 \( -\frac{1}{n} \sum_{w \in q} \log P(w \mid D) \),最小化KL等价于最大化查询似然。
    arg⁡min⁡DKL(Q∥D)≡arg⁡max⁡D∑w∈qlog⁡P(w∣D)\displaystyle \arg \min_{D} KL(Q \| D) \equiv \arg \max_{D} \sum_{w \in q} \log P(w \mid D)

BM25对比分析

编辑部里还有一位老资格的审稿人,他不用什么概率模型,靠一套经验公式干了二十年,这就是 BM25。它的打分逻辑很直接:词在文档中出现次数越多越重要,但在全语料越常见的词越不重要;文档越长,还要对词频做长度惩罚。把这三件事揉在一起,得到 BM25 的经典公式:

对比两者可以发现微妙的“殊途同归”:BM25 的 IDF 在扮演“集合先验”的角色——罕见词的 IDF 高,对应集合模型里概率低、平滑后文档对它的加分更多;BM25 的词频饱和,则与 Dirichlet 平滑里长文档信任自身统计的机制异曲同工。差异在于:LM 检索从概率第一性原理出发,可以被优雅地扩展;BM25 是工程经验的集大成者,参数少、鲁棒、开箱即用。现实中很多搜索引擎依然默认用 BM25,而许多学术系统和新一代排序模型把 LM 概率作为高质量特征。老将和新秀,共享同一个“相关性直觉”。

RSV(q,d)=∑i=1nIDF(wi)⋅fi,d⋅(k1+1)fi,d+k1⋅(1−b+b⋅∣d∣avgdl)\displaystyle RSV(q,d) = \sum_{i=1}^{n} IDF(w_i) \cdot \frac{f_{i,d} \cdot (k_1 + 1)}{f_{i,d} + k_1 \cdot \left(1 - b + b \cdot \frac{|d|}{\mathrm{avgdl}}\right)}
BM25以IDF衡量词项全局重要性,以饱和函数控制词频收益递减,再按文档长度做归一化。和LM平滑看似不同,实则解决相似问题。
  1. IDF项\( IDF(w_i) \) 用“包含该词的文档数”反映词的稀缺性——越少文档包含的词,区分度越高。
    IDF(wi)=log⁡N−n(wi)+0.5n(wi)+0.5\displaystyle IDF(w_i) = \log \frac{N - n(w_i) + 0.5}{n(w_i) + 0.5}
  2. 词频饱和\( \frac{f_{i,d}(k_1+1)}{f_{i,d}+k_1} \) 让词频带来的收益递减——出现10次并不比出现5次相关一倍。
    fi,d⋅(k1+1)fi,d+k1\displaystyle \frac{f_{i,d} \cdot (k_1+1)}{f_{i,d}+k_1}
  3. 长度归一分母中 \( b \cdot \frac{|d|}{\mathrm{avgdl}} \) 惩罚过长文档,因为长文档更容易凑出词频,对并不相关。
    1−b+b⋅∣d∣avgdl\displaystyle 1 - b + b \cdot \frac{|d|}{\mathrm{avgdl}}
  4. 超参 \( k_1, b \)\( k_1 \) 控制词频饱和速度,\( b \) 控制长度惩罚强度,通常取 \( k_1 \approx 1.2, b \approx 0.75 \)。
    k1=1.2,b=0.75\displaystyle k_1 = 1.2, \quad b = 0.75

系统实现与调优

有了理论模型,编辑部要把这套人工识别流程变成一条自动流水线。第一件事是给上万篇文档建“倒排索引”:像书的末尾索引一样,记录每个词出现在哪些文档、每个文档里出现多少次。这样查询词来了,只需沿着索引找到候选文档,不必扫描全库。第二步是在候选集合上,用语言模型快速打分排序。

实际部署时,有几个工程师必须盯紧的细节。第一是平滑参数调优:Dirichlet 的 \( \mu \) 通常在 \( 1000 \sim 2000 \) 之间,JM 的 \( \lambda \) 常在 \( 0.1 \sim 0.3 \) 之间,具体值需要用验证集上的排序指标(如 NDCG、MAP)来寻找。第二是模型估计缓存:集合概率 \( P(w \mid C) \) 和文档长度是静态数据,可以离线算好;在线打分只需要查倒排表、读参数、做几十次浮点乘加。第三是长度预归一化:把文档长度、平均长度提前算好,避免实时扫描大文本。对超大规模场景,还可把打分任务切片到多台机器并行,用类似 Map-Reduce 的方式合并排序。

从比喻上说,这就是把每位作家的“用词档案”做成可检索的数据库,读者随时递来一句话,系统在毫秒级别告诉你“最可能出自谁手”。整套系统的核心,并不是某个高深的公式,而是“概率建模 + 索引工程 + 参数微调”这三者的配合。

AI 应用场景

搜索引擎的粗排打分

阶段:召回之后、精排之前的粗排序阶段

解决的问题:搜索引擎召回阶段会从亿级文档中取回几千篇候选,如果直接用深度学习精排,成本太高。传统方式是仅按关键词频次粗排,噪声大。用LM检索打分,可以在不依赖标注数据的情况下,用概率框架快速把最相关的几百篇文档排到前面,为后续精排节省计算资源。

具体案例:一个电商搜索系统召回“无线蓝牙耳机”相关商品5000件,先用Dirichlet平滑的查询似然模型按商品描述打分,取Top200进入精排模型,整体响应时间从80ms降到15ms,而排序效果与纯精排方案几乎持平。

企业知识库的冷启动检索

阶段:无监督检索与基线排序

解决的问题:企业内部知识库、法律文书库往往没有现成的标注数据,无法训练神经网络排序模型。LM检索完全无监督,只需要统计词频即可工作,尤其适合冷启动阶段搭建基线系统。

具体案例:某制造企业上线售后知识库,语料来自维修手册与工单记录。工程师先用语言模型检索搭建基线,对查询“电机过热噪声”返回相关维修手册页,并用KL散度框架扩展同义词,上线第一天就把问题解决率从40%提升到了62%。

问答系统候选文档生成

阶段:检索增强生成(RAG)前的检索模块

解决的问题:大模型问答需要从海量知识中检索情景证据,LM检索比BM25在短文本和长尾词汇场景下更平滑,能有效处理查询与文档词汇不重叠的问题。平滑策略相当于给检索器配了一个“词汇兜底网络”,提升召回质量。

具体案例:一个医疗问答机器人在接诊记录中检索“低烧咳嗽数日”相关病历,使用Dirichlet平滑的LM检索从10万份病历中选出Top20作为大模型的参考上下文,答对率比用BM25高出9个百分点。

Python 演示

python57 行
import mathfrom collections import Counter class DirichletLMRetriever:    def __init__(self, documents, mu=1500.0):        self.mu = mu        self.doc_count = len(documents)        self.collection = Counter()        self.doc_freqs = []        self.doc_lens = []         for text in documents:            tokens = [ch for ch in text if ch.strip()]            freq = Counter(tokens)            self.doc_freqs.append(freq)            self.doc_lens.append(len(tokens))            self.collection.update(freq)         self.total_tokens = sum(self.collection.values())     def p_collection(self, word):        return self.collection.get(word, 0.0) / self.total_tokens     def p_doc_smoothed(self, doc_id, word):        freq = self.doc_freqs[doc_id]        c = freq.get(word, 0.0)        return (c + self.mu * self.p_collection(word)) / (self.doc_lens[doc_id] + self.mu)     def score(self, query, doc_id):        words = [ch for ch in query if ch.strip()]        log_sum = 0.0        for w in words:            log_sum += math.log(self.p_doc_smoothed(doc_id, w))        return log_sum     def rank(self, query, top_k=None):        scores = [(self.score(query, i), i) for i in range(self.doc_count)]        scores.sort(reverse=True)        if top_k:            scores = scores[:top_k]        return [(i, s) for s, i in scores] def main():    corpus = [        "蔚蓝天空白云朵朵",        "深蓝大海蓝色海水",        "今日天气晴朗温度高",        "蓝天碧海阳光沙滩",    ]    retriever = DirichletLMRetriever(corpus, mu=1500.0)    query = "蓝色大海"    print("查询词:", query)    for doc_id, score in retriever.rank(query, top_k=2):        print("doc%d score=%.4f %s" % (doc_id, score, corpus[doc_id])) if __name__ == "__main__":    main()
目的:用Dirichlet平滑实现一个最小可运行的语言模型检索器,对四句中文语料按查询“蓝色大海”打分排序。
  1. tokens = [ch for ch in text if ch.strip()]以单个汉字作为“词”做字符级切分,免去中文分词依赖。
  2. self.collection.update(freq)累加所有文档的词频,得到集合模型的总词频表。
  3. self.p_collection(word)计算集合模型中词的出现概率 \( P(w \mid C) \),作为平滑先验。
  4. p_doc_smoothed实现 Dirichlet 平滑公式,分母用 doc_len + mu 做归一化。
  5. scores.sort(reverse=True)按查询似然分数降序排序,得到最终相关性排名。

常见误区

误区一篇文档如果没出现查询中的某个词,那它肯定不相关,打分直接是零,可以直接放弃。

正解零概率是“没见过”的表现,不是“不可能”的证据。平滑策略正是解决这个问题的:用集合模型给未见词一个非零概率。工程师在实现时,永远不要让裸 MLE 直接参与打分,而是要叠加平滑后再计算。

为何常见:初学时先学了频率统计,容易把频率和概率划等号;实际检索场景中词项稀疏是常态,零概率出现得极其频繁。

误区平滑能让零概率消失,那 \( \mu \) 或 \( \lambda \) 调得越大,模型就越稳健,效果应该更好。

正解平滑参数过大,文档模型会完全被集合模型“吞掉”,所有文档的概率分布趋同,查询似然分数失去区分度,排序退化成随机。正确做法是拿验证集做网格搜索,观察 NDCG 等指标的变化。

为何常见:新手只看到平滑解决了零概率问题,忽略了平滑的本质是一种“信息折中”:既要兜底,也要保留每篇文档的个性。

误区看到公式里有个散度,觉得散度越大说明文档和查询“关系越大”,于是按 KL 降序排列。

正解KL 散度度量的是“用文档模型描述查询模型的额外代价”,代价越大说明两者越不像,所以 KL 越小才越相关。排序时应该按 KL 升序排列。

为何常见:KL 全称是“散度”,日常语言里“发散”容易联想到扩散和距离大,被直觉误判方向。

误区BM25靠词频和IDF,LM靠概率和平滑,两个方法各自独立,完全不搭边。

正解两者在数学上有深刻的对应关系:BM25的IDF对应集合模型中罕见词的高权重,词频饱和对应平滑对长文档的信任调节。理解这种对应,能帮助你在实际项目中判断何时用谁、怎样把两者组合成特征。

为何常见:教材通常分开讲两种模型,公式形式差异大,初学者不易看到背后的概率直觉。

误区有了LM打分,就可以直接替代精排模型,端到端解决搜索排序问题。

正解LM检索是无监督统计模型,主要适合召回的粗排阶段或冷启动基线。真实系统通常用它产出TopN候选,再用GBDT、深度模型等精排器做CTR/相关性拟合。

为何常见:LM检索在学术数据集上表现惊艳,容易让人忽略工业级搜索系统对个性化、时效性、多路融合的复杂需求。

面试题

Q1. 语言模型检索的核心思想是什么?

单选题 · easy

  • A.用文档模型生成查询的概率来排序← 正确答案
  • B.计算文档与查询的向量夹角
  • C.统计全语料逆文档频率
  • D.按布尔表达式精确匹配关键词

答案:A。LM检索为每篇文档建语言模型,用该模型生成查询文本的概率衡量相关性,概率越大文档越相关。向量夹角是向量空间模型,IDF是BM25的核心,布尔匹配是传统检索模型的做法。

Q2. 查询似然公式 \( P(q \mid d)=\prod P(w_i \mid d) \) 依赖哪种假设?

单选题 · easy

  • A.词项之间相互独立← 正确答案
  • B.文档之间相互独立
  • C.查询之间相互独立
  • D.词项与文档长度无关

答案:A。连乘形式只有在词项相互独立的假设下才能成立,这是朴素贝叶斯式假设,简化了联合概率计算。

Q3. 最大似然估计中,\( P(w \mid d) \) 等于什么?

单选题 · easy

  • A.词w在集合语料中出现的总次数除以词典大小
  • B.词w在文档中出现的次数除以文档总词数← 正确答案
  • C.词w在文档中出现的次数除以文档集合平均长度
  • D.包含词w的文档数除以文档总数

答案:B。MLE用频率估计概率,分子是词w在文档中的词频,分母是文档总词数,两者相除就是该词的出现频率。IDF才是包含词w的文档占比的变形。

Q4. 平滑策略主要解决什么问题?

单选题 · mid

  • A.查询词分词歧义
  • B.未见词导致的零概率问题← 正确答案
  • C.文档长度差异过大
  • D.排序结果不够稳定

答案:B。MLE对未在文档中出现的词给出零概率,导致含新词的查询被一票否决。平滑用集合模型给未见词补概率,让打分更稳健,同时保留文档个性化信息。

Q5. Dirichlet平滑的分母为什么要写成 \( |d| + \mu \)?

单选题 · mid

  • A.保证所有词的概率之和为1← 正确答案
  • B.让期望词频等于集合概率
  • C.降低长文档的计算复杂度
  • D.使模型退化为最大似然估计

答案:A。分母采用 \( |d| + \mu \) 后,对所有词求和时分子中的词频总和为 \( |d| \),先验总和为 \( \mu \),恰好等于分母,满足概率分布的归一化条件。

Q6. 关于KL散度排序方向,下列说法正确的是?

单选题 · mid

  • A.KL值越大文档越相关
  • B.KL值越小文档越相关← 正确答案
  • C.KL值与相关性无关
  • D.KL值先增后减时最相关

答案:B。KL散度度量两个概率分布的差异,差异越小说明文档模型越接近查询模型,相关性越高。排序时应按KL值从小到大排序。

Q7. 关于LM检索与BM25,下列哪些说法正确?

多选题 · mid

  • A.BM25使用IDF衡量词项重要性← 正确答案
  • B.LM检索完全不利用词频信息
  • C.LM平滑与BM25词频饱和有相似效果← 正确答案
  • D.LM检索只适合长文档检索

答案:AC。IDF是BM25的核心组件,LM检索大量使用词频估计概率,平滑机制与词频饱和都限制了高频词的收益递减,因此A、C正确。

Q8. JM平滑中 \(\lambda\) 越大,说明系统越信任哪种统计量?

单选题 · hard

  • A.文档自身的词频统计
  • B.集合模型的词概率← 正确答案
  • C.查询词的出现位置
  • D.文档的总长度

答案:B。JM平滑公式是 \( (1-\lambda)P_{\text{ML}} + \lambda P_{\text{col}} \),λ是集合模型的插值权重,λ越大越依赖全语料统计,文档个性化越弱。

Q9. 下列哪些属于语言模型检索中常用的平滑策略?

多选题 · hard

  • A.Dirichlet平滑← 正确答案
  • B.Jelinek-Mercer平滑← 正确答案
  • C.拉普拉斯平滑← 正确答案
  • D.倒排频率平滑

答案:ABC。Dirichlet和JM平滑是LM检索的主流平滑方法,拉普拉斯加1平滑是最朴素的形式。倒排频率是BM25的IDF概念,不属于概率平滑。

Q10. 在KL散度框架下,查询模型在查询词上均匀分布时,排序结果与下列哪种方法等价?

单选题 · extreme

  • A.查询似然模型← 正确答案
  • B.BM25打分
  • C.布尔精确匹配
  • D.向量空间余弦相似度

答案:A。查询模型均匀分布时,KL展开后与文档相关的部分为 \( -\frac{1}{n}\sum \log P(w \mid D) \),最小化KL即最大化查询似然,因此两者排序等价。