百度nlp面经(2022.10.18)

发布于:2022-10-19 ⋅ 阅读:(972) ⋅ 点赞:(0)

说在前面~

        闲着没事逛了逛boss直聘,看到百度hr发消息问有无兴趣。本着光脚的不怕穿鞋的心态,我就约了,基本裸面,面之前看了半个小时面经。不是觉得自己的实力很强,面大厂没问题,更多的只是想体验一把大厂面试的水准。面不面得上不是最重要的,对我来说能开拓一下视野,见识更高层次的人,学到一些平时学不到的东西才是最重要的。而且百度能在今年这个互联网恶劣的环境下给我这个双非面试机会已经挺给面子的了。

 

面试过程 

小意外

        刚开始就g掉了,百度的面试用的是自己平台,叫如流视频面试系统。需要下客户端,但是也有网页端。我就没下,面试的时候卡的一批(也有可能是我网络的原因QAQ),刚开始进去还没声音,面试官喊我半天。3点开始面试,3点10分才跟面试官说上话,前前后后弄的急死了。非常感谢面试官的包容,面试官人特别好,一点也不生气,还非常有礼貌的在我网络不好没听见的时候重新做了一下自我介绍。

下面就进入到正式面试过程了。

1.自我介绍

        介绍了下学校姓名,研一研二学的东西,机器学习、深度学习、nlp、研究方向啥的,然后介绍了一下最近在做的东西——以Bert-bilstm-crf为骨架的命名实体识别任务,加入了自己的一些改进。主要是想让面试官问这个,因为这个时间比较近,了解的也比较多。果不其然,面试官果然深挖了。

2.讲一下你做这个任务的数据集,任务的模型结构,为什么要选用这种结构?

        ccks2019中文医疗数据集。分词和命名实体识别联合训练。先介绍了一下命名实体识别最经典的模型是百度的bilstm+crf,接着讲了一下bilstm特征提取能力不足,所以选bert,因为特征提取能力更强。中文和英文的数据特点不同,中文首先需要面临分词的问题。通过分词工具引入分词特征,在分词的同时联合命名实体识别任务进行训练。联合训练是因为采用pipeline方式也就是先分词再输入到模型中训练会产生更大的误差,如果分词错误会直接影响后面实体的识别。而采用联合训练可以让模型在一边学习词之间的边界信息,一边进行实体识别的学习。最后用crf进行解码操作。

3.讲一下怎么做联合训练的?

        对模型结构重新复述了一下,然后把做实验的过程(从数据处理->数据类构建->模型构建->反向传播)讲了一下。

4.为什么最后使用crf而不是softmax?

        因为softmax不能纠正从bilstm得到的错误标签,而crf可以。因为crf内部不光会用到 字->标签的依赖关系 ,还会用到 标签->标签的依赖关系 ,从而能够纠正从bilstm得到的错误标签。

5.说一下crf的运行机理?

        说了一下发射分数和转移分数,给定字符串,找到所有标签的可能序列,通过发射分数和转移分数得到最后的总分,取最大的分数对应的序列。

6.你说用到了chinesebert,讲一下为什么不用bert?

        因为chinesebert融入了中文的字形和拼音特征,而传统的bert并没有融入这些特征,但对于中文来说有这些特征是非常重要的。

7.了解bert吗,用到了什么预训练策略?

        MLM和NSP,解释一下。

8.你说用到了bilstm,讲一下transformer相比bilstm有什么优势?

        能够并行,速度快,大幅解决梯度消失和梯度爆炸问题,特征提取能力更强。

9.了解其他预训练模型吗?

        我说glove是静态预训练模型,采用双向lstm架构。面试官说它不是预训练模型吧。我说这玩意不是也能预训练吗?面试官说从这个角度来说好像也算是。(是在车万翔老师的基于预训练的方法那本书里学到的)其他预训练模型听过,内部结构没有了解。(面试官应该是想问paddlepaddle,但我是真没了解过paddle的内部结构QAQ)

10.讲一下Attention的计算过程?

        面试官举了一个例子,说了个大概,(Q*矩阵/sqrt(忘记了,说的归一化))*V。

11.Transformer内部有个LN,讲一下LN,有什么作用,作用对象是哪个维度?

        层归一化,作用是加速模型收敛,增强模型泛化性。作用对象是每个wordembedding的维度,也就是每个字取个均值。知道面试官想考LN和BN的区别,就又讲了一下和BN的区别。

12.问了一下情感可解释性的项目细节

13.最近有看论文吗?看的什么论文?名字说一下?讲一下论文的大概内容?

        这点我觉得面试官主要是想考察一下我的学习能力,会不会跟踪领域内最新的论文,理解和表达能力咋样吧。

        我给他讲了一下我研究的小样本命名实体识别方面的东西,本来想去讲Template-Free(EntLM)的一篇论文,但是得先叙述一下Template-based的方式,然后又不得不讲基于Prompt的命名实体识别方式,讲了一半他说我了解了,你对你的研究方向确实是有了解的,让我不用讲了。这讲下去面试时间还能再加一个小时٩(๑❛ᴗ❛๑)۶

14.写了个题

        本以为已经到了最后了,没想到面试官突然来了句,那咱们来做个题吧(QAQ完全没准备,有点害怕)。我说是必须得写吗?他说是流程,必须都得有编程题。(mmp,以后面试前记得刷点题再上,别裸面QAQ)

        有个文档,有多行,每行代表这行的数据之间有关系,将所有有关系的数据整合在一起,比如第一行代表A、B有关系,第二行代表B、C有关系,第三行代表E、F有关系。那么输出应该是两坨,第一坨是A、B、C,因为A与B有关系,而B与C有关系,所以A、C也有关系。E、F和其他行数据没关系,所以单独为一坨。

输入:

[['A','B'],

['B','C'],

['E','F']]

输出:

[['A','B','C'],

['E','F']]

        本来考虑从数量角度做这个题,遇到了问题,卡了半天,面试官提示我说用哈希映射做,实在想不出来(主要是面试前也没刷题,面试官一问我说咱们写个题把,我就菊花一紧。。。),让面试官等了半天,真的挺不好意思的。(;д;)面试官说要继续做还是换个题?还反复问我:你确定要换个题?你确定?(不是寓意何为,可能换题的话就会减分?)我还是选择换了个,因为哈希映射没咋实操过。

         面试官好像也没有太为难我,换了一道简单一点的,求序列中连续乘积最大的序列乘积值。比如给定[-1,1,2,3,-1],输出应该为1*2*3=6。由于上一题我花了挺久时间也没写出来,这次面试官先问了下我思路。我觉得第一题都没做出来,怎么说第二题也得保个底,哪怕暴力呢,也先搞个答案出来。就跟他讲了下暴力思路,然后咔咔一顿敲给他看,他说ok。本题结束,有点难受。

15.你有什么想问的?

        问了一堆有的没的,但是最重要的一点,忘了跟他对我的评价了!多难得的一次机会啊,看看自己与大厂的差距,有哪些不足和优点o(╥﹏╥)o,下次一定要记得问!!!

我的感受

         首先,面试官人炒鸡nice(๑•̀ㅂ•́)و✧,开始时遇到一些小意外,他也很平和包容的理解了,给人的感觉也非常有亲和力,有气度。

        从技术上来说,反正是我见过水平比较高的了,考的点很细,只会背八股肯定有些回答不上来(考察知识深度),会问我有没有看论文(考察知识广度)。未来还是要抽空深挖一些算法的细节才能更好地回答上来一些问题。论文也得定期看一看,不然要被时代淘汰了。。。

        从面试体验上来说,简直不要太好,遇到不会的问题面试官会很耐心的引导我往正确的方向想,和以往的只看我会不会的面试官不一样。这点很喜欢,如果能有机会跟着这样的团队学习肯定进步很快。

        个人总结:我自己的面试精神面貌还是不错的,很多地方思路感觉还是挺清晰的,表达能力应该过关了。算法原理要深挖,面试前的算法题要刷够一定数量,项目细节一定弄清楚(问的比较多),涉及到的算法也要了如指掌(从项目延伸出来的算法问的也多)。

        就这么多吧,以后有面经再接着总结~

本文含有隐藏内容,请 开通VIP 后查看