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