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