NLP Internship in Ideepwise Infotech

2018年3月-2018年6月,我在深思考自然语言处理组担任算法实习工程师

求职

面试

  • 是人生中的第二份面试啦,一定程度上算是“老司机”了。
  • 面试分成笔试、上机、技术一面、技术二面、技术三面和HR面。

笔试

  • 有一道概率题,贝叶斯公式带入算一下就可以。
  • 有一道算法题,考的是排序优化,我做出来了,但是方法并不是最好的。
  • 比较奇怪的是,其它几乎都是概念和问答题,机器学习与自然语言处理相关,都不是特别难。

上机

  • 这个算是比较有特色的环节了。
  • 现场要求做一个上机题,关于字符串匹配的,就是要求比较复杂,比如去掉含A的、保留含A但含B的、保留含A但含C且长度小于5的等等,难度不大。不过上机环境是台式机,我不太习惯,还好我习惯去面试带着自己的电脑(首要目的是问到以前工作可以展示代码或界面)。

技术面

  • 一面基本上围绕笔试题,这一次由于有第一次实习的基础,加上我寒假刷了一些leetcode,所以做得还行(其实主要是这次笔试简单了)。
  • 二面主要是白板写算法。印象最深的是问了一个位运算的题:把一个十进制数转换成二进制以后,计算这个二进制数中有多少个1。我用的是最简单的短除法,实现的时候每次减去2的幂就可以了。相比之前的面试,我的进步在于可以白板直接写出来程序了,而缺点还是没有给出最优的方案。算法永无止境,我还需要努力。
  • 三面问了一些实际开发的内容,主要就介绍了SMP CUP 2017(主要是这家公司也参加过这个比赛,虽然不是同一个Track的任务),以及上一份实习构建问答系统的工作。这里可以插一句,我带电脑真的有用,直接展示了问答系统的前端demo,说服力就很强了(不过很尴尬的是,调用在线搜索后,百度居然直接给了我一个带有色情信息的回答…当时我的脸和面试官一起绿了…还好我机智地说这是即将改进的部分…)。

工作

  • 2018.3:自动问答机器人,主要是套用之前实习开发的系统框架+新公司数据+针对性调整。说实话我觉得这个新公司招我进来重要的原因就是偷学技术…所以在这个过程中我特别注意了数据和参数脱敏的问题,保证保密性(不能违背保密合同)。
  • 2018.4:百度机器阅读理解比赛。尽管我在比赛中实现的实际成果不多,但这份工作经历对我来说比较重要,因为我第一次比较系统地去深入调研和理解了自然语言处理中的某一任务专题,以至于我最终的毕业设计也聚焦在机器阅读理解这项任务上。相关代码和工程还在完善中,之后应该也会开源到我的GitHub上。
  • 2018.5:孪生网络句对相似度计算模型,这份工作来的有点突然,毕竟我本来还是在专心研究机器阅读理解的…目前成果一般,后续可能还会有深入研究,不过它也促进了我对目前自然语言处理领域工作的理解。

感想

自然语言处理的核心工作是什么?

  • 在应用研究层面,应当是文本建模。
    文本建模意味着什么?意味着通过文本数字化,机器“读懂”了文本。只有理解了文本,机器才能开展文本分类、生成、问答、翻译和阅读理解等工作;只有数字化后的文本能更全面、充分和尽可能少损失地被表示,机器的“智能”才能提升,才更可能拟人。当然,除此以外,能对自然语言处理的研究产生巨大影响的还有文本向量化、模型网络类脑化等工作。只不过它们都不太好上手,文本建模应当是普及最广、被研究最多和进展最快的一类研究。
  • 就我个人观察,文本建模已经从加权tfidf、双向lstm和cnn等方法逐渐往自注意力机制和优化卷积等方法变迁,其中引领潮流的当然是Google著名的《Attention is all your need》一文。在机器翻译和机器阅读理解领域,代表性的新新模型当属TransformerQANet

工程和算法的区别?

  • 在百分点,我更多的是从基础做起,做工程、做产品。五个月里,我锻炼了写代码的能力、熟悉了团队工作环境,知道怎么用wiki、git、filezilla和linux等等一系列东西,可以说是从0到1。
  • 在深思考,我则尝试着去思考自己想做什么,在一定程度突破了代码障碍的基础上,开始学会读论文、追前沿和做模型。算法相比工程最大的区别,就是不必再因为客户的具体需求而去调试参数和设定人工规则,而可以专注于模型本身的设计,去思考学术研究上的优化。我觉得我被这种开创性的研究工作深深吸引着。

换实习要不要“裸辞”?

  • 原则上不要,因为裸辞会产生空窗期。在空窗期,公司一般不在意我们在学校实验室里做了什么,甚至会认为只是在休息(也就意味着代码实践能力在下滑)。

不足

  • 实习时间太短,没能做更多研究。
  • 公司加班太多(虽然我几乎都没有参与),我认为被动加班太多只会引起效率下降,劳逸结合、平衡工作和休息才是正道。