在这个教程中,我们所做的任务为MRPC数据上的文本匹配,因为在BERT中,文本匹配本质是一个双句文本分类,因此下面代码用文本分类的方法进行任务。本次教程依托PAI-PyTorch上开发的EasyTexMiner,用户仅需要配置好相关命令参数,改动少量代码就可以在PAI上跑BERT文本分类任务。
1. 准备工作
下载MRPC的 训练集 和 验证集 ,上传到ODPS,字段如下:
2. 安装odpscmd
odpscmd的客户端安装教程如下:https://help.aliyun.com/document_detail/27971.html
一般有三种odpscmd使用方式:
使用方式1
直接在odpscmd的客户端里操作,可以在terminal里输入odpscmd,启动之后会有如下界面:
$/odps_clt_release_64/bin/odpscmd__ _____ ___/ /___ ___ ____ __ _ ___/ // _ \/ _ // _ \ (_-</ __// ' \/ _ /\___/\_,_// .__//___/\__//_/_/_/\_,_//_/Aliyun ODPS Command Line ToolVersion 0.35.4@Copyright 2019 Alibaba Cloud Computing Co., Ltd. All rights reserved.Connecting to your project...Connected!odps@ project_name > read project_name.table_name 10;
可以在这个客户端里输入odps命令,比方说:read project_name.table_name 10;
其中project_name换成你的项目名字,table_name换成odps表名。
使用方式2
可以用odpscmd的客户端直接执行odps命令,示例如下:
$/odps_clt_release_64/bin/odpscmd -e "read project_name.table_name 10;"
使用方式3
可以用odpscmd的客户端直接执行odps命令文件,假设文件为odps_cmd.txt, 示例如下:
$/odps_clt_release_64/bin/odpscmd -f odps_cmd.txt
3. 创建odps表
首先在这个 链接 中下载本教程相关的数据,这是一个用\t 分隔的 .csv 文件,我们可以看到这个有五个字段,我们把它们命名为 example_id,query1,query2,category,score:
14606 借呗审核暂未通过怎么办 蚂蚁借呗的综合评估没通过怎么办 类别3 -0.05380478405955766
37202 花呗用不了 但是进入支付的时候花呗选不了 类别2 0.19953719332006672
31924 为什么我借呗还进去了 不能借出来了 借呗上借了款借呗进不去了 类别1 -0.9453511453023166
35904 花呗的钱能充值q币么 花呗可以卖q币么 类别3 0.7214070096167942
35871 蚂蚁借呗怎么才能显示在屏幕上 蚂蚁借呗怎么默认银行卡 类别1 -2.054884478044209
注意:本教程所用数据来自 AFQMC 蚂蚁金融语义相似度数据集,为了演示教程,我们随机生成了三个字段
example_id,category和score,用户在使用自己的table时一定要注意输入列不包含空值。
然后在自己的ODPS ${project_name} (如sre_mpi_algo_dev)中创建一张输入表并上传数据:
>> odpscmd
odps@> CREATE TABLE sre_mpi_algo_dev.modelzoo_example_train(example_id INT, query1 STRING, query2 STRING, category STRING, score DOUBLE);
odps@> tunnel upload test.csv modelzoo_example_train -fd \t;
odps@> CREATE TABLE sre_mpi_algo_dev.modelzoo_example_dev(example_id INT, query1 STRING, query2 STRING, category STRING, score DOUBLE);
odps@> tunnel upload test.csv modelzoo_example_dev -fd \t;
4. PAI 上提交任务
# odps tables for train and dev, format: odps://project_name/tables/table_name
train_table=odps://sre_mpi_algo_dev/tables/modelzoo_example_train
dev_table=odps://sre_mpi_algo_dev/tables/modelzoo_example_dev
# tar your package to submit local code to odps
cur_path=/home/admin/workspace/EasyNLP/
cd ${cur_path}
rm -rf entryFile.tar.gz
tar -zcvf entryFile.tar.gz ./easynlp/ ./examples/self_defined_examples/ ./requirements.txt
command="
pai -name pytorch180
-project algo_public
-Dscript=file://${cur_path}entryFile.tar.gz
-DentryFile=examples/self_defined_examples/main.py
-Dcluster='{\"worker\":{\"gpu\":100,\"cpu\":100,\"memory\":10000}}'
-Dtables=${train_table},${dev_table}
-Dpython='3.6'
-DenableDockerFusion=false
-DuserDefinedParameters='--mode=train \
--worker_gpu=1 \
--input_schema=label:str:1,sid1:str:1,sid2:str:1,sent1:str:1,sent2:str:1 \
--first_sequence=sent1 \
--label_name=label \
--label_enumerate_values=0,1 \
--user_defined_parameters=\' pretrain_model_name_or_path=bert-small-uncased\' \
--learning_rate=3e-5 \
--random_seed=42 \
--epoch_num=3 \
--logging_steps=100 \
--save_checkpoint_steps=50 \
--sequence_length=128 \
--micro_batch_size=32 \
--app_name=text_classify \
--checkpoint_dir=oss://easytransfer-new/104239/tmp_examples_2 \
--buckets=\'oss://easytransfer-new?${id_and_secret_and_host}\'
'
"
echo "${command}"
${odpscmd} --config="${config}" -e "${command}"
注意:
- id_and_secret_and_host格式为:$oss://bucket-name?access_key_id=your_id&access_key_secret=your_passwd&host=your_host
- config为odps_clt的ini配置文件
详见:EasyNLP/examples/self_defined_examples/run_user_defined_pai.sh
