我是如何从应届机械转行NLP,并在秋招拿下30w算法岗的


先说背景,本硕985,非科班,本科完全没有基础,到大四才听过深度学习这个词,到研一才知道算法工程师这个职业。

本文全文都是面试干货,各家面试的问题都不一样,但是七月在线的面试题库是很全的,大家有空可以多刷刷,其实我刷的题,不多:六百多道题目。我觉得这个战绩都不足一提,相信很多学员都已经刷过不止一遍了。大家有时间一定要多多看看七月里面的题库,目前为止我感觉是全网搜集得最全的题库,并且大部分题目的解答也算是十分详尽了(免费的不用白不用啊同志们)

比较大的offer主要有3个,然后本文当然也是主要写面试的经历,希望给后来的七月学子们一个好的参考!
如果不想看长文的小伙,我这里先给结论:
1. 手撸代码的能力太重要了,建议上完七月的课之后,一定要亲手上他们的云平台跑跑模型,甚至在自己的机子上也能跑跑代码。
2. 有个项目经历是必不可少的,先想好自己要做什么方向,然后才能在七月里面选个合适的班,不管是就业小班还是集训营,一定要自己搞两三个像样的项目;
3. 面试是双向选择的过程,你不要试图用你的诚意打动面试官,有硬实力才有发言权;
4. 有竞赛比较好的排名会极大提升面试官对你的兴趣,这个的话可以跟着七月的同伴一起组队,也会有老师组织打比赛,真的很有用!
5. 不要试图闭门造成搞AI,时间是有成本的,找到适合自己的道路,结伴同行是效率最高的。
(小编注:从上面看下来,是不是很契合校长July经常挂在嘴边的学好AI的四大金刚:课程 题库 OJ 竞赛)

懒癌患者们关闭浏览器了哈哈,下面是长文(码字不易啊老哥们):
应公司的相关规定,本文不会出现公司的原名,但是你懂的哈哈。面试经历主要分为以下三个部分!
  1. HW面试经历。
  2. z商银行面试经历
  3. 某绿厂面试经历


1. HW面试经历

上干的吧,不打无准备之仗!不打无准备之仗!不打无准备之仗!

重要的话说3遍,面试之前,要对你的简历上的项目充分了解,要提前准备好自我介绍

第一,自我介绍部分
这是必不可少的,面试官会在你自我介绍的时候,大致浏览你的简历。

自我介绍的时间也要控制好,不能太短,面试官还没看完简历,也不能冗长,半天说不清楚,被面试官打断,也很不好。

一般包括:
  1. 相关的学历背景;
  2. 你为什么适合这个工作,有什么能力(可用数据说明,小小展开一个实例);
  3. 最后的综括;


注意!这里的自我介绍,最好要流利,但是也不要让人感觉是刻意背诵,你的感觉要放松,要自信!当你面试一个工作,你千万不能过分紧张,这是很不自信的表现,你如果不适合这个岗位,你求他也没用,所以何必呢?要温和谦逊,也要不卑不亢。

你要相信,岗位和人才永远是双向选择,你有能力的话,他们是极愿意要你的,所以结论是:紧张是没必要的。

第二,如何面对当面试官质问你短处?
一般来说最好大方承认,遮遮掩掩,你知道人家一年面多少人吗,遮掩得过去吗?人无完人,对吧?

第三,面试官问你问题的时候,你要琢磨,他想要听到什么样的答案。
如果没听清,可以请他重述一下,可以稍加思索,然后说出你的思路,但是不要大而空,要言之有物,要体现你的专业素养,注意,要专业。不要糊弄,就那么一点时间,好好表现,实在不清楚,也可以请教一下,但是尽量把自己能想到的都说出来。

第四,算法手推模型能力要有啊!!
今天面试官让手推GBDT模型,无奈,昨晚只推了LR,SVM,LDA,等,恰好漏了GBDT,其实这种东西,是我太大意了!你用了这个模型你都写在了简历上!你不会推!!送分题,没拿到,这一点,还是那句,要专业,下来之后,各个常用而经典的模型,一定会写出来几个主要的公式!他难道会让你从头推到尾?可以,但没必要。但是好在当时脑袋比较机灵,就是这种时候,你要把自己会的东西说出来呀!然后我就说,这个模型我来说一下吧,blabla,能说出来个大致,也算挽回一城。

第五,手撸代码的能力要有啊!!
你说的你会python,然后让你简单写个代码,提取一段文本特定的字符串!完犊子,这个是真的用得不多,用过两三次吧,所以教训是,常用的python的功能,要会写呀!!!其实我知道,考官要考我的是re模块,里面的compile正则表达式匹配!但是具体的语句有点模糊,我当时傻逼了,在那里写读取文本的函数。。人家的重点是在匹配这块,直接把关键的写出来就行了呀!我当时是想写pandas读取文件的pd.read_csv(),结果脑子糊了,脑海全是readlines(),笑死。然后考官看我懂正则表达式,也就放过我了,这个是真的我的锅,可以回答更好的。

第六,考官会问项目的细节
一定要搞清楚这些,凡是问到项目上的,都是送分的!你要是连自己的项目都说不清楚,你就完了。

最后,总结一下吧,手推模型,手撕代码,这两块一定要加强,对算法要十分了解,代码量还要加强。

对面试的表现只能打70分,侥幸过了HW的面试,其实这也和人家的要求不高有很大关系,大家不要像我一样菜呀~~

面试的套路有,不能全靠套路,最主要关注的,还是实力!

2 Z行面试

面试了z行的管培生,做一个记录。这个管培生的面试还是涉及到技术的,而且我也基本上是奔着其技术岗去的。

先做了一个简短的自我介绍,差不多两分钟。然后问了一下fintech比赛的思路和方法;然后问我对z行的什么岗位感兴趣,我说我想来做NLP,尴尬的是我的简历里面没有NLP的相关项目,然后主考官就很感兴趣了,你都没写相关的项目经验,怎么就想做NLP了?为毛想做NLP?为毛?我差不多从以下几个方面讲了:1 这个方向的前景;2, 自己对这个领域的一些了解;3, 招商银行的适配岗。然后开始问我NLP的专业的知识了:

  1. 用NLP做了一些什么项目,简单介绍一下?
    卧槽,这个是个送分题啊,结果我一时半会竟然想不起做了啥?就草草地说了一下用BERT做的一个情感分类的任务,然后这个能怎么说呢?bert的都是封装好的,那我就说了一些对bert的理解。考官问:除了人家封装好了的,你做了什么工作?我也被问懵了,就说一些前期的工作,如词的tokenizition,分词的工作。下次还是好好准备一下,其实后面一想,真的还是准备不充分啊,忘了用rasa搭建的一个对话系统的项目,也忘了基于统计和seq2seq的翻译系统?真的是不应该啊啊啊!!好在后面讲不出来了,主考官也放过我了。

  2. 你知道的哪些做NER的方法?
    我擦!遇到专业的了,说不定这个大佬就是NLP领域的?说实话我还真没做过NER(命名实体识别),但是七月的老师上课说了BERT可以做NER。我想了想,说了可以用隐马模型做NER,我当时也是瞎说了,我知道隐马做词性标注是很好的,但是做NER?我不确定能不能做,那我就瞎比比了呗,讲了一下隐马模型,像什么转移概率和生成概率啦,blabla,然后差不多就问了第三个问题

  3. 你说说双向LSTM crf做NER的优点吧
    好了,你早说可以用LSTM呀,LSTM我可是还算熟悉,我甚至说,我想我可以把这个网络给画出来给讲一下,但是考官好像知道我有备而来,犹豫了一下说不用了,你口述就行。(事后我想,这其实也对,他一边忙着敲电脑,一边听我哔哔,也没空来看我画的网络对不对,而且这道题问的重点好像也不是lstm怎么样),然后我就说了一下lstm相对于rnn 的优点,什么防止梯度消失和爆炸,长短时记忆的优点。说了一下lstm的大致结构。说完了之后,还有crf呢,我对crf不是很熟,其实很惭愧,我就是做概率图模型的,还不了解crf, 然后就大方承认没有用crf做过NER,一时半会还讲不清楚,面试官没有为难,过。

  4. 那肯定知道word2vec了,还有lda,那你说说两者的区别吧。
    Word2vec我还是比较清楚的,说了他的基本的两个模型:continued bag of words, skip gram.然后讲了这两个的区别,这是浅层的神经网络,是奔着词向量去的,还顺便提了一嘴NNLM。然后把我知道的这两个模型讲了,开始讲LDA,LDA我可是推导过的,我知道它是主题模型,但是我觉得我没有讲好,我说了假设狄利克雷分布,说了根据采样的主题分布,采样了词分布,但是我没有说清楚两个的区别,我觉得我还是不太清楚LDA的特点,然后考官也就觉得差不多了,没多问了。

  5. 问了一下意向城市,是否有时间参加夏令营等。
    总结一下经验教训:1. 至少准备3个NLP的项目,并且能够自圆其说,把里面做了哪些工作给说清楚。2. 然后对于传统的NLP技术,宗成庆老师的统计自然语言处理也还没有学完,一定要花时间学学,包括NER, 词性标注,机器翻译等最基础的任务,有哪些好的方法,他们之间的优劣等,都要说清楚。3. 然后就是NLP的技术吧,夯实基础。


这次之所以还算顺利,我估计是一来在他们的精英挑战赛中排第3,有一定的优势,再说可能人家对技术的要求也不是很高,所以进个夏令营应该是没有问题的,最后也拿到offer了。

3 绿厂面试

技术一面

技术一面进去的时候已经晚上7点40了,面试官已经累得不行,坐下简单地介绍了两句,就摊在椅子上,让我自己选个想说的项目吧,这个时候我和他都笑了,我等了5个小时,他面了一下午,大家都累得不行了。
1. xgboost的一个项目
然后就开始叭叭叭讲项目,包括特征工程和模型,介绍了之后,我感觉面试官不太了解这个模型,然后我就说了GBDT,他也问了一下GBDT的原理,让我把GBDT的残差公式写出来,这个我还是大致比较熟的,然后写了一下,顺带把整个模型的框架也写了一下,怎么训练的这个模型,也讲了一些。
2. 激活函数
由于大佬是做相机场景识别的,可能深度学习比较了解,所以问我了解哪些激活函数,然后让我把sigmoid讲一下,写一下表达式,我把sigmoid, tanh, relu, leaky relu 都讲了一下,包括sigmoid的梯度爆炸和梯度消失,relu如何改进的,leaky relu又是怎么样的思想,都讲了一下。
3. BP网络
你有了解过BP网络吗,能简单说一下吗?
西瓜书上当然是有的,我就知道是反向传播的一个过程,然后我就把我理解的都解释了一下,如果让我推导BP,那估计是凉凉了,还好还好,我讲完了基本的原理之后,面试官就没有深挖了。
4. shell脚本?
看你简历上写了熟悉shell脚本,你能讲讲吗。问到这个我就怂了,我说只是用了一些简单的命令,在run模型的时候,实现自动传入参数等,面试官也很好,就大度地笑了笑,放过我了。
5. 用什么语言
当然是Python,世界上最好的语言,然后我简历上还写了c/c ,然后问我,掌握怎么样,我承认了一般,说是大学学的基础课程的那种,主要是用Python。面试官也没有多问了。
6. 手撕代码
既然你用Python,那你写个二叉树吧。
???黑人问号,我以为是让我用Python定义一颗二叉树,然后面试官说是二叉树的查找,我一时没有思路,数据结构确实不是很好,然后硬着头皮上。。。
查找嘛,先从根节点比较,如果小于,再比较左边,大于,比较右边。。。忽然,有了思路!
每一个节点不都是这样比较的吗?难道就是要考我递归的知识?
然后写了一个递归,忐忑地给面试官讲解我的思路,然后面试官一直点头,表示认同,我大概也心里有了底了!哈哈,就面试结束。问我有没有其他要了解的问题,我瞎问了一通,如机器学习在咱公司主要的应用场景是哪些等。

技术二面

节奏很紧,当天晚上通知通过一面,第二天早上就去二面,二面也主要是技术面。包括了以下几个方面。
你了解哪些参数优化的方法?介绍一下
这个刚好昨天还看了一下,我就说了梯度下降,随机梯度下降,基于动量的方法,(AdaGrad一时忘了),然后说了Adam优化。解释了这几种优化方法的区别。面试官又问一般用什么样的优化方法,我说梯度下降和Adam比较多一点。
1. 陷入局部最优怎么办
我说了用模拟退火的方法,还有基于动量的方法,然后让我详细解释了一下模拟退火算法。
然后面试官又出了一个题,说各个位置的梯度的方向不一样,凹凸不平,怎么办?
我回答的是利用梯度的一阶矩,也就是加入动量的方法,保持一个比较大的惯性,然后继续优化,可以逃离局部最优,也不知道对不对,反正也没有继续问。
2. 学习率调吗,怎么调
学习率根据不同的模型,经验值是不一样的 ,然后我说了一下网格搜索交叉验证的方法。
3. 讲讲你的项目
又说了一下xgboost,然后GBDT,这两个看来以后要十分熟悉才行。
4. bert
简历上写了,所以让我说说这个模型,好久没看这个模型了,只能凭记忆,说了一下自注意力机制,transformer等
5. 用户情感分类项目
是爬取的什么数据集,我说了是开放数据集,然后他就了解了,说是个练习项目鸭,我说是的,笑哭。

一面二面都过了,然后就是Hr面了,最后也拿到了offer。

好了,终于码完了,累死了哈哈,其实我不能算大神,甚至算不上牛人,也和你们一样,一脸懵懂来,最后拿到这样的结果,真的还是算满意了,大家不要觉得这个事情很难,你下定决心了之后,世界会给你让路。祝愿七月的学弟学妹们早日实现自己的目标。
已邀请:

要回复问题请先登录注册

收藏七月在线,一起向大牛进阶

ctrl+D或command+D可以快速收藏哦~