Giter Club home page Giter Club logo

ccl2022-mcltc-kk's Introduction

CCL2022-MCLTC-kk

该仓库为CCL2022-CLTC(多维度汉语学习者文本纠错比赛)赛道三的第一名解决方案,队伍名称为kk。

比赛详情见https://github.com/blcuicall/CCL2022-CLTC

模型及过程处理数据文件可参考https://drive.google.com/drive/folders/1M0san4HctiKVeuVRHcSH3vGGvaPgkWNp?usp=sharing

1. 环境配置

  • 训练推理阶段:requirements_train.txt
  • 后处理及模型融合阶段:requirements_postedit.txt

2. 预训练模型下载

将预训练模型下载到服务器上,并更新各种可执行文件夹中的BART_DIR变量:

3. 数据预处理

训练和验证数据需分别处理成 .src.tgt 两个文件并放在 data/raw 目录下,目录结构如下。

注意:由于参赛过程中使用了两阶段训练,所以有多份训练集和验证集,详情可见技术评测报告。

  • 第一阶段训练集是官方训练集,第一阶段验证集是官方验证集。
  • 第二阶段以9:1的比例分割官方验证集,分别作为第二阶段训练集和验证集。
  • 两个训练阶段都以平均F0.5作为模型挑选标准。
data
  └── raw
    ├── train_lang8.src #第一阶段训练集和验证集
    ├── train_lang8.tgt
    ├── valid_lang8.src
    ├── valid_lang8.tgt
    ├── train_vminimal.src #第二阶段训练集和验证集1(使用minimal维度语料)
    ├── train_vminimal.tgt
    ├── valid_vminimal.src
    ├── valid_vminimal.tgt
    ├── train_vfluency.src #第二阶段训练集和验证集2(使用fluency维度语料)
    ├── train_vfluency.tgt
    ├── valid_vfluency.src
    ├── valid_vfluency.tgt
    ├── train_vfluandmin.src #第二阶段训练集和验证集3(混合minimal维度和fluency维度语料)
    ├── train_vfluandmin.tgt
    ├── valid_vfluandmin.src
    └── valid_vfluandmin.tgt
  ├── bpe
  ├── lang8
  ├── vminimal
  ├── vfluency
  └── vfluandmin

首先参照bpe_kk.sh的示例进行分词,将data/raw/的文件中全部分词并生成对应文件。 其次参考process_kk.sh的示例进行二值化处理,将data/bpe/全部处理并放置到对应文件夹中。 每个文件夹的目录结构如下,以data/lang8/为例:

data
  ├── raw
  ├── bpe
  └── lang8
    ├── dict.src.txt
    ├── dict.tgt.txt
    ├── train.src-tgt.src.bin
    ├── train.src-tgt.src.idx
    ├── train.src-tgt.tgt.bin
    ├── train.src-tgt.tgt.idx
    ├── valid.src-tgt.src.bin
    ├── valid.src-tgt.src.idx  
    ├── valid.src-tgt.tgt.bin
    ├── valid.src-tgt.tgt.idx  
    └── preprocess.log

4. 模型训练

第一阶段训练

  • 请注意train.pyline639、line748、line754、line755的代码注释。
  • 第一阶段训练使用train.sh脚本。
  • 本阶段使用了dynamic mask,所以第一阶段训练所能得到的最优模型具有较大随机性。

第二阶段训练

  • 该阶段必须注释train.pyline388-line412,关闭动态加噪。
  • 请注意train.pyline639、line748、line754、line755的代码注释。
  • 第二阶段训练同样使用train.sh脚本,注意更改DATA_DIR、MODEL_NAME,并添加finetune参数。

5. 模型推理

  • 请注意interactive.pyline208、line209、line211、line302、line303、line304的代码注释。
  • 推理使用interactive.sh脚本,请修改path参数(sh文件中的DATA_SET是个无效参数,可以无视)。
  • 另外,seq2seq模型天然存在unk问题,即使经过文件拼接处理,interactive完成后也只能得到src(无unk)-tgt(有unk)的para文件。

6. 模型融合与后处理

为彻底去除unk问题,需要使用ChERRANT1计算编辑距离,并将所有包括unk的编辑操作忽略,使用详情可参考文献。

在本次比赛中,F0.5作为最终评价指标放大了Precision的比重,所以在做模型融合时,使用了三个非常相似的模型(挑选出第一阶段结束后性能最好的模型,第二阶段分别用minimal验证集、minimal验证集且更换随机种子、minimal+fluency验证集训练得到三个模型),将三个模型的编辑操作提取出来,只有三个模型同时出现该编辑操作时,编辑操作才会被最终采纳。 具体步骤如下:

  • 假设目前得到六个(3*2)模型,并通过六个模型得到六份预测结果
Stage2_Min_bestminimal      Stage2_Min_bestfluency
Stage2_Min84_bestminimal    Stage2_Min84_bestfluency
Stage2_FAM_bestminimal      Stage2_FAM_bestfluency
Stage2_Min_minimal.tgtunk.para     Stage2_Min_fluency.tgtunk.para
Stage2_Min84_minimal.tgtunk.para   Stage2_Min84_fluency.tgtunk.para
Stage2_FAM_minimal.tgtunk.para     Stage2_FAM_fluency.tgtunk.para
  • 参照/chERRANT/para2m2.sh将六份para文件转换为六份m2文件
  • 参照/chERRANT/ensemble.sh对单模和多模情况分开处理
  • 参照/chERRANT/m22para.sh将m2文件转换为最终提交的para文件

最终单模结果

avg_F0.5 minimal_F0.5 minimal_recall minimal_precision fluency_F0.5 fluency_recall fluency_precision
Stage2_FAM 55.68 70.84 54.61 76.53 40.52 24.26 48.67

Footnotes

  1. Yue Zhang, Zhenghua Li, Zuyi Bao, Jiacheng Li, Bo Zhang, Chen Li, Fei Huang, and Min Zhang. 2022. MuCGEC: a Multi-Reference Multi-Source Evaluation Dataset for Chinese Grammatical Error Correction. In Proceedings of NAACL-HLT. (pdf)

ccl2022-mcltc-kk's People

Contributors

sophiarong avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.