Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

作者李纪为

香侬科技李纪为:初入NLP领域的一些小建议

ACL2019 投稿刚刚落幕,投稿数超过了 2800 篇,可以说是历史以来最盛大的一届 ACL。在深度学习的推动下,自然语言处理这个子领域也逐渐被推上人工智能大舞台的最前列。

最近在跟同学的邮件、或者知乎留言中的交流中,不少同学尤其是刚入(jin)门(keng)的同学,提到了深度学习背景下做 NLP 科研的很多迷茫。基本可以归纳为如下几点:如今一个模型,几十行 TensorFlow 或者 PyTorch 就可以解决掉,大家不厌其烦地刷数据集的 benchmark,但是因为如今实现模型的门槛低一些,SOTA 很难再刷的上去;就算好不容易刷上去了,因为模型千篇一律无非修修补补,文章投出去了因为 novelty 受限,文章中不中看天;即便是文章中了,似乎并无太大新意,灌水中已然迷茫。

深度算法的风靡会让研究者过度关心这些算法本身,而层出不穷模型结构的调整和改进又让我们眼花撩乱。当侃侃而谈深度学习网络结构变成一个很 cool 的事情的时候,人们的虚荣心会使得不约而同地忽略了几个重要点。基于我自己多年来曾经走过的弯路,踩过的坑,这篇文章做一点点小的总结。希望会对刚刚进入 NLP 领域的同学有所帮助。

1、了解 NLP 的最基本知识:Jurafsky 和 Martin 的 Speech and Language Processing 是领域内的经典教材,里面包含了 NLP 的基础知识、语言学扫盲知识、基本任务以及解决思路。阅读此书会接触到很多 NLP 的最基本任务和知识,比如 tagging, 各种 parsing,coreference, semantic role labeling 等等等等。这对于全局地了解 NLP 领域有着极其重要的意义。书里面的知识并不需要烂熟于心,但是刷上一两遍,起码对于 NLP 任务有基本认识,下次遇到了知道去哪里找还是非常有意义的。另外 Chris Manning 的 introduction to information retrieval 也是一本可以扫一下盲的书,当然我认为依然不需要记住所有细节,但轮廓需要了解。IR 里面的很多基本算法跟 NLP 有不少的重合。说说我自己曾经走过的弯路。Stanford NLP 的 qualification 考试的一部分就是选一些 jurafsky 和 manning 书里面的一些 chapter 来读,然后老师来问相关问题。开始我一直对里面的东西懒得看,所以 qualification 考试一拖再拖。但博士最后一年没办法拖的时候,才发现如果早知道这些东西,博士早年可以少走很多弯路。

为什么了解 NLP 基础知识的重要,我给大家举几个例子。

最近跟同学一起做语言模型 language modeling 相关的事情,很多同学用 LSTM 或者 transformers 做 language model 随手就能实现,但是实现一个 bigram 或者 trigram 的 language model(LM)却因为里面的 OOV 的平滑问题卡了大半天(熟悉的同学可能知道,需要拉普拉斯平滑或者更 sophisticated 的 Kneser-Ney 平滑)。为什么 bigram 或者 trigram 的 LM 很重要呢?去做一个语言模型的问题,实现深度模型之前,第一步其实就要去写一个 bigram 或者 trigram 的 LM。为什么呢?因为这些 N-gram 模型实现简单,并且 robust。通过这样简单的实现,可以告诉你这个数据集的 LM 模型的下限。这样我们心里会有数,神经网络模型至少不应该比这个模型差的。神经网络模型因为其参数、梯度爆炸等问题,有时候我们不太容易决定是真的模型不行、参数没调好还是代码有 bug。那么通过 N-gram LM 的给出的下限,我们就可以直观地知道神经网络是有 bug 还是没调好参数

第二个例子就是涉及发文章了,不知道有没有同学想过,BERT 里面训练 LM 的随机替换为什么就使结果变好,随机替换是什么鬼,怎么结果就好了。其实在 BERT 之前,斯坦福的吴恩达组的 Ziang Xie 的 Data Noising as Smoothing in Neural Network Language Models ICLR2017 就首次提出了此方法,而且给出了理论解释。这种 random 替换其实本质上属于 language modeling 里面基于 interpolation 的平滑方式,而基于 interpolation 的 LM 平滑,就躺在 jurafsky 那本书的第 3.4.3 节。

2. 了解早年经典的 NLP 模型以及论文:相比简单粗暴的神经网络模型,早年的 NLP 算法确实比较繁琐复杂,但里面确实有很多早年学者在硬件条件艰苦情况下的智慧结晶。熟悉了这些模型,可以在现在神经网络里面融会贯通。去年在人民大学做 seminar。Seminar 有大概 30-40 位同学参加。Seminar 中,我问了一个问题,有谁知道机器翻译中的 IBM 模型大概是干嘛的,举手的同学大概有五分之一。我再问,谁能来手写(或者大概手写)一下 IBM model1,一个人都没有。仅仅从基于 IBM 模型的 Hierarchical Phrase-based MT, 近几年就有很多篇引用量很高的文章是基于里面的思想的。例子数不胜数: 

1) chris dyer 组的 Incorporating structural alignment biases into an attentional neural translation model (NAACL16) 提出用双向 attention 做 neural 机器翻译的约束项,意思是如果在英语翻译法语生成的 target 中的一个法语词 attend 到了一个 source 中的英语词,那么反过来,法语翻译英文 target 中相同这个英语词应该也 attend 到 source 中的这个英语词。其实这个思想就是完完全全相似 Percy Liang 曾经的成名作之一,早在 NAACL06 年 Alignment by Agreement,大家通过题目的意思就可以猜到文章的内容,正向翻译与反向翻译中的 对齐 (alignment) 要 一致 (agree)。如今做 neural MT 的同学,有多少同学读过 Percy 的这篇大作呢(大家知道 Percy 最多的应该是 Squad 吧)。

2) 处理对话系统的无聊回复,用反向概率 p(source|target) 做 reranking 现在应该已经是标配。再比如 Rico Sennrich 的成名作之一将 Monolingual data 跟 seq2seq 模型结合。其实这连个思想在 phrase-base MT 里面早就被广发的使用。Neural 之前的 MT,需要对一个大的 N-best list 用 MERT 做 reranking,反向概率 p(source|target) 以及语言模型概率 p(target) 是 reranking 中 feature 的标配。

3) Harvard NLP 组, Sam Wiseman 和 Alex 发表的 EMNLP16 best paper runner-up, Sequence-to-Sequence Learning as Beam-Search Optimization, 基本上传承了 Daume´ III and Daniel Marcu 2005 年的 LaSO 模型,将其思想 adapt 到 neural 里面。

如果再准本溯源,诞生于 neural MT 的 attention,不就是 IBM 模型的神经网络版本嘛。

3. 了解机器学习的基本模型神经网络的简单暴力并且有效。但是从科研的角度讲,熟悉基本的机器学习算法是必修课。比如吴恩达的 machine learning 就是必要之选。记得前段时间我面试一个小伙子,一看就是很聪明的同学,而且很短的时间就有一篇 NAACL 在投。我就问小伙子,EM 算法是什么,小伙子说没有听说过 EM,而且自己的科研也用不到 EM。我认为这其实是一个挺大的误区。当我想起我自己,曾经就吃过很多类似的亏。因为早期数学基础偏弱,也没有决心恶补一下数学,所以早年每次看到跟 variational inference 相关的算法就头大,这种偏科持续了很久,限制了科研的广度。相比粗暴的神经网络,CRF 等模型的 inference 确实相对复杂(当年我自己也看了很多次才彻底搞明白)。但搞懂这些,是一个 NLP researcher 的基本素养。Pattern Recognition and Machine Learning 那本书,尤其是某些小节确实比较难(又暴露了数学基础差的事实),即便是只是为了过一遍,也需要很强的耐力才能看完,更不用说完全看懂了。我自己也曾经半途而废很多次,如今依然有很多章节是不太懂的。但是其中的很多基础 chapter,我认为还是很值得一读的。其实可以组成那种两三个人的学习小组,不需要有太雄伟的目标,用个一年哪怕两年的时间,把几个重要的 chapter 过一遍。

NLP 相对是应用科学,并不是特别的数学。但是我们天天用的算法的基本数学逻辑我认为还是需要搞懂,比如 dropout, 比如天天用到的优化 (SGD, momentum, adaboost, adagrad),比如各种 batch, layer normalization。这样其实可以省去很多浪费的时间,磨刀不误砍柴工。这些年来,在帮同学调 bug 的过程中,我至少遇见过 3-5 个同学 training 的时候开 dropout, test 的时候没有对每个 cell 用 (1-dropout) 去 scale(大家不要笑,这是真的)。然后画出 dropout 曲线就是 dropout 值越大,结果越差。在讨论的时候,同学一脸茫然并且不清楚 test 时候需要 scale。其实本质就是并不了解 dropout 背后的数学原理。

4. 多看 NLP 其他子领域的论文:NLP 有很多子领域,MT,信息抽取,parsing,tagging,情感分析,MRC 等等。多多熟悉其他子领域的进展是必要的。其实不同子领域所运用的模型不会相差太大。但是最开始看不熟悉领域的问题可能会有一点难,原因是对问题的 formalization 不是很了解。这可能就需要多花一些时间,多找懂的同学去问。其实了解不同问题的 formalization 也是对领域知识最好的扩充。

5. 了解 CV 和 data mining 领域的基本重大进展:当熟悉了上面所说的点之后(当然可能至少也需要一年的时间)。熟悉 CV 领域的基本任务、基本算法我认为对于打开科研视野很重要。但是不可否认,因为领域不用,写作风格、术语表达相差很大,又因为缺乏背景知识(文章中会省略一些基础知识,默认大家都懂。但是跨领域的人可能不懂),第一次想读懂跨领域的文章其实并不容易。我就出现过竟然在讨论班上直接把 faster-RCNN 讲错了的情况,以为自己看懂了,然后就讲错了(至今昱先天天还在因为这个事情调侃我)。不过重要的是,NLP 领域里面一些重要的文章其实或多或少借鉴了 CV 里面的思想,当然也同样出现 CV 借鉴 NLP 的情况。NLP 神经网络可视化、可解释性的研究,时间上还是落后于 CV 里面对 CNN 的可视化。所以很多工作大量借鉴了 CV 里面的类似工作。NLP 运用 GAN 其实也是借鉴 CV 的。其实两个领域很多是很相通的。比如,如果不考虑 question query, vision 里面 detection 中的 region proposal(在一个大的图片背景下找一个特定区域), 大家想是不是跟 MRC 里面的 span extraction(在一大堆文字里面找一个 span)有异曲同工之妙。更不用说 image caption generation 与 sequence-to-sequence 模型了,本质上几乎没什么太大的区别。强化学习在生成领域 generation,发完了 MT(Ranzato et al., ICLR2016) 再发 image caption generation, 再回到 summarization. Actor-critic 模型也是类似的,还是很多做 generation diversity 的文章。因为跨领域不好懂,所以第一次推荐看 tutorial, 如果有 sudo code 的 tutorial 那就更好了。另外看看扫盲课的视频,比如 Stanford CS231n 也是个好办法。另外,一个 NLP 组里面有一个很懂 CV 的人也很重要(拜谢昱先),and vise versa。

graph embedding 近两年崛起于 data mining 领域。目测会在(或者已经在)NLP 的不少任务得到广泛应用。想到几年前,deep walk 借鉴了 word2vec, 开始在 data mining 领域发迹,然后似乎又要轮转回 NLP 了。

当然啦如何写论文也是极其重要的一环,但不是这篇文章的主题,强烈推荐清华大学刘知远老师的相关文章。 


先写到这儿,欢迎大家补充拍砖。

香侬科技 李纪为 2019 年 3 月 11 日

知乎原文链接:https://zhuanlan.zhihu.com/p/59184256

入门NLP
21
相关数据
IBM机构

是美国一家跨国科技公司及咨询公司,总部位于纽约州阿蒙克市。IBM主要客户是政府和企业。IBM生产并销售计算机硬件及软件,并且为系统架构和网络托管提供咨询服务。截止2013年,IBM已在全球拥有12个研究实验室和大量的软件开发基地。IBM虽然是一家商业公司,但在材料、化学、物理等科学领域却也有很高的成就,利用这些学术研究为基础,发明很多产品。比较有名的IBM发明的产品包括硬盘、自动柜员机、通用产品代码、SQL、关系数据库管理系统、DRAM及沃森。

https://www.ibm.com/us-en/
相关技术
吴恩达人物

斯坦福大学教授,人工智能著名学者,机器学习教育者。2011年,吴恩达在谷歌创建了谷歌大脑项目,以通过分布式集群计算机开发超大规模的人工神经网络。2014年5月16日,吴恩达加入百度,负责“百度大脑”计划,并担任百度公司首席科学家。2017年3月20日,吴恩达宣布从百度辞职。2017年12月,吴恩达宣布成立人工智能公司Landing.ai,并担任公司的首席执行官。2018年1月,吴恩达成立了投资机构AI Fund。

所属机构
刘知远人物

刘知远,清华大学计算机系副教授、博士生导师。主要研究方向为表示学习、知识图谱和社会计算。2011 年获得清华大学博士学位,已在 ACL、IJCAI、AAAI 等人工智能领域的著名国际期刊和会议发表相关论文 60 余篇,Google Scholar 统计引用超过 2100 次。承担多项国家自然科学基金。曾获清华大学优秀博士学位论文、中国人工智能学会优秀博士学位论文、清华大学优秀博士后、中文信息学会青年创新奖,入选中国科学青年人才托举工程、CCF-Intel 青年学者提升计划。担任中文信息学会青年工作委员会执委、副主任,中文信息学会社会媒体处理专委会委员、秘书,SCI 期刊 Frontiers of Computer Science 青年编委,ACL、COLING、IJCNLP 领域主席。

深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

基于Transformer 的双向编码器表征技术

BERT是谷歌发布的基于双向 Transformer的大规模预训练语言模型,该预训练模型能高效抽取文本信息并应用于各种NLP任务,并刷新了 11 项 NLP 任务的当前最优性能记录。BERT的全称是基于Transformer的双向编码器表征,其中“双向”表示模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

word2vec技术

Word2vec,为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。 训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层。 Word2vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。Word2vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造。该算法渐渐被其他人所分析和解释。

对话系统技术

对话系统大致被分成两类: 任务为导向的对话系统,帮助用户去完成特定任务,比如找商品,订住宿,订餐厅等。实现任务为导向的对话系统,主要有两类方式,流水线方法和端到端方法。非任务导向的对话系统,与用户进行互动并提供回答,简单的说,就是在开放领域的闲聊。实现非任务导向对话系统也主要可分为两类,生成方法和基于检索的方法。

信息抽取技术

信息/数据抽取是指从非结构化或半结构化文档中提取结构化信息的技术。信息抽取有两部分:命名实体识别(目标是识别和分类真实世界里的知名实体)和关系提取(目标是提取实体之间的语义关系)。概率模型/分类器可以帮助实现这些任务。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

知乎机构

知乎,中文互联网综合性内容平台,自 2010 年成立以来,知乎凭借认真、专业、友善的社区氛围,独特的产品机制,以及结构化、易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类,在诸多领域具有关键影响力的内容平台。知乎将AI广泛应用与社区,构建了人、内容之间的多元连接,提升了社区的运转效率和用户体验。知乎通过内容生产、分发,社区治理等领域的AI应用,也创造了独有的技术优势和社区AI创新样本。

zhihu.com
中国科学技术大学・大数据与人工智能・硕士
看完大部分还是不懂,我是不是连门都没入……