对项目的组成结构,我画了这样一幅图,将Pytorch上的自然语言处理划分为6个步骤。以中文文本为例,
- 第一步,我们要通过预处理模块的净化、分字/分词等步骤,将自然语言文本转化为
token
; - 第二步,我们就可以着手构造数据集,譬如数据集划分、分批(batch)、shuffle等;
- 第三步,我们要设计模型结构,并用pytorch框架构造模型;
- 第四步主要涉及模型训练步骤,我们要设计模型训练与评估的逻辑,设置好训练过程中需要被打印出来的信息,完成模型训练、筛选和保存等功能;
- 第五步,我们要在测试集上测试第四步筛选出来的模型性能,也就是设计模型测试逻辑;
- 最后,我们需要设计模型上线的方式。
不同的自然语言处理任务,这些步骤有些是可以复用的,有些又是有所不同的,我会思考以更清晰的方式表述。项目主要分6个文件夹,组织如下:
preprocessing
: 数据预处理模块。按任务需求,对数据进行处理,通用的有分字/词,词表构造;和任务挂钩的有抽取式摘要的分句、NER的标注序列等等。
dataset
: 数据集构造模块。这一块很简单,就是将预处理好的数据构造成Pytorch框架可用的形式,包括batch、shuffle这样的功能。
models
: 模型结构设计模块
main
: 模型训练、评估及测试逻辑设计模块,在这个模块中,针对不同NLP任务又设计了子目录
utils
: 一些复用程度不高的特殊功能函数会放在这里,防止上述四个文件夹变得臃肿
online
: 模型上线模块
另外,有两个数据输入和输出的存放目录:
raw_data
:存放原始的文本数据
outputs
:存放模型评估、测试及推理的输出结果,存放训练日志等