FEATURED · 精选文章

网易NLP算法笔试题复盘:KMP与BM25考点全解析

发布时间 / 2026/9/1 23:14:11
来源 / 创域科博编辑部
栏目 / 资讯中心
网易NLP算法笔试题复盘:KMP与BM25考点全解析 2018年秋招季我拿到网易NLP算法工程师笔试卷的时候第一反应是这卷子怎么那么像“机器学习综合测试”单选、多选、计算、编程全都有而且NLP真正相关的题目并没有想象中那么多。后来我复盘才发现这正是网易这类大厂校招NLP岗的典型出题思路——基础题过滤一部分人NLP理论题筛选懂行的人最后用算法题挑出能写代码的人。这篇文章就围绕这套NLP算法笔试卷把它的考点结构、每类题背后的逻辑、以及我实际踩过的坑完整拆给你看。无论你是在准备校招还是想验证自己的NLP基础都能从这里找到一套可执行的复习框架。1. 先看整体这卷子到底在考什么1.1 网易NLP算法岗的定位不是纯模型岗也不是纯工程岗网易的NLP工程师不是纯研究岗。当时他们有有道词典、云音乐、新闻客户端等产品线文本处理场景覆盖搜索、翻译、推荐和内容审核这意味着笔试必须兼顾“懂模型原理”和“能写代码”两个维度。所以这张卷子不像某些公司那样只考深度学习八股而是按照三层结构来设计第一层是数学与机器学习基础用来过滤连朴素贝叶斯、信息熵都搞不清楚的人第二层是NLP领域知识用来判断你是否有真正的文本处理经验而不是只会调transformers第三层是数据结构与算法用来评估你写代码的硬功夫。这套分层逻辑非常重要。很多考生拿到卷子后死磕Transformer的细节结果被前面的贝叶斯计算题和KMP填空打懵。方向错了再努力也白搭。1.2 题型结构与分值分布从2018年网易校招NLP岗的普遍出题风格来看这套卷子预计包含单选、多选、填空和两道左右的编程题。我用一个表把模块和考查目标整理出来题型大致占比考查目标单选/多选30%-40%概念辨析、模型原理、工程常识填空/计算30%概率计算、熵、KMP、BM25等具体计算编程题20%-30%字符串匹配、动态规划、数据结构落地如果考试时间是90分钟平均每道选择题最多只有2分钟。这意味着你看到题目必须马上反应出考点而不能现场推导。我当年就是在一道“朴素贝叶斯是否要做拉普拉斯平滑”的多选题上纠结了五分钟直接挤占了后面的编程时间。1.3 从热搜词反推当年考查重点我在复盘这套卷子时顺手把NLP和算法相关的热搜词拉了一遍。出现频率最高的几个词是KMP算法、BM25算法、排序算法、K-Means、KNN、贪心算法、Dijkstra算法、堆排序、编辑距离。这个清单非常有代表性。它说明网易NLP笔试的考点全部集中在“经典”和“基础”这两个词上。像粒子群算法、PID控制这类热词虽然也在榜单里但基本不会出现在NLP算法工程师的笔试卷里看到了不用慌那些是通用算法话题不是岗位重点。真正需要重视的是KMP为什么反复出现因为NLP工程师每天都跟字符串打交道匹配、分词、敏感词过滤全都要用。BM25为什么出现因为搜索和召回是NLP落地的重要场景。排序算法为什么出现因为TopK词频统计、堆排、快排都是海量文本处理的底层能力。2. 机器学习与数学基础最容易丢分的选择题和计算题2.1 朴素贝叶斯从不缺席的送分题朴素贝叶斯几乎是所有NLP笔试的保留节目。它简单、经典而且能考出你概率论扎不扎实。常见考法是给一组训练数据让你计算某个词在类别下的条件概率。举个例子假设训练集中垃圾邮件8封其中4封含“优惠”这个词正常邮件12封其中1封含“优惠”。词表大小为20问P(优惠|垃圾)是多少如果不做平滑答案是4/80.5。但标准答案应该做拉普拉斯平滑即分子加1分母加词表大小得到(41)/(820)5/28。这个坑几乎每年都有人踩。我记得当时考场上就有人写出0.5没有考虑平滑。看起来没什么但这一分丢得特别冤。笔试中凡是遇到概率估计先问自己一句要不要平滑基本就稳了。2.2 信息熵与困惑度算一次就记住信息论是NLP的理论地基。信息熵、条件熵、互信息、交叉熵、困惑度这些概念几乎必考。最基础的题型是给一个分布让你算熵。比如一个二分类问题P(0)0.8P(1)0.2熵就是H -0.8 × log₂(0.8) - 0.2 × log₂(0.2) ≈ 0.722 bit注意这里log的底数一般是2答案单位是bit。如果你用自然对数算虽然数字不同但单位变成了nat笔试里通常要求bit所以要看清题目要求。我当时就在这个细节上吃过亏。更进阶的考法是语言模型的困惑度。困惑度定义为交叉熵的指数形式perplexity 2^H。如果一个语言模型在测试集上的交叉熵是2.5那么困惑度就是2^2.5≈5.66。困惑度越低说明模型对文本的预测越准。2.3 模型评估指标别只会调sklearn准确率、精确率、召回率、F1、ROC曲线、AUC这些指标在笔试里的错误率出奇地高。原因是大家平时用sklearn都是直接调classification_report很少有人手算过。一个典型题目NER模型预测出10个实体其中6个预测正确真实实体一共有8个。那么精确率6/100.6召回率6/80.75F12×0.6×0.75/(0.60.75)≈0.667。这类题本身不难但有一个隐藏考点经常被忽略在正负样本极不均衡的场景下为什么F1比准确率更可靠如果1000个样本里只有5个正样本模型全预测成负样本准确率是99.5%但没有任何实际意义。NLP的很多任务比如实体识别、情感分类正负样本天然不均衡所以这个知识点不是简单的概念背诵而是直接对应工程实践。2.4 KNN与K-Means一字之差天壤之别KNN和K-Means是笔试选择题最爱的“混淆项”。一个是有监督一个是无监督一个的K是邻居数一个的K是簇数。我把它们的核心区别整理成一张表模型监督类型K的含义训练过程典型弱点KNN有监督邻居数量无显式训练预测时计算距离预测慢维度灾难明显K-Means无监督簇数量迭代分配样本并更新中心对初始中心敏感K需要人工指定还有距离度量的问题。文本向量通常用余弦相似度而不是欧式距离因为文本向量维度高且稀疏欧式距离受向量长度影响太大。如果你在答题时能写出“余弦相似度不关心向量模长只关心方向”这个理由这题基本就拿满了。3. NLP专项从特征工程到深度模型的全面考查3.1 文本表示从one-hot到word2vec必须讲清楚NLP岗位笔试几乎不会漏掉词向量。从one-hot讲起它有两个致命问题一是维度会随词表膨胀二是任意两个词之间没有语义关系。分布式表示通过低维稠密向量解决了这两个问题Word2Vec是其中的代表。Word2Vec有两种架构CBOW用上下文词预测中心词Skip-gram用中心词预测上下文词。这个区别是选择题的高频考点。很多人记反了我提供一个记忆方法CBOW的“C”是Context输入上下文输出中心词Skip-gram则反过来。还有一个高频考点负采样和层次Softmax分别解决了什么问题。负采样解决的是Softmax分母遍历全词表计算量过大的问题层次Softmax用哈夫曼树把归一化从O(V)降成O(log V)。这里有个容易混淆的地方负采样不是对负样本做简单的“随机采样”而是按词频的3/4次幂加权采样这个细节如果多选题里出现可以帮你排除错误选项。当年有这么一个模拟题下列哪个不是Word2Vec的优化技巧A. 负采样 B. 层次Softmax C. 高频词下采样 D. 批量归一化。答案是D批量归一化是深度神经网络里用的跟Word2Vec训练优化无关。3.2 BM25与检索一道能算出来的题这些热搜词里BM25算法出现得非常显眼。很多备考NLP岗位的同学会把精力全放在深度模型上却忽视了搜索召回领域的基础算法这在笔试里相当吃亏。BM25本质上是TF-IDF的改进版。它的核心思想是词频对相关性的贡献不是线性的而是存在一个饱和上界同时文档长度越长词频的参考价值越低所以要做长度归一化。BM25的公式如下score(D,Q) Σ IDF(q_i) × [ f(q_i,D) × (k11) ] / [ f(q_i,D) k1 × (1 - b b × |D| / avgdl) ]其中 k1 一般取1.2到2.0控制词频饱和的速率b 一般取0.75控制文档长度归一化的强度。IDF部分的标准形式是 log((N - n(q_i) 0.5) / (n(q_i) 0.5))N是文档总数n(q_i)是包含该词的文档数。笔试中如果出BM25计算题一般会给一个微型文档集和查询让你手动算文档得分。思路是先拆成IDF部分和词频饱和部分分别计算最后累加。只要把公式写对并代入参数得分就很稳。3.3 序列标注与CRF传统方法的骨架2018年的NLP岗位对传统方法还有比较高的要求CRF就是其中之一。CRF是序列标注任务的老牌算法常被用来做分词、命名实体识别、词性标注。笔试题一般从两个角度切入一是比较HMM、MEMM、CRF的区别二是给定一个简单线性链CRF要求计算某个标注序列的得分。三者的比较是一个经典考点模型建模对象核心问题HMM联合概率 P(X,Y)生成式模型假设观测独立MEMM条件概率 P(YX)逐位置归一化CRF条件概率 P(YX)全局归一化CRF能考虑标签之间的转移关系这是它比Softmax逐位置分类强的地方。比如中文分词里“B”后不能直接跟“E”CRF通过转移矩阵天然约束了这种非法标签序列。这个特性是笔试题最常考的得分点。3.4 分词与文本预处理越基础越容易漏“nlp新闻处理”这个热词说明实际业务场景里的文本处理比纯理论更常被考到。中文分词和英文不一样没有天然空格分隔。笔试题常考正向最大匹配和逆向最大匹配的区别以及未登录词怎么识别。最经典的分词歧义示例是“乒乓球拍卖完了”。正向最大匹配可能切分成“乒乓球/拍卖/完了”逆向最大匹配更可能得到“乒乓球拍/卖/完了”。两种切法都合法但语义完全不同。这种题考的是你对最大匹配算法流程的理解而不是语文水平。未登录词识别也是重点。分词器遇到词典里没有的新词比如人名、地名、网络热词容易切错。工业界的做法是提取候选片段并用统计量判断比如互信息和左右熵判断一个片段内部是否紧密、上下文是否多样。这些虽然不是特别难的算法但经常出现在多选题中平时不注意很容易漏选。4. 数据结构与算法KMP这种题真的会手写吗4.1 KMP的next数组一道题考出内功热搜词里有一个非常具体的KMP题目“对于模式串pabacaba求其next数组”。这基本就是当年笔试的原题风格。KMP是字符串匹配算法核心思路是利用已匹配的信息避免主串指针回退。while循环里主串不回溯只有模式串跳到next数组指定的位置。而next数组记录的就是模式串每个位置的“最长相等前后缀长度”。以 pabacaba 为例从1开始编号next[i]定义为前i个字符组成的子串的最长相等前后缀长度。手算过程如下i子串前缀集合后缀集合最长相等1a空空02abab03abaa, aba, ba14abaca, ab, abac, ac, bac05abacaa, ab, aba, abaca, ca, aca, baca16abacaba, ab, aba, abac, abacab, ab, cab, acab, bacab27abacabaa, ab, aba, abac, abaca, abacaba, ba, aba, caba, acaba, bacaba3所以 next [0, 0, 1, 0, 1, 2, 3]。这里有一个超级常见的坑不同教材对next数组的定义不同有的定义为“最长相等前后缀长度”有的定义为“长度1”有的整体右移一位。答题前务必看清题目给的定义否则计算出的下标差一位结果全错。我当年考场上有道填空题就因为这个“定义差异”丢了整题分。建议平时把所有定义都练一遍答题时先标清楚采用的是哪种定义。4.2 海量数据与TopKNLP场景下的高频题NLP工程师经常面对海量文本题目常以“给定10TB文本统计出现频率最高的100个词”为背景。标准解法是分治加堆对文本做哈希分片将相同词分到同一个文件。对每个小文件内部建立小顶堆维护该文件的TopK。将所有文件的TopK做归并得到全局TopK。这里有个很容易写错的细节找最大的K个元素应该用小顶堆而不是大顶堆。小顶堆的堆顶是当前最小的元素每个新元素比堆顶大就替换堆顶并调整堆最终堆里留下K个最大的元素。如果用大顶堆你只能找到最大的一个元素根本维护不了TopK。堆排序的代码要能手写。不只是TopK堆排序在很多海量场景里都是最优解。我建议复习时把堆排、快排、归并都练到10分钟以内能完整写出来这是硬指标。4.3 贪心、DP与常见编码模板编程题还可能考编辑距离、最大子段和、最长上升子序列。其中编辑距离与NLP的文本相似度直接相关出现概率很高。编辑距离的状态转移方程dp[i][j] 表示将字符串 s[0..i-1] 变为 t[0..j-1] 的最小编辑距离。初始化是 dp[i][0] i dp[0][j] j转移 如果 s[i-1] t[j-1]dp[i][j] dp[i-1][j-1] 否则dp[i][j] min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) 1这道题的失分点经常出现在初始化上。我见过很多人写出转移方程但忘记给 dp[i][0] 和 dp[0][j] 赋初值结果整个数组都是0代码一跑就措手不及。平时练习时一定要把边界条件也纳入习惯。5. 复习路线与临场策略以这套卷为样本的实战建议5.1 时间分配与答题顺序我的建议是选择题快速过计算题精确算编程题最后写。为什么因为选择题即使不会也有概率蒙对而且不需要写过程性价比最高。计算题像KMP、BM25、贝叶斯只要思路对运算量并不大但必须留足时间防止手滑。编程题放在最后因为如果时间不足你还可以写伪代码和状态转移方程阅卷老师会给步骤分。如果总时长90分钟我建议前30分钟完成选择题和填空题中间30分钟做计算题最后30分钟留给编程题。这个节奏我实测过很多次比从编程题开始写要稳得多。5.2 计算题的防坑清单我把这套卷里最常出现的坑集中列一下KMP next数组的下标起始位置先看题目定义再动手算有的从0开始有的从1开始有的要加1。朴素贝叶斯是否做了拉普拉斯平滑只要算条件概率先考虑加不加平滑然后说明理由。熵的log底数默认log₂单位是bit如果题目明确用ln答案单位是nat。BM25公式中k1和b的默认值k1取1.2-2.0b取0.75参数不同计算结果会差很多。TopK用小顶堆还是大顶堆找最大K个用小顶堆找最小K个用大顶堆别记反。编辑距离的初始化dp[i][0]idp[0][j]j漏了边界条件必挂。5.3 如果重新考一次我会怎么准备复盘这套2018年网易NLP笔试卷我认为最有价值的准备策略是花一周时间把数据结构和排序算法重新手写一轮再用一周把NLP传统模型的原理消化透最后才是追深度模型的细节。2018年之后NLP算法岗笔面试开始大面积转向Transformer、BERT等深度模型但KMP、TopK、朴素贝叶斯、BM25这些“基本盘”从未消失。它们像地基一样无论上层技术怎么迭代都是必考的过滤器。根据我个人的体会笔试最可怕的不是题难而是你明明会但因为在细节上踩了坑导致丢分。所以做完一道计算题后强迫自己回头检查一遍单位、定义、边界条件这个习惯带来的提分效果远比多做十道新题更明显。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻