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