Giter Club home page Giter Club logo

chip2019_task2_question_pairs_matching's Introduction

chip2019_task2_question_pairs_matching

CHIP 2019 平安医疗科技疾病问答迁移学习比赛,本质上就是一个类似于Quora Question Pairs的问句匹配问题。基于huggingface/pytorch-transformers实现的BERT baseline,代码比较冗余,中文预训练模型采用ymcui/Chinese-BERT-wwm。因为条件有限(没有GPU。。。),所以只跑了几个baseline(提交次数惨淡),没有trick、模型融合以及超参数选择,只做10折交叉验证,A榜应该就能达到0.878+,B榜0.864+,A榜rank 9,B榜rank11,剔除了小号和未报名队伍后rank7,作为baseline效果还是可以的。

项目文件目录结构及文件说明如下:

|-- README.md
|-- data_augmentation.py 利用问句相似性传递进行数据增强和生成10折交叉验证数据文件
|-- data_utils.py 读取数据文件,转化为模型输入等操作
|-- extract_bert_char_embedding.py 抽取出BERT的字向量,然后用在例如ESIM之类的常规模型上,效果不好
|-- feature_engineering.py 对每一折数据抽取出数据字词级别的tfidf等特征
|-- model_qpm.py BERT常规句对分类
|-- model_multitask.py 在qpm的基础上,增加一个子任务,将句对句子合在一起,判断所属类目
|-- model_feature.py 在qpm的基础上,加入手工特征的dense层
|-- model_final.py 将qpm、判断类目和手工特征三种做法融合
|-- model_final_2.py 和model_final.py基本一致,只是改变了模型保存方式
|-- post_processing.py 利用问句相似性传递进行后处理文件
|-- data 按照10折交叉验证分别存放10折数据文件
    |-- noextension 未数据增强的文件
        |-- 0
        |-- ...
    |-- THUOCL_medical.txt 清华开源的医疗词库,用于jieba加载后分词做词特征抽取
|-- tmp 按照10折交叉验证分别保存模型的目录
    |-- 0
    |-- ...

model_final.pymodel_final_2.py只是在模型保存方式上有区别,前者占空间,后者费时间。

训练模型请使用

python3 model_final_2.py --model_name_or_path ./chinese_roberta_wwm_ext_pytorch/ --do_train --do_lower_case --data_dir ./data/noextension/ --max_seq_length 128 --per_gpu_train_batch_size 16 --learning_rate 2e-5 --num_train_epochs 5.0 --output_dir ./tmp/ --overwrite_output_dir --evaluate_during_training

预测结果请使用

python3 model_final_2.py --model_name_or_path ./chinese_roberta_wwm_ext_pytorch/ --do_predict --do_lower_case --data_dir ./data/noextension/ --per_gpu_test_batch_size 16 --output_dir ./tmp/

说说模型效果:

  • 使用RoBERTa-wwm-extRoBERTa-wwm-ext-large能比BERT-wwm-ext提升0.005,而roberta base和large效果差别不大,就0.002左右。
  • 利用问句相似性传递做数据增强容易过拟合,而且本训练集标注有很多问题,不对训练集做任何修改的话,用了数据增强反而下降0.005左右。同样做相似性传递后处理也会下降0.001~0.005,所以就没用数据增强和后处理。
  • 加入句子分类的loss,能提升0.001。
  • 加入特征工程的dense层,效果不稳定,可能是我的特征选得不好。

另外两个句子分别通过BERT得到representation后,互相做一下attention拼接到句子对的[CLS]输出后也能提升模型效果,不过后期没GPU了,没基于roberta-wwm训练新模型,所以最终提交的还是roberta_final_2.py跑出来的结果。

chip2019_task2_question_pairs_matching's People

Contributors

zhengzixiang avatar

Watchers

 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.