本人去年经历了2020届校招,并如愿拿了包括BAM等在内的国内Top互联网企业算法岗offer。现分享自己总结的面试需要准备的一些知识点,主要针对找搜索、推荐或nlp岗位的同学:
1. coding基础,Leetcode至少刷200题+剑指offer(可在牛客网刷),尤其是链表、树、动规。
2. 机器学习基础,
我主要看的李航老师的统计学习方法(LR,SVM,EM,最大熵,集成学习等)),值得反复看好几遍,每一遍都会加深理解;尤其是学习理论:贝叶斯决策理论/假设空间概念/经验风险, 结构风险/各类损失函数之间的区别与联系/极大似然估计, 最大后验估计, 贝叶斯估计的区别与联系。
树模型系列论文深入理解,gbdt,xgboost,lightgbm;
深度学习基础:过拟合解决方法,dropout,bn,ln等;学习器,各种optimizer原理及对比;BP原理;各种激活函数等,最好用numpy手写一遍MLP,包括train+infer。
概率图模型:LDA,ELBO,KL散度(e.g., 最小化KL散度和极大似然法联系),变分推断,吉布斯采样等。
评估体系:Precision, Recall,F1, AUC (实现+内在含义,多种角度理解,如正负样本偏序关系角度),还包括交叉验证等。
这个部分重点关注原理+推导。
关于面试重点:树模型知识,推荐wepon的总结:
GBDT算法原理与系统设计简介
(http://wepon.me/files/gbdt.pdf)
贝叶斯决策理论是机器学习,深度学习的基础。这里头最重要的MLE, MAP, 贝叶斯估计的区别与联系,参考李文哲老师的总结:
3. nlp相关的知识:
nlp常见的概念:词法、句法、语义等;困惑度等。
了解重要的四大类nlp任务:分类任务、序列标注任务、句子关系判断任务、生成式任务。
传统的模型:语言模型、HMM、CRF、LDA等;
深度学习模型:Seq2Seq,Attention (还包括图像领域常用于nlp的模型,CNN, ResNet等);
预训练模型
word2vec相关的 (Glove和PPMI等);
bert相关的(transformer ELMo GPT XLnet ALnet transformerXL).
关于Seq2Seq,Attention的总结可关注我的博文:
深度学习中Attention机制调研
(http://xtf615.com/2019/01/06/attention/)
关于nlp的学习可关注张俊林老师的知乎专栏文章:
从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 (https://zhuanlan.zhihu.com/p/49271699)
放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器比较(https://zhuanlan.zhihu.com/p/54743941)
Bert时代的创新:Bert应用模式比较及其它(https://zhuanlan.zhihu.com/p/65470719)
另外,推荐艾伦研究所的开源项目allennlp,包括各种流行的模型+任务的源码,对于系统了解nlp处理流程以及深入理解各类任务有帮助:
An open-source NLP research library, built on PyTorch.
(https://github.com/allenai/allennlp)
4. 数学题,比如贝叶斯公式算后验概率(求概率),优惠券收集问题(求期望),蓄水池问题(采样)等。还包括一些偏智力的题。这类问题主要难在理解题意,对数学中的概率/期望/微积分/极限等知识点会有些要求。之前看到的部分概率题总结,排版有点问题,凑合着看一些题型。
互联网面试概率题总结(https://blog.csdn.net/BertDai/article/details/78070092)
5. 工程相关的问题,如大数据处理或分布式系统原理等。对于大数据题,如:海量数据求中位数等,主要涉及到哈希,堆,bit等数据结构,外加map-reduce编程范式的灵活应用。这类题型的总结百度一下非常多。
6. 找搜索推荐岗位,推荐模型,点击率预估模型,排序学习learning to rank模型,这部分的学习要结合工业界+学术界,比如:
传统的方法:LR+GBDT(facebook文章),FM,FFM,LambdaMART。
深度学习的方法:Wide & Deep,DeepFM等。还包括最新的paper:CTR模型: DIN, DIEN等;多任务学习:MMoE、ESSM等。
可参考我的万字推荐系统和排序学习调研博客:
推荐系统调研 (http://xtf615.com/2018/05/03/recommender-system-survey/)
排序学习调研 (http://xtf615.com/2018/12/25/learning-to-rank/)
另外:张俊林老师的专栏文章系统总结了推荐系统技术发展,值得关注:
推荐系统技术演进趋势:从召回到排序再到重排 (https://zhuanlan.zhihu.com/p/100019681)
对于深度CTR模型,推荐阿里的学长在github的开源项目DeepCTR,可以深入了解各类state of the art的模型以及其实现细节:
Easy-to-use,Modular and Extendible package of deep-learning based CTR models.(https://github.com/shenweichen/DeepCTR)
另外,推荐一篇关于“深度CTR模型的发展过程”梳理文章,非常值得学习!
CTR预估模型发展过程与关系图谱 (https://zhuanlan.zhihu.com/p/104307718)
7. 最新的科研趋势,GNN图神经网络相关的,DeepWalk,Node2Vec,GCN,GraphSAGE,PinSAGE等。还包括强化学习;GAN;知识图谱等。关于GNN的前沿技术可关注我的博客:
图卷积神经网络原理详解 (http://xtf615.com/2019/02/24/gcn/)
图表示学习Encoder-Decoder框架 (http://xtf615.com/2019/12/04/representation-learning-on-graphs/)
另外,可以关注各大顶会的tutorial,这是我了解最新前沿技术的主要途径之一。现分享我整理的近2年里核心的GNN的paper,survey,以及各大顶会的tutorial (KDD, AAAI, WWW, CIKM等), 提取码: bwuw
GNN资料整理分享 (https://pan.baidu.com/s/10zPlVgD6N5hCj_Ddbnvz0w)
另外,关于图表示学习的编程实践可以参考阿里开源的github项目:
A distributed graph deep learning framework. (https://github.com/alibaba/eulerhttps://github.com/alibaba/euler)
其编程风格是按照我上面分享的“图表示学习Encoder-Decoder框架”来组织的;可以细致观看各类Encoder实现 (如ShallowEncoder, SageEncoder等);node2vec实现;底层C++图引擎可以关注random walk和alias sampling的实现。(仅作为学习。这个框架维护的不够及时,灵活性以及分布式实现上仍然存在很多不足。另一个AWS开源的框架DGL(github.com/dmlc/dgl)更新的更频繁,支持多种深度学习框架,可能更值得关注)。
最后总结下,个人认为算法岗要找的好,除了本身的长期积累沉淀的硬实力之外(Paper,比赛,实习,项目);主要考核的主要就是三个方面的能力:
编程基础 (数据结构和基础算法。以应对面试中的coding环节)
数学基础 (各种机器算法的原理,推导和数学题。以应对面试中的对知识深度的考察环节)
前沿知识广度 (follow时下科研趋势,如CTR,GNN,Bert,知识图谱等,以及了解工业界中推荐系统、搜索引擎的整体流程。以应对面试中的对知识广度、开放性问题的考察等环节)。
硬实力有的前提下,这三个方面扎实的话,我觉得拿offer是完全可以的。
当然,包括谈吐交流、找对内推人、运气都是技术本身之外非常重要的东西。
感谢2020届校招帮助过我的学长学姐们,希望大家今年也能顺利找到心仪的工作。
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏