0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么了解NLP基础知识的重要?

电子工程师 来源:lp 2019-03-15 09:33 次阅读

ACL 2019投稿刚刚落幕,投稿数超过了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书里面的一些章节来读,然后老师来问相关问题。开始我一直懒得看,所以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(ICLR 2017)就首次提出了此方法,而且给出了理论解释。这种random替换其实本质上属于language modeling里面基于interpolation的平滑方式, 而基于interpolation的LM平滑,就躺在jurafsky那本书的第3.4.3节。

2.了解早年经典的NLP模型以及论文:相比简单粗暴的神经网络模型,早年的NLP算法确实比较繁琐复杂,但里面确实有很多早年学者在硬件条件艰苦情况下的智慧结晶。熟悉了这些模型,可以在现在神经网络里面融会贯通。去年在人民大学做seminar,大概30-40位同学参加。我问了一个问题,有谁知道机器翻译中的IBM模型大概是干嘛的,举手的同学大概有五分之一。我再问,谁能来手写(或者大概手写)IBM model1,一个人都没有。仅仅是基于IBM模型的Hierarchical Phrase-based MT, 近几年就有很多篇引用量很高的文章是基于该模型的思想。例子数不胜数:1) chris dyer组的Incorporating structural alignment biases into an attentional neural translation model(NAACL16)提出用双向attention做神经机器翻译的约束项,意思是如果在英语翻译法语生成的target中的一个法语词attend到了一个source中的英语词,那么反过来,法语翻译英文 target中相同这个英语词应该也attend到source中的这个英语词。

其实这个思想就是完完全全相似Percy Liang曾经的成名作之一。早在NAACL06年 Alignment by Agreement,大家通过题目的意思就可以猜到文章的内容,正向翻译与反向翻译中的对齐(alignment) 要一致(agree)。如今做神经机器翻译的同学,有多少同学读过Percy的这篇大作呢 (大家知道Percy最多的应该是Squad吧)?2) 处理对话系统的无聊回复,用p(target|source)做reranking现在应该已经是标配。再比如Rico Sennrich的成名作之一将Monolingual data 跟seq2seq 模型结合。其实这连个思想在phrase-base MT里面早就被广发的使用。Neural之前的MT,需要对一个大的N-best list用MERT做 reranking, 反向概率p(target|source)以及语言模型概率p(target)是reranking中feature的标配。

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

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

3.了解机器学习的基本模型:神经网络的简单暴力并且有效。但是从科研的角度讲,熟悉基本的机器学习算法是必修课。比如吴恩达的machine learning就是必要之选。记得前段时间我面试一个小伙子,一看就是很聪明的同学,而且很短的时间就有一篇NAACL在投。我就问小伙子,EM算法是什么,小伙子说没有听说过EM,而且自己的科研也用不到EM。我认为这其实是一个挺大的误区。当我想起我自己,曾经就吃过很多类似的亏。因为早期数学基础偏弱,也没有决心恶补一下数学,所以早年每次看到跟variational inference相关的算法就头大,这种偏科持续了很久,限制了科研的广度。相比粗暴的神经网络,CRF等模型的inference确实相对复杂(当年我自己也看了很多次才彻底搞明白)。

但搞懂这些,是一个NLP researcher的基本素养。Pattern Recognition and Machine Learning那本书,尤其是某些小节确实比较难(又暴露了数学基础差的事实),即便是只是为了过一遍,也需要很强的耐力才能看完,更不用说完全看懂了。我自己也曾经很多次半途而废,如今依然有很多章节是不太懂的。但是其中的很多基础章节,我认为还是很值得一读的。其实可以组成那种两三个人的学习小组,不需要有太雄伟的目标,用个一年哪怕两年的时间,把几个重要的章节过一遍。

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有很多子领域,包括机器翻译,信息抽取,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了。当然啦如何写论文也是极其重要的一环,但不是这篇文章的主题,强烈推荐清华大学刘知远老师的相关文(https://zhuanlan.zhihu.com/p/58752815),先写到这儿,欢迎大家补充拍砖。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 深度学习
    +关注

    关注

    73

    文章

    5462

    浏览量

    120875
  • 自然语言处理

    关注

    1

    文章

    594

    浏览量

    13479
  • nlp
    nlp
    +关注

    关注

    1

    文章

    483

    浏览量

    21985

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

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    第48章 JavaScript基础知识

    的脚本语言。(本章的知识点主要整理自网络)48.1 初学者重要提示48.2 JavaScript基础知识参考资料48.3 JavaScript基础知识点48.4 HTML中嵌入Java
    发表于 01-11 16:58

    labview基础知识

    labview基础知识labview基础知识labview基础知识labview基础知识
    发表于 03-08 17:56

    【HarmonyOS基础知识】什么是HarmonyOS

    简短的视频,带你了解HarmonyOS基础知识之什么是HarmonyOS
    发表于 01-20 08:00

    计算机网络基础知识了解

    计算机网络技术复习一、 计算机网络基础知识了解:计算机网络(Internet)的发展 面向终端的计算机网络(单个计算机,直接连接主机) 分组交换网络(实现了不同计算机之间的通信。此时广域网从逻辑上
    发表于 07-26 06:27

    示波器基础知识

    第1章 示波器基础知识本章的内容整理自网络,主要讲解示波器的基础知识。如果初学的话非常有必要对这部分知识有一个了解。因为示波器是硬件调试必不可少的设备。1.1 什么是示波器1.2 示波
    发表于 08-09 07:21

    STM32F407的系统bootloader基础知识下载

    第28章 STM32F407的系统bootloader基础知识28.1 初学者重要提示28.2 系统bootLoader基础知识28.2.1 系统bootLoader执行流程28.2....
    发表于 08-10 08:00

    通信基础知识教程

    通信基础知识 1、电信基础知识2、通信电源技术3、配线设备结构、原理与防护4、防雷基础知识5、EMC基础知识6、防腐蚀原理与技术7、产品安
    发表于 03-04 16:48 33次下载

    电阻基础知识

    电阻基础知识比较详细,分类清楚,适合初学者有一个比较全面的了解
    发表于 01-11 14:55 0次下载

    电子元器件基础知识

    电子与信息工程的大一新生需了解的元器件的简单的基础知识
    发表于 03-09 11:05 695次下载

    FFC基础知识

    FFC基础知识,让你真正了解FPC的各项参数指标。
    发表于 03-14 10:16 0次下载

    电源管理基础知识电源管理基础知识电源管理基础知识

    电源管理基础知识电源管理基础知识电源管理基础知识
    发表于 09-15 14:36 76次下载
    电源管理<b class='flag-5'>基础知识</b>电源管理<b class='flag-5'>基础知识</b>电源管理<b class='flag-5'>基础知识</b>

    Linux设备驱动程序基础知识了解

    了解Linux设备驱动程序的基础知识,重点关注设备节点,内核框架,虚拟文件​​系统和内核模块。 提出了一个简单的内核模块实现。
    的头像 发表于 11-26 06:51 3081次阅读

    了解一下机器学习中的基础知识

    机器学习中的基础知识 demi 在 周四, 03/07/2019 - 09:16 提交 机器学习中涉及到了很多的概念,当然要想了解机器学习的话就需要对这些基础知识有一个深入的了解才能够
    的头像 发表于 03-31 17:08 3777次阅读

    知识图谱是NLP的未来吗?

    我的看法:知识图谱不是NLP的未来,因为知识图谱是另外一种与NLP有很多交集的技术。在目前所有已知的发展方向中,知识图谱是最有可能长期和
    的头像 发表于 04-15 14:36 3655次阅读
    <b class='flag-5'>知识</b>图谱是<b class='flag-5'>NLP</b>的未来吗?

    热设计基础知识——可靠性设计重要组成部分

    热设计基础知识——可靠性设计重要组成部分
    的头像 发表于 04-14 09:57 829次阅读