介绍

AllenNLP是由AllenAI提出的基于pytorch的NLP框架,与ELMO师出同门。据项目领导人Matt Gardner所说,该框架是在问题“NLP实验的最优实践方式”下提出的。
在EMNLP2018上,AllenAI对该框架做了介绍:演讲ppt
ppt讲述该框架的指导原则,也是NLP实验的指导原则,受益匪浅。
我将这个ppt上传到百度网盘(提取码:ywm2),方便github速度慢的同学下载。

评价

使用了一段时间的AllenNLP,我从抗拒迷茫到爱不释手,不仅是因为它提高了我的编程生产力,而是因为体会到它的软件工程思想

除了少部分工程能力极强的大神,大部分研究者的code在“软件工程”这个范畴之内是与工业界有着一定的差距的。
可能有人会说作为一个researcher,我只需快速迭代idea,验证想法就可以了。
但是一份遵循规范的code恰恰可以加速实验的迭代。例如单元测试可以更好的确保code没有bug,设计良好的模块化可以更方便的帮助我们构建模型的不同变种等等。

作者:Suneburg
链接:https://www.zhihu.com/question/65122939/answer/527370392
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

把AllenNLP的哲学用一个词概括,那就是软件工程,相比pure pytorch,它上手可能很慢,代码量可能更多,因为你要花时间学习代码规范,但你一旦熟悉了这种编程风格,就能从冗杂的实验中解脱出来。

我为什么推崇AllenNLP,以及AN中的核心抽象

我认为,抽象是计算机科学的核心概念(想想网络七层协议),而AllenNLP就通过抽象概念概念之间的松耦合,为AI实验划定了层次。

  1. DataReader
  2. DataIterator
  3. Model
  4. Trainer
  5. Predictor

以上是AI实验流水线的核心部件,AllenNLP将他们松耦合地组装起来,这不仅意味着你可以复用代码,更意味着你可以独立地构建任何一个部件,只要它符合组装规范。

当你在编写模型的时候,可以在代码内执行单元测试,当代码编写完毕之后,使用了jsonnet描述参数:参数修改,实验结果记录无需进入代码,换句话说,不同参数,不同模型的集成测试以统一接口和接口描述文件的形式进行。
一个典型的jsonnet
在这里插入图片描述
这是AN最实用的特性,就我个人而言,也宁愿在编写模型时多费功夫,来获得实验时清晰的视角。

可惜的是,AN的学习资料较少,强抽象带来的入门难度大,对于初学者很不友好,网上(包括外网)没有一篇教程将思想与代码实践结合讲解,AllenAI之前关于pipeline的教程也丢失了。我会尝试着自己写几篇<AllenNLP框架下工程化的AI实验>,希望能起到帮助。

最后,推荐一种自学入门方式:既然AllenNLP的强项不是它为NLP实验提供的built-in package,而是它提供的松耦合思想,那么通过阅读代码体会不同模块之间耦合方式,体会核心概念,把他们当作tutorial,而不是当作节省代码的工具(在真正的实验中很少能直接套用的,毕竟allennlp每种工具也只提供了most fundamental ones),最终以它的思想和框架搭建自己的实验平台。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐