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