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