开始训练与预测
更新时间:2021-05-12
环境安装
目录结构
阅读理解任务位于/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}