写给NLP研究者的编程指南-杏彩总代

2022-10-25 18:53:40 浏览数 (1)

最近AllenNLP在EMNLP2018上做了一个主题分享,名为“写给NLP研究者的编程指南”(Writing Code for NLP Research)。

内容干货满满,仅仅只是看了slide就知道是非常有意思的一次演讲了。slide共有254页之多,这里我简单做个摘要,分享一些有意思的内容。Sebastian Ruder 近日公布了这次采访的谈话实录,以及大会演讲的 PPT,对整个采访进行了总结。

  • 采访实录:https://docs.google.com/document/d/18NoNdArdzDLJFQGBMVMsQ-iLOowP1XXDaSVRmYN0IyM/edit#heading=h.brxm2juq8i2
  • 演讲 PPT:https://drive.google.com/file/d/15ehMIJ7wY9A7RSmyJPNmrBMuC7se0PMP/view

这些采访基于四个相同的问题,如下所示。机器之心摘录了部分受访者的回答内容,包括 Yoshua Bengio、阿兰•图灵研究所 Fellow Annie Louis、谷歌大脑研究科学家 George Dahl、纽约大学助理教授&FAIR 研究科学家 Kyunghyun Cho,其中有些研究者并没有回答完四个问题,这是基于受访者自身的意愿。

有时间的话推荐大家直接看slide,下面是地址

https://github.com/allenai/writing-code-for-nlp-research-emnlp2018/blob/master/writing_code_for_nlp_research.pdf

下面是整个分享的大纲。通过这次演讲,你可以学到如何写代码来促进你的研究,以及可复现的实验。

这里有两种写研究代码的模式,一种是写原型,一种是写组件。您能否列举目前困扰 NLP 领域的三大难题?

首先,如何构建更好的基准来大规模揭露我们当前方法存在的局限性?MultiNLI 是还不错的基准,但它仍有很多难以纠正的问题。

我们先从写原型的方式开始介绍。

当我们开始写一个原型代码的时候,我们要做到下面三点。

  1. 写代码要快
  2. 跟踪实验结果
  3. 分析模型结果

快速开发

要做到快速编程,抠《153O667》杏彩总代理抠《153O667》《153O667》不要从头开始写所有内容,而是使用框架。这里的框架不仅指tensorflow或pytorch之类的框架,也可以理解为模板。比如上图中如果写trining loop的部分,已经有人写好了。我们只要看懂后,直接拿来用就行,没有必要从头开始自己写所有部分。不过我还是会选 Collobert & Weston (2008) 的研究《A unified architecture for natural language processing: deep neural networks with multitask learning》及其后续期刊论文《Natural Language Processing (Almost) from Scratch》。

上面提到的一些内容,都是可以找到现成框架来套用的。

Don’t start from scratch! Use someone else’s components.

如果有人把你想用的东西模块化了,还等什么,直接拿来用啊!

要想快速开发,另一个建议就是先复制,再重构。要记住,我们是在写原型,不用在乎什么可用性,先把代码写work了再说。如果实现的效果不错的话,再回去重构。那时深度学习成为主流方法。每次飞跃不仅带来实证方面的改进,还动摇了我们对 NLP 领域和待解决问题的既定理解。那么下一次飞跃将会是怎样的呢?每个人都有自己的猜测,我认为下一次飞跃将由新的人/群体开启,就像前两次那样。

另外,我们要有好的编程习惯。比如起有意义的变量名,写注释帮助理解。记住,我们是写给人看的,不是机器!

跟踪实验结果我们需要新的评估数据集和任务来表明我们的技术是否对人类语言的可变性具备泛化性。我更希望基准测试低估而不是像现在这样高估我们在自然语言方面取得的进步。

其次,我们如何将「方向盘」与文本生成模型连接在一起?我们如何创建能够听从高级指令(如生成什么)或遵循对生成内容的约束的模型?我希望模型能够基于简化或受限的自然语言指令(指令说明要做哪些高级改变)

可以准备一个Excel表格,来记录实验结果NLP/MT 领域最大的问题或许是下一次飞跃的时间和方向。NLP/MT 在过去半个世纪中经历了两次巨变。第一次发生在 90 年代早中期,彼时统计学方法成为主导,推动 NLP 领域远离基于规则的方法。

0 人点赞