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