假设你要帮舅舅打理一家旧书店。仓库里堆着七箱杂书——篮球杂志、财经周刊、科技评论混在一起,顾客进店根本找不到想要的书。舅舅给你一个任务:训练一名新店员,让他看见一本陌生书,就能在三秒内说出“这是体育、财经,还是科技”。听起来像天方夜谭?这就是文本分类:让机器根据文字内容自动打标签。这篇实战课,带你从零走完整条流水线:理货(数据准备)、除尘(数据清洗)、贴便利贴(分词)、做指纹卡(TF-IDF 特征提取)、正式培训(朴素贝叶斯/SVM 训练)、周考(评估调优)、转正上岗(部署上线)。七步走完,你就能独立交付一个端到端的文本分类项目。

岗位关联

学完这篇,你不再是只会调库的“调参侠”,而是能独立完成“数据到上线”全流程的文本分类工程师——这是情感分析、意图识别、新闻打标等业务场景的真正生产力。

目录
  1. 可视化演示
  2. 数据准备:先理货,再开张
  3. 数据清洗:把脏书整理成干净书
  4. 分词处理:把整本书撕成便利贴
  5. 特征提取:做一张招牌词指纹卡
  6. 模型训练:教店员阿贝用贝叶斯打分类
  7. 评估调优:周考测验分类员
  8. 部署上线:转正上岗,服务真实读者
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示文本分类从数据清洗到部署上线的完整管线、TF-IDF特征提取、模型选择对比及部署监控策略,通过交互理解端到端文本分类工程。

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

文本分类端到端流程 数据清洗去噪分词(jieba) TF-IDF将文本转为高维稀疏向量 朴素贝叶斯/SVM训练分类模型 Pipeline: Clean → Tokenize → TF-IDF → Train → Eval → Deploy

数据准备:先理货,再开张

舅舅的旧书店新到七箱杂书。教学第一天,你没有急着让店员认书,而是先清点:箱子里有哪些书?每本属于哪个分类?把它们登记成一本台账。文本分类项目的第一步同样是“理货”——准备带标签的语料。常见来源有公开数据集(如新闻分类 THUCNews)、历史工单、爬虫采集的文章。每一条样本都必须有类别标签,比如“勇士队夺得总冠军”属于体育,“央行宣布降准”属于财经。没有标签,后面的训练就是空中楼阁。

拿到原始语料后,先用 sklearn 的 train_test_split 把数据划分为训练集(约 80%)和测试集(约 20%)。训练集用来“教学”,测试集用来“考试”,两张卷子绝不能混用。同时要检查类别分布:如果体育类有 10000 条,财经类只有 200 条,模型会偷懒——把新书统统丢进体育书架。这里引入一个最朴素的评估基准:多数类占比。

账本理清后,你才发现箱子里不少书又脏又旧,封面贴着褪色标签、页脚还有乱涂乱画。别急,下一步是除尘补页。

baseline=max⁡c Nc∑cNc\displaystyle \text{baseline} = \frac{\max_{c}\, N_c}{\sum_{c} N_c}
这个公式表达的是:如果无脑把所有样本都猜成最多的那个类别,能蒙对的比例。它是判断模型是否真正有用的“及格线”。
  1. 分子 $\max_c N_c$看所有类别里,哪个类别的样本数量最多,把这个数量取出来。
    max⁡cNc\displaystyle \max_{c} N_c
  2. 分母 $\sum_c N_c$把所有类别的样本数量加起来,得到总样本数。
    ∑cNc\displaystyle \sum_{c} N_c
  3. 两者相除得到“全猜多数类”时的准确率,作为评估模型的底线。
    max⁡cNc∑cNc\displaystyle \frac{\max_{c} N_c}{\sum_{c} N_c}

数据清洗:把脏书整理成干净书

旧书从二手市场收来,状态参差不齐:有的夹着广告传单,有的书页上有老板的随手涂鸦,还有同一本书被收了十本一模一样的。直接让店员学这些脏书,他会把“传单”也当成书的一部分。文本数据同样很脏:网页抓来的文章带着 <div>、<span> 标签,用户评论夹杂着 @提及、URL 和乱七八糟的表情符号,还有全角半角混用、繁简体混排的问题。

清洗的目标就是“把书擦干净再入库”。具体操作有四个常规动作:一是去重,drop_duplicates 删除内容完全相同的样本;二是去噪,用正则表达式剔除 HTML 标签、URL、特殊符号;三是标准化,把繁体转简体、全角字母转半角;四是处理缺失,删除或填充空文本。清洗力度可以用“保留率”来量化。

擦干净的书整齐地摆在桌面上,接下来要做一件更细的活儿:把整本书拆成一张张关键词便利贴。因为对于分类来说,不需要逐字读全文,只需要看“这本书反复提到什么词”。

rclean=NkeepNraw\displaystyle r_{\text{clean}} = \frac{N_{\text{keep}}}{N_{\text{raw}}}
保留率是清洗后剩下的样本数除以原始样本数。保留率太高说明清洗不彻底,太低说明规则太激进或语料本身太脏。
  1. $N_{\text{raw}}$ 原始样本数清洗前语料里面总共有多少条数据。
    Nraw\displaystyle N_{\text{raw}}
  2. $N_{\text{keep}}$ 保留样本数经过清洗操作后,还剩下多少条干净数据。
    Nkeep\displaystyle N_{\text{keep}}
  3. 比值 $r_{\text{clean}}$两个数相除得到保留率,用来监控清洗流程是否健康。
    NkeepNraw\displaystyle \frac{N_{\text{keep}}}{N_{\text{raw}}}

分词处理:把整本书撕成便利贴

一本《篮球年鉴》没法整本贴标签,新店员得先知道这本书里讲了什么。最好的办法是把它拆成一个个关键词——就像把书撕成一叠便利贴,每张写一个词:“绝杀”“三分”“总冠军”。中文文本没有天然空格,“湖人队客场险胜”是一串连着的汉字,必须先分词。分词工具最常用的是 jieba,jieba.lcut(text) 会基于前缀词典和动态规划,找出使整句概率最大的分词方案。

分词之后还要做两道过滤。第一道是停用词表:把“的、了、是、在、我”这类在每类文章里都高频出现的虚词删掉,它们没有区分度,留着只会干扰模型。第二道是词性过滤(可选):只保留名词和动词,比如“篮球”“绝杀”“指数”,扔掉“很”“非常”“地”。分词的数学本质是寻找概率最大的词序列。

便利张贴了满满一墙,可新店员还是记不住每本书。你决定换一种更聪明的办法:给每本书做一张“指纹卡”,只记录最有辨识度的招牌词。

S(d)=arg⁡max⁡w1,…,wn ∏i=1nP(wi)\displaystyle S(d) = \arg\max_{w_1, \dots, w_n}\, \prod_{i=1}^{n} P(w_i)
这个公式说明:分词器不是随便切的,它要让切出来的整串词在语言统计上“最顺口”,也就是概率最大。
  1. 候选词序列 $w_1, \dots, w_n$一句话可以有很多种切法,比如“研究生命”可以切成“研究/生命”,也可以切成“研究生/命”。
    w1,w2,…,wn\displaystyle w_1, w_2, \dots, w_n
  2. 乘积 $\prod_{i=1}^{n} P(w_i)$把每个词在语料中的出现概率连乘,衡量这串词组合起来有多自然。
    ∏i=1nP(wi)\displaystyle \prod_{i=1}^{n} P(w_i)
  3. $\arg\max$ 选最优在所有可能的切法中,选择乘积最大(最顺口)的那一组作为分词结果。
    arg⁡max⁡w1,…,wn∏i=1nP(wi)\displaystyle \arg\max_{w_1, \dots, w_n} \prod_{i=1}^{n} P(w_i)

特征提取:做一张招牌词指纹卡

墙上贴着几百张便利贴,新店员看花了眼。你发现:出现最多的词不一定是好特征——“篮球”这个词在体育书里常见,但“比赛”在财经、科技文章里几乎一样常见。真正有辨识度的,是“这本书反复用、其他书很少用”的招牌词,比如体育书里的“绝杀”,财经书里的“降准”。特征提取就是把文本从“词的集合”翻译成“带权重的数字向量”。

最基本的方案是词袋模型:统计每个词在文档里出现的次数,得到一个稀疏向量。但光有词频不够,还要乘上逆文档频率 IDF,压低那些到处都有的常见词。这就是经典的 TF-IDF。sklearn 的 TfidfVectorizer 可以一条命令完成分词、统计、加权。实际使用中还会用 max_features 控制最大维度(比如只保留 5000 个高频词),用 ngram_range=(1,2) 加入相邻词组,让“不/好吃”和“好吃”区分开。

指纹卡整齐地码在桌上,每一本书现在都是一个多维数字向量。万事俱备,可以开始正式培训店员了。

tfidf(w,d)=tf(w,d)×log⁡Ndf(w)+1\displaystyle \text{tfidf}(w,d) = \text{tf}(w,d) \times \log\frac{N}{\text{df}(w)+1}
这个公式把“词在文档里出现得多”和“词在语料中足够稀有”两个信号结合起来,稀有且高频出现的词权重最大。
  1. $\text{tf}(w,d)$ 词频词 $w$ 在文档 $d$ 里出现了多少次,这是最直观的“提及量”。
    tf(w,d)\displaystyle \text{tf}(w,d)
  2. $N$ 文档总数整个语料库一共有多少篇文档,它是稀有度计算的参照系。
    N\displaystyle N
  3. $\text{df}(w)$ 文档频率有多少篇文档包含词 $w$。$df$ 越大说明词越常见。
    df(w)\displaystyle \text{df}(w)
  4. 分母加 $1$ 平滑防止某些词从未出现导致除零,也让分母温和一点。
    df(w)+1\displaystyle \text{df}(w)+1
  5. 对数 $\log$把“稀有度”压到温和的区间,避免一个生僻词直接碾压所有其他特征。
    log⁡Ndf(w)+1\displaystyle \log\frac{N}{\text{df}(w)+1}

模型训练:教店员阿贝用贝叶斯打分类

新店员阿贝头脑简单但很勤奋。培训方式是这样的:让他一遍遍翻看样本书,每看到一本体育书,就在小本子上记“绝杀 +1,三分 +1,总冠军 +1”;看到财经书就记“降准 +1,指数 +1,资金 +1”。学完所有样本书后,小本子上就有了每个词在每个类别下的“经验值”。之后来一本新书,他数数里面的词,分别给体育、财经、科技打分,谁分高归谁。

这个学习算法就是朴素贝叶斯分类器,scikit-learn 里对应 MultinomialNB。它基于一个“朴素”假设:一本书里的各个词是独立出现的,互不影响。虽然现实中词与词并不独立,但在这个任务上它往往又快又好。训练时它会统计两件事:每个类别的先验概率 $P(c)$(体育书占总样本的多少),以及每个词在各类别下的条件概率 $P(w_i \mid c)$。预测时就用贝叶斯公式计算每类的后验得分,取最高分。

训练时为了防止某个词在某类中从未出现导致连乘结果直接归零,还会用拉普拉斯平滑加一个很小的 $\alpha$,比如 1。另一种常见选择是 SVM,精度上限可能更高,但需要调核函数和正则参数;朴素贝叶斯胜在简单稳健、训练飞快。阿贝学完了,可你不敢直接让他上岗——得先来个周考。

c^=arg⁡max⁡c∈C  P(c)∏i=1nP(wi∣c)\displaystyle \hat{c} = \arg\max_{c \in \mathcal{C}}\; P(c) \prod_{i=1}^{n} P(w_i \mid c)
这句话翻译成白话:算算“体育类本身有多常见”乘以“这些词在体育书里有多常见”,用同样的方法给所有类别打分,谁高就选谁。
  1. 先验概率 $P(c)$训练集中类别 $c$ 的样本占比,比如体育书占四成。
    P(c)=NcN\displaystyle P(c) = \frac{N_c}{N}
  2. 条件概率 $P(w_i \mid c)$在 $c$ 类的书里,词 $w_i$ 出现的频率;训练时统计每个词的“经验值”。
    P(wi∣c)=Nwi,cNc\displaystyle P(w_i \mid c) = \frac{N_{w_i,c}}{N_c}
  3. 连乘 $\prod_{i=1}^{n}$假设各词独立,把每个词的贡献乘起来,得到“这些词同时出现在体育书里”的联合信号。
    ∏i=1nP(wi∣c)\displaystyle \prod_{i=1}^{n} P(w_i \mid c)
  4. $\arg\max$ 决策遍历所有类别,选择得分最高的那个类别作为预测结果。
    c^=arg⁡max⁡c  P(c)∏i=1nP(wi∣c)\displaystyle \hat{c} = \arg\max_{c} \; P(c) \prod_{i=1}^{n} P(w_i \mid c)

评估调优:周考测验分类员

阿贝学了一个星期,是骡子是马该拉出来遛遛。周考方式很简单:给他 100 本从没见过的书,让他逐本判断类别,然后对照标准答案打分。光看总分还不够,你还得盯着他到底把哪种书分错了——如果把体育书错放进了财经书架,爱看篮球的顾客会非常生气。这张“到底谁被分去哪了”的表格,就是混淆矩阵。

从混淆矩阵可以算出三个关键指标。精确率(Precision)是“被分进体育类的书里,多少真是体育书”;召回率(Recall)是“所有真体育书里,有多少被找回来了”。两者往往此消彼长:分类员越保守,分进来的越靠谱(P 高)但漏掉的也多(R 低)。F1 把两者调和成一个综合分。类别不平衡时尤其不能只看准确率,要综合看 F1 和各类别的细项指标。

周考之外,工程师还会用 K 折交叉验证(把训练数据切成 K 份,轮流拿 1 份当判断题)来获得更稳的成绩单,再用网格搜索 GridSearchCV 自动试几组超参数,比如朴素贝叶斯的平滑系数 $\alpha$。阿贝连考几次都拿了高分,你终于决定让他转正上岗。

F1=2×P×RP+R\displaystyle F1 = \frac{2 \times P \times R}{P + R}
F1 是精确率和召回率的“调和平均数”,它惩罚“偏科”——只有 P 和 R 都比较高时,F1 才会好看。
  1. 精确率 $P$预测为正类的样本中,真正是正类的比例。
    P=TPTP+FP\displaystyle P = \frac{TP}{TP + FP}
  2. 召回率 $R$真实正类样本中,被成功预测为正类的比例。
    R=TPTP+FN\displaystyle R = \frac{TP}{TP + FN}
  3. 调和平均先算 $P$ 和 $R$ 的倒数平均,再取倒数,让两者的低分项拖低总分。
    F1=21P+1R=2PRP+R\displaystyle F1 = \frac{2}{\frac{1}{P} + \frac{1}{R}} = \frac{2PR}{P + R}

部署上线:转正上岗,服务真实读者

阿贝通过了周考,正式站到书店前台。新书一到,他扫一眼封面,三秒内把书丢进对应书架。这就是“上线”:把训练好的模型从笔记本搬到真实业务环境里,持续服务。技术上有四件事:第一,用 joblib.dump 把训练好的向量器和模型保存成文件;第二,用 FastAPI 或 Flask 封装一个 HTTP 接口 /predict;第三,接口内部依次执行“清洗 → 分词 → TF-IDF 向量化 → 模型预测”;第四,返回类别和置信度。

上线不是终点,而是运维的起点。真实世界的书会变化——今年流行“电竞”内容,明年流行“AI 大模型”话题,模型可能渐渐分不准,这叫数据漂移。所以要在接口里记录每次预测结果和用户反馈,定期用新语料重新训练并替换模型。每次预测在数学上就是选出后验概率最大的类别。

开店第七个月,舅舅发现阿贝分错的书变多了——原来是新出的“电竞周刊”被他塞进了体育架。你笑了笑,把最近的错分样本整理成新教材,让他回炉再训一轮。这就是文本分类项目的真实生命周期:永远不会真正结束。

y^=arg⁡max⁡c∈{1,2,…,C}P(c∣x)\displaystyle \hat{y} = \arg\max_{c \in \{1, 2, \dots, C\}} P(c \mid \mathbf{x})
这句话是在说:给模型一段文本 $\mathbf{x}$,它把所有类别的概率都算一遍,然后把概率最大的那个类别 $c$ 作为最终答案吐出来。
  1. 候选类别集合 $\{1, 2, \dots, C\}$业务中预先定义好的全部类别,比如体育、财经、科技共 $C$ 类。
    c∈{1,2,…,C}\displaystyle c \in \{1, 2, \dots, C\}
  2. 后验概率 $P(c \mid \mathbf{x})$给定文本 $\mathbf{x}$ 时,它属于类别 $c$ 的概率,由模型预测得出。
    P(c∣x)\displaystyle P(c \mid \mathbf{x})
  3. $\arg\max$ 输出比较所有类别的后验概率,取最大的类别编号作为输出 $\hat{y}$。
    y^=arg⁡max⁡cP(c∣x)\displaystyle \hat{y} = \arg\max_{c} P(c \mid \mathbf{x})

AI 应用场景

电商平台售后评论情感分析

阶段:情感分析是文本分类的一个典型分支。

解决的问题:传统方式靠客服人工逐条阅读差评,日处理量有限且标准不一。AI 先用历史已标注的评论训练朴素贝叶斯模型,把新评论分为“好评/中评/差评”,再对差评做关键词定位(“漏发”“质量差”),让客服优先处理高愤怒值评论,回复效率提升 5 倍以上。

具体案例:某电商平台每天产生 20 万条评价,人工标注耗时 3 小时。接入文本分类管道后,系统 5 分钟跑完全量,自动把疑似差评推送到质检组,漏发、破损类问题当天闭环。

银行客服工单意图识别

阶段:意图识别是文本分类在客服场景的核心应用。

解决的问题:传统 IVR 菜单层级深、用户体验差,转人工成本高。AI 将用户留言自动分为“账户查询/转账故障/信用卡申请/投诉建议”等意图,并直接路由到对应业务系统,减少 40% 的人工转接。

具体案例:某银行手机银行“智能小助”上线后,每天处理 10 万条用户反馈。通过 TF-IDF + 朴素贝叶斯管道,模型对“我钱怎么少了”和“余额查询”能准确区分,前者被判定为投诉意图并高优处理。

新闻 App 频道自动打标

阶段:新闻分类是端到端文本分类最经典的落地形态。

解决的问题:编辑人工打标速度慢,且深夜突发新闻无法及时归类。AI 基于已标注新闻标题训练模型,新稿件入库时自动打上“体育/财经/科技/娱乐”标签,并可进一步用细分类标签做个性化推荐。

具体案例:某资讯平台用本文介绍的七步流程构建标题分类器,上线后 92% 的稿件无需人工干预即可完成频道分派,深夜突发新闻可在 10 秒内出现在对应频道。

Python 演示

python33 行
# Full pipeline: jieba + TF-IDF + MultinomialNBimport jiebafrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_report # Simulate a small labeled corpus (news headlines)docs = [    "勇士队夺得总冠军 库里当选MVP",    "湖人队客场险胜 詹姆斯砍下三双",    "央行宣布降准 释放长期资金",    "A股三大指数集体收涨",    "苹果发布新款手机 售价破万",    "谷歌推出人工智能新模型",    "国足战胜对手 晋级下一轮",    "马拉松比赛鸣枪开跑",]labels = ["体育", "体育", "财经", "财经", "科技", "科技", "体育", "体育"] def tokenize(text):    return " ".join(jieba.lcut(text)) texts = [tokenize(d) for d in docs]X_train, X_test, y_train, y_test = train_test_split(    texts, labels, test_size=0.25, random_state=42)vectorizer = TfidfVectorizer()X_train_vec = vectorizer.fit_transform(X_train)X_test_vec = vectorizer.transform(X_test)clf = MultinomialNB()clf.fit(X_train_vec, y_train)pred = clf.predict(X_test_vec)print(classification_report(y_test, pred))
目的:用 8 条新闻标题跑通“分词 → TF-IDF → 朴素贝叶斯”的端到端文本分类流程,并输出精确率、召回率、F1 报告。这是真实项目的最小可运行骨架。
  1. def tokenize(text): return " ".join(jieba.lcut(text))先用 jieba 把中文句子切成词,再用空格连接,因为 sklearn 默认按空白符切词。
  2. texts = [tokenize(d) for d in docs]对全部原始文本统一做分词预处理,得到干净的词序列。
  3. X_train, X_test, y_train, y_test = train_test_split(texts, labels, test_size=0.25, random_state=42)按 75% / 25% 划分训练集和测试集,固定随机种子让结果可复现。
  4. vectorizer = TfidfVectorizer()创建 TF-IDF 特征提取器,负责把文本变成数字向量。
  5. X_train_vec = vectorizer.fit_transform(X_train)在训练集上“拟合词表”并完成转换,相当于给每本书做指纹卡。
  6. X_test_vec = vectorizer.transform(X_test)测试集只做转换,绝不用测试集参与拟合,防止信息泄露。
  7. clf = MultinomialNB()创建多项式朴素贝叶斯分类器,这就是我们的“店员阿贝”。
  8. clf.fit(X_train_vec, y_train)让模型统计每个词在每个类别下的经验值,完成训练。
  9. pred = clf.predict(X_test_vec)对测试集逐条预测类别,得到分类结果。
  10. print(classification_report(y_test, pred))输出每个类别的精确率、召回率、F1 和样本数,这是评估模型的核心报表。

常见误区

误区我一开始以为中文分词和英文一样,用 `text.split(' ')` 按空格拆就行,最多再按照标点切一切。

正解中文句子是连续的汉字串,没有天然空格。“研究生命”这四个字,切错了意思完全不一样。jieba 这类工具会基于词典和统计概率寻找最合理的切法。就像把一本书拆成便利贴,得沿着“语义的虚线”撕,不能随手乱撕。实际开发中,宁可让分词器多花一点时间,也不要自己写正则硬切。

为何常见:初学者熟悉英文处理习惯,误以为中文只是“没空格的英文”,忽略了中文分词本身就是一个需要专门工具解决的难题。

误区我以为 TF-IDF 分数越高就说明这个词对文本越重要,所以每次做完特征提取,只看权重最高的几个词。

正解TF-IDF 高代表“这个词在当前文档里出现得多,同时在语料中比较稀有”。但“重要”是分语境的:在财经分类中“降准”权重很高,可在一篇关于田径的体育新闻里,它根本不该出现。另外,如果一个生僻词只是偶然出现一次,IDF 极高但 TF 极低,它往往也是噪音。所以更稳妥的做法是结合特征维度和业务含义综合分析,不能唯权重论。

为何常见:大家下意识把数学分数当成“重要性排名”,忽略了 TF-IDF 本质上是“区分度信号”而非“语义重要性”。

误区模型在测试集上准确率 99%,我特别开心,觉得可以直接上线了。

正解当类别不平衡时,准确率会骗人。比如 99% 的样本都是体育类,模型只要永远输出“体育”就能拿到 99% 准确率,但财经类样本一条都分不对。就像书店里 99% 的书都是篮球杂志,店员只会说“都是体育”,你会觉得他是个好店员吗?必须看混淆矩阵和每一类的精确率、召回率、F1,尤其在少数类上。

为何常见:准确率是最直观的指标,天然让人产生“分数高 = 效果好”的直觉,忽略了它对不平衡数据的失真。

误区既然它假设所有词相互独立,而现实中词和词明明有关联,那它肯定是个不靠谱的模型。

正解朴素是它的假设,不是它的缺点。文本经过 TF-IDF 后是上万维的高维稀疏向量,朴素贝叶斯在这个场景下训练极快、稳定性好,常常能达到接近 SVM 甚至更优的效果。更关键的是,它训练只需一遍统计,SVM 需要迭代求解;语料时常更新时,NB 重训成本远低于 SVM。如同阿贝虽然想法简单,但胜在好学勤快,简单店面的活他反而干得最稳。

为何常见:人们把“假设简化”等同于“效果差”,忽略了在特定数据分布下,简单假设反而提供了强大的正则化作用。

误区部署完 API 就算项目交付了,我从此可以安心做下一个需求。

正解上线只是开始。真实业务中的文本分布会随热点、季节和用户习惯变化——今天讨论世界杯,明天讨论大模型。模型面对没见过的表达,准确率会悄悄下滑,这就是数据漂移。像阿贝转正后也需要每月回炉培训一样,生产系统必须记录线上预测日志、收集用户反馈、定期用新样本重训和灰度替换模型。

为何常见:初学阶段只关注“训练到部署”的单向流程,缺乏对 AI 系统全生命周期运维的认知。

面试题

Q1. 在 TF-IDF 中,IDF 的主要作用是

单选题 · easy

  • A.突出出现频率高的普遍词
  • B.降低出现频繁词的权重← 正确答案
  • C.反映词语在句子中的顺序
  • D.统计文本中词语的长度

答案:B。IDF(逆文档频率)衡量“稀有度”:一个词在越多文档中出现,IDF 越低,从而压低常见词的权重。就像“比赛”到处都有,区分度低,不该被高估;而“绝杀”只在体育书里频繁出现,才值得被放大。A 说反了,C 和 D 与 IDF 无关。

Q2. 朴素贝叶斯中“朴素”指的是

单选题 · easy

  • A.特征之间相互独立← 正确答案
  • B.训练速度一定最快
  • C.无需任何训练数据
  • D.结果永远绝对正确

答案:A。“朴素”是指它假设每个词(特征)的出现相互独立,互不影响。就像阿贝记账时把“绝杀”“三分”当成彼此无关的信号各自加分,虽然现实中词与词有关联,但这一简化让模型简单高效。B 和 C、D 都与“朴素”无关。

Q3. 中文文本分类中,“的、了、是、在”这类词通常应该

单选题 · mid

  • A.保留作为重要特征词
  • B.加入停用词表筛除← 正确答案
  • C.设置词频权重为最高
  • D.直接用作类别标签

答案:B。这些虚词在各类文本中都高频出现,没有类别区分度,属于典型的停用词。保留它们反而会稀释真正的分类信号。把“的”当重要特征,就像店员把“这本”“那本”当作分类依据,毫无意义。

Q4. 下列哪项不属于数据清洗的常规操作

单选题 · mid

  • A.去除重复的样本正文
  • B.统一全角与半角符号
  • C.剔除残留 HTML 标签
  • D.删除全部低频的词汇← 正确答案

答案:D。去重、统一符号、去 HTML 都是清洗阶段的动作。删除低频词属于特征工程阶段的操作,通常在 TF-IDF 向量化时通过 max_features 或 min_df 控制,而不是在清洗阶段直接删词。清洗阶段如果删词,可能误伤有用信息。

Q5. 下列哪些属于文本数据预处理(清洗)的步骤

多选题 · mid

  • A.去除重复样本数据← 正确答案
  • B.繁体中文转简体← 正确答案
  • C.调节模型学习率
  • D.剔除空文本记录← 正确答案

答案:ABD。去重、繁转简、剔除空文本都是数据清洗的标准动作。调节学习率是模型训练阶段的超参数操作,与数据清洗无关。就像整理旧书时会擦灰、补页、丢广告传单,但不会在上架前调整店员的培训方式。

Q6. 当类别严重不平衡时,为了全面评估模型,应该关注哪些指标

多选题 · mid

  • A.准确率 Accuracy
  • B.精确率 Precision← 正确答案
  • C.召回率 Recall← 正确答案
  • D.F1 值指标 F1Score← 正确答案

答案:BCD。类别不平衡时准确率会虚高,不能作为唯一依据。精确率、召回率和 F1 能分别反映“分得准不准”和“找得全不全”,尤其少数类上的表现。就像评估店员时不能只看他一天处理了多少本书,更要看他有没有把罕见的财经书漏掉。

Q7. 混淆矩阵中,召回率(Recall)的计算公式是

单选题 · hard

  • A.TP / (TP + FP)
  • B.TP / (TP + FN)← 正确答案
  • C.TN / (TN + FP)
  • D.FP / (FP + FN)

答案:B。召回率是“真实正类中被正确找回来的比例”,分母是真实正类总数(TP + FN)。A 是精确率的公式,C 是特异度,D 对应假正类率。用书店比喻:召回率关心“所有体育书里,店员找回了多少本”,而不是“他分进体育架里的有多少是对的”。

Q8. 一个词在文档里出现频率很高,但在整个语料中几乎所有文档都包含它,那么它的 TF-IDF 权重

单选题 · hard

  • A.TF 高 IDF 高,权重非常高
  • B.TF 高 IDF 低,权重中偏低← 正确答案
  • C.TF 低 IDF 高,权重也比较高
  • D.TF 低 IDF 低,权重非常低

答案:B。TF 高说明在文档里常见,但 IDF 低说明它没区分度,两者相乘后权重被拉低。就像“比赛”这个词,每类文章都在用,再频繁也没法帮你判断类别。A、C、D 都误判了 IDF 与区分度的关系。

Q9. 文本分类模型部署上线阶段需要做的工作包括

多选题 · hard

  • A.用 joblib 保存模型文件← 正确答案
  • B.封装成 HTTP 预测接口← 正确答案
  • C.监控线上预测数据分布← 正确答案
  • D.在训练集反复调参实验

答案:ABC。用 joblib.dump 持久化模型、用 FastAPI 封装接口、监控线上数据漂移都是上线环节的核心任务。在训练集上反复调参属于离线开发阶段,而且反复在训练集上调参容易过拟合,不属于上线工作。

Q10. 多项式朴素贝叶斯做拉普拉斯平滑(α=1)的主要目的是

单选题 · extreme

  • A.防止某个类条件概率为零← 正确答案
  • B.让所有特征权重完全相等
  • C.增大模型训练收敛速度
  • D.缩小文本特征向量维度

答案:A。当某个词在训练集的某个类别里从未出现时,它的条件概率会是 0,连乘后整个类别的得分直接归零,导致模型遇到新词就“一票否决”。拉普拉斯平滑给分子分母各加一个 α 的值,保证概率永远大于 0。就像店员没学过“电竞”这个词,但不能因此认定“电竞周刊”绝不是科技书。B、C、D 都与平滑机制无关。