12-机器学习、13-深度学习与PyTorch、14-nlp、16-text 的精华合并版,按面试主线重组。张量操作、经典算法细节、完整项目代码等低频内容见原篇,本文不重复。
一、模型评估与泛化(必考)
混淆矩阵是底表,四个指标全从它算出来:
| 指标 | 含义 | 一句话 |
|---|---|---|
| 准确率 Accuracy | 全部预测中对的比例 | 样本不均衡时失真(99% 负样本全猜负也有 99%) |
| 精确率 Precision | 预测为正中真为正的比例 | 报出来的有多准 |
| 召回率 Recall | 真实正类被找出的比例 | 有没有漏 |
| F1 | 精确率与召回率的调和平均 | 折中指标 |
泛化三件套:
-
拟合:学到的规律与真实分布的接近程度
-
过拟合:训练好、测试差 → 背了噪声;对策:更多数据、正则化、Dropout、早停
-
欠拟合:训练测试都差 → 没学会;对策:加特征、加模型容量、训练更久
面试官追问:RAGAS 的 context_precision / context_recall 和这里什么关系?—— 思想同源,前者评估检索质量,后者评估生成质量(见 36 篇)
微调场景追问:小数据微调为什么选 LoRA 而不是全参?—— 低秩约束天然抑制过拟合,可训参数少(0.1% 量级),不易背噪声
二、损失函数与优化器(必考)
损失函数三兄弟:
| 损失 | 任务 | 要点 |
|---|---|---|
| MSE | 回归 | 平方差平均,看距离 |
| 交叉熵 | 多分类 | softmax + 概率分布差异 |
| BCE | 二分类/多标签 | 交叉熵特例,sigmoid 输出 |
-
样本不均衡 → focal loss(降低易分样本权重,聚焦难样本)
-
一句话总结:回归看距离,分类看概率分布差异
面试官追问:SFT 微调用什么损失?—— 自回归下一词预测的交叉熵,且只对 response 部分计算(见 32 篇)
优化器演进链(讲清每一环解决什么问题):
SGD(快但震荡)
→ +Momentum(指数加权平均,平滑方向)
→ +自适应学习率(AdaGrad/RMSProp,按参数调步长)
= Adam(动量 + 自适应,工程默认)
→ AdamW(解耦权重衰减,大模型标配)
- AdamW 关键点:Adam 的自适应学习率会让 L2 正则失效;AdamW 把权重衰减从梯度里拆出来单独作用,正则真正生效,泛化更好 —— 当前大模型训练/微调的绝对标配
面试官追问:为什么 AdamW 替代 Adam 成为标配?—— 见上。
再追问学习率:LoRA 微调常用 1e-4 量级,比全参微调(1e-5 量级)大一个数量级
Dropout:训练时随机关掉部分神经元,强迫网络不依赖单点;预测时全开。Transformer 里的 attention dropout 是同一思想的延续。
三、文本表示演进(高频)
一条主线:稀疏 → 静态稠密 → 上下文动态
One-hot / BoW / TF-IDF Word2Vec / GloVe / FastText ELMo / BERT / GPT
高维稀疏、无语义 低维稠密、一词一向量 向量随上下文变化、解决一词多义
-
TF-IDF = 词频(这篇文档里多重要)× 逆文档频率(全语料越稀有越有区分度)—— BM25 是它的概率化改良,正是 RAG 混合检索的稀疏召回路(见 36 篇)
-
Word2Vec 两种模式:CBOW 两边预测中间;Skip-gram 中间预测两边。缺点:静态向量,多义词处理差
-
BERT/GPT:上下文嵌入,同一个词在不同语境向量不同
面试官追问:Word2Vec 和 BGE 这类 embedding 模型的区别?—— Word2Vec 是静态词向量;BGE 是 Transformer 编码的句子级语义向量,对比学习训练,直接服务于检索召回
再追问:词向量 ≠ 语义向量 —— 前者是词级别的静态表示,后者是深层模型对整段文本的上下文表示
四、序列建模演进(高频)
一条主线:RNN → LSTM/GRU → Seq2Seq+Attention → Transformer
| 模型 | 核心机制 | 解决/遗留问题 |
|---|---|---|
| RNN | $h\_t$ 依赖 $h\_{t-1}$ 传递历史 | 梯度消失、记不住长依赖 |
| LSTM | 三门(遗忘/输入/输出)+ 细胞状态 | 缓解长期依赖,但串行慢 |
| GRU | 两门(更新/重置),合并细胞/隐藏状态 | LSTM 简化版,参数更少 |
| Seq2Seq | Encoder-Decoder 架构 | 长序列压缩成固定向量,信息丢失 |
| +Attention | 解码时对输入加权关注 | 缓解信息丢失 → 引出 Transformer |
-
门的本质:用可学习的开关控制信息流动,记住关键、遗忘无关
-
Bi-LSTM / Bi-GRU:双向处理,同时看前文和后文
面试官追问:Transformer 为什么取代 RNN 系?—— ① 自注意力完全并行,训练快;② 任意两个位置直连,长程依赖一步到位;③ RNN 的时序依赖无法并行。
五、Transformer 架构(核心必考)
1. 核心思想
完全基于自注意力机制,实现并行计算与长距离依赖建模。
关键对比:RNN/LSTM 是"按顺序读"(串行),Transformer 是"全文同时看"(并行)——训练效率大幅提升。
2. 三大核心机制
自注意力(Self-Attention):理解某个词时,动态判断句中哪些词更值得关注。比如解析指代关系时,自动给相关词更高权重。
多头注意力(Multi-Head):从多个角度同时捕捉依赖——有的关注主谓关系,有的关注长距离指代,有的捕捉局部结构。多视角组合,表示更丰富。
位置编码(Positional Encoding):自注意力本身无序(输入排列后结果不变),需用正弦余弦波为每个位置注入顺序信息,支持相对位置学习和长度泛化。
残差连接作用:梯度"短路"直通浅层,缓解梯度消失;保留原始信息,模型学新特征又不丢底层细节,收敛更快。
3. 完整结构
Encoder(编码器):N 层堆叠 → 多头自注意力 + 前馈网络(FFN),每层带残差连接 + 归一化
Decoder(解码器):N 层堆叠 → 掩码自注意力(防偷看未来)+ 交叉注意力(关联 Encoder 输出)+ FFN,同样带残差与归一化
关键技术点:
- 纯注意力机制,摒弃 RNN/CNN
- 并行计算:所有 token 一次性算完
- 长依赖建模:任意两位置直连,一步到位
4. 衍生架构定位
BERT 用 Encoder 双向理解(适合分类、匹配等理解任务),GPT 用 Decoder 单向生成(适合对话、写作等生成任务),T5 统一成文本转换框架。
面试记住:Transformer 是底座,理解类选 BERT,生成类选 GPT。
5. 快速自测
| 考点 | 答案 |
|---|---|
| Transformer 核心 | 自注意力 + 并行计算 + 长依赖 |
| 为什么需要位置编码 | 自注意力无序,需注入顺序 |
| Encoder vs Decoder | Encoder 双向理解,Decoder 单向生成 |
| BERT/GPT定位 | 理解类/BERT,生成类/GPT |
| 残差连接作用 | 梯度直通、缓解退化、保留原信息 |
| Mask 自注意力用途 | 防止解码器偷看未来 token |
面试官追问:为什么微调常用 LoRA?—— 低秩分解减少参数(0.1% 量级),降低过拟合,节省显存,效率高。(详见 32 篇)
六、文本分类项目实战(高频)
四种实现方式选型:
| 方式 | 核心特点 | 适用场景 |
|---|---|---|
| 随机森林 + TF-IDF | 多树投票,开发简单、速度快 | 短时间内快速验证效果 |
| FastText | 词向量平均后分类,训练极快 | 要深度学习方式且追求速度 |
| BERT | 双向预训练模型,结构复杂、可调空间大 | 追求高准确率、时间充裕 |
| LLM 大模型 | 零训练成本,提示词直接分类 | 只想写 Prompt 快速实现 |
BERT vs FastText:BERT 上下文理解强、准确率高,但模型复杂、资源消耗大;FastText 轻量、训练快、效果稳定,适合资源受限或快速建基线。FastText 会将词拆成 n-gram 子词,处理生僻词和拼写变化更友好。
1. 随机森林:TF-IDF 特征 + 树投票
tfidf = TfidfVectorizer(stop_words=stop_word_list) # 特征提取
model = RandomForestClassifier(n_jobs=-1)
model.fit(x_train, y_train)
为什么用 TF-IDF:决策树在每个节点上只选一个特征(某个词),通过权重阈值把样本分到不同类别。
2. FastText:标签格式 + 自动调优
数据格式:每行一个文档,类别标签以 __label__name 前缀放在最前面。
model = fasttext.train_supervised(
input=config.process_char_train_datapath,
autotuneValidationFile=config.process_char_dev_datapath,
autotuneDuration=3*60, # 自动调优持续 3 分钟
)
3. BERT:预训练模型 + 分类头(迁移学习)
self.bert_model = BertModel.from_pretrained(config.bert_path)
in_features = BertConfig.from_pretrained(config.bert_path).hidden_size
self.linear = nn.Linear(in_features, config.classname_len)
迁移学习:用在大量语料上训练的预训练模型迁移到自己的任务。两种方式——开箱即用(预训练任务与目标任务相似,直接使用)、微调(垂直领域数据继续训练)。微调时可更新全部或部分权重,也可冻结主干只训分类头;LoRA(低秩适配)/ QLoRA(量化 LoRA)详见 32 篇。
常见预训练模型:
| 模型 | 隐层数 | 隐藏层维度 | 注意力头数 | 参数量 | 训练语料 |
|---|---|---|---|---|---|
| bert-base-uncased | 12 | 768 | 12 | 110M | 小写英文 |
| bert-large-uncased | 24 | 1024 | 16 | 340M | 小写英文 |
| bert-base-chinese | 12 | 768 | 12 | 110M | 简繁中文 |
面试高频:
bert-base-chinese有 12 个自注意力头。
BERT 改进方向:减少参数 ALBERT、改进训练策略 RoBERTa、修正预训练差异 MacBERT、改变遮掩单位 SpanBERT;其他常见预训练模型还有 GPT、T5。
4. Hugging Face Transformers:三个使用层级
提供 BERT、GPT、T5 等预训练模型和统一 API,无需从零训练。
| 层级 | 封装程度 | 适用场景 |
|---|---|---|
| Pipeline | 最高 | 几行代码完成任务,适合快速验证 |
| AutoModel | 中 | 平衡便利性和灵活性 |
| SpecificModel | 最细 | 定制网络或 LoRA 微调 |
5. LLM 大模型:提示词直接分类
零训练成本,调用 OpenAI 兼容接口(如 qwen-plus)。关键参数:temperature=0.1 低温度确保稳定输出;max_tokens=10 只需输出一个类别名。
提示词三要素:角色设定(专业新闻分类器)+ 规则约束(仅输出英文类别名、完全基于标题、拒绝解释)+ few-shot 示例。完整代码见原篇(16-text)。
面试官追问:生产环境四种方式怎么选?—— 先用 LLM 零成本跑通基线;有延迟/成本约束再下训小模型:速度优先 FastText,精度优先 BERT 微调。
附:快速自测
| 考点 | 一句话答案 |
|---|---|
| 精确率 vs 召回率 | 报的准不准 vs 漏没漏 |
| F1 是什么 | 精确率和召回率的调和平均 |
| 过拟合对策 | 更多数据、正则化、Dropout、早停 |
| 三个损失函数 | 回归 MSE、多分类交叉熵、二分类 BCE |
| AdamW vs Adam | 解耦权重衰减,让正则真正生效 |
| Word2Vec 两种模式 | CBOW 上下文预测中间词;Skip-gram 相反 |
| 词向量 vs 语义向量 | 静态词级表示 vs 上下文句子级表示 |
| LSTM 三门 | 遗忘门、输入门、输出门 |
| RNN 的死穴 | 梯度消失 + 无法并行 |
| 文本分类四种方式 | 随机森林快验证 / FastText 求速度 / BERT 求精度 / LLM 零训练 |
| bert-base-chinese 头数 | 12 个自注意力头 |
| HF 三个层级 | Pipeline 快速验证 → AutoModel 平衡 → SpecificModel 定制 |