资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

开始训练与预测

环境安装

环境配置

目录结构

阅读理解任务位于/wenxin/tasks/mrc

.
├── __init__.py                                                                                  
├── examples                                               ## 各典型网络的json配置文件
    ├── cls_ernie_2.0_base_dureader_ch.json
├── run_with_json.py                                       ## 只依靠json进行模型训练的入口脚本
├── run_mrc.py                                             ## 阅读理解任务的脚本
└── package/task_data/dureader                             ## 示例数据文件夹,包括各任务所需训练集(train.json)、测试集(test.json)和验证集(dev.json)
    ├── dev.json
    ├── test.json
    └── train.json

预置Reader配置

通过json文件中的dataset_reader配置模型的训练数据读取,以下为./examples/cls_ernie_2.0_base_dureader_ch.json中抽取出来的dataset_reader部分配置,并通过注释说明。

{
  "dataset_reader": {                                   
    "train_reader": {                                   ## 训练、验证、测试各自基于不同的数据集,数据格式也可能不一样,可以在json中配置不同的reader,此处为训练集的reader。
      "name": "train_reader",
      "type": "MRCReader",                     ## 采用MRCReader,其封装了常见的读取tsv文件、组batch等操作。
      "fields": [],                                       ## mrc任务中未使用fields_reader。 域(field)是文心的高阶封装,对于同一个样本存在不同域的时候,不同域有单独的数据类型(文本、数值、整型、浮点型)、单独的词表(vocabulary)等,可以根据不同域进行语义表示,如文本转id等操作,field_reader是实现这些操作的类。
      "config": {
        "data_path": "./package/task_data/dureader/train.json",              ## 训练数据train_reader的数据路径,写到具体文件名。
        "shuffle": true,
        "batch_size": 16,
        "epoch": 5,
        "sampling_rate": 1.0"extra_params":{                       ## MRCReader所需的额外配置参数
          "vocab_path":"../model_files/dict/vocab_ernie_2.0_base_ch.txt",      ## 指定模型运行所需词表。
          "label_map_config":"",                                               ## 指定文本label的映射文件,无需映射则为空。
          "max_seq_len":512,                                       ## 指定文本的最大长度。
          "do_lower_case":true,                                                ## 指定tokenizer时是否对英文字母做小写处理。
          "in_tokens":false,                                                   ## 指定batch的组成是已token为单位还是sequence为单位。
          "tokenizer": "FullTokenizer",                                        ## 指定tokenizer为FullTokenizer。
          "for_cn": true,                                                      ## 指定训练文本的语言是中文。
          "task_id": 0,                                              ## 指定task_id,默认为0即可。
          "doc_stride": 128,                                      ##当context的文本序列长度超过max_seq_len,需要将context分块,改参数指定分块间隔。
          "max_query_length": 64,                       ## 问题文本序列的最大长度。       
          "use_multi_gpu_test":true                         ## 使用多卡预测
        }
      }
    },
   "test_reader": {                                    ## 若要评估测试集,需配置test_reader,其配置方式与train_reader类似。
    ……
    },
   "dev_reader": {                                     ## 若要评估验证集,需配置dev_reader,其配置方式与test_reader类似。
    ……
    }
  },
  ……
}

开始训练

  • 如您使用镜像开发套件,您可直接进入下一步骤。如您将文心开发套件与本地已有的开发环境相结合,您需要在./env.sh中配置对应的环境变量,并执行source env.sh ,如需了解更多详情,请参考环境配置
  • 需提前下载对应的ERNIE预训练模型,例如:

    # ernie_2.0_base 模型下载
    # 进入model_files目录
    cd ../model_files/
    # 运行下载脚本
    sh download_ernie_2.0_base_ch.sh
  • 模型训练的入口脚本为./run_with_json.py , 通过--param_path参数来传入./examples/目录下的json配置文件。例如:

    python run_with_json.py --param_path ./examples/cls_ernie_2.0_base_dureader_ch.json
  • 训练运行的日志会自动保存在./log/test.log文件中。
  • 训练中以及结束后产生的模型文件会保存在json配置文件中的output_path字段值的目录下,其中save_checkpoint文件夹会保存用于热启动的模型文件, 目前阅读理解任务暂不支持save_inference_model的配置。

开始预测

  • 如您使用镜像开发套件,您可直接进入下一步骤。如您将文心开发套件与本地已有的开发环境相结合,您需要在./env.sh中配置对应的环境变量,并执行source env.sh ,如需了解更多详情,请参考环境配置
  • 选定配置好的json文件,把你将要预测的模型对应的inference_model文件路径填入json文件的“inference_model_path”变量中。
  • 模型训练的入口脚本为./run_infer.py , 通过—param_path参数来传入./examples/目录下的json配置文件。例如:python run_infer.py --param_path ./examples/cls_ernie_2.0_base_dureader_ch_infer.json
  • 预测运行的日志会自动保存在./output/test_nbest_predictions.json和./output/test_predictions.json文件中。

启动预测sever

  • 如果您想使用部署训练好的模型,可以使用python inference_server.py --param_path ./examples/cls_ernie_2.0_base_dureader_ch_infer.json方式启动一个预测服务,端口默认为8263
  • 获取预测输出有两种方式:

    • 第一种:使用linux命令方式

      			## 单条样本
      			curl -d '{"text": [{"qas_id": '1', "question_text": "爬行垫什么材质的好", "paragraph_text": "爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。您好,爬行垫一般色彩鲜艳,能吸引宝宝的注意力,当宝宝刚会爬的时候,趴在上面玩,相对比较安全,不存在从床上摔下来的危险。对宝宝的爬行还是很有好处的。还有就是妈妈选择爬行垫时可以选择无害的PE棉,既防潮又隔冷隔热。外有要有一层塑料膜,能隔绝液体进入垫子内部,而且方便清洗。宝宝每次爬行,一定要记得把宝宝的手擦干净。"}]}' 'http://ip:port/wenxin/inference'
      			## 多条样本
      			curl -d '{"text": [{"qas_id": '1', "question_text": "爬行垫什么材质的好", "paragraph_text": "爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。您好,爬行垫一般色彩鲜艳,能吸引宝宝的注意力,当宝宝刚会爬的时候,趴在上面玩,相对比较安全,不存在从床上摔下来的危险。对宝宝的爬行还是很有好处的。还有就是妈妈选择爬行垫时可以选择无害的PE棉,既防潮又隔冷隔热。外有要有一层塑料膜,能隔绝液体进入垫子内部,而且方便清洗。宝宝每次爬行,一定要记得把宝宝的手擦干净。"}, {"qas_id": '2', "question_text": "gre满分多少", "paragraph_text": "新GRE满分是170+170+6,TOP50的MASTER一般要155+165+GPA3.5以上具体的要根据你所学的专业就像有的专业根部不需要GRE需要GMAT或者LAST新G语文,数学各项满分均为170分,写作满分6分;老G语文、数学满分各为800分,作文满分6分,一般320+作文3.5就算不错的成绩了。新GRE满分是170+170+5,TOP50的MASTER一般要155+165+3.5以上"}]}' 'http://ip:port/wenxin/inference'
    • 第二种:使用python

      			# *_*coding:utf-8 *_*
      			import requests
      			import json
      			import sys
      			all_examples = 
              [{"qas_id": '123',
           	"question_text": "爬行垫什么材质的好",
           	"paragraph_text": "爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材	料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。您好,爬行垫一般色彩鲜艳,能吸引宝宝的注意力,当宝宝刚会爬的时候,趴在上面玩,相对比较安全,不存在从床上摔下来的危险。对宝宝的爬行还是很有好处的。还有就是妈妈选择爬行垫时可以选择无害的PE棉,既防潮又隔冷隔热。外有要有一层塑料膜,能隔绝液体进入垫子内部,而且方便清洗。宝宝每次爬行,一定要记得把宝宝的手擦干净。"}
          ]
      			data = {"text": all_examples}
      			url = 'http://ip:port/wenxin/inference' 
      			resp = requests.post(url, data=json.dumps(data))
      			result = json.loads(resp.content)
      			print(json.dumps(result, ensure_ascii=False))
      			# 若出现python2编码问题,可改为:
      			# print(json.dumps(result, ensure_ascii=False).encode('utf-8'))
  • 预测返回结果说明:all_predictions字段是概率最大的输出结果,all_nbest_json字段是预测概率排序前20的答案

    		{"content":
    {"all_predictions": {"1": "XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫"},
     "all_nbest_json": {"1": [{"text": "XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫", "probability": 0.23663325030192933, "start_logit": 2.3122096061706543, "end_logit": -1.0910981893539429}, {"text": "XPE爬行垫", "probability": 0.16572580114698757, "start_logit": 2.3122096061706543, "end_logit": -1.4472750425338745}, {"text": "XPE", "probability": 0.1313893893193205, "start_logit": 2.3122096061706543, "end_logit": -1.6794443130493164}, {"text": "XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC", "probability": 0.07634597251102694, "start_logit": 2.3122096061706543, "end_logit": -2.222334384918213}, {"text": "XPE爬行垫、EPE爬行垫", "probability": 0.061721487835111916, "start_logit": 2.3122096061706543, "end_logit": -2.4349775314331055}, {"text": "XPE爬行垫、EPE爬行垫、EVA爬行垫", "probability": 0.059798218416877595, "start_logit": 2.3122096061706543, "end_logit": -2.4666337966918945}, {"text": "XP", "probability": 0.05892674166630284, "start_logit": 2.3122096061706543, "end_logit": -2.4813146591186523}, {"text": ":XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫", "probability": 0.03384641076801004, "start_logit": 0.36753109097480774, "end_logit": -1.0910981893539429}, {"text": "XPE爬行垫、EPE爬行垫、EVA", "probability": 0.02915668877666629, "start_logit": 2.3122096061706543, "end_logit": -3.1849253177642822}, {"text": "XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;", "probability": 0.02791039358127956, "start_logit": 2.3122096061706543, "end_logit": -3.2286105155944824}, {"text": ":XPE爬行垫", "probability": 0.02370429148617732, "start_logit": 0.36753109097480774, "end_logit": -1.4472750425338745}, {"text": ":XPE", "probability": 0.01879304466209014, "start_logit": 0.36753109097480774, "end_logit": -1.6794443130493164}, {"text": "PVC爬行垫", "probability": 0.01671980927806685, "start_logit": -0.33770766854286194, "end_logit": -1.0910981893539429}, {"text": ":XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC", "probability": 0.010920008675003827, "start_logit": 0.36753109097480774, "end_logit": -2.222334384918213}, {"text": ":", "probability": 0.00930464029708327, "start_logit": 0.36753109097480774, "end_logit": -2.382417917251587}, {"text": ":XPE爬行垫、EPE爬行垫", "probability": 0.00882822184885021, "start_logit": 0.36753109097480774, "end_logit": -2.4349775314331055}, {"text": ":XPE爬行垫、EPE爬行垫、EVA爬行垫", "probability": 0.008553130471522414, "start_logit": 0.36753109097480774, "end_logit": -2.4666337966918945}, {"text": ":XP", "probability": 0.008428480364079404, "start_logit": 0.36753109097480774, "end_logit": -2.4813146591186523}, {"text": "EVA爬行垫、PVC爬行垫", "probability": 0.007544683445162999, "start_logit": -1.1334587335586548, "end_logit": -1.0910981893539429}, {"text": "爬行垫", "probability": 0.005749335148451096, "start_logit": -1.4746133089065552, "end_logit": -1.021702527999878}]}},
    "ret": 200}  
上一篇
准备工作
下一篇
文本聚类任务