Goooaaal / Competition2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

oqmrc_2018

AI Challenger 2018 阅读理解赛道代码分享

比赛简介

本次竞赛将重点针对阅读理解中较为复杂的,需要利用整篇文章中多个句子的信息进行综合才能得到正确答案的观点型问题开展评测。本次竞赛将利用准确率进行评分,作为主要评价指标。
比赛数据已上传百度网盘,https://pan.baidu.com/s/1iMnJNuylLVB4gKMGPUMT4A

比赛任务

根据已有的训练数据,即:
知识:人有人言,兽有兽语,动物是不会听懂人说话的
问题:老鼠听得懂人话吗
选项:听不懂|听得懂|无法确定
答案:听不懂

训练一个模型,能够根据知识、问题和选项,给出正确的答案。
知识:2018上海高考本科批录取查询时间:7月15日-30日。
问题:2018高考查询录取结果7月15日能查到吗
选项:能|不能|无法确定
答案:?

分析思路

限于游戏本的硬件,本次比赛使用的模型非常简单,预训练词向量 + CNN/RNN + simple-attention + sigmoid
模型融合(25个模型投票)在testa可以到0.745,testb理论上也可以到。因为决赛限制空间,testb成绩稍低一些。

预训练词向量 Model Attention Accuracy
CNN 0.685
CNN 0.695
RNN 0.690
RNN 0.695
CNN 0.705
CNN 0.710
RNN 0.715
RNN 0.725

训练代码说明

1.预处理
word_num = 80000 保留字词数量
dynamic = 1 是否对低频词和新词用统一编码,0/1
char_level = True 是否分词,True就是按词处理
maxlen = [450, 22, 4] passage、quary、alternative保留长度
自行修改参数,和文件夹命名要一致,预处理结果都在data_transform_0(dynamic = 0)和data_transform_1(dynamic = 1)中。
运行data_cut_word.py,按词语做预处理,手动修改里面的参数,得到不同的预处理数据,不同的预处理方式结果差距比较大,对于后续投票有很大影响。

2.标签获取(可以不运行)
运行data_label.py,自行修改保存路径,得到alternative的正负面转换,用于模型评估,存在label/clf中。分析结果来看,不能识别为正负面的样本有8%,这部分预测准确率只有0.2

3.获取预训练词向量矩阵
运行vec2weight.py,自行选择要使用的词向量和保存路径,结果为npy格式的矩阵。词向量来源于https://github.com/Embedding/Chinese-Word-Vectors

4.训练模型
4.1 我使用了百度百科词向量,修改competition/net_3a/rnn_attention_concat.py中词向量weight_baidubaike.npy的路径
4.2 运行model_word.py,模型、valid预测结果、test预测结果,保存在model/3a
4.3 选择模型准确率高的预测结果,整理好文件名称,放入model/3a/好的模型/验证集,model/3a/好的模型/测试集
4.4 手动运行model/3a/ensemble.py,逐个增减预测结果,看融合效果。评估结果见 模型评估.xlsx
4.5 选择投票结果不一致的数据(选择3个模型,,一致比例为78%,准确率0.79;不一致比例22%,准确率0.49)
手动运行model/3a/regular.py,修改negative_true(否定词,较大概率样本是负面的),negative_false(否定词,较大概率把样本误分类为负面),具体词语可以逐个去试出较好的修正结果
例如:negative_true = ['不能'],negative_false = ['不一定'](因为这个是需要去看testa数据的,并不符合训练过程中test数据隔离,决赛没有使用)
4.6 选择最终参与投票的模型和否定词

About


Languages

Language:Python 100.0%