来源:知乎

作者:李纪为

本文约5000字建议阅读10分钟

本文为你介绍了刚迈进NLP领域需要掌握的一些小技巧。

ACL2019投稿刚刚落幕,投稿数超过了2800篇,可以说是历史以来最盛大的一届ACL。在深度学习的推动下,自然语言处理这个子领域也逐渐被推上人工智能大舞台的最前列。

最近在跟同学的邮件、或者知乎留言中的交流中,不少同学尤其是刚入(jin)门(keng)的同学,提到了深度学习背景下做NLP科研的很多迷茫。基本可以归纳为如下几点:如今一个模型,几十行TensorFlow或者PyTorch就可以解决掉,大家不厌其烦地刷数据集的benchmark,但是因为如今实现模型的门槛低一些,SOTA很难再刷的上去;就算好不容易刷上去了,因为模型千篇一律无非修修补补,文章投出去了因为novelty 受限,文章中不中看天;即便是文章中了,似乎并无太大新意,灌水中已然迷茫。

深度算法的风靡会让研究者过度关心这些算法本身,而层出不穷模型结构的调整和改进又让我们眼花撩乱。当侃侃而谈深度学习网络结构变成一个很cool的事情的时候,人们的虚荣心会使得不约而同地忽略了几个重要点。基于我自己多年来曾经走过的弯路,踩过的坑,这篇文章做一点点小的总结。希望会对刚刚进入NLP领域的同学有所帮助。

1、了解NLP的最基本知识

Jurafsky和Martin的Speech and Language Processing是领域内的经典教材,里面包含了NLP的基础知识、语言学扫盲知识、基本任务以及解决思路。阅读此书会接触到很多NLP的最基本任务和知识,比如tagging, 各种parsing,coreference, semantic role labeling等等等等。这对于全局地了解NLP领域有着极其重要的意义。书里面的知识并不需要烂熟于心,但是刷上一两遍,起码对于NLP任务有基本认识,下次遇到了知道去哪里找还是非常有意义的。另外 Chris Manning 的 introduction to information retrieval 也是一本可以扫一下盲的书,当然我认为依然不需要记住所有细节,但轮廓需要了解。IR里面的很多基本算法跟NLP有不少的重合。说说我自己曾经走过的弯路。Stanford NLP的qualification考试的一部分就是选一些jurafsky 和 manning书里面的一些chapter来读,然后老师来问相关问题。

开始我一直对里面的东西懒得看,所以qualification考试一拖再拖。但博士最后一年没办法拖的时候,才发现如果早知道这些东西,博士早年可以少走很多弯路。

为什么了解NLP基础知识的重要,我给大家举几个例子。

最近跟同学一起做语言模型 language modeling相关的事情,很多同学用LSTM或者transformers做language model随手就能实现,但是实现一个 bigram 或者 trigram的language model(LM)却因为里面的OOV的平滑问题卡了大半天(熟悉的同学可能知道,需要拉普拉斯平滑或者更sophisticated的Kneser-Ney平滑)。为什么bigram 或者 trigram的LM很重要呢?去做一个语言模型的问题,实现深度模型之前,第一步其实就要去写一个 bigram 或者 trigram的LM。为什么呢? 因为这些N-gram模型实现简单,并且robust。通过这样简单的实现,可以告诉你这个数据集的LM模型的下限。这样我们心里会有数,神经网络模型至少不应该比这个模型差的。神经网络模型因为其超参数、梯度爆炸等问题,有时候我们不太容易决定是真的模型不行、参数没调好还是代码有bug。那么通过N-gram LM的给出的下限,我们就可以直观地知道神经网络是有bug还是没调好参数。

第二个例子就是涉及发文章了,不知道有没有同学想过,BERT里面训练LM的随机替换为什么就使结果变好,随机替换是什么鬼,怎么结果就好了。其实在BERT之前,斯坦福的吴恩达组的Ziang Xie的 Data Noising as Smoothing in Neural Network Language Models ICLR2017arxiv.org/pdf/1703.0257首次提出了此方法,而且给出了理论解释。这种random替换其实本质上属于language modeling里面基于interpolation的平滑方式, 而基于interpolation的LM平滑,就躺在jurafsky那本书的第3.4.3节。

http://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1703.02573.pdf

2、了解早年经典的NLP模型以及论文

相比简单粗暴的神经网络模型,早年的NLP算法确实比较繁琐复杂,但里面确实有很多早年学者在硬件条件艰苦情况下的智慧结晶。熟悉了这些模型,可以在现在神经网络里面融会贯通。去年在人民大学做seminar。Seminar有大概30-40位同学参加。

Seminar中,我问了一个问题,有谁知道机器翻译中的IBM模型大概是干嘛的,举手的同学大概有五分之一。我再问,谁能来手写(或者大概手写)一下IBM model1,一个人都没有。仅仅从基于IBM模型的Hierarchical Phrase-based MT, 近几年就有很多篇引用量很高的文章是基于里面的思想的。例子数不胜数:

  • chris dyer 组的Incorporating structural alignment biases into an attentional neural translation model (NAACL16) 提出用双向attention做neural机器翻译的约束项,意思是如果在英语翻译法语生成的target中的一个法语词attend到了一个source中的英语词,那么反过来,法语翻译英文 target中相同这个英语词应该也attend到source中的这个英语词。其实这个思想就是完完全全相似 Percy Liang 曾经的成名作之一,早在NAACL06年 Alignment by Agreement,大家通过题目的意思就可以猜到文章的内容,正向翻译与反向翻译中的 对齐(alignment) 要 一致(agree)。如今做neural MT的同学,有多少同学读过Percy的这篇大作呢 (大家知道Percy最多的应该是Squad吧)。

  • 处理对话系统的无聊回复,用反向概率p(source|target)做reranking现在应该已经是标配。再比如Rico Sennrich的成名作之一将Monolingual data 跟seq2seq 模型结合。其实这连个思想在phrase-base MT 里面早就被广发的使用。Neural之前的MT,需要对一个大的N-best list用MERT做 reranking, 反向概率 p(source|target) 以及语言模型概率 p(target)是reranking中feature的标配。

  • Harvard NLP组, Sam Wiseman 和Alex 发表的EMNLP16 best paper runner-up, Sequence-to-Sequence Learning as Beam-Search Optimization, 基本上传承了Daume´ III and Daniel Marcu 2005年的 LaSO模型,将其思想adapt到neural里面。

如果再准本溯源,诞生于neural MT的attention,不就是IBM模型的神经网络版本嘛。

3、了解机器学习的基本模型

神经网络的简单暴力并且有效。但是从科研的角度讲,熟悉基本的机器学习算法是必修课。比如吴恩达的 machine learning就是必要之选。记得前段时间我面试一个小伙子,一看就是很聪明的同学,而且很短的时间就有一篇NAACL在投。我就问小伙子,EM算法是什么,小伙子说没有听说过EM,而且自己的科研也用不到EM。

我认为这其实是一个挺大的误区。当我想起我自己,曾经就吃过很多类似的亏。因为早期数学基础偏弱,也没有决心恶补一下数学,所以早年每次看到跟variational inference相关的算法就头大,这种偏科持续了很久,限制了科研的广度。相比粗暴的神经网络,CRF等模型的inference确实相对复杂(当年我自己也看了很多次才彻底搞明白)。但搞懂这些,是一个NLP researcher的基本素养。Pattern Recognition and Machine Learning那本书,尤其是某些小节确实比较难(又暴露了数学基础差的事实),即便是只是为了过一遍,也需要很强的耐力才能看完,更不用说完全看懂了。我自己也曾经半途而废很多次,如今依然有很多章节是不太懂的。但是其中的很多基础chapter,我认为还是很值得一读的。其实可以组成那种两三个人的学习小组,不需要有太雄伟的目标,用个一年哪怕两年的时间,把几个重要的chapter 过一遍。

NLP相对是应用科学,并不是特别的数学。但是我们天天用的算法的基本数学逻辑我认为还是需要搞懂,比如dropout, 比如天天用到的优化(SGD, momentum, adaboost, adagrad),比如各种 batch, layer normalization。这样其实可以省去很多浪费的时间,磨刀不误砍柴工。这些年来,在帮同学调bug的过程中,我至少遇见过3-5个同学 training 的时候开dropout, test 的时候没有对每个cell用 (1-dropout)去 scale (大家不要笑,这是真的)。然后画出dropout曲线就是 dropout 值越大,结果越差。在讨论的时候,同学一脸茫然并且不清楚test时候需要scale。其实本质就是并不了解dropout背后的数学原理。

4、多看NLP其他子领域的论文

NLP有很多子领域,MT,信息抽取,parsing,tagging,情感分析,MRC等等。多多熟悉其他子领域的进展是必要的。其实不同子领域所运用的模型不会相差太大。但是最开始看不熟悉领域的问题可能会有一点难,原因是对问题的formalization不是很了解。这可能就需要多花一些时间,多找懂的同学去问。其实了解不同问题的formalization也是对领域知识最好的扩充。

5、了解 CV和data mining领域的基本重大进展

当熟悉了上面所说的点之后(当然可能至少也需要一年的时间)。熟悉CV领域的基本任务、基本算法我认为对于打开科研视野很重要。但是不可否认,因为领域不用,写作风格、术语表达相差很大,又因为缺乏背景知识(文章中会省略一些基础知识,默认大家都懂。但是跨领域的人可能不懂),第一次想读懂跨领域的文章其实并不容易。我就出现过竟然在讨论班上直接把faster-RCNN讲错了的情况,以为自己看懂了,然后就讲错了(至今昱先天天还在因为这个事情调侃我)。

不过重要的是,NLP领域里面一些重要的文章其实或多或少借鉴了CV里面的思想,当然也同样出现CV借鉴NLP的情况。NLP神经网络可视化、可解释性的研究,时间上还是落后于CV里面对CNN的可视化。所以很多工作大量借鉴了CV里面的类似工作。NLP运用GAN其实也是借鉴CV的。其实两个领域很多是很相通的。比如,如果不考虑question query, vision里面detection中的 region proposal(在一个大的图片背景下找一个特定区域), 大家想是不是跟MRC里面的 span extraction (在一大堆文字里面找一个span)有异曲同工之妙。更不用说image caption generation与sequence-to-sequence模型了,本质上几乎没什么太大的区别。强化学习在生成领域generation,发完了MT(Ranzato et al., ICLR2016)再发 image caption generation, 再回到summarization. Actor-critic 模型也是类似的,还是很多做generation diversity的文章。

因为跨领域不好懂,所以第一次推荐看tutorial, 如果有 sudo code 的tutorial那就更好了。另外看看扫盲课的视频,比如Stanford CS231n也是个好办法。另外,一个NLP组里面有一个很懂CV的人也很重要(拜谢昱先), and vise versa。

graph embedding近两年崛起于data mining领域。目测会在(或者已经在)NLP的不少任务得到广泛应用。想到几年前,deep walk借鉴了word2vec, 开始在data mining领域发迹,然后似乎又要轮转回NLP了。
当然啦如何写论文也是极其重要的一环,但不是这篇文章的主题,强烈推荐清华大学刘知远老师的相关文章:zhuanlan.zhihu.com/p/58

编辑:王菁

校对:林亦霖

干货|4条实用小建议,送给初入NLP领域的你(附链接)相关推荐

  1. 4条实用小建议,送给初入NLP领域的你

    来源:知乎 作者:李纪为 本文约5000字,建议阅读10分钟. 本文为你介绍了刚迈进NLP领域需要掌握的一些小技巧. ACL2021投稿刚刚落幕,投稿数超过了2800篇,可以说是历史以来最盛大的一届A ...

  2. 【转】初入NLP领域的一些小建议

    初入NLP领域的一些小建议 李纪为 ACL2019投稿刚刚落幕,投稿数超过了2800篇,可以说是历史以来最盛大的一届ACL.在深度学习的推动下,自然语言处理这个子领域也逐渐被推上人工智能大舞台的最前列 ...

  3. 大佬总结的4条宝贵经验,送给初入职场的你,从此一飞冲天

    初入职场的时候,没有人给我讲应该注意哪些,也不知道去知乎上找答案,就那样傻乎乎地自我摸索总结.结果犯了不少致命的错误,这里回忆一些供你借鉴. 01.衣着邋遢,不修边幅. 贵为一个程序员,那时候竟然没有 ...

  4. 李纪为:初入NLP领域的一些小建议

    刚开始做算法的朋友会有遇到很多误区,比如沉迷新的模型,忽视基础等等.我强烈建议大家沉下心来读一下香侬科技李纪为博士的这个文章,对你会很有帮助.以下是原文. ACL2019投稿刚刚落幕,投稿数超过了28 ...

  5. 经验 | 初入NLP领域的一些小建议

    作者:香侬科技 李纪为 斯坦福大学计算机博士 链接:https://zhuanlan.zhihu.com/p/59184256 导读 ACL2019投稿刚刚落幕,投稿数超过了2800篇,可以说是历史以 ...

  6. 初入NLP领域的一些小建议 1

    雷锋网(公众号:雷锋网) AI 科技评论按,本文作者是香侬科技的李纪为,原载于知乎,雷锋网获得授权转载. ACL2019 投稿刚刚落幕,投稿数超过了 2800 篇,可以说是历史以来最盛大的一届 ACL ...

  7. 香侬科技李纪为:初入NLP领域的一些小建议

    作者 | 香侬科技李纪为,斯坦福大学计算机博士 来源 | 李纪为知乎专栏 ACL 2019投稿刚刚落幕,投稿数超过了2800篇,可以说是历史以来最盛大的一届ACL.在深度学习的推动下,自然语言处理这个 ...

  8. 编程语言之父:六条经典格言送给初入编程界的你

    来源:编程语言之父:六条经典格言送给初入编程界的你 - 知乎 大多数编程语言之父都是编程所耽误的语言大师. 他们的编程思想深刻而有趣. 程序员合作伙伴总是可以从他们的评论中获得灵感,并从他们的经验中学 ...

  9. 如何去选取第一批要阅读的论文?_顶会最佳论文奖得主:初入科研领域,如何正确做科研?...

    文字整理:智源社区 常政.贾伟.王炜强 每个人都拥有着相似的才智,为什么有些人能顺利地完成学生到学者的过渡,能在学术生涯早期早早地做出突破性工作:而有些人,虽有雄心壮志,却始终不得其法,不能进入科研之 ...

最新文章

  1. python文件关键行数_Python计算大文件行数方法及性能比较
  2. zookeeper在搭建的时候,解决后台启动为standalone模式问题
  3. 【转】POWER MANAGEMENT IN IEEE 802.11
  4. 计算机基础知识作业答案,计算机基础与应用作业答案ID及计算机基础知识笔试题.doc...
  5. 天池实验室Python能力测验
  6. Shell命令-内置命令及其它之exec、export
  7. CreateSolidBrush
  8. Shell脚本语法2
  9. java爬虫,提供链接直接爬取网页代码
  10. BS前台能力迅速提高
  11. lstm原文_对时间序列分类的LSTM全卷积网络的见解
  12. 重装mysql 失败_重装MySQL最后一步失败的解决办法
  13. sklearn- 一元线性回归
  14. 多元函数泰勒展开与黑塞矩阵
  15. java处理代码表_Java处理中华人民共和国行政区划代码
  16. 11决策树算法;12案例实战:使用sklearn构造决策树模型(含数据)
  17. win10如何共享打印机_局域网内,办公室USB接口打印机如何共享
  18. POC原型开发:巡店 一期结果
  19. hdu 1983 Kaitou Kid - The Phantom Thief (2)
  20. 众达说两化融合A042A=程序文件之信息资源需要包含那些内容

热门文章

  1. Atitit r2017 r6 doc list on home ntpc.docx
  2. HTML5+MUI+HBuilder 之初探情人
  3. 99 位职业设计师 99 个设计谏言
  4. 2018目标,提高免疫力,身体工作双丰收
  5. 使用screen/byobu 管理你的远程会话
  6. Oracle之comment关键字的详细讲解
  7. python 浏览器显示本地文件夹_从浏览器中打开本地文件文件夹
  8. oracle主备库sync模式,Oracle 探索DG备库undo工作模式
  9. tensorflow与keras关系
  10. 什么是 JVM方法区