在这个教程中,我们所做的任务为MRPC数据上的文本匹配,因为在BERT中,文本匹配本质是一个双句文本分类,因此下面代码用文本分类的方法进行任务。本次教程依托PAI-PyTorch上开发的EasyTexMiner,用户仅需要配置好相关命令参数,改动少量代码就可以在PAI上跑BERT文本分类任务。

1. 准备工作

下载MRPC的 训练集验证集 ,上传到ODPS,字段如下:
image.png

2. 安装odpscmd

odpscmd的客户端安装教程如下:https://help.aliyun.com/document_detail/27971.html
一般有三种odpscmd使用方式:

使用方式1

直接在odpscmd的客户端里操作,可以在terminal里输入odpscmd,启动之后会有如下界面:

  1. $/odps_clt_release_64/bin/odpscmd
  2. __ __
  3. ___ ___/ /___ ___ ____ __ _ ___/ /
  4. / _ \/ _ // _ \ (_-</ __// ' \/ _ /
  5. \___/\_,_// .__//___/\__//_/_/_/\_,_/
  6. /_/
  7. Aliyun ODPS Command Line Tool
  8. Version 0.35.4
  9. @Copyright 2019 Alibaba Cloud Computing Co., Ltd. All rights reserved.
  10. Connecting to your project...
  11. Connected!
  12. 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 , categoryscore,用户在使用自己的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