微软开源项目NeuronBlocks:像搭积木一样构建自然语言理解深度学习模型
在构建自然语言理解深度学习模型时,工程师们经常需要在编程细节和代码调试上花费大量精力,而不是专注于模型架构设计与参数调节。为提升构建深度模型的效率,微软推出了开源项目NeuronBlocks,一个用于自然语言处理任务的深度学习工具包。NeuronBlocks将各种神经网络层封装为模块,通过配置简单的JSON文件,就可以轻松地构建复杂的深度神经网络模型。NeuronBlocks能使工程师们在几秒钟内构建和训练各种自然语言处理模型,而无需写一行代码。
项目地址: https://github.com/Microsoft/NeuronBlocks
深度神经网络(DNN)模型已被广泛用于解决各种自然语言处理(NLP)任务,例如:文本分类、序列标注、智能问答等。然而当使用DNN模型解决特定的NLP任务时,工程师们经常面临以下挑战:
1)TensorFlow、PyTorch、Keras等深度学习框架学习成本高;
2)繁重的编程工作,太多的代码细节使深度学习模型难以调试;
3)快速迭代的模型架构,使工程师们很难完全理解其背后的数学原理;
4)模型优化、代码调试需要深厚的专业知识;
5)平台兼容性要求,需要额外的编码工作才能使模型在不同的平台上运行,如Linux/Windows,GPU/CPU。
以上挑战限制了模型实现的效率。在实际应用中,相比于模型实现,NLP工程师们通常更重视数据的准备工作,因为高质量的数据通常能比模型的微小改进带来更多性能上的提升。此外,简单和标准的模型通常比复杂的模型鲁棒性更强,并且易于维护、共享和重用。对于很多复杂的NLP任务,一旦准备好了训练数据,就需要尽可能尝试不同的模型结构和参数,以取得最好的结果。
通过分析GPU集群上的NLP job数据,我们发现87.5%的NLP job属于常见任务,如句子分类、序列标注等,且超过90%的模型可以由词嵌入、CNN、RNN、Transformer等常用的神经网络层组成。这些发现引起了我们的思考:是否能够提供一套可重复使用的标准神经网络模块,及一系列常用任务的经典模型?这样可以节省大量重复的编程工作,从而提高模型实现的效率。
基于上述动机,微软STCA NLP团队开发了NeuronBlocks,一个用于NLP任务的深度学习工具包。它提供了一套可重用的标准模块,以及一系列用于常见任务的经典模型,可以最大限度地减少模型实现过程中的重复编程工作。 用户只需要定义一个简单的JSON配置文件,就可以构建和训练模型,这将使工程师们从繁杂的编程工作中解放出来。
NeuronBlocks是基于PyTorch的NLP深度学习工具包,旨在减少NLP工程师们在模型实现过程中的编程成本。其整体框架如下图所示,主要包括Block Zoo和Model Zoo两个部分。
Block Zoo将常用的神经网络层抽象并封装为可重用的标准模块,这些模块将被用于构建各种深度学习模型。标准的神经网络模块包括:词嵌入、CNN、LSTM、Transformer和各种Attention等。
Model Zoo提供大量预构建好的深度神经网络模型,涵盖了常见的NLP任务,这些模型以JSON配置文件的形式呈现。用户通过简单修改Model Zoo中的示例模型配置,即可将其应用于自己的任务中,无需一行代码就可以开启模型训练。
同时,NeuronBlocks支持Linux和Windows操作系统、CPU与GPU处理器以及PAI等GPU平台。
1)模型构建:用户只需要配置简单的JSON文件,就能够构建模型和调整参数,大大减少了模型实现的工作量;
2)模型分享:可以通过分享JSON配置文件来分享模型,使模型共享变得非常容易。对于不同的任务或模型,用户只需维护一个通用的源码库;
3)代码重用:可以在各任务与模型间共享神经网络模块,减少重复的编程工作;
4)平台灵活性:NeuronBlocks可以在Linux和Windows机器上运行,支持CPU和GPU,也支持像Philly和PAI这样的GPU管理平台;
5)模型可视化:NeuronBlocks提供了一个模型可视化工具,用于观察模型结构及检查JSON配置的正确性;
6)可扩展性:NeuronBlocks鼓励用户贡献新的神经网络模块或着新的模型。
用户可以选择Model Zoo中的示例模型(JSON配置文件)开启模型训练,或者利用Block Zoo中的神经网络模块构建新的模型,就像玩乐高积木一样。
1. 获取源码:
git clone https://github.com/Microsoft/NeuronBlocks
cd NeuronBlocks/
2. 安装依赖:
pip install -r requirements.txt
pip install torch==0.4.1
3. 运行示例模型:
# get GloVe pre-trained word vectors
cd dataset
bash get_glove.sh
cd ..
# train
python train.py --conf_path=model_zoo/demo/conf.json
# test
python test.py --conf_path=model_zoo/demo/conf.json
# predict
python predict.py --conf_path=model_zoo/demo/conf.json
NeuronBlocks提供了一个模型可视化工具,可以将JSON配置文件转化为模型框图,如下图所示。
快来试用一下吧~
若有问题,请联系[email protected]