fastnlp / fastNLP

fastNLP: A Modularized and Extensible NLP Framework. Currently still in incubation.
https://gitee.com/fastnlp/fastNLP
Apache License 2.0
3.05k stars 451 forks source link

与AllenNLP的对比 #380

Open rabintang opened 2 years ago

rabintang commented 2 years ago

尊敬的fastNLP的作者你们好,最近在调研NLP框架,以用于公司后续的NLP任务。fastNLP的代码结构清晰,文档建设也比较完善,感谢作者们的开源。 在粗略看了fastNLP和allenNLP的架构后,发现在数据集加载和与数据集表示,以及框架整体设计上,两者有很多相通之处,比如都采用tabular的方式来表示数据,模块划分也类似。 能否麻烦fastNLP的作者帮忙对比,相对AllenNLP,fastNLP的主要优势在哪里?感谢!

yhcc commented 2 years ago

我们在18年启动fastNLP的时候,参考了很多优秀的NLP开源框架,当然也包括了allennlp。在数据集的设计上,由于使用的方便性,大部分NLP框架都采用了这种tubular的设计方式,但总体来说,fastNLP的设计更偏向于将DataSet作为一个用户可以自由发挥的容器,而allennlp则更偏向于将DataSet做为一种开箱即用的工具。近一两年,由于数据集规模的扩大,也有一些更加开源框架会采用更加高效的方式管理数据集,例如PyArrow等,fastNLP目前也有支持这类方式的计划。

allennlp对比fastNLP是有以下非常明显的优势的 (1)allennlp实现的模型非常多(现移动到了allennlp-models下面),并且有比较好的开箱即用的API可以调用。(不过这一些model基本都需要按照allennlp的方式调用,并且基本都是英文为主的,中文的话应该也不能完全开箱即用) (2)充分考虑了predict需求,allennlp实现了不少用模型的开箱即用的predict方法。(不过这些模型与处理方式多是用在英文上的,可能也并不能直接使用到中文上来) (3)allennlp实现了通过配置文件启动,这种方式在工业界场景下,应该还是有一定优势的。(不过配置文件使用带来的弊端就是可能用户并不了解其中的细节,当这个可能也可以算成优点,即用户可以不关心具体技术细节) (4)allennlp的社区明显还是要大于fastNLP的,因此代码的健壮性、相关周边配套包会比fastNLP好很多。(fastNLP由于一直缺少来自于大量用户,特别是工业界用户的真实需求,所以整个迭代速度还是比allennlp慢了很多)

但我自己做为开发者,我还是更倾向于使用fastNLP一些,理由如下 (1)allennlp的包有着非常优秀的软件设计,但这种设计也使得充分阅读并改动allennlp变得比较困难,这种感觉在您阅读allennlp的代码之后应该会有一定的感受。相较而言,fastNLP则希望让一切都简单一些,尽量避免太多层的抽象,阅读和修改起来会比较容易。 (2)fastNLP的各个部分相对耦合较轻,数据处理可以单独用来实现index、padding等(可以不使用fastNLP的训练组件等)、训练Trainer可以使用非fastNLP的数据处理或模型(不过可能需要实现特定的Metric),allennnlp相对来说这些部件的耦合更紧一些,基本是全套都需要使用allennlp。 (3)最重要的优点大概是fastNLP是中文文档,中文注释,开发者也可以完全使用中文交流。allennlp尽管非常强大,但是如果没有充分阅读其代码以及文档(全部都是英文的,对从业者英语要求还是不低的),实际上很多功能也无法比较清楚地理解。

最后,邱锡鹏老师做为fastNLP的发起人,应该还会在NLP行业从业很多年,所以fastNLP在未来很长一段时间都会得到邱老师的继续支持。非常欢迎你们加入我们,和我们一起把中文社区的NLP框架做得更好。

xpqiu commented 2 years ago

你好,我们未来会计划开设专门的NLP课程+fastNLP开发教程:)欢迎多交流!

rabintang commented 2 years ago

感谢邱老师跟开发同学的细致回复!