网易NLP算法工程师笔试卷详解:从词向量到CRF与Transformer

📅 发布时间:2026/9/1 2:34:13
网易NLP算法工程师笔试卷详解:从词向量到CRF与Transformer
网易2018校园招聘NLP算法工程师笔试卷这份题我前前后后看过好几遍也拿它给团队新人做过模拟训练。说实话虽然年份早了点但里面涉及的知识点一点都不过时反而因为它处在深度学习大规模落地NLP的前夜题型既有传统机器学习的基础功底考察又有词向量、RNN这些当时刚成熟不久的技术对现在准备算法岗面试的人来说依然是一份含金量很高的自测材料。我当时刷这份卷子的感受是它不考偏题怪题考的全是一个NLP算法工程师日常真的会用到的东西。比如特征工程、序列标注、文本分类、模型调参甚至包括一些工程实现上的细节。你如果只是背了面试题答案没真正动手做过项目很多题会答得模棱两可。反过来如果你老老实实跑过几个模型做过几次数据清洗这份卷子做起来会非常顺畅。这篇文章我把这份笔试卷的考察范围、核心知识点、答题思路和容易踩的坑全部拆开讲一遍。无论你是正在准备校招的应届生还是刚转行NLP想自测水平的工程师都可以对照着查漏补缺。1. 整体题型设计与考察重点拆解先说这份卷子的整体结构。网易的校招笔试通常涵盖单选题、多选题、编程题和问答/简答题四大块NLP算法工程师的卷子也不例外。不过和纯后端开发岗的笔试卷相比它的编程题占比会少一些更多时间留给算法原理和NLP专项知识的考察。1.1 单选题覆盖机器学习基础与NLP常识单选题大概占20到30分覆盖的范围很广。我印象比较深的几类考点包括机器学习基础比如朴素贝叶斯、逻辑回归、SVM、决策树的基本原理以及它们之间的横向对比。概率统计基础条件概率、贝叶斯公式、最大似然估计、常见分布正态分布、伯努利分布等。NLP基础概念分词、词性标注、句法分析、TF-IDF、N-gram模型的基本性质。数据结构与算法基础栈、队列、二叉树遍历、排序算法的时间复杂度对比。这类题考察的是“底线”。如果一个候选人连朴素贝叶斯的假设前提都说不清楚那后面NLP的题大概率也答不好。我发现很多人在准备这类题时容易陷入一个误区只背结论不理解推导过程。比如逻辑回归的损失函数为什么是交叉熵而不是均方误差如果只记住“因为交叉熵更好”而没有从梯度角度理解过一旦题目换个角度问就容易露馅。1.2 多选题容易丢分的重灾区多选题是校招笔试卷里最让人头疼的部分。少选不得分、错选不得分对知识掌握的精确度要求非常高。这份卷子的多选题主要围绕过拟合的解决方法L1/L2正则、Dropout、数据增强、早停等。词向量表示方法哪些是静态词向量哪些是上下文相关的动态词向量。深度学习激活函数ReLU、sigmoid、tanh各自的优缺点和适用场景。序列标注任务的常用模型HMM、CRF、BiLSTM-CRF等。多选题拿分的关键是对概念的边界把握得足够清晰。比如问到“哪些方法可以有效缓解过拟合”如果你选了“增加训练轮数”这道题大概率就错了。因为增加训练轮数不仅不能缓解过拟合反而可能加剧。这类细节就是多选题的杀伤力所在。1.3 编程题以字符串处理和动态规划为主编程题在NLP岗的笔试卷中通常有2到3道难度介于LeetCode Medium到Hard之间。比较常见的题型包括字符串处理相关最长公共子串、最长回文子序列、字符串匹配等。动态规划类题目背包问题变种、编辑距离、最长递增子序列等。基础数据结构操作链表反转、二叉树层序遍历等。我印象中这份卷子的编程题里有一道和字符串匹配相关的题目考察的是KMP算法或者基于动态规划的匹配思路。这其实非常贴合NLP的实际工作场景因为文本处理本质上就是字符串处理。你不需要掌握竞赛级别的算法技巧但常见的数据结构和算法必须手到擒来。提示做编程题时即使不能给出最优解也一定要给出暴力解法并保证正确性。笔试系统是按测试用例给分的能过一部分就有一部分的分。1.4 简答与综合题拉开差距的关键简答题和综合题是这份卷子的压轴部分通常占30分以上考察的是对NLP技术栈的系统性理解。常见的形式包括解释Word2Vec的训练原理以及CBOW和Skip-gram的区别。设计一个文本分类系统从数据清洗到模型选型到上线部署。分析HMM和CRF在序列标注任务中的异同。给出一个具体的NLP场景要求描述技术方案和评估指标。这类题目没有标准答案考察的是思路的完整性和技术选型的合理性。很多人在这类题上吃亏不是因为不懂技术而是因为缺乏“从问题到方案”的完整链路思考。比如让你设计一个情感分析系统你不能只说“用BERT微调一下”而是要覆盖数据标注策略、样本不平衡处理、模型选型理由、评估指标选择、线上效果兜底等环节。2. NLP核心知识点详解从词向量到序列标注这份卷子的灵魂部分在NLP专项知识而这其中词向量和序列标注又是重中之重。我逐个展开讲顺便把一些容易混淆的概念掰开揉碎。2.1 词向量从One-Hot到Word2Vec再到BERT词向量是NLP领域最基础也最重要的知识点笔试题库里的常客。你需要掌握这条技术演进线的每一环One-Hot表示最简单但维度灾难严重无法体现词与词之间的语义关系。基于共现矩阵的表示通过统计词在语料中的共现频率来构建向量典型方法有SVD分解。这类方法能体现词义的相似性但计算复杂度高且矩阵稀疏。Word2Vec基于预测的方式学习词向量分CBOW和Skip-gram两个变体。CBOW用上下文预测中心词适合小数据集Skip-gram用中心词预测上下文对罕见词更友好。GloVe结合了全局共现统计和局部上下文窗口效果比Word2Vec更稳定。ELMo/GPT/BERT动态词向量能根据上下文调整词的语义表示解决了一词多义的问题。笔试中反复出现的考点是Word2Vec的细节。比如负采样的目的是什么答案是减少softmax归一化时的计算量。层级Softmax又是怎么回事它是通过Huffman树将多分类转化为多个二分类进一步降低计算复杂度。这些细节如果只看过科普文章很难答全必须要读过原论文或者源码才能心中有数。# 一个直观理解CBOW和Skip-gram的例子 # CBOW: 输入上下文[我, 爱], 预测中心词自然语言处理 # Skip-gram: 输入中心词自然语言处理, 预测上下文[我, 爱] # 实际训练时通过nn.Embedding查找词向量并用负采样加速我当时准备这类知识点的方法是自己动手用gensim在中文语料上训练一遍Word2Vec然后看看不同词的相似度结果。比如“苹果”和“香蕉”的相似度是不是比“苹果”和“汽车”高这种直观体验比背十遍原理都管用。2.2 序列标注HMM与CRF的相爱相杀词性标注、命名实体识别、分词这些任务都属于序列标注而HMM和CRF是传统方法里最核心的两个模型。笔试卷几乎必考它们的对比而且往往是简答题。你需要从这几个维度去理解和记忆对比维度HMM生成式模型CRF判别式模型建模思路对联合概率P(X,Y)建模对条件概率P(Y|X)直接建模独立性假设观测独立假设强假设往往不成立不要求观测独立可灵活引入特征特征使用只使用转移概率和发射概率可定义任意特征模板灵活性强训练目标最大化联合概率最大化条件概率典型应用早期分词、词性标注命名实体识别、分词、词性标注我当年刚学这块时对“判别式”和“生成式”的概念总是混淆。后来用了一个生活化类比才彻底搞清楚生成式模型像是一个学生先理解了这门课的知识体系然后能自己生成一份试卷判别式模型则像是一个只见过大量真题答案的考生你给他一道题他只需要判断这个选项对不对不需要理解整门课。CRF在序列标注中的优势在于它可以任意设计特征函数比如“当前词是否以‘有限公司’结尾”“前一个词的词性是否为名词”等这些工程经验可以非常自然地融入模型。而HMM的特征空间受限只能通过转移概率和发射概率体现灵活性差很多。笔试中还可能考到Viterbi算法。你需要知道Viterbi算法是用来在HMM或CRF中求解最优标签序列的是一个基于动态规划的算法时间复杂度为O(T·N²)其中T是序列长度N是标签类别数。这个知识点经常和“用代码实现Viterbi”一起出现在编程题或简答题中。注意Viterbi算法和维特比译码是同一个思想都是通过动态规划维护每个时刻每个状态的最优路径最后回溯得到全局最优。理解了“最优子结构”这一点代码写起来就顺了。2.3 文本表示与特征工程不能只会BERT这几年面试候选人我发现一个明显的问题很多人一上来就说“我用BERT提取特征”但问TF-IDF的公式是什么、n-gram特征怎么构造、如何做特征选择反而答不上来。而在2018年这版笔试卷里文本表示和特征工程的考察是非常扎实的。TF-IDF的核心思想是一个词的重要性与它在当前文档中出现的频率成正比与它在整个语料库中出现的频率成反比。公式是TF × IDF其中IDF log(N/(df1))这里的N是文档总数df是包含该词的文档数。笔试中常见的坑点包括忘记加平滑项1导致部分词分母为0。混淆词频和TF-IDF的区别。不清楚TF-IDF无法体现词序信息这个局限性。n-gram特征在垃圾邮件分类、语言模型等场景中非常常用。二元语法bigram可以捕捉“not good”这种否定结构这是unigram做不到的。但n-gram的缺点是特征空间会爆炸所以需要配合特征选择方法比如卡方检验、互信息等。机器学习分类器的选择也是常考点。朴素贝叶斯适合小样本、特征独立性较强的场景逻辑回归适合需要可解释性的场景SVM在小样本高维场景下表现优秀GBDT/XGBoost则适合特征工程精细、有大量表格特征的场景。你需要根据具体任务的数据规模、特征类型和可解释性要求来选择模型而不是盲目追求深度模型。2.4 深度学习NLPRNN、LSTM与Attention2018年的时候Transformer刚出来不久BERT也还没发布所以这份卷子对深度学习的考察还集中在RNN、LSTM和Attention机制上。但恰恰是因为这些模型相对基础反而更能考察候选人的理解深度。RNN的核心问题是长距离依赖和梯度消失。LSTM通过门控机制遗忘门、输入门、输出门来解决这个问题。笔试中经常让你画LSTM的结构图或者解释三个门各自的作用。我见过很多候选人能把公式背得滚瓜烂熟但问“为什么LSTM能缓解梯度消失”就卡住了。其实关键在于细胞状态C的传递路径是线性的梯度可以通过这条路径无损地流动从而避免梯度快速衰减。Attention机制的出现解决了一个更根本的问题无论序列多长模型都能直接关注到任意位置的信息。Attention的计算方式可以概括为三步计算Query和所有Key的相似度通过softmax归一化得到权重然后对Value加权求和。自注意力Self-Attention则是Query、Key、Value都来自同一个输入序列让每个词都能看到句子中其他所有词。Transformer的核心在于多头注意力机制和前馈神经网络以及位置编码的引入。笔试中常见的Transformer考点包括为什么要做多头为了让模型从不同子空间学习相关信息。为什么需要位置编码因为Self-Attention本身没有顺序信息必须额外注入。为什么使用LayerNorm而不是BatchNorm因为NLP任务中序列长度不定BatchNorm对batch维度的统计依赖在变长输入下不稳定。这些知识点在2018年可能还属于加分项但在今天的NLP面试中已经是必考内容了。如果你在准备校招建议把Transformer原论文《Attention Is All You Need》从头到尾读一遍把每个细节都抠透。2.5 常见的NLP任务与技术选型除了模型本身笔试还会考察你对NLP任务的整体认知。比如给你一个具体任务问你解决方案和评估指标。常见的NLP任务包括文本分类情感分析、垃圾邮件检测、新闻分类等。常用的评估指标有准确率、精确率、召回率、F1值。序列标注命名实体识别、词性标注。常用的评估指标是F1值尤其关注实体级别的F1。文本匹配语义相似度计算、问答匹配。常用的评估指标有准确率和AUC。机器翻译/文本生成BLEU、ROUGE等指标。文本摘要ROUGE指标。问答系统EM精确匹配和F1。我建议你准备一张思维导图把每个任务对应的经典模型和评估指标整理成一张表考前过一遍会非常高效。3. 实操过程与答题策略如何在考场上稳住笔试不仅仅是知识的考察更是策略的较量。我当年参加校招时最大的教训是在单选题上纠结太久导致编程题没时间写完。所以我想把答题策略单独拿出来讲这块的价值一点都不比知识储备低。3.1 时间分配前30分钟解决客观题一份笔试卷的时长通常是90到120分钟。我建议的时间分配方案是前30分钟完成所有单选和多选题。遇到不确定的题先标记不恋战凭第一感觉选择做完后如有时间再回来检查。中间30到40分钟完成编程题。先读题判断难度优先做自己最有把握的那道。编程题宁可写得慢一点也要保证思路清晰、边界条件覆盖完整。最后30分钟完成简答题和综合题。这类题分值大需要写的内容多一定要留足时间。有个小技巧编程题如果卡了15分钟还没有完整思路果断放弃这题的满分先写暴力解拿到部分分后再看下一题。校招笔试的通过线通常不是满分而是超过某个比例所以不要苛求每题都对。3.2 选择题的排除法与知识迁移在做选择题时排除法是效率最高的策略。尤其是多选题有些选项之间存在明显的逻辑对立关系比如“L1正则化会导致特征稀疏”和“L1正则化不会导致特征稀疏”必然是一对一错这时候至少能排除一个。还有一个技巧是利用知识迁移。比如你不确定BERT的预训练任务是否包括“预测下一句”但你知道NSPNext Sentence Prediction的英文全称就可以确定这个选项是正确的。所以平时积累时最好把技术名词的英文缩写和中英文全称对应起来这对做选择题很有帮助。3.3 简答题的答题框架像写技术方案一样作答简答题的作答方式非常影响得分。很多候选人知识点都知道但写出来的答案没有逻辑考官很难给高分。我建议按照“背景分析 → 技术选型 → 原理说明 → 优缺点分析”的框架来写。举个例子如果题目是“请设计一个新闻分类系统”你可以这样组织答案背景分析明确任务定义——输入一段新闻文本输出它所属的类别如体育、财经、科技等。明确数据来源和规模以及评测指标。数据预处理文本清洗去除HTML标签、特殊符号、分词中文场景、去停用词、构建词表等。特征工程与模型选型中小规模数据可以用TF-IDF 逻辑回归或SVM大规模数据可以用Word2Vec TextCNN如果数据量非常大且有标注质量保证可以用BERT微调。评估与迭代离线评估用准确率、F1值并做错误分析线上部署后关注日志持续收集bad case进行迭代。这样的答案既有体系感又有实操细节比只写“用BERT”要丰富得多。3.4 编程题的常见边界条件编程题的测试用例往往包含很多边界条件我在这里整理一个常见清单做题时逐项对照空字符串或空数组很多算法在空输入下会直接报错需要特殊处理。只有一个元素排序、去重、匹配类问题常考。所有元素都相同滑动窗口、单调栈类问题容易在这类输入上出bug。输入包含大量重复值快速排序如果不做优化在重复值情况下会退化。整数溢出Java的int类型做加法时容易溢出需要转成long。字符大小写混用字符串比较、正则匹配时容易遗漏。我当时有个习惯就是每道编程题写完后至少手动跑三个测试用例正常用例、极端用例和空用例。这个习惯帮我避免了至少三分之一的无谓失分。4. 常见问题与排查技巧实录在做这份卷子以及后续准备校招的过程中我积累了不少常见问题和排查思路整理成速查表供大家参考。4.1 低频却重要的数学基础为什么总是丢分数学基础是NLP算法工程师的基本功但也是最容易被忽视的。我发现很多人在准备笔试时把精力都放在模型原理上忽略了线性代数、概率论和信息论的知识结果在选择题上栽跟头。比如“矩阵特征分解的意义是什么”“什么是条件熵”“KL散度的非对称性怎么理解”这些问题在笔试中出现的频率不低。尤其是KL散度它在很多NLP模型中都有应用比如变分自编码器VAE、主题模型LDA等。你需要知道KL散度的公式、它的非负性、以及它和交叉熵的关系。我在备考时用了一个笨但有效的方法把“信息论、概率论、线性代数”这三门课的核心公式全部手写推导一遍然后整理成一张A4纸考前反复看。这个方法虽然费时间但对打牢基础非常有帮助。4.2 关于Word2Vec的三个常见误区第一个误区是“Word2Vec得到的词向量可以用来表示句子”。严格来说Word2Vec是词级别的表示句子的表示需要对词向量做池化或其他操作而且这种简单池化的效果往往不如专门的句子表示模型。笔试中如果出现这个判断题答案是“错误”。第二个误区是“同一个词在不同的语境中对应不同的向量”。Word2Vec学到的词向量是静态的无论“苹果”指的是水果还是手机品牌它用的是同一个向量。真正能区分一词多义的是ELMo、BERT这类动态词向量模型。第三个误区是“训练Word2Vec时目标函数是让词向量尽可能准确地表示词的语义”。更准确的说法是训练目标函数是最大化词在上下文中的预测概率词向量只是训练过程的副产品。这个细微的差别在笔试中很容易被考察。4.3 过拟合考点为什么总答不全过拟合是机器学习笔试的高频考点但很多人答不全。全面答案应该包括以下几个部分从数据角度增加训练数据、数据增强、对数据进行清洗。从模型角度降低模型复杂度、简化网络结构。从训练角度早停Early Stopping、Dropout、正则化L1/L2、Batch Normalization。从集成角度Bagging方法如随机森林通过集成降低方差。笔试中经常出现的干扰选项包括“增加训练轮数”错误会加剧过拟合、“使用更多的特征”不一定需要看特征质量、“降低学习率”与过拟合没有直接关系。4.4 注意力机制在Transformer中为什么是缩放点积Transformer原论文中使用的Attention是缩放点积注意力Scaled Dot-Product Attention公式是Attention(Q, K, V) softmax(QK^T / sqrt(d_k)) V笔试中常问的问题是为什么要除以√d_k标准答案是当d_k很大时Q和K的点积结果幅度会很大导致softmax的梯度变得极其小不利于训练。除以√d_k可以将点积的方差控制在一个合适的范围保持梯度稳定。我当年备考时特意做了个小实验验证这一点随机生成两组维度为64的向量计算点积均值和方差发现方差确实很大。用维度开根号做缩放后方差就回到正常范围了。这个直观验证让我对这个知识点印象极深。4.5 文本分类时样本不均衡怎么办样本不均衡是NLP实战中的常见问题笔试也会以综合题的形式出现。解决方案可以分为几个层面数据层面对少数类进行过采样如SMOTE算法对多数类进行欠采样或者使用数据增强生成更多少数类样本。损失函数层面在损失函数中为少数类分配更高的权重比如focal loss。评估指标层面不能只盯着准确率要看精确率、召回率、F1值尤其关注少数类别的F1。后处理层面调整分类阈值而不是默认使用0.5。我当时在一个实际项目中处理过情感分类的样本不均衡问题把阈值从0.5调整到0.3之后少数类负面情感的召回率提升了近20个百分点虽然精确率略有下降但整体F1是明显提升的。这类实战经验如果能写在笔试卷的答案里会非常加分。5. 给大家的几点复习建议与个人体会这份笔试卷覆盖的知识面非常广如果你只是零散地刷题效果会比较有限。我的建议是以这份卷子为线索画一张完整的知识图谱把每个考点对应到具体的原理和实战场景形成你自己的知识体系。在时间分配上我把复习过程拆成两个阶段。第一阶段用两周左右把机器学习基础、NLP基础理论和深度学习基础全部过一遍重点搞懂之前提到的一词多义、序列标注、注意力机制等核心概念。第二阶段用一周的时间大量刷题尤其是编程题和简答题并严格按照考试时间卡表训练。最后分享一个我的个人体验笔试考察的知识点再多再杂归根结底还是在检验你是不是一个能解决实际问题的人。如果你在准备时能把每个知识点都问一遍“这个在什么业务场景下能用上”你的理解深度会远超那些只会背考点的人。这份卷子里有一道题让我印象很深大意是给出一段真实的中文新闻文本要求设计一个关键词提取方案。很多人上来就写jieba的TF-IDF但真正有经验的人会先对语料做清洗然后考虑是使用有监督的关键词标注数据还是无监督的统计方法甚至还会想到基于TextRank的图排序算法。这就是差距所在。希望这份卷子的解析能帮你缩短这个差距。