来源:投稿 作者:Sally can wait
编辑:学姐

NLP算法岗面经

作者介绍

中文系转NLP,985应用语言学研三,微软STCA的swe暑期实习,在研究生阶段做过导师给的toB的NLP横向项目(命名实体识别),leetcode刷了600+题。面试360的时间是11月初,距离笔试也过了一个多月,简历被业务反复筛选最后还是约面了。这轮面试是过了,进入排序阶段。

问项目

我复述在研究生阶段做的导师的横向项目的过程,面试官讲到像我做的冷启动文本分类项目,有标注的数据很少,和他们的场景比较像。介绍了一遍他们的项目,主要是做toB和toG的文本分类。

  • Q:如果任务是识别包含某种医疗手段的违法广告,怎么实现?
    A:可以用意图识别的方法,算目标语句的词向量和某个意图向量的相似度,超过某一阈值就算。

  • Q:自己实现深度学习项目的时候,用了几张卡,大约用时多久
    A:用的数据并行,4w条数据,用了几个小时。顺便主动讲了一下数据并行的原理,和模型并行的区别。

  • Q:有没有部署过推理服务?
    A:不知道。

  • Q:面试官:部署模型之后,请求量很大,要把它做成服务。有tf-serving、torch-serve如果训练模型时候发现显存只占用10%,该如何调整?
    A:调大batchsize、增加文本长度、提升小数精度

面试官说还有加深网络层数

  • Q:反过来如果爆显存了该如何调整?
    A:半精度、调小batchsize、减少网络层数、dropout (忘记说梯度累加了)

  • Q:模型量化有了解吗?
    A:不了解。但是实践中改小过模型精度。

听写Linux基础命令

  • Q:ls, pwd是什么指令?

  • Q:怎么看一个文件有多少行?(不会)
    wc-l

  • Q:深度学习过程中要看显卡显存占用率?
    nvidia-smi

  • Q:要把python挂到后台执行?
    nohup python test.py &

  • Q:批量替换文件名中的某个单词(不会)
    sed

  • Q:查询之前用过的命令(不会)
    history | grep

问NLP基础知识

  • Q:Word2vec, FastText, BERT 三种模型的embedding是怎么产生的?它们的相同和不同点?
    A:相同点:都基于分布式语义,一个词的含义由上下文决定。 不同点:前两者是静态词向量,一个词对应一个embedding。BERT因为有self-attention机制,得到的是语境词向量,上下文不同,目标词位置的向量也不同。

  • Q:Word2vec, FastText, BERT在词表上有什么不同?怎么处理不在词表中的词(OOV)?
    A:Word2vec没法处理OOV。Fasttext和BERT都是能给OOV一个embedding的,方法是subword,也就是拆分了子词。但是BERT的词表是word-piece,用类似于BPE的方法,通过多轮迭代,无监督获得的;而Fasttext就是用n-gram切的。

  • Q:Word2Vec是如何实现在几万个向量中查询与query词向量最接近的向量的?
    A:我一开始说gensim的w2v是有现成的api的most_similar(),但是内部实现方法不确定,肯定不是暴力法。可能是先排序,再类似于搜索树?面试官说可以往聚类的方面想。我就想到可以用聚类的逆操作。先随机生成k个点作为聚类中心,把几万个词向量分成k个类别,再用目标词向量和k个类别做相似度,找到最接近的类别。再对这个类别再分成k类,再分布做相似度计算,直到不能再分。面试官说差不多是这样,faiss、hnsw就是用来做这种事的。

做题:翻转链表和全排列 做题还算顺利。

总结: 面试官全程比较温柔,会给很多提示。最后说,现在hc比较少,但是前面的人可能会鸽。让我先进流程。

祝大家都能拿到满意的offer,祝非毕业年级同学们学有所成~

更多NLP&其他方向面经可点击卡片关注