/OpinioNet

2019之江杯人工智能大赛电商评论观点挖掘赛道top3

Primary LanguagePython

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