教程3:使用文心训练一个模型
所有文档

          BML 全功能AI开发平台

          教程3:使用文心训练一个模型

          欢迎使用文心NLP开发套件,文心开发套件提供从数据预处理到模型训练,再到模型的预测一站式的开发功能体验。下面将以文本分类任务为例,介绍如何使用文心快速训练一个文本分类的模型。您也可以在文心code lab中,通过Jupiter文档来试用。如果您在使用文心的过程中,希望获得技术支持,请加入文心NLP开发套件交流群1041632707。

          如果您希望查看全部文档,请点击文心NLP开发套件全部使用文档进行查看

          一、进入文本分类任务目录,在目录下将会见到examples文件夹,在下一步中将进行使用

          cd wenxin/tasks/text_classification

          二、采用预置的模型CnnClassification实现文本分类(具体网络可参考models目录)

          1、基于json实现预置网络训练。其调用了配置文件./examples/cls_cnn_ch.json,输入的数据、模型参数等在json里定义好了

          2、训练运行的日志会自动保存在./log/test.log文件中

          3、训练中以及结束后产生的模型文件会默认保存在./output/cls_cnn_ch/目录下,其中save_inference_model/文件夹会保存用于预测的模型文件,save_checkpoint/文件夹会保存用于热启动的模型文件

          # 基于json实现预置网络训练。其调用了配置文件./examples/cls_cnn_ch.json,输入的数据、模型参数等在json里定义好了
          !python3 run_with_json.py --param_path examples/cls_cnn_ch.json

          三、用户可以通过修改json配置data和预置网络进行修改,以下为cls_cnn_ch.json中抽取出来的部分配置,通过注释说明其基本作用。

          {
            "dataset_reader": {                                   ## data_set_reader用于实现读取数据文件、转换数据格式、组batch、shuffle等操作。
              "train_reader": {                                   ## 训练、测试、评估各自基于不同的数据集,数据格式也可能不一样,可以在json中配置不同的reader。
                "name": "train_reader",
                "type": "BasicDataSetReader",                     ## 采用BasicDataSetReader,其封装了常见的读取tsv文件、组batch等操作。
                "fields": [                                       ## 域(field)是textone的高阶封装,对于同一个样本存在不同域的时候,不同域有单独的数据类型(文本、数值、整型、浮点型)、单独的词表(vocabulary)等,可以根据不同域进行语义表示,如文本转id等操作,field_reader是实现这些操作的类。
                  {
                    "name": "text_a",                             ## 文本分类只有一个文本特征域,命名为"text_a""data_type": "string",                        ## data_type定义域的数据类型,文本域的类型为string,整型数值为int,浮点型数值为float。
                    "reader": {"type":"CustomTextFieldReader"},   ## 采用针对文本域的通用reader "CustomTextFieldReader"。数值数组类型域为"ScalarArrayFieldReader",数值标量类型域为"ScalarFieldReader""tokenizer":{
                        "type":"CustomTokenizer",                 ## 指定该文本域的tokenizer为CustomTokenizer。
                        "split_char":" ",                         ## 通过空格区分不同的token。
                        "unk_token":"[UNK]",                      ## unk标记为"[UNK]""params":null
                      },
                    "need_convert": true,                         ## "need_convert"true说明数据格式是明文字符串,需要通过词表转换为id。
                    "vocab_path": "./dict/vocab.txt",             ## 指定该文本域的词表。
                    "max_seq_len": 512,                           ## 设定每个域的最大长度。
                    "truncation_type": 0,                         ## 选择截断策略,0为从头开始到最大长度截断,1为从头开始到max_len-1的位置截断,末尾补上最后一个id(词或字),2为保留头和尾两个位置,然后按从头开始到最大长度方式截断。
                    "padding_id": 0                               ## 设定padding时对应的id值。
                  },                                              ## 如果每一个样本有多个特征域(文本类型、数值类型均可),可以仿照前面对每个域进行设置,依次增加每个域的配置即可。此时样本的域之间是以\t分隔的。
                  {
                    "name": "label",                              ## 标签也是一个单独的域,命名为"label"。如果多个不同任务体系的标签存在于多个域中,则可实现最基本的多任务学习。
                    "data_type": "int",                           ## 标签是整型数值。
                    "reader":{
                      "type":"ScalarFieldReader"                  ## 整型数值域的reader为"ScalarFieldReader"},
                    "tokenizer":null,
                    "need_convert": false,
                    "vocab_path": "",
                    "max_seq_len": 1,
                    "truncation_type": 0,
                    "padding_id": 0,
                    "embedding": null
                  }
                ],
                "config": {
                  "data_path": "./data/train_data/",              ## 训练数据train_reader的数据路径,写到文件夹目录。
                  "shuffle": false,
                  "batch_size": 8,
                  "epoch": 10,
                  "sampling_rate": 1.0
                }
              },
              "test_reader": {                                    ## 若要评估测试集,需配置test_reader且is_eval_test置为1,其配置方式与train_reader类似。
              ……
              },
              "dev_reader": {                                     ## 若要评估验证集,需配置dev_reader且is_eval_dev置为1,其配置方式与test_reader类似。
              ……
              }
            },
            "model": {
              "type": "CnnClassification"                         ## textone采用模型(models)的方式定义神经网络的基本操作,本例采用预置的模型CnnClassification实现文本分类,具体网络可参考models目录。
            },
            "trainer": {
              "PADDLE_USE_GPU": 0,                                ## 是否采用GPU训练,1是为采用GPU。
              "PADDLE_IS_LOCAL": 1,                               ## 是否单机训练,默认值为0,若要单机训练需要设置为1"train_log_step": 20,                               ## 训练时打印训练日志的间隔步数。
              "is_eval_dev": 0,                                   ## 是否在训练的时候评估开发集,如果取值为1一定需要配置dev_reader及其数据路径。
              "is_eval_test": 1,                                  ## 是否在训练的时候评估测试集,如果取值为1一定需要配置test_reader及其数据路径。
              "eval_step": 100,                                   ## 进行测试集或验证集评估的间隔步数。
              "save_model_step": 10000,                           ## 保存模型时的间隔步数,建议设置为eval_step的整数倍。
              "load_parameters": 0,                               ## 加载包含各op参数值的训练好的模型,用于预测。
              "load_checkpoint": 0,                               ## 加载包含学习率等所有参数的训练模型,用于热启动。
              "pre_train_model": [],                              ## 加载预训练模型,例如ernie。使用时需要填写预训练模型的名称name和预训练模型的目录params_path。
              "output_path": ""                                   ## 保存模型的输出路径,如置空或者不配置则默认输出路径为"./output"}
          }

          四、如何使用ERNIE1.0中文模型训练

          与非ERNIE的训练方式相同,使用预置网络进行训练的方式为使用./run_with_json.py入口脚本,通过--param_path参数来传入./examples/目录下ernie相关的json配置文件。 以预置基于ernie_1.0_base的CNN文本分类模型为例,训练分为以下几个步骤:

          1、请使用以下命令在../model_files/中通过对应脚本下载ernie_1.0_base模型参数文件,其对应配置文件ernie_1.0_base_ch_config.json和词表vocab_ernie_1.0_base_ch.txt分别位于../model_files/目录下的config/和dict/文件夹,用户无需更改;

          # ernie_1.0_base 模型下载,进入model_files目录
          cd ../model_files
          # 运行下载脚本
          !sh download_ernie_1.0_base_ch.sh

          2、运行以下命令在训练集(train.txt)上进行模型训练,并在测试集(test.txt)上进行验证;

          # 返回text_classification目录
          cd ../text_classification/
          ## 选择ernie相关json即可实现,用户如果实在CPU环境,需要将json文件中PADDLE_USE_GPU参数设置为0,如果是GPU环境,设为1即可
          !python3 run_with_json.py --param_path ./examples/cls_ernie_1.0_base_cnn_ch.json
          上一篇
          教程2:一个深度学习的典型场景
          下一篇
          Blackhole