美文网首页
Note - 深度学习框架总结(for NLP)

Note - 深度学习框架总结(for NLP)

作者: 汉江岳 | 来源:发表于2019-08-13 10:49 被阅读0次

    框架罗列和归类

    底层深度学习框架:theano tensorflow pytorch mxnet paddlepaddle

    高级封装:

    通用:keras(后端: tensorflow, theano)  pytorch-lightning(pytorch) tensor2tensor( tensorlfow)

    NLP相关: opennmt (opennmt-py  pytorch  opennmt-tf tensorflow)   ParlAI(对话 pytorch) AllenNLP(pytorch)

    使用高级封装的框架可以快速(几行代码)复现经典的模型,但由于封装了太多的细节, 不易修改原始模型,不利于自定义新的模型。

    如何利用框架实现自定义模型

    Tensor2Tensor使用总结(便于快速复现)

    T2T 是Google 非官方提供的仓库,是社区广大爱好者共同努力建设的简单入门型框架,底层封装TF,能满足大部分CV 和 NLP的任务,很多主流成熟的模型也已经都有实现。直接继承或实现一些框架内预设的接口,就可以完成很多任务。入门起来非常友好,并且文档更新也较为及时。认真阅读文档(或阅读报错信息)就可以了解并使用该框架,方便许多非大幅创新模型的复现。

    AllenNLP使用总结(复现+定制)

    关于AllenNLP的学习代码,可以参考[5]。由于AllenNLP是基于PyTorch的,代码风格和PyTorch的风格基本一致,因此如果你会用PyTorch,那上手AllenNLP基本没有什么障碍。代码注释方面也比较全,模块封装方面比较灵活。AllenNLP的代码非常容易改动,就像用纯的PyTorch一样灵活。当然灵活也就意味着很多复杂的实现,AllenNLP目前还没有,大部分可能都需要自己写。AllenNLP依赖了很多Python库,近期也在更新。

    OpenNMT使用总结(复现,序列到序列的复现)

    OpenNMT提供了基于PyTorch和TensorFlow这两大主流框架的不同实现,能够满足绝大多数用户的需求。对于基础框架的封装使得其丧失了一定的灵活性,但是对于编码器-解码器结构下文本生成的任务来说,可以省去数据格式、接口定义等细节处理,将精力更多集中在其自定义模块上,快速搭建出需要的模型。OpenNMT的训练由Trainer.py中Trainer类控制,该类的可定制化程度并不高,只实现了最基本的序列到序列的训练过程。对于多任务、对抗训练等复杂的训练过程,需要对该类进行较大的改动。

    ParlAI使用总结(可用于快速复现对话baseline)

    ParlAI有自己的一套模式,例如world、agent和teacher等等。代码封装性特别好,代码量巨大,如果想查找一个中间结果,需要一层一层查看调用的函数,不容易进行修改。ParlAI中间封装了很多现有的baseline模型,对于对话研究者,可以快速实现baseline模型。目前ParlAI还在更新,不同版本之间的代码可能结构略有不同,但是ParlAI的核心使用方法大致相同。

    总结

    四种常见框架构建自定义模型。

    Tensor2Tensor涵盖比较全面,但是只支持TensorFlow。

    AllenNLP最大的优点在于简化了数据预处理、训练和预测的过程。代码改起来也很灵活,但是一些工具目前官方还没有实现,需要自己写。

    如果是比较传统的编码器-解码器结构下文本生成任务,使用OpenNMT能节省很多时间。但是如果是结构比较新颖的模型,使用OpenNMT搭建模型依旧是一个不小的挑战。

    ParlAI内部封装了很多对话任务,方便使用者快速复现相关的baseline模型。但由于代码封装性太强和其特殊的模式,使用ParlAI从头搭建自己的模型具有一定的挑战性。

    每个框架都有各自的优点和弊端,需结合自身情况和使用方式进行选择。不可能每个框架都试一遍,毕竟掌握每个框架还是需要一定时间成本的。

    参考: https://mp.weixin.qq.com/s/YRDZ8inqaxmdD5g_SR1MLg

    相关文章

      网友评论

          本文标题:Note - 深度学习框架总结(for NLP)

          本文链接:https://www.haomeiwen.com/subject/gatvjctx.html