资讯动态

NLP实习面试高频考点汇总:从词向量到LoRA与代码模板

发布时间:2026/10/17 1:53:23 来源:尧图企业网站定制
NLP岗位的实习面试说到底是三件事的叠加基础知识是否成体系、模型原理是否真的理解透、手写代码和场景题能不能在压力下扛住。很多同学复习时容易陷入看了好多资料但一到面试就不知道从哪儿答起的状态这一篇我按自己这两年面过不少团队、也帮学弟学妹做过模拟面试的经验把NLP实习笔试面试里反复出现的高频考点做一个梳理。标题叫汇总二对应的就是第二梯队的内容从词向量、RNN/Tansformer细节到BERT、GPT这类预训练模型再到大模型时代新增的LoRA、Prompt考题最后是笔试代码和开放场景的应对思路。适合正在投递NLP算法实习的同学也适合刚准备转方向、想快速摸清考核边界的初学者。1. NLP面试第一关文本表示与技术栈基本盘1.1 分词、词性标注与子词切分看似送分题实则分层面试open with一般不会直接甩一个大模型题而是从NLP的基础概念开始试水。第一个高频问题就是你平时做中文文本处理时分词用什么方案这个问题看着简单但不同答案能明显分出层次。初级回答是用jieba或者用hanlp只能说明你用过工具。稍微深一点的回答一定要带上未登录词和分词歧义这两个概念因为工具分词的真正难点不是把常见词切开而是如何处理人名、地名、领域专有名词这类字典外词汇。面试官如果在分词这题往下追问最可能的三个方向是分词结果对下游任务的影响如何评估比如分错一个词会不会导致实体识别整体失败为什么现在很多模型不依赖显式分词了答案就是Transformer的BPE/WordPiece这类子词切分方式如何衡量分词质量常用指标是P/R/F1计算时按词边界对齐还是按词序列匹配这里有个容易被忽略的细节传统分词里的最大匹配算法正向最大匹配、逆向最大匹配虽然实现简单但面试偶尔会让你现场描述思路说清楚为什么逆向匹配比正向更有效因为中文偏向于右侧词边界信息更丰富比背算法代码更能体现真实理解。1.2 词向量的三个关键词CBOW、Skip-gram与负采样继续追问词汇表示面试官基本会默认你熟悉word2vec。常见问法是CBOW和Skip-gram有什么区别实际选哪个。标准答案框架是CBOW根据上下文词预测中心词训练速度快对高频词更友好Skip-gram用中心词预测上下文训练慢但对低频词和复杂语义场景效果更稳。实践里哪怕是Google原文也推荐Skip-gram做下游任务面试时如果能补一句低频词场景优先Skip-gram大规模语料可以先用CBOW做初版再对不常见词做补充训练印象分会高很多。负采样这个问题几乎必考它解决的是softmax分母需要遍历整个词表、计算代价过大的瓶颈。核心逻辑是每个训练样本只采样若干个负样本词把它们当作错误答案来训练二分类器。这里需要答清楚两个东西第一是怎么采样word2vec论文里用的是带权重的采样词频越高越容易被采为负样本第二是采几个合适经验值是2到5个数据量小就多采一点。1.3 从word2vec到ELMo再到Transformer词向量如何解决一词多义现在很多岗位已经不满足于问word2vec本身而是会设置一个递进题链word2vec给的向量是不是静态的ELMo为什么说是动态的Transformer的出现带来了什么本质变化。这条链条是在考察你能否把NLP近十年的技术演进串起来。word2vec的不足在于一个词只有一个向量像苹果这种含有公司名和水果两个含义的词最终训练出来的向量是两种语义的某种平均。ELMo的思路是用双向LSTM在不同上下文里重新编码同一个词在不同句子中就会得到不同向量这就是动态词向量。到了Transformer时代self-attention本质上是用注意力权重把全句token的信息做加权组合每个token的表示从第一层就开始根据上下文动态调整不需要单独的词向量生成阶段语义和上下文在模型内部融合在一起。面试时把这个演进逻辑讲清楚基本上就能证明你不是只会调包。2. 序列模型到Transformer面试官常连环追问的四个细节2.1 为什么RNN会出现梯度消失而LSTM能缓解几乎每次深度学习和NLP交叉的面试都会让候选人解释RNN的梯度问题。最直白的问法是RNN的训练为什么容易失败。答案要落到时间步上的连乘效应反向传播损失对较早时间步的梯度会经过多个时刻的权重矩阵相乘。矩阵特征值小于1连乘后梯度趋近于0信息传不回早期时间步特征值大于1梯度爆炸训练不稳定。LSTM通过引入细胞状态C和三个门控遗忘门、输入门、输出门来解决问题。这里有个面试官特别爱挖的点LSTM的梯度为什么能比较顺畅地回传关键在记忆单元内部是一条自环通路细胞状态的更新是加法性质乘法环节减少了梯度就不容易指数衰减。但要注意LSTM只是缓解梯度消失不是彻底解决深层LSTM照样会有长距离依赖丢失的问题所以后来Transformer能靠全量注意力在长文本上建立依赖才成为新一代主流架构。2.2 Self-Attention的三个分数与复杂度问题Transformer原理题里最常考的是self-attention是怎么算的。我建议回答时直接用QKV三矩阵展开输入向量分别乘上三个参数矩阵得到Query、Key、Value然后Query和所有Key做点积除以根号下维度dk防止点积过大把softmax推入饱和区再softmax归一化得到权重最后对Value做加权求和。为什么不除以根号dk这是面试官最爱追问的细节点。维度一大点积结果方差变大softmax之后概率分布会趋于极端一个是梯度太小一个是某些token会被过度主导。除以根号dk本质上是把点积结果缩放到一个相对稳定的尺度。复杂度也一定要会算。Self-attention的空间和时间复杂度都是O(n²)n是序列长度。面试题通常还会追加一步如果输入是1万token你会怎么优化常见的回答方向包括稀疏注意力、局部窗口注意力、线性注意力近似用核函数把N×N矩阵拆成低秩近似、FlashAttention这种IO优化实现。能说出两三种优化方案哪怕没真正实现过至少说明你对Transformer的工程边界有概念。2.3 位置编码、残差连接与LayerNorm的面试题视角如果面试深入到Transformer block内部位置编码就是绕不开的考点。Transformer没有循环结构token之间的顺序信息全靠位置编码注入。经典transformer用的是三角函数式位置编码它有个特性是不同位置间的相对距离可以通过线性变换表达虽然这个性质的证明比较数学但面试时只需说清周期函数可以提供相对位置模式且能泛化到训练时没见过的长度就够用了。残差连接和LayerNorm在面试里的标准问法是没有它们会发生什么。残差连接解决的是深层网络梯度消失、训练不稳的问题让梯度能直接跨层传播LayerNorm是对一个token的所有特征维度做归一化它和BatchNorm的核心区别是NLP任务序列长度不定BatchNorm在batch维度做统计会导致预测时长度不一致的问题而LayerNorm只依赖当前样本自身统计对batch大小不敏感所以Transformer里清一色用LayerNorm。能把这个为什么不用BatchNorm讲清楚会特别加分。3. 大模型兴起后的新式提问预训练、微调与LoRA3.1 BERT与GPT的架构差异双向与单向encoder与decoder大模型方向的面试很少直接问什么是Transformer而是从BERT和GPT的对比入手。高频题是为什么BERT适合做理解类任务GPT更适合做生成类任务。核心差异在于注意力掩码BERT是双向Transformer每个token能看到上下文两侧的信息GPT是自回归式的单向Transformer每个token只能看到左侧的历史内容。一个学的是完形填空式的理解表征一个学的是下一词预测式的生成分布。面试常见进阶问法是BERT和GPT能不能互换使用答案是有限度的互换。BERT通过改造也能生成但自注意力拓扑决定了它在生成效率上不如单侧模型GPT通过某些方法也可以做语义匹配但看不到后文会损失一部分上下文信息。曾经有些团队尝试用BERT做生成式对话效果很一般原因就在于双向注意力让训练和自回归生成的分布不一致。3.2 微调、Prompt与上下文学习的边界在实习面试里大模型知识的考察通常会简化成你有了解过微调吗为什么现在很多人不微调而用Prompt。这里要分清楚几个概念传统微调是把预训练模型的所有参数拿去做下游任务训练成本高、每个任务都要保存一份模型副本如今更流行的是PEFT参数高效微调和In-Context Learning用Prompt或少量示例引导模型不更新权重。面试官如果继续深挖会问上下文学习为什么有效。诚实的回答是模型的规模化让训练任务中隐含了隐式学习能力模型在预训练阶段见过大量带任务说明和示例的语料推理时能从上下文里提取模式。目前仍没有完全统一的解释面试里说出一个现象级能力学术界还没有定论反而比强行编理由更可信。3.3 LoRA的原理为什么能省显存还能保持效果LoRA最近出现在实习面试中的频率越来越高它其实不难但很多同学没看过原始论文就直接背结论。LoRA的核心是用低秩分解来近似参数更新微调时要更新的增量矩阵ΔW很大假设它是个低秩矩阵就用两个小矩阵A和B相乘来近似训练时只更新A和B推理时再把合并结果加回原模型权重。这里有两个考点值得准备。第一个是为什么更新量倾向于低秩也从侧面解释了为什么约95%的参数完全冻结并不会显著掉点。第二个是LoRA的秩r怎么选经验上常见16和32太小可能表达能力不足太大又失去省内存的意义。面试如果让你设计一个LoRA实验可以答固定r对比不同下游任务效果固定任务扫描r从4到128的效果曲线同时观察验证集loss的变化。我自己的体会是面试官问LoRA更多是想看你对成本-效果这一工程权衡是否敏感——模型选型、参数预算、显存限制这些才是真实工作中每天都在考虑的问题。4. 笔试环节的高频代码五个可以直接背下来的模板4.1 手写softmax与数值稳定性最容易翻车的五分钟笔试和电话面试里经常让你共享屏幕敲代码手写softmax是出现频率相当高的一道题。很多人能写出标准公式但往往忽略数值稳定性问题。import numpy as np def softmax_bad(logits): exp_logits np.exp(logits) # 当logits较大时直接溢出 return exp_logits / np.sum(exp_logits) def softmax_stable(logits): max_val np.max(logits) # 减去最大值指数部分不会溢出 exp_logits np.exp(logits - max_val) return exp_logits / np.sum(exp_logits)代码出来后基本会追问一句为什么要减去最大值。因为exp函数在输入过大时会直接上溢为inf减去最大值可以让所有输入落入负数区域指数的结果被限制在0到1之间。还有一个容易被忽视的细节减最大值不改变softmax的输出因为分子分母同时乘了exp(-max)的常数因子。这道题一定要真的练到闭眼默写的程度因为很多时候不是单独考而是作为Transformer或attention实现的一部分出现。如果写不出稳定版本后面的大题再对也白搭。4.2 手写单头/多头注意力变压器的最小可运行片段很多公司笔试会让你直接实现简化版的多头注意力。对实习岗来说如果没要求训练到收敛只是验证前向逻辑正确那么中间维度可以简化但代码结构要完整。import numpy as np def attention_pytorch_like(Q, K, V): d_k Q.shape[-1] scores np.matmul(Q, K.transpose(0, 2, 1)) / np.sqrt(d_k) weights softmax_stable(scores) out np.matmul(weights, V) return out, weights代码本身不复杂真正的考点在注释和边界处理。比如Q、K、V的shape分别是什么batch维度在哪mask如何处理padding mask和因果mask必须在softmax之前将对应位置设置为一个极大的负数如-1e9注意力权重要不要做dropout训练时做推理时不做这些口头答清楚比跑通75%的用例更让面试官放心。如果时间足够我建议再准备一下缩放点积注意力的等价实现用torch.nn.functional.scaled_dot_product_attention这种底层API写出更简洁的版本也能体现代码品味。4.3 计算困惑度Perplexity模型评价指标的代码实现幻觉类生成的评价指标往往会被问除了BLEU、ROUGE你还会用什么这时候Perplexity是必答项。代码题偶尔会直接要求实现。def perplexity(log_probs, token_mask): # log_probs: [batch, seq_len]每个位置的对数概率 masked log_probs * token_mask total_log_prob masked.sum() total_tokens token_mask.sum() loss -total_log_prob / total_tokens return np.exp(loss)这里最容易犯的错误是忘了用mask剔除padding token。实际项目里我们把不定长输入padding到同一长度后计算指标如果不把padding部分过滤掉困惑度会被一堆无意义的填充位置稀释数值完全失真。这道题的本质是考察对序列建模中有效token的理解能力。4.4 编程题常客文本分类数据集的F1计算与混淆矩阵笔试里还经常考察经典的分类指标计算让你不调用sklearn手写F1。我见过一种评分标准写对precisio、recall、F1各公式只给一半分必须把多分类的F1类型说明白也就是micro与macro的区别。代码思路建议分两步先算混淆矩阵再基于混淆矩阵算三类指标。macro-F1是对每个类别的F1取平均每个类别权重相等对类别不均衡很敏感micro-F1是先把所有类别的TP、FP、FN累加再算F1受高频类别主导。在NLP任务里实体识别和情感分类更关注macro-F1而推荐系统里的短文本分类常用micro-F1。面试时如果能补一句样本极度不均衡时macro-F1更适合反映小类效果会显得更有实践经验。5. 场景题和开放题如何把会做题变成会解决业务问题5.1 被问到数据不平衡时的完整答题链路场景题里数据不平衡基本是100%会出现的题通常表述为你的训练数据里正样本只占5%怎么办先别急着回答过采样或SMOTE。面试官想听的其实是两个层面的东西检测与处理策略。检测层面先说观察统计正负样本比例、分时段或分渠道看分布是否漂移。处理层面的回答建议分三类数据层面采样、合成、扩充、算法层面class weight、focal loss、评估层面更换指标为PR曲线而不是accuracy。这还不够最好补一句Resampling在训练时如何处理验证集——验证集永远不要做任何重采样避免评估分布偏差。如果能结合自己的实际项目来讲比如实名认证场景的欺诈识别里负样本只有千分之三我的做法是保留全部正样本并对负样本做欠采样同时用早停法避免过拟合这种回答比背十条方法论强得多。5.2 大模型时代的新开放题怎么评估一次文本生成任务近几年面试末尾经常出现一道新的开放题给你一个客服对话摘要生成任务你有什么方案怎么评估。这种题没有标准答案但答题逻辑可以很清晰。方案部分分两步数据流程上先做指令微调或Few-shot生成时进行长度控制、关键实体约束评测上自动指标用ROUGE做参考但更重要的是人工指标事实一致性有没有生成出不存在的订单号、内容覆盖度用户诉求有没有被提到、语言流畅度。最后一定要给出自己的取舍原则比如客服摘要宁可保守也不能编造这条安全原则会让面试官看到你有实际业务判断而不是只会堆叠模型。5.3 时间不够时的复习优先级我的亲测建议如果你的复习时间只剩两周我建议按这个优先级来Transformer结构细节self-attention、位置编码、LayerNorm BERT/GPT主线演进 词向量与分词基础 手写softmax和attention F1和Perplexity计算 常见场景题话术。有一个容易踩的坑是花大量时间追最新的论文细节比如某个特定模型的具体参数量、某个特别新的采样器但对实习岗来说面试官更看重基础是否扎实、代码能不能跑通、面对开放场景有没有解决问题的框架。把一次面试当成一场开卷考试来准备核心公式和代码闭眼能写场景题提前列好发现问题→分析原因→给出方案→如何评估四步话术通过率会高很多。我自己的记忆中每次面试失败或效果不佳复盘后都能归因到同一个症结试图用看过很多来掩饰没有亲手写过。NLP面试不像纯背知识点的考试它需要你像调试模型一样调试自己的知识结构——哪一个环节没跑通面试官一追问就会暴露。所以如果只能给一条建议那就是把上面这段里的每道题都用笔纸或编辑器完整过一遍第二天再重新回忆一遍。能做到这一层面试时的表达会自然顺畅很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑