”关于初入NPL领域的一些小建议“
1.了解 NLP 的最基本知识:Jurafsky 和 Martin 的 Speech and Language Processing 是(shì)领域内的(de)经典教材,里面包(bāo)含了(le) NLP 的基础知识(shí)、语言学扫盲知(zhī)识、基本任务(wù)以及(jí)解(jiě)决思(sī)路。阅读此书(shū)会(huì)接触(chù)到(dào)很多 NLP 的最基(jī)本任务和知识,比如 tagging, 各种 parsing,coreference, semantic role labeling 等等等等。这对于全局地了解 NLP 领域有着(zhe)极(jí)其重(chóng)要的意义。书里面的(de)知识并不需要烂熟于心,但是刷上一两遍,起码对于 NLP 任(rèn)务有基本认识,下次遇到(dào)了知道(dào)去哪里找还是非常有意(yì)义的。另外 Chris Manning 的 introduction to information retrieval 也(yě)是一本可以扫一下盲的书(shū),当然我认为依然不需(xū)要记住所有(yǒu)细节,但轮(lún)廓需(xū)要(yào)了解。IR 里面的很(hěn)多基本算法跟 NLP 有不(bú)少的重合。说说我自己曾(céng)经走过的(de)弯路。Stanford NLP 的(de) qualification 考试(shì)的一(yī)部分就是选一些 jurafsky 和 manning 书里面的一些 chapter 来读,然后老师来问相关问题。开始我一直对里(lǐ)面的东西懒得看,所以 qualification 考试一(yī)拖(tuō)再(zài)拖。但博(bó)士最后一年没办法拖的时候,才发(fā)现(xiàn)如果早知道这些东(dōng)西(xī),博士早(zǎo)年可以少走(zǒu)很多弯路。
为什么了解(jiě) NLP 基础知识的重要,我给大家举几个例(lì)子。
最近跟同学一起做语言模型 language modeling 相关的事情,很多同学用 LSTM 或者 transformers 做 language model 随手就能实现(xiàn),但是实现一个 bigram 或者 trigram 的 language model(LM)却因为里面(miàn)的(de) OOV 的平滑问题卡了大半天(熟悉(xī)的同学可能知(zhī)道,需要拉普拉斯平滑或者(zhě)更 sophisticated 的 Kneser-Ney 平滑)。为什么(me) bigram 或(huò)者 trigram 的 LM 很重要呢?去做一个语言模型的问题,实(shí)现深度模型之(zhī)前,第一步其实就(jiù)要去写一个 bigram 或者 trigram 的 LM。为什么呢(ne)?因为这些 N-gram 模型实(shí)现简单,并且 robust。通过(guò)这样(yàng)简单的实现,可以告诉(sù)你这个数据集的 LM 模型的下限。这样我们心里会(huì)有(yǒu)数(shù),神经网络模(mó)型至少不(bú)应该比这个模型差(chà)的。神经网络模型因为其超参数、梯度爆(bào)炸等问题(tí),有时(shí)候我们(men)不太容(róng)易决定是(shì)真的模型不行、参数没调好(hǎo)还是代(dài)码有 bug。那么通过 N-gram LM 的给出的下(xià)限,我(wǒ)们就可(kě)以直(zhí)观地知道神经网络是有(yǒu) bug 还是没调(diào)好参数。
第二个例子就是涉及(jí)发文章了(le),不知道(dào)有没(méi)有同(tóng)学(xué)想过(guò),BERT 里面(miàn)训练(liàn) LM 的随机替换(huàn)为什么就(jiù)使结果(guǒ)变好,随机替换是(shì)什么鬼(guǐ),怎么结果(guǒ)就好了。其实在 BERT 之前,斯(sī)坦福的吴恩达组的 Ziang Xie 的 Data Noising as Smoothing in Neural Network Language Models ICLR2017(https://arxiv.org/pdf/1703.02573.pdf)就首次提(tí)出了此方法,而且给出了理论解(jiě)释。这种 random 替换其实(shí)本质上属于 language modeling 里面基(jī)于 interpolation 的平滑方式,而基于 interpolation 的 LM 平滑,就躺在 jurafsky 那本书的第 3.4.3 节(jiē)。
2.了(le)解早(zǎo)年经典的 NLP 模(mó)型(xíng)以及论文:相(xiàng)比简单粗暴(bào)的神经网络模型,早年的(de) NLP 算法(fǎ)确实比较繁琐复(fù)杂,但里面确实有很多早年学者在硬件条(tiáo)件艰苦情况下的智慧结(jié)晶。熟悉了这(zhè)些模(mó)型,可以在现在(zài)神(shén)经网(wǎng)络(luò)里面融(róng)会(huì)贯通。去(qù)年在人(rén)民大学做 seminar。Seminar 有大概 30-40 位同学参加。Seminar 中,我问了(le)一个问题,有(yǒu)谁知道机(jī)器(qì)翻译中(zhōng)的 IBM 模型大概是(shì)干嘛的(de),举手的(de)同学大概(gài)有五(wǔ)分之一。我再问,谁(shuí)能来手写(或者大概手写)一(yī)下(xià) IBM model1,一个人都没有。仅仅(jǐn)从基于 IBM 模型的 Hierarchical Phrase-based MT, 近几年就有很多篇(piān)引用量(liàng)很高的文章是基(jī)于里面的思(sī)想的。例子数不胜数:
chris dyer 组的 Incorporating structural alignment biases into an attentional neural translation model (NAACL16) 提出用双向(xiàng) attention 做 neural 机器翻译的(de)约束项,意思是如果在英语翻译法语生成的(de) target 中的一(yī)个法语词 attend 到了一个(gè) source 中的英语词,那么反(fǎn)过来,法语翻(fān)译英(yīng)文 target 中相(xiàng)同这个英(yīng)语词(cí)应该也 attend 到(dào) source 中的这个英(yīng)语词。其实这个思想(xiǎng)就是完完全全相(xiàng)似(sì) Percy Liang 曾经的成名作之(zhī)一,早在 NAACL06 年 Alignment by Agreement,大家通过题目的(de)意思就可(kě)以(yǐ)猜到文章的内容,正向翻译与反向翻译中的 对齐 (alignment) 要 一致 (agree)。如今做 neural MT 的(de)同学,有多(duō)少同学读过 Percy 的这篇大作(zuò)呢(大家知(zhī)道 Percy 最多的应该是 Squad 吧)。
处理对话系(xì)统的无聊回复,用 p(target|source) 做 reranking 现在应该(gāi)已经是标配。再比(bǐ)如 Rico Sennrich 的成名作(zuò)之(zhī)一将 Monolingual data 跟(gēn) seq2seq 模型结(jié)合。其实这连个思想在 phrase-base MT 里面早就被广发的使用。Neural 之前的 MT,需要对一(yī)个大的 N-best list 用 MERT 做 reranking,反向概率 p(target|source) 以(yǐ)及语(yǔ)言(yán)模型概率(lǜ) p(target) 是(shì) reranking 中 feature 的标配。
Harvard NLP 组, Sam Wiseman 和(hé) Alex 发表的 EMNLP16 best paper runner-up, Sequence-to-Sequence Learning as Beam-Search Optimization, 基本上传承了 Daume III and Daniel Marcu 2005 年的 LaSO 模型,将其思想 adapt 到 neural 里面(miàn)。
如(rú)果再准(zhǔn)本(běn)溯源,诞(dàn)生于 neural MT 的 attention,不就是 IBM 模型(xíng)的神经(jīng)网络版本嘛。
3.了解机(jī)器学(xué)习的基本模型:神经(jīng)网络(luò)的(de)简(jiǎn)单暴力并且有效。但是从科研的(de)角度(dù)讲,熟悉基本的机器学习算法是(shì)必修课。比如吴恩达(dá)的 machine learning 就(jiù)是必要之选。记得前段(duàn)时间我面(miàn)试一个小伙子(zǐ),一看就是很聪明的同(tóng)学,而且(qiě)很(hěn)短的时间就有一篇 NAACL 在投。我就问(wèn)小伙子,EM 算法是什(shí)么(me),小伙子(zǐ)说没(méi)有听说过(guò) EM,而且自己的(de)科研也用(yòng)不到 EM。我认为这其实是一个挺大的误区(qū)。当我(wǒ)想起我自己(jǐ),曾经就吃(chī)过很多类似的亏(kuī)。因为早期数学(xué)基础偏弱,也(yě)没有决心恶(è)补(bǔ)一下数学,所以早年每次(cì)看(kàn)到跟 variational inference 相关的算(suàn)法就头大(dà),这种偏科持续了很久,限制(zhì)了科研的广度(dù)。相(xiàng)比粗暴的神经网络(luò),CRF 等模型的 inference 确(què)实相对(duì)复杂(zá)(当年我自己(jǐ)也(yě)看了很多次(cì)才彻(chè)底搞明白(bái))。但(dàn)搞懂(dǒng)这些,是一个 NLP researcher 的基本素(sù)养(yǎng)。Pattern Recognition and Machine Learning 那本(běn)书,尤其是某些小节确实比(bǐ)较难(又(yòu)暴露了数学基础差的事实),即(jí)便是只(zhī)是为了过一遍,也需要(yào)很强的耐力(lì)才能看完,更不(bú)用说完全看懂了(le)。我(wǒ)自己也曾经半途而废很(hěn)多次(cì),如今依然有很(hěn)多章节(jiē)是不太懂(dǒng)的(de)。但是其中的很多基础 chapter,我认(rèn)为还是很值得(dé)一读的。其实可以组成(chéng)那(nà)种两三个人的学(xué)习小组,不需要有太雄伟的目(mù)标,用个一(yī)年哪怕两年的时间(jiān),把几个重要的(de) chapter 过一遍。
NLP 相对是应用科学,并不是特别(bié)的(de)数学。但(dàn)是我们(men)天天用的算法的(de)基本数学逻辑我认为(wéi)还是(shì)需要搞懂,比如 dropout, 比如(rú)天天用到的优化 (SGD, momentum, adaboost, adagrad),比如(rú)各种(zhǒng) batch, layer normalization。这样其实可以省去很多浪(làng)费的时间,磨刀(dāo)不误砍柴工。这些年来,在帮同学调 bug 的过(guò)程中,我至少遇(yù)见(jiàn)过(guò) 3-5 个同学 training 的时候开 dropout, test 的时候没有对每个 cell 用 (1-dropout) 去 scale(大家(jiā)不要笑,这(zhè)是真的)。然后画出(chū) dropout 曲(qǔ)线就是 dropout 值越(yuè)大,结果越差。在讨论的(de)时候(hòu),同学一脸(liǎn)茫然并且不清楚 test 时候需要 scale。其实本质(zhì)就是并不了(le)解 dropout 背后的(de)数(shù)学(xué)原理。
4.多看 NLP 其他子领域(yù)的论文(wén):NLP 有很多子(zǐ)领域,MT,信(xìn)息抽取,parsing,tagging,情感分析(xī),MRC 等等。多多(duō)熟悉其他子(zǐ)领域的进展是必要的。其实(shí)不同子(zǐ)领域所运用的模(mó)型不(bú)会相差太大。但是最开始看不熟悉领域的问题可能会有一点难(nán),原因是对问题的 formalization 不是(shì)很(hěn)了解。这可能就需要多花一些时间,多找懂的同学去问。其实了(le)解(jiě)不同问(wèn)题的 formalization 也是对领(lǐng)域知(zhī)识(shí)最好的扩充。
5.了解 CV 和 data mining 领域(yù)的基本重大进(jìn)展:当熟悉了上(shàng)面(miàn)所说(shuō)的(de)点之后(当(dāng)然(rán)可能至少也(yě)需要一年的时间)。熟悉 CV 领域的(de)基本任(rèn)务(wù)、基本算法我认为对于(yú)打开科研视野很重要(yào)。但是不可(kě)否认,因为(wéi)领域不用(yòng),写作风格、术语表达(dá)相差很大,又因为(wéi)缺乏背景知识(文(wén)章中会省略一些基(jī)础知识(shí),默认大家都懂。但是跨领(lǐng)域(yù)的人可能不懂),第一次(cì)想读懂跨领域的文章其实并不(bú)容(róng)易。我就出现过竟然(rán)在讨论(lùn)班(bān)上直(zhí)接把 faster-RCNN 讲错(cuò)了的(de)情况,以为自己看(kàn)懂了,然后就(jiù)讲错了(至今昱先天天还在因为(wéi)这(zhè)个事情调侃我)。不过重要的是,NLP 领域里面一些重(chóng)要(yào)的文章其(qí)实或多(duō)或少借鉴了 CV 里面的思想,当然也同样(yàng)出现(xiàn) CV 借鉴 NLP 的(de)情况。NLP 神经网络可视化、可解释性的研究,时间(jiān)上还是落后于 CV 里面对 CNN 的可视化。所以很多工(gōng)作大量借鉴了 CV 里面的类似工作(zuò)。NLP 运用 GAN 其实也是借鉴 CV 的。其实两个领域很多是很相通(tōng)的(de)。比如(rú),如果不考虑 question query, vision 里面 detection 中的 region proposal(在一个大的图片背景下(xià)找一个特定区域), 大家想是不(bú)是跟 MRC 里面的 span extraction(在一大堆文字里面找一个 span)有异曲同工之妙。更不用(yòng)说 image caption generation 与 sequence-to-sequence 模(mó)型了,本(běn)质上几乎没什么太大的区别。强化学习在生成领域 generation,发完(wán)了 MT(Ranzato et al., ICLR2016) 再发 image caption generation, 再(zài)回到 summarization. Actor-critic 模(mó)型也是类似(sì)的,还是(shì)很多做 generation diversity 的文章。因为跨(kuà)领域不好懂,所以第一次推荐看(kàn) tutorial, 如果有 sudo code 的 tutorial 那就更好了。另外看看扫盲课(kè)的视频,比如 Stanford CS231n 也是个好(hǎo)办法(fǎ)。另(lìng)外,一个 NLP 组里(lǐ)面有一个很懂 CV 的人也很重要(拜谢昱先),and vise versa。graph embedding 近两年崛起于 data mining 领域。目测会在(zài)(或(huò)者已经(jīng)在)NLP 的不少任(rèn)务得到广泛应用。想(xiǎng)到几年前,deep walk 借鉴了 word2vec, 开始在 data mining 领域发迹,然(rán)后似乎又要轮转回 NLP 了。