第11章 综合例题:把文本表示、概率、评估与训练串起来
怎么用这一章: 建议先遮住解答,自己写出每道题的特征表示、核心公式和待统计的中间量,再对照解析核对每一步。每道题末尾的“复核要点”总结了最容易算错的分母、维度或数据边界。
例1 同一个查询,原始词频与 TF-IDF 为何排出不同顺序
题目。 语料库有 3 篇文档:D1 cat eats fish、D2 cat likes milk、D3 dog eats fish;查询为 cat fish。分别用原始词频向量和未平滑 的 TF-IDF 向量计算余弦相似度,解释为什么 D2 与 D3 的先后顺序发生了变化。
解:
按字典序固定词表为 cat, dog, eats, fish, likes, milk(共 6 个词)。
1. 原始词频余弦 查询向量为 ,模长 。三篇文档各含 3 个互不相同的词,模长均为 。
- D1 同时命中
cat和fish,内积为 ; - D2 只命中
cat,D3 只命中fish,内积均为 。
因此:
在原始词频下,D2 与 D3 并列第二。
2. TF-IDF 余弦
统计文档频率:,这三词的 IDF 为 ;而 dog, likes, milk 只在 1 篇文档出现,IDF 为 。
查询中两个词的 IDF 都是 ,故 。
- D1 的三个词 IDF 全是 ,模长 ,内积 ,余弦保持 。
- D2 含 1 个常见词(
cat)和 2 个稀有词(likes, milk),模长为 ,D3 含 2 个常见词(eats, fish)和 1 个稀有词(dog),模长为 :
排序变为 D1 > D3 > D2。虽然 D2 和 D3 与查询匹配的分子都是 ,但 D2 含有两个高 IDF 的未匹配稀有词,拉大了分母模长 ,从而拉低了余弦相似度。
复核要点
查询向量必须沿用文档库统计出的那套词表和 IDF,不能拿查询单独重算一份 IDF。
例2 HMM 词性标注:Viterbi 最优路径与前向总概率
题目。 对双词句子 time flies 做词性标注,状态集合为 。已知起始概率 ,转移矩阵 (行依次为从 N、从 V 出发),发射概率 time 在 下为 ,flies 在 下为 。求最可能的词性序列,以及该路径在给定句子下的条件概率 。
解:
1. Viterbi 动态规划求最优路径
第一步(位置 1,time):
第二步(位置 2,flies):
因为 ,终点选 ,沿回溯指针 恢复出最优路径为 N → V,其联合概率为 。
2. 前向算法求句子总似然与路径后验 把第二步里的 换成求和:
观察序列的总概率为 。因此,最优路径的条件概率为:
复核要点
四条可能路径的联合概率分别为 (N→N)、(N→V)、(V→N)、(V→V),四者相加正好等于前向求和结果 。
例3 重复词如何影响多项式朴素贝叶斯的后验概率
题目。 正面训练文档为 good movie、good fun,负面训练文档为 bad movie、bad boring。采用拉普拉斯加一平滑(),求测试文档 good good movie 的预测类别与归一化正面后验概率;若推断时将测试文档中每个词的计数截断为至多 1(即按 good movie 计),结果会怎样变?
解: 词表大小 ,正负两类先验均为 ,两类总词元数均为 ,平滑分母均为 。查第7章第 3 节表可得:
对 good good movie(good 出现 2 次):
两类得分之比为 ,归一化正面后验概率为 。
若将测试文档中重复词的词频截为 1(相当于输入 good movie),得分之比变为 ,正面后验降为 。需要注意:仅在测试时把词频截成 0/1 仍在使用多项式模型的条件概率;真正的 Bernoulli 朴素贝叶斯在训练阶段就按文档数统计平滑概率,并且会把词表中未出现词的 一并乘入似然。
复核要点
多项式模型加一平滑的分母是 ,切勿算成类别文档数加词表大小。
例4 分类指标计算与非对称业务错误代价
题目。 一个二分类工单预警模型在 20 条测试工单上的混淆矩阵为:。(a) 求准确率(Accuracy)、精确率(Precision)、召回率(Recall)和 ;(b) 若每次误报(FP)耗费人工核查成本 1 单位,每次漏报(FN)造成业务损失 5 单位,求当前测试集上的总错误成本与单样本平均成本。
解: (a) 总样本数 :
(b) 总错误成本为
平均每条工单的错误成本为 成本单位(这里数值上与 Accuracy 都是 只是巧合,量纲完全不同)。如果换一个把阈值调高的模型,使 ,虽然 Accuracy 升至 ,但总错误成本会飙升到 。因此漏报代价高昂的场景不能只看 Accuracy,而应根据验证集上的代价或指定召回率来选定分类阈值。
复核要点
先核对混淆矩阵是“行真实、列预测”还是相反,避免把 FP(真实负、预测正)与 FN(真实正、预测负)的代价系数乘反。
例5 同一对候选句与参考句的 BLEU-2、ROUGE-L 和 METEOR
题目。 参考句为 a cat sits on the mat,候选句为 a cat is on the mat(按空格分词,均含 6 个词)。求:(a) 等权重、未平滑的 BLEU-2;(b) ROUGE-L 的 分数;(c) 仅按精确词形对齐、采用第4章参数()的 METEOR 分数。
解: (a) BLEU-2
- 1-gram:候选句 6 个词中
a, cat, on, the, mat共 5 个匹配,截断后精确率 ; - 2-gram:候选句共 5 个二元组,其中
a cat、on the、the mat3 个匹配,; - 候选长度 等于参考长度 ,简短惩罚 。
(b) ROUGE-L
最长公共子序列(LCS)为 a cat on the mat,长度 。因此
(c) METEOR
精确匹配词数 ,所以 ,调和均值 。
5 个匹配词在两句中分成 a cat 和 on the mat 两个连续块(),片段惩罚与最终得分为:
复核要点
METEOR 片段惩罚里的分母是匹配词数 ,不是整句总长度 ;BLEU 遇到候选句重复词时必须按参考句中的最大出现次数做截断。
例6 非负矩阵分解(NMF)的矩阵维度与解的非唯一性
题目。 设 3 篇文档、4 个词构成的文档—词矩阵为
求一组秩 的精确非负分解 ,指明 的尺寸与含义,并说明该分解为何不唯一。
解: 观察到第 3 行恰好等于第 1 行与第 2 行之和,因此可直接取前两行作为两个主题基向量:
验证乘积 完全成立。其中 的每一行代表一个主题在 4 个词上的非负权重,而 的第 3 行 表示第 3 篇文档由主题 1 和主题 2 各取 1 份叠加而成。
非唯一性: 对任意正对角矩阵 (),令 、,例如把 第一列乘 2、同时把 第一行除以 2,仍有 ;此外,将 的两列与 的两行同时对调(置换主题编号),乘积也完全不变。
复核要点
NMF 只要求元素非负,不要求行和为 1;若为方便展示而对 的行做归一化,记得把对应缩放因子同步乘到 的列上。
例7 K-Means 一步迭代与模糊 C 均值(FCM)隶属度对比
题目。 (a) 一维点集为 ,取 、初始中心 ,完成一轮 K-Means 的指派与中心更新,计算更新前后的平方误差和 ;(b) 若在 FCM 中取模糊指数 、当前中心为 ,求点 对两个簇的隶属度。
解: (a) K-Means
- 指派: 离 更近,归入簇 1; 离 更近,归入簇 2。此时 。
- 更新中心:,。
- 更新后平方误差和:。
(b) FCM 隶属度 点 到 和 的距离分别为 。当 时指数 :
复核要点
K-Means 给每个样本赋 0/1 硬指派,中心是簇内样本的算术平均;FCM 给每个样本赋连续隶属度 ,中心是全体样本按 加权的均值。
例8 LSTM 前向状态更新与 Adam 参数更新的层次区分
题目。 (a) 一维 LSTM 在某时间步的旧细胞状态为 ,门与候选值为 ,求新细胞状态 与隐藏输出 ;(b) 某标量模型参数初始值 ,使用 Adam(,忽略 )训练,第一步梯度 ,求更新后的参数 。
解: (a) LSTM 前向更新(样本序列内部的状态传递)
(b) Adam 第一步更新(跨训练步的模型参数优化) 初始动量 :
偏差校正后:
参数更新:
这两组滑动更新处在不同层次:LSTM 的 是在单条句子前向传播时按词元位置更新的激活状态,推断时同样按步递推;Adam 的 是在训练阶段按 batch 统计梯度历史来更新模型权重 ,推断时权重与优化器状态均不再变化。
复核要点
LSTM 算 时别漏掉对 先取 ;Adam 算第一步更新时别漏掉分母开方 和偏差校正。
例9 设计无数据泄漏的文本分类评估与分组验证方案
题目。 现有 1000 条标注文本,计划在 6 组 TF-IDF + 线性 SVM 超参数配置中选优并报告泛化性能,要求留出 20% 样本作为最终测试集、其余做 5 折交叉验证。(a) 写出完整实验步骤与模型训练次数;(b) 若这 1000 条样本是由 120 篇长报告切分成的段落,划分方案应如何修改?
解: (a) 独立样本的标准流程
- 锁存测试集:按分层抽样先切出 200 条作为最终测试集,在超参数选定前绝不读取测试集词频或评估分数。
- 折内独立拟合:将剩余 800 条开发集分为 5 折(每折 160 条)。对每一种超参数配置、在每一折验证中,仅用当前 640 条训练折拟合分词词表、IDF 权重和线性 SVM,再转换并预测对应的 160 条验证折。
- 选优与重训:6 组配置 5 折共执行 次训练。按预定的验证集平均指标(如 macro-F1)选出最佳配置后,在全部 800 条开发集上重新拟合一次
TF-IDF + SVM(第 31 次训练)。 - 单次最终测试:用这第 31 次训出的模型转换并预测 200 条测试集,报告测试集混淆矩阵、分类指标与典型错误样本。
(b) 长报告切片数据的分组隔离 来自同一篇长报告的多个段落共享专有名词、行文句式和背景上下文,若随机分折,同一篇报告的段落会同时落入训练折和验证折,造成近重复泄漏(验证分数虚高)。此时无论是第一步切测试集,还是第二步做 5 折交叉验证,都必须按原始报告 ID 做分组划分(Group Split / GroupKFold),确保同一篇报告切出的所有段落要么全在训练集、要么全在验证/测试集。
复核要点
即使预处理只用到无标签文本(如统计 IDF 或训练 SVD),只要把验证集/测试集混进去一起统计,就已经发生了特征泄漏。
总结:做完文本建模与手算题后的四步自检
- 查数据边界:测试集是否彻底隔离?词表、IDF、降维矩阵是否在训练折内部拟合?双向模型是否误用了未来时刻的词元?
- 查矩阵与表格方向:文档—词矩阵是 还是 ?混淆矩阵是“行真实、列预测”还是相反?
- 查归一化与分母:朴素贝叶斯平滑分母用的是词元总数 还是文档数?METEOR 惩罚分母用的是匹配词数 吗?Adam 做了偏差校正和分母开方吗?
- 查数值合理性:概率分布各项之和是否等于 1?余弦相似度是否落在 ?K-Means 更新一步后目标函数 是否单调不增?
- 感谢你赐予我前进的力量

