某渣渣NLP暑期实习面经
写在前面的话:
- 在介绍面经之前,还是介绍一下个人的情况吧,本人就读于某中流211,参加过一些算法比赛,比如AI研习社 “LOL排位赛胜负推测” 比赛 ,DF平台CCF“离散制造过程中典型工件的质量符合率预测”比赛等,一些比赛的名次还算不错。在学校还参与过一些论文的改进。但也是到今年三月份论文才被录用,方向是机器学习相关,这可能是我大学为数不多的谈资。(大三找实习的时候论文还在修改中,因此简历都没提到,相关面试也就没有这部分内容。)
- 本文其实记录的是2020年春招的内容,是本人大三时候找算法暑期实习的记录,时隔一年才最终决定发出来,现在回头看看,当初自己还是挺菜的。最后在6月份的时候,侥幸收到了百度地图的实习offer。但当时考虑到许多算法岗还是挺卡学历的,于是自负地选择了放弃offer去准备考研。(结果考研内卷失败hhh TAT)
- 现在回头看来这也算一段挺奇妙的旅程,就打算发出来记录下,也希望自己的经历可能对后人的选择有所帮助。
- 就个人感觉而言,要想拿到算法岗实习offer,主要有以下几个方面,
1、业界相关的比赛经历;
2、较好的论文;
3、扎实的算法功底和领域知识(lc300+以上,我当时刷了快400+);
4、较好的研究生学历,一般小厂都会卡学历,大厂有些也会,也是我选择考研放弃offer的主要目的。
腾讯后台机器学习一面:
- 过拟合是怎么判断的?
- 过拟合的解决办法?
- 特征工程是怎么做得?交叉特征是怎么做得的?
- GAN生成效果怎么样?为什么GAN很难训练?用过什么样子的GAN?
- 后续有没有考虑新的模型?是怎么考虑的?为什么要用TextCNN?
字节跳动飞书一面面经:
- 介绍项目.
- 数据增强怎么做的?
- 有哪几种做法? 做
- 的效果怎么样? (同义词替换,词删除,词序转换.)
- XGBoost具体的算法内容了解么?算法思想有哪些?
- LSTM解决了RNN的什么问题?怎么解决的?
代码题目:
敏感词过滤:给定字典[word, world, test, text] 同时有字符串workwordtestcardadtextext等.如何从字符串中取得对应的字典中的词.问算法的时间复杂度.(解题思路应该是前缀树,通过对字典构建前缀树去判断对应的下标是否存在对应的内容。)
字节跳动飞书二面面经 :
- 介绍一下word2Vec内容,负采样了解吗? 怎么做的?
- 层次softmax为什么? 怎么做的? 从根节点到叶子节点的过程是怎么样的?
- TextCNN的运作过程?
- TextCNN的卷积核维度?
- TextCNN的参数维度?
- Atteneion了解的怎么样?
- 介绍一下BERT?
- word2Vec和BERT的词向量为什么BERT更好?
开放题目: 给一个不知语种的文本,如何做属于哪个语种的分类?怎么做不同语种字的分词?(没有什么思路,考虑的是从字向量入手,对每一个语种的字做字向量的嵌入.用字向量的叠加来作为整个文本的向量,从而分类,采用doc2vec的方式?)手撕TextCNN.
360数据平台机器学习一面:
- 简单介绍比赛内容.哪个平台的什么比赛,什么时候到什么时候的。持续了多久等...
- 介绍一下GAN模型和XGBoost回归的做法,对于GAN训练困难是如何解决的。问了比赛团队分工的合作.模型融合是怎么做的。特征组合怎么选择的。是人工筛选的吗?
- 文本比赛方面是怎么选择的模型,对于类别不平衡是如何解决的。BERT的训练时长
- 介绍一下XGBoost和LightGBM的算法的优缺点.
- 手撕代码:面试哥网“二分简单”题分组.
阿里巴巴蚂蚁金服一面:
- 自我介绍,介绍项目.
- 有没有对分类错误的一些语料进行查看什么的.对于那些语料有没有考虑怎么采用方式进行改进.(扩充数据量?)
- BERT模型怎么做的?大致的网络架构是怎么样的?BERT模型对防止梯度消失优化是什么?
- LSTM和BERT模型有什么区别?简单介绍一下你理解的优化器?SGD的优点是什么?(对于梯度的要求很低,计算比较快)
- 介绍GBDT算法的原理,介绍对应的LightGBM的对于XGBoost的一些优化?
代码题:
给定列表[1,4,2,5,2,3,1],列表中每一个数字是可以移动的台阶数,如何用最少的次数从上完所有的台阶?(隐约觉得是lc原题,但不记得是那题了.用的动态规划解题.要改进但是我没做出来.)
阿里巴巴蚂蚁金服加面:
- 自我介绍,项目介绍。
- 简单问了一下XGBoost和LightGBM的算法的差异性。
- 开放题目:如何对爬虫收集到的文本数据判断对应的主题?
- 怎么做一个特征筛选?XGBoost是怎么预防过拟合的?
- 问了一个python中如何去除列表中空字符串。
- 反问。面完就感觉自己凉了。。。。
好未来AI算法优化一面:
- 自我介绍,项目介绍。
- 介绍一下word2Vec模型,对于其中的窗口选择策略?窗口选择5,10,15都有什么区别吗?是不是越大越好呢?项目中的一些调参的方法是怎样做得呢?
- BatchSize设定的大小都有什么关系吗?越大的BatchSize就越好吗?
- 了解TensorFlow吗?
- 对于神经网络的本质是怎么理解的?(完全懵比,应该从一个问题的最优化的层面来介绍。然后给我介绍了从函数方面的理解。意思上比较像是引导我说对应的)
- 是否了解一些模型加速和优化的策略?(讲了知识蒸馏)为什么要用大模型训练了再采用小模型进行训练呢,反正不都是需要最后训练大模型么?(也不知道是我不懂还是面试官不懂了,反正我懵了)
- 介绍一下TextCNN的模型。
- 讲一下线性模型和非线性模型的区别?
- 了解强化学习吗?对强化学习的理解程度有多少?强化学习和普通神经网络间有什么差别?层次聚类是怎么做得?背景是什么?
京东算法一面:
- 自我介绍,项目介绍.
- 介绍LSTM模型,
- 介绍LSTM对RNN模型的改进.
- RNN存在什么的问题?
- LSTM对比BERT有什么区别.
- 介绍一下Transformer.
- 你认为Transformer同LSTM这些有什么区别和关系?
- 比赛对应的评价指标? F1指标是怎么计算的? 了解对应的ROC曲线吗? 怎么计算对应的ROC曲线?
- 还认识什么机器学习的模型? SVM中的松弛化是什么? 支持向量是什么?常用的核函数有哪些?怎么选取?
代码题目:
- 两个链表找对应的相交点(做了哈希和双指针,叫写更低复杂度的没写出来.)
- 最大连续子数组和(写了前缀和和动态规划的做法,但dp思路不清晰.)
反问,问一些面试的改进啥的,交流了一些对应的知识都是怎么学的,为什么不读研啥啥的.
百度算法一面:
- 自我介绍,介绍项目.问了一下合作分工这样.(侧重于基础内容)
- XGBoost和LightGBM的差别?
- word2vec是怎么样的模型?
- 负采样是怎么样的?
- CNN和DNN的参数计算量差别?
- 进程和线程的差别?
- C++多态? 底层是怎么实现的?(猜猜不知道是不是泛型,总之8会.)
算法题目:
- 给定对应的字符串列表,对字符串列表中的内容进翻转.
- 快速排序. (面试官嫌我前一题用了python的特性就写了两行,又叫我写快排.结果一下子没有撕出来,但是给面试官讲了我的思路,估计我的思路他没见过就整个人显得很惊讶hhhh.危险过了算是.)
百度算法二面
(侧重于知识和业务拓展方面。)
- 自我介绍,介绍项目
- 大致问了怎么做的?
- 项目中的A,B,C类参数是一个什么样的关系?
- 有没有看过别人的冠军代码这样.问了一下具体的项目分工这样.
- 介绍一下LSTM和TextCNN和BERT这些模型这样子.
- 问了GBDT 和 XGBoost和LightGBM的大致改进.
- 问了解信息抽取吗?(撞我枪口上了吧!哈哈,拿着NER给它大讲了一通.)后来问用BERT+LSTM+CRF的训练数据大概要多少?会存在什么问题吗?
算法题目:根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。(单调递减栈)
反问.
百度算法三面
(一看就是真大佬,透露着一种智慧的气息.也是唯一一个我还没介绍就叫我名字的.这一面更侧重于整体的个人学习及思路吧.)
- 自我介绍,挑项目介绍.
- 为什么选择模型的一个大致思路? 具体问了问我CRF(几个月前做的记不清了,大致讲了一下.)了不了解百度对BERT做的一些改进?(暗指ENRIE模型).个人在实际中遇到的一些困难,是如何解决掉的?
- 对个人的职业规划是怎么样的?
- 最近有没有学习什么的?排序和推荐的对应的理由是什么?有没有接触过对应的一些spark,hadoop这样的大数据工具.
- 反问.
华为算法一面:
(双管齐下的面试官,一个负责算法一个负责开发部分.开发面到自闭,也更提醒简历的重要性.)
- 开发面试官问我了解python协程方面的内容吗?
- 数据预处理也用的python吗?
- 是否用过协程?
- 看到你OS写得92分,介绍一些操作系统的内存调度算法? 了解进程的三个状态吗?(开始怀疑我的操作系统.)
- 算法部分倒是没什么问题.常规的问了LSTM,word2Vec,BERT,TextCNN等模型内容,
- 因为面的语音方面,可能更关注到了HMM的模型等, 问了HMM的改进模型有哪些?
- HMM是一个独立考虑的模型,有没有对应的能考虑全局的模型?(????)
- 写代码的时候共享屏幕被看到的SVM的内容,又问了问SVM是怎样的模型.
手撕代码: 给定数组,其中有n个数字, 数字的数目在1到n-1这样. 找到出现两次的数字.
(就用了hash表做..犯了一个很脑残的错误,然后被指出来了...然后也不知道是不是问改进,总之听不清,感觉面华为还是得准备对应的计算机基础的内容,包括OS,计算机组成原理等等.)
华为算法主管面:
(主要是考察一些个人内容.面试官显然不是很懂具体业务内容....)
58同城NLP实习生一面:
- 介绍一下项目.了解过一些更优化的模型吗?如ALBERT,XLNet等.
- 介绍一下BERT的三种的embedding的输入.
- transformer的position embedding和BERT的position embedding的区别.
- 对于数据类别不平衡的一些解决的办法,如何从损失函数的层面去考虑。
- 了解seq2seq吗?有没有用过对应的transformer进行对应的使用项目?
- 手推LR,能不能从最小化损失函数的角度介绍介绍?有没有了解过LR是服从什么的分布?有没有了解损失函数的层面,有没有了解交叉熵.SVM过程大致介绍一下.SVM如何实现多分类
- 统计学的怎么样?怎么看待数学的?
- 反问.
58同城NLP实习生二面:
- 主要是项目相关,更像是聊天。
58同城NLP实习生三面:
- 问我项目的内容及分工,
- 询问大致的思路, 询问对应的问题的难点.
- 询问
- 问我找最大的数字,找第k个最大的数字.(topk啊,堆栈分桶啊,臭***指我自己.)