Skip to content

zhangzhao219/UCAS-IR-Project

Repository files navigation

UCAS-IR-Project

Information Retrieval Project in UCAS

任务描述

使用采样后的TREC 2019训练数据,在TREC 2020 Passage Ranking的子赛道Passage Re-ranking进行检索竞赛。

实现了三种模型,使用七种预训练进行实验

MODEL=bert_sequence_classification
MODEL=bert_cat
MODEL=colbert
# 普通预训练模型
BERT='pretrained/albert-base-v2'
BERT='pretrained/bert-base-uncased'
BERT='pretrained/google/electra-base-discriminator'
# 在msmarco数据上训练的预训练模型
BERT='pretrained/intfloat/simlm-base-msmarco'
BERT='pretrained/OpenMatch/cocodr-base-msmarco'
# 在msmarco数据上训练,并在Rerank任务上进行微调的预训练模型
BERT='pretrained/caskcsg/cotmae_base_msmarco_reranker'
BERT='pretrained/intfloat/simlm-msmarco-reranker'

最终的三个模型的实验结果NDCG@10分别为0.7155,0.6739和0.7615

实验日志

Tesla V100 32G * 4,epoch=20,lr=3e-05,seed=42

格式:

时间戳

不训练直接推理2019数据

训练2019数据得到的最好分数

用最好分数对应的模型推理2020数据

albert-base-v2 bert-base-uncased electra-base-discriminator simlm-base-msmarco cocodr-base-msmarco cotmae_base_msmarco_reranker simlm-msmarco-reranker
bert_sequence_classification
batch=256
2022_11_20_10_48_17
0.1352
Epoch =2 0.6837
0.6658
2022_11_20_10_50_23
0.0898
Epoch =11 0.6793
0.6214
2022_11_20_10_54_20
0.0404
Epoch =19 0.6907
0.7067
2022_11_20_10_59_04
0.0739
Epoch =5 0.6597
0.6672
2022_11_20_11_01_05
0.0517
Epoch =19 0.6785
0.6432
2022_11_20_11_02_51
0.7296
Epoch=1 0.7413
0.7605
2022_11_20_11_04_03
0.7149
Epoch =1 0.7192
0.7472
bert_cat
batch=256
2022_11_20_11_46_20
0.0517
Epoch=4 0.6888
0.6482
2022_11_20_11_46_18
0.0399
Epoch =18 0.6753
0.6209
2022_11_20_11_47_09
0.0752
Epoch =4 0.6841
0.7155
2022_11_20_11_52_12
0.0708
Epoch=3 0.6647
0.6523
2022_11_20_11_53_31
0.0408
Epoch =6 0.6672
0.6443
2022_11_20_11_55_30
0.3234
Epoch=2 0.7361
0.7368
2022_11_20_11_55_25
0.4987
Epoch=1 0.72
0.7368
colbert
batch=128
2022_11_20_13_18_14
0.1372
Epoch =7 0.4659
0.3932
2022_11_20_13_18_53
0.1654
Epoch =17 0.5845
0.5508
2022_11_20_13_20_26
0.0925
Epoch=8 0.4708
0.43
2022_11_20_13_26_46
0.1989
Epoch=19 0.6066
0.5997
2022_11_20_13_27_06
0.3388
Epoch =1 0.69
0.6699
2022_11_20_13_34_50
0.0763
Epoch =12 0.6039
0.6237
2022_11_20_13_34_54
0.0787
Epoch =20 0.2621
0.2427

添加warmup学习率预热策略:

albert-base-v2 bert-base-uncased electra-base-discriminator simlm-base-msmarco cocodr-base-msmarco cotmae_base_msmarco_reranker simlm-msmarco-reranker
bert_sequence_classification
batch=256
2022_11_21_04_53_02
Epoch=4 0.6738
0.663
2022_11_21_04_54_54
Epoch=5 0.657
0.6368
2022_11_21_04_58_55
Epoch =6 0.6819
0.6911
2022_11_21_05_01_28
Epoch =4 0.6555
0.6739
2022_11_21_05_03_43
Epoch =3 0.6726
0.6537
2022_11_21_05_05_06
Epoch=1 0.7327
0.7615
2022_11_21_05_00_42
Epoch=2 0.7157
0.7456
bert_cat
batch=256
2022_11_21_05_45_13
Epoch =2 0.6781
0.6244
2022_11_21_05_45_05
Epoch=8 0.6823
0.6215
2022_11_21_05_50_20
Epoch =4 0.6819
0.7035
2022_11_21_05_50_45
Epoch =3 0.6595
0.6553
2022_11_21_05_53_00
Epoch =8 0.6685
0.6423
2022_11_21_05_55_13
Epoch=2 0.7409
0.755
2022_11_21_05_50_13
Epoch =2 0.6977
0.7222
colbert
batch=128
2022_11_21_06_37_14
Epoch =12 0.5467
0.4688
2022_11_21_06_35_51
Epoch=18 0.5839
0.5163
2022_11_21_06_41_48
Epoch=16 0.4515
0.355
2022_11_21_08_27_35
Epoch =16 0.6035
0.6049
2022_11_21_06_42_38
Epoch=5 0.6906
0.6578
2022_11_21_06_45_33
Epoch =16 0.5712
0.5803
2022_11_21_06_39_30
Epoch =14 0.1903
0.1766

训练测试和预测流程

注:由于文件中包含了原始的预训练模型、训练好的模型和镜像,附件比较大。

如果失效,请至Google Drive下载

解压zip文件至本地目录中

unzip zhangzhao-IR.zip -d zhangzhao-IR

提供了Docker和python两种方法运行程序,推荐使用Docker

如果使用docker,将 IR.tar.gz解压到 zhangzhao-IR/images目录下:

tar xvzf IR.tar.gz -C zhangzhao-IR/images

文件说明

切换到 zhangzhao-IR目录下,有如下文件:

.
├── README_submit.md # 说明文件
├── file
│   ├── bert_cat.py # 模型文件1
│   ├── bert_sequence_classification.py # 模型文件2
│   ├── colbert.py # 模型文件3
│   ├── data # 原始数据
│   │   ├── 2019 # 2019年原始数据
│   │   │   ├── 2019qrels-pass.txt
│   │   │   ├── collection.train.sampled.tsv
│   │   │   ├── msmarco-passagetest2019-43-top1000.tsv
│   │   │   ├── qidpidtriples.train.sampled.tsv
│   │   │   └── queries.train.sampled.tsv
│   │   └── 2020 # 2020年原始数据
│   │       ├── 2020qrels-pass.txt
│   │       └── msmarco-passagetest2020-54-top1000.tsv
│   ├── dataset.py # 数据处理文件
│   ├── ensemble_rank.py # 模型集成文件(未使用)
│   ├── ensemble_score.py # 模型集成文件(未使用)
│   ├── log.py # 日志配置文件
│   ├── main.py # 主文件
│   ├── models # 训练好的模型文件
│   │   ├── cotmae_base_msmarco_reranker-bert_sequence_classification
│   │   │   └── best.pt
│   │   ├── electra-base-discriminator-bert_cat
│   │   │   └── best.pt
│   │   └── simlm-base-msmarco-bert_sequence_classification
│   │       └── best.pt
│   ├── only_predict # 仅预测脚本
│   │   ├── run_cotmae_base_msmarco_reranker-bert_sequence_classification.sh
│   │   ├── run_electra-base-discriminator-bert_cat.sh
│   │   └── run_simlm-base-msmarco-bert_sequence_classification.sh
│   ├── pretrained # 预训练模型文件
│   │   ├── caskcsg
│   │   │   └── cotmae_base_msmarco_reranker
│   │   │       ├── config.json
│   │   │       ├── pytorch_model.bin
│   │   │       ├── special_tokens_map.json
│   │   │       ├── tokenizer_config.json
│   │   │       └── vocab.txt
│   │   ├── google
│   │   │   └── electra-base-discriminator
│   │   │       ├── config.json
│   │   │       ├── pytorch_model.bin
│   │   │       ├── tokenizer.json
│   │   │       ├── tokenizer_config.json
│   │   │       └── vocab.txt
│   │   └── intfloat
│   │       └── simlm-base-msmarco
│   │           ├── config.json
│   │           ├── pytorch_model.bin
│   │           ├── special_tokens_map.json
│   │           ├── tokenizer.json
│   │           ├── tokenizer_config.json
│   │           └── vocab.txt
│   ├── requirements.txt # 依赖库文件
│   ├── result # 运行结果
│   │   ├── log_2022_11_20_11_47_09 # 运行结果日志
│   │   ├── log_2022_11_21_05_01_28 # 运行结果日志
│   │   ├── log_2022_11_21_05_05_06 # 运行结果日志
│   │   ├── result_2019qrels_2022_11_20_11_47_09 # 在2019年数据上进行验证的TREC结果文件
│   │   ├── result_2019qrels_2022_11_21_05_01_28 # 在2019年数据上进行验证的TREC结果文件
│   │   ├── result_2019qrels_2022_11_21_05_05_06 # 在2019年数据上进行验证的TREC结果文件
│   │   ├── result_2020qrels_2022_11_20_11_47_09 # 在2020年数据上进行推理后的TREC结果文件
│   │   ├── result_2020qrels_2022_11_21_05_01_28 # 在2020年数据上进行推理后的TREC结果文件
│   │   └── result_2020qrels_2022_11_21_05_05_06 # 在2020年数据上进行推理后的TREC结果文件
│   ├── rich_progress.py # 命令行美化配置
│   ├── train_and_predict # 训练+训练后预测脚本
│   │   ├── run_cotmae_base_msmarco_reranker-bert_sequence_classification.sh
│   │   ├── run_electra-base-discriminator-bert_cat.sh
│   │   └── run_simlm-base-msmarco-bert_sequence_classification.sh
│   └── trec_eval-9.0.7.tar.gz # 评测脚本
├── images # Docker镜像路径
│   └── IR.tar # Docker镜像
├── install_docker.sh # Docker安装脚本
├── install_python.sh # Python依赖库安装脚本
├── predict_docker.sh # Docker仅预测脚本
├── predict_python.sh # Python仅预测脚本
├── train_and_predict_docker.sh # Docker训练+预测脚本
├── train_and_predict_python.sh # Python训练+预测脚本

Docker训练测试和预测流程

注:需要安装docker并且有权限(sudo)

安装镜像和评测脚本

sudo bash install_docker.sh

一键推理

sudo bash predict_docker.sh

会调用 file/models内部的3个模型进行分别推理,输出的结果文件在 file/中,名称分别为

result_2020qrels_electra-base-discriminator-bert_cat
result_2020qrels_simlm-base-msmarco-bert_sequence_classification
result_2020qrels_cotmae_base_msmarco_reranker-bert_sequence_classification

由于推理使用的机器可能不同,结果可能有一点点差异

提交版本是 NVIDIA Tesla V100 32G * 1上进行推理后得到的结果

一键训练+推理

sudo bash train_and_predict_docker.sh

训练注意事项:

  1. 如果GPU的数量足够,上述脚本内部调用的3个脚本可以并行运行,更改GPU卡号在每个文件的第三行 GPU='0 1 2 3'
  2. 训练过程是在 NVIDIA Tesla V100 32G * 4上进行的,更换硬件或者缩小batch_size对最终结果都会有一定影响
  3. 训练后的模型存放在 file/models/run 1/2/3中,训练后推理也会调用这些模型进行推理
  4. 有输出日志,存放在 file/log_run 1/2/3文件中

Python训练测试和预测流程

注:需要创建一个Python版本为3.8.13的环境并 conda activate 环境名称

安装依赖包和评测脚本

bash install_python.sh

一键推理

bash predict_python.sh

会调用 file/models内部的3个模型进行分别推理,输出的结果文件在 file/中,名称分别为

result_2020qrels_electra-base-discriminator-bert_cat
result_2020qrels_simlm-base-msmarco-bert_sequence_classification
result_2020qrels_cotmae_base_msmarco_reranker-bert_sequence_classification

由于推理使用的机器可能不同,结果可能有非常微小的差异

提交版本是 NVIDIA Tesla V100 32G * 1上进行推理后得到的结果

一键训练+推理

bash train_and_predict_python.sh

训练注意事项:

  1. 如果GPU的数量足够,上述脚本内部调用的3个脚本可以并行运行,更改GPU卡号在每个文件的第三行 GPU='0 1 2 3'
  2. 训练过程是在 NVIDIA Tesla V100 32G * 4上进行的,更换硬件或者缩小batch_size对最终结果都会有一定影响
  3. 训练后的模型存放在 file/models/run 1/2/3中,训练后推理也会调用这些模型进行推理
  4. 有输出日志,存放在 file/log_run 1/2/3文件中

About

Information Retrieval Project in UCAS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published