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