春招面经 字节AI nlp算法实习面经 已拿offer
背景美本cs+英硕ai在读 无paper无实习无研究无比赛。
方向是深度学习、nlp,项目主要是情感分析 和模型蒸馏。leetcode 刷了大概二三十道的样子。
今年在项目组同学的建议下准备一起找个暑期实习,几个认识的人能去一个厂实习最好。前后投了循环智能、阿里、字节、百度、腾讯、快手六个厂。其中快手简历投了以后就没回复了。目前拿到了字节的offer,百度和阿里还在面试流程中。全程只有百度做了笔试,其他公司都是HR直接捞简历开始面试。(项目组里四个人,我去了字节,一个去了腾讯,一个去了阿里,还有一个读phd,大家都有光明的未来。)
1.循环智能
循环智能是春招拿到的第一个面试,一面就挂了。感触比较深的是这个公司的面试一直在问一些基础概念和api的东西,基本上不会参考你的简历之类的。主要问到了
- 动量优化
- adam优化
- bert调参
- bias和variance的区别
- svm为什么要用核函数
- transformer多头的意义是什么
- 之类的基本概念
面试一小时,基本上都是问答式的轰炸,忘了最后有没有让手撕代码了,反正挂了。
2. 字节跳动
其实字节的面试经历比较复杂,先是投的搜索部门的nlp实习,两轮技术面一轮hr面通过后等了大半个月,应该是没有hc了,被拒。之后hr给我主动转岗到商业变现部门,面了一面,发现方向不对,这个部门的岗位是做机器学习的。然后又被转岗到data部门,面了一下推荐算法实习,方向依旧是深度学习和nlp,两轮技术面,一轮hr面,拿到offer。
其实搜索部门的面试体验非常好,两位技术面的面试官都很友善,技术力也很足,甚至对于我手上做的项目给了很多优化的建议。但是整个部门的面试流程效率特别低,面试结束后等了三周才给出拒绝的结果,非常搞人心态+影响后续岗位的面试流程。
第一轮技术面:1小时
前半小时面简历,主要问了下我项目过程中提到的模型,实现的时候遇到的问题,优化方案之类的。
- 让我手写了下交叉熵的公式
- 问了下模型蒸馏的损失函数
- T之类的调参
后半小时手撕代码,好像让写了个两个字符串的最大重复的字符串,写个简单的dp就行了。
第二轮技术面:1小时
前半小时面简历,因为第一面已经面过了蒸馏的项目,第二面开始面我word2vec相关的项目。
- word2vec的模型、训练目标
- 损失函数
- 优化方案
- word2vec跟其他预训练模型的区别
后半小时手撕代码,找数组中第K大的值。先写了个sort的暴力解法,然后写了个维护一个长度为K的栈的解法,然后写了一个分治+剪枝的解法。比较好玩的事情是面试官没直接问我复杂度,反而是他自己在那里看了半天看不出来,才让我跟他讲讲这个复杂度的。
之后转岗到商业变现部门,其实没什么好说的,面试官好像不太懂模型蒸馏和深度学习,基本上都是我自己在那里自说自话。
第一轮技术面:1小时
前半小时聊了聊简历,然后面试官问了些问题
- GBDT的大概算法
- KNN的大概算法
- word2vec的优化,包括层级softmax的复杂度
- 推荐算法比如itemCF,userCF
后半小时手撕代码,先问了一道算法题,问一个体育馆每次可以让10个人比赛赛跑,而且只能记录排名顺序不能记录时间。现在有150个人,问怎么样才能找到跑得最快的五个人。之后让写了个edit distance。太简单我就不说了。
然后转岗到data部门,岗位是推荐算法,一开始我有点担心是不是跟前一个岗位一样会出现方向不符合的问题,跟面试官聊了一下,面试官说会有深度学习和nlp的工作。整个面试流程非常效率,从面试官到HR都非常配合主动,5月6号周四开始面试,5月10号周一就已经拿到了offer。总的来说感觉部门行动力很强,面试的过程也很专业。
第一轮技术面:1小时
依旧是先聊了半小时的简历。集中在蒸馏的项目,同时也问了一些transformer和seq2seq的问题。
- 不同损失函数之间的差异以及取舍问题
- 对不同的bert蒸馏模型的理解
- Bert预训练任务有哪些?为什么要这么做?你觉得哪些任务可以如何优化?
- LSTM的结构,优缺点
- 我的蒸馏模型如何进一步提升?有哪些考虑的方向
- 对于其他Bert模型的了解,都做了哪些优化
- 量化、剪枝、参数共享等模型压缩手段
后半小时手撕代码,第一道题是计算10进制数转换成2进制之后字符串里1的数量。第二道题是给两个递增的有序数组,第一个数组代表index,第二个数组代表light,问light的半径最小要多少才能覆盖所有index。我用dp做的,时间复杂度比较小,但是空间复杂度会大一点。
第二轮技术面:1小时
还是聊简历上的项目,同时也问了点毕设和有没有在做的paper相关的问题。问的问题比第一面更深,感觉第一面主要考察解决问题的思维逻辑,第二面会抠项目相关的细节。
- 数据集不平衡的处理方法
- 用了哪些数据增强的方法
- 剪枝的原理,为什么多头attention剪枝有用
- Bert,elmo,word2vec等词向量的区别
- transformer的并行,encoder decoder的细节结构
后半小时手撕代码,面试官说你在字节面了这么多面了,估计该问的都问过了,就给我随便出了道螺旋矩阵的题。主要看看我debug之类的能力。
之后拿到offer,没什么好说的了。
鹅厂、驴厂、百度因为整个流程还没结束,面经之后会继续补充。这一个月的面试流程下来,感触比较深的就是小厂更多的考察你搬砖的能力,面试流程比较像快问快答,会考察很多跟你方向不相关的东西。大厂会比较在意你的整个逻辑思维和项目思路,在此之外考察工作和项目相关的知识。然后手撕代码都不太难,都是很基础的题,我个人认为做nlp算法这个方向的不需要投入太多精力在leetcode上,好好弄项目理解概念多看论文才是重中之重。
另外一个要提醒大家的是春招一定要趁早,最好三月就开始投简历,不要像我一样磨磨蹭蹭到四月五月,很多公司已经没有hc了。
之外还要感谢一下csgg,陪我走完整个春招之路,多次在我被字节搞到心态爆炸的时候安慰我,没事干陪我我逼叨叨,感恩有你。
#字节跳动实习面经阿里实习面经腾讯实习面经百度实习面经##算法工程师##字节跳动##面经##实习#