(New)文本排序任务
更新时间:2022-12-17
任务简介
- 检索场景应用非常广泛。一般检索任务包含召回任务和排序(rank)任务,先由召回任务提供候选集合,再由排序任务进行精细化排序。
- rank任务为对同一query对应的多个样本进行打分排序。其常用评估指标为NDCG。
- 本专题中,采用MSE_loss训练按照顺序分档的标注数据。并在评估过程中直接观察NDCG。
代码结构说明
任务代码位于:./wenxin_appzoo/tasks/text_rank
text_rank
├── data
│ ├── dev_data_rank
│ │ └── dev.txt
│ ├── predict_data_rank
│ │ └── predict.txt
│ ├── test_data_rank
│ │ └── test.txt
│ └── train_data_pointwise_rank
│ └── train.txt
├── examples
│ ├── ernie_rank_l12_fc_pointwise_for_rank_ch_infer.json
│ ├── ernie_rank_l12_fc_pointwise_for_rank_ch.json
│ ├── ernie_rank_l3_fc_pointwise_for_rank_ch_infer.json
│ ├── ernie_rank_l3_fc_pointwise_for_rank_ch.json
│ ├── ernie_rank_l6_fc_pointwise_for_rank_ch_infer.json
│ ├── ernie_rank_l6_fc_pointwise_for_rank_ch.json
│ ├── ernie_search_rank_2.0_medium_ch_infer.json
│ └── ernie_search_rank_2.0_medium_ch.json
├── inference
│ ├── custom_inference.py
│ └── __init__.py
├── model
│ ├── base_matching.py
│ ├── ernie_matching_fc_pointwise_for_rank.py
│ └── __init__.py
├── reader
│ ├── ernie_classification_dataset_reader.py
│ └── ernie_dataset_reader_for_query_group.py
├── run_infer.py
├── run_infer_server.py
├── run_trainer.py
└── trainer
├── custom_dynamic_trainer.py
├── custom_trainer.py
└── __init__.py
数据准备
- 这里我们提供一份已标注的示例数据集,因默认为ernie任务,因此数据未分词。正常情况下,基于ernie的任务不需要分词,非ernie的任务需要分词。
- 训练集、测试集、验证集和预测集分别存放在./data目录下的train_data_pointwise_rank、test_data_rank、dev_data_rank和predict_data_rank文件夹下
- 注:数据集(包含词表)均为utf-8格式。
训练集/测试集/验证集
- 训练集、测试集和验证集的数据格式相同,每个样本占一行,一行三列,列之间用\t分隔。第一、二列为明文text, 第三列为是匹配程度,匹配度最高为3,0为不匹配,同一个query对应多个匹配结果;
求秋色之空漫画全集 求秋色之空全集漫画 3
求秋色之空漫画全集 我妈妈的舅舅和我的关系称谓是什么? 1
求秋色之空漫画全集 请问办支付宝怎么办? 2
晚上睡觉带着耳机听音乐有什么害处吗? 孕妇可以戴耳机听音乐吗? 3
晚上睡觉带着耳机听音乐有什么害处吗? 您好,密码锁定辛苦您等待三小时后会自动解锁的,辛苦您了 0
学日语软件手机上的 手机学日语的软件 3
学日语软件手机上的 怎么去收缩毛孔 2
学日语软件手机上的 萌头像的软件是什么 0
预测集
- 预测集为两个key("text"),一行两列,列之间用\t分隔。基于ernie的任务不需要分词,非ernie的任务需要分词。
篡去掉竹字头念什么 命去掉人字头念什么
篡去掉竹字头念什么 热火能夺冠么
篡去掉竹字头念什么 秦始皇是哪个朝代的?
篡去掉竹字头念什么 这是什么蘑菇,能不能吃
吃什么东西可以排毒 吃什么东西可以排毒?
吃什么东西可以排毒 手机哪个播放器能缓存电影,而且电影电视很多
吃什么东西可以排毒 谁有天空之城的简谱啊
评估指标
- 训练时每次处理固定batch_size的训练样本,DatasetReader为ErnieClassificationDataSetReader,评估时选用NDCG作为评估指标,每次处理同一qeury对应下的所有样本,DatasetReader需要选用ErnieDataSetReaderForQueryGroup;
- DCG能够对一个用户的推荐列表进行评价,如果用该指标评价某个推荐算法,需要对所有用户的推荐列表进行评价,而不同用户之间的DCG相比没有意义(不同用户兴趣不同,对同样的item排名前后不同)。所以要对不同用户的指标进行归一化,自然的想法就是对每个用户计算一个理想情况(或者说是实际情况)下的DCG分数,用IDCG表示,然后用每个用户的DCG与IDCG之比作为每个用户归一化后的分值,最后对每个用户取平均得到最终的分值,即NDCG。目前NDCG指标计算已集成在wenxin的metrics模块中。
训练我的第一个模型
开始训练
- 使用ernie预训练模型,以download_ernie_search_rank_2.0_medium_ch.sh为例:
#download_ernie_search_rank_2.0_medium_ch.sh
# 进入到models_hub目录下
cd ./wenxin_appzoo/models_hub
# 运行下载脚本
sh download_ernie_search_rank_2.0_medium_ch.sh
- 在text_rank目录下运行脚本:
cd ./wenxin_appzoo/tasks/text_rank
python run_trainer.py --param_path ./examples/ernie_search_rank_2.0_medium_ch.json
预测我的第一个模型
开始预测
- 使用预置网络进行预测的方式为使用./run_infer.py入口脚本,通过--param_path参数来传入./examples/目录下的json配置文件。
-
预测分为以下几个步骤:
- 基于示例的数据集,可以运行以下命令在预测集(predict_data)上进行预测:
# 基于json实现预测。其调用了配置文件./examples/ernie_search_rank_2.0_medium_ch_infer.json
python run_infer.py --param_path ./example/ernie_search_rank_2.0_medium_ch_infer.json
- 预测运行的日志会自动保存在./output/predict_result.txt文件中。