0.运行环境 软件: Ubuntu 18.04 Python: 3.6.5 Pytorch: 1.1.0 CUDA: 9.0 CUDNN: 7.1.3 硬件: 显卡:GTX1080 8G单卡 内存:16G CPU: i7 7700 1.安装requirements.txt中的依赖 requirements.txt所在路径执行: pip install -r requirements.txt 2.训练 如需一键训练,执行 sh train_script.sh 可能耗时较长。 或者分步运行: 2.1 无监督laptop语料 + 有标注makeup数据 进行预训练 在src/文件夹下运行: python pretrain.py --base_model roberta python pretrain.py --base_model wwm python pretrain.py --base_model ernie 从而分别对roberta、wwm、ernie三种模型进行预训练, 权重保存在models/文件夹下, 分别为: pretrained_roberta, pretrained_wwm, pretrained_ernie 预训练耗时较长,可以跳过,在下一步微调中直接使用我们提供的权重,节省时间。 2.2 有标注laptop数据 进行交叉验证finetune 在src/文件夹下运行: python finetune_cv.py --base_model roberta python finetune_cv.py --base_model wwm python finetune_cv.py --base_model ernie 分别对三种预训练模型进行微调,权重保存至models/文件夹下,命名形如roberta_cvX, X代表cv的折数,设定为5折,即X为0~4 微调过程中会保存各个模型在验证集中最佳的筛选阈值,在models/thresh_dict.json中。 3.测试 如需一键测试,执行 sh eval_script.sh 或者: 在src/文件夹下运行: python eval_ensemble_round2.py 结果保存为submit/Result.csv 我们提供了单模型1折的权重models/roberta_cv2, 可以一键测试得到输出结果, 应该比线上成绩稍低。 4.算法原理 模型特点:One-stage端到端,无需分别进行实体抽取和关系分类, OpinoNet Only Look Once。 基础模型为使用bert预训练模型作为骨架的One-stage端到端实体关系抽取模型,使用了roberta-wwm、bert-wwm、ernie等初始预训练模型。 对于复赛中数据特点,基本流程如下: 1. 首先使用无监督laptop语料和有标注的makeup数据进行MLM和当前下游任务的双任务训练。 2. 在数量较少的有标注laptop语料上对上一步得到的模型进行交叉验证训练微调,将模型迁移至laptop领域。 3. 不同初始预训练模型进行结果的集成。 5.迭代说明 复赛最高成绩inference时间:5 min 复赛最高成绩训练时间:约 24 h 迭代过程: 从初赛到复赛结束有效提交一共6次: 初赛: 1. 0.7868 -- 初赛单模型CV 8月28 2. 0.7793 -- 初赛单模型单折 8月29 复赛: 1. 0.7892 -- 复赛单模型单折 9月26 2. 0.8109 -- 复赛单模型CV 9月27 * 3. 0.8224 -- 复赛集成模型CV 9月28 4. 0.8218 -- 微调使用数据扩增,效果不好 9月30