└── README.md
/README.md:
--------------------------------------------------------------------------------
1 | # LES-MMRC-Summary
2 |
3 | ## 赛题简介
4 |
5 | 关于赛题的详细信息可以参见科赛网:莱斯杯主页 [莱斯杯:全国第二届“军事智能机器阅读”挑战赛](https://www.kesci.com/home/competition/5d142d8cbb14e6002c04e14a)
6 |
7 | **这里简单回顾下赛题摘要:** 本次竞赛将提供面向军事应用场景的大规模中文阅读理解数据集,围绕多文档机器阅读理解进行竞赛,涉及理解、推理等复杂技术。每个问题对应五篇候选文章,问题与篇章中的答案证据句间存在较大的语法与句式变化。需要在多篇章定位与深度理解的基础上,从存在干扰项的多篇文章中搜寻出最优答案,更富挑战性的是问题的答案可能需要结合至少两篇文章的相关内容,进行关联推断才能够准确得出。
8 |
9 | 决赛的时候,一共有3轮,每一轮问题类型不同,分别是:**单答案问题、多答案问题和推理型问题**,分数比例分别是 **20%、30%和50%**。
10 |
11 | **3轮的竞赛成绩如下:**
12 |
13 |
14 |

15 |
16 | 第一轮:单答案问题
17 |
18 |
19 |
20 |
21 |

22 |
23 | 第二轮:多答案问题
24 |
25 |
26 |
27 |
28 |

29 |
30 | 第三轮:推理型问题
31 |
32 |
33 |
34 | **最终排名如下:**
35 |
36 |
37 |

38 |
39 |
40 |
41 | ## 本项目说明
42 |
43 | 本人参加了本次竞赛,成绩并不理想(最终排名第7),所以为了加深自己对机器阅读理解和本次竞赛的了解,特地整理了最终成绩前十队伍的PPT、竞赛分享和代码。
44 |
45 | 其中有些队伍由于实验室、公司的限制并没有放出PPT和相关代码,所以收集的并不完整,而且几乎没有队伍放出代码。
46 |
47 | ## 前10团队PPT/PDF(持续更新)
48 |
49 | - [第1名-向阳而生团队 PPT](http://image.yingzq.com/les-mmrc/doc/%E7%AC%AC1%E5%90%8D-%E5%90%91%E9%98%B3%E8%80%8C%E7%94%9F%E5%9B%A2%E9%98%9F.pptx)
50 | - [第4名-Lxy团队 PDF](http://image.yingzq.com/les-mmrc/doc/%E7%AC%AC4%E5%90%8D-Lxy%E5%9B%A2%E9%98%9F.pdf)
51 | - [第5名-SJL团队 PPT](http://image.yingzq.com/les-mmrc/doc/%E7%AC%AC5%E5%90%8D-SJL%E5%9B%A2%E9%98%9F.pptx)
52 | - [第7名-Lucky Boys团队 PPT](http://image.yingzq.com/les-mmrc/doc/%E7%AC%AC7%E5%90%8D-Lucky%20Boys%E5%9B%A2%E9%98%9F.pptx)
53 | - [第10名-jy2211团队 PPT](http://image.yingzq.com/les-mmrc/doc/%E7%AC%AC10%E5%90%8D-jy2211%E5%9B%A2%E9%98%9F.pptx)
54 |
55 | ## 前10团队技术分享(持续更新)
56 |
57 | - [第1名 “莱斯杯”第二届军事机器阅读理解挑战赛Rank1分享](https://www.kesci.com/home/project/5dbbec9f080dc300371eda5d)
58 | - [第2名 “莱斯杯”第二届军事机器阅读理解挑战赛Rank2分享](https://www.kesci.com/home/project/5dbd09b3080dc300371f056f)
59 | - [第4名 “莱斯杯”第二届军事机器阅读理解挑战赛Rank4分享](https://www.kesci.com/home/project/5dc26951080dc300371ffa4a)
60 | - [第6名 “莱斯杯”第二届军事机器阅读理解挑战赛Rank6分享](https://www.kesci.com/home/project/5dc27068080dc300371ffc7a)
61 | - [第7名 “莱斯杯”第二届军事机器阅读理解挑战赛Rank7分享](https://www.kesci.com/home/project/5dc27c16080dc300372000d3)
62 |
63 | > 这部分是选手本身做的一些分享,应该是比较清晰,也比较权威的;这里也感谢科赛平台的邀稿才让我们看到这些技术方案分享
64 |
65 | ## 前10团队开源代码(持续更新)
66 |
67 | - [第6名 苏小易团队](https://github.com/caishiqing/joint-mrc)
68 | - [第7名 Lucky Boys团队](https://github.com/SunnyMarkLiu/les-military-mrc-rank7)
69 |
70 | ## 个人分析
71 |
72 | > 注:这部分是我本人结合前排大佬的PPT以及和他们的聊天,自己进行了简单的分析,不能保证完全正确,如有不对的地方欢迎指正~
73 |
74 | ### 向阳而生团队
75 |
76 | 可以下载他们的答辩PPT查看,他们也在科赛平台给出了详细的[技术分享](https://www.kesci.com/home/project/5dbbec9f080dc300371eda5d),在这里简单说下我的想法:
77 |
78 | - 首先本次竞赛每篇document的长度好几千,而`BERT`最大支持512长度,虽然可以利用滑窗的策略处理长度大于512的文本,但是时间代价太大,所以他们使用了`BM25算法`做了段落检索,在保证答案召回率的同时极大的减少了文本长度
79 | - 对于单答案问题,使用标准的`BERT MRC`即可,需要注意的是使用了规则匹配的方式对`短答案会出现赘余问题`做了后处理
80 | - 对于多答案问题,其实分为两种情况:一种是`可分解的多答案`,该类问题一般具有显著的特征,例如有多个问号,前半句和后半句都有疑问词,这种情况直接拆分成两个问题,当做单答案做即可,需要注意的是切分后需要识别第一个问题的实体与第二个问题拼接;另一种是`不可分别的多答案`,该类问题一般是“哪几个”、“哪些”这样的特征值,这种问题不好拆分,所以使用了`mask答案`的策略处理,简单来说,就是多次预测该问题的答案,只不过在本次预测之前,需要将文档中出现的前一次答案做mask处理,再进行标准的单答案MRC
81 | - 对于推理问题,使用`两阶阅读策略`,将推理问题阅读的过程分解为`实体阅读`和`答案阅读`两个阶段;该团队在推理问题的表现非常好,值得学习,具体做法如下:
82 | 1. 利用`问题分解`模型,先将原问题分解为两个子问题;训练集的得来是根据推理问题的两个支撑段落,它们分别覆盖问题的不同部分,根据这两段覆盖的范围做标注,主要用最长匹配的算法,覆盖的时候会有三种情况分别处理,最后利用策略进行过滤,保证留下来的标注样本都是比较好的
83 | 2. 通过回答第一个子问题得到中间的`桥接实体`
84 | 3. 将该实体与第二个问题拼接重构成普通问题
85 | 4. 进行标准MRC模型进行预测
86 |
87 | ### baseline团队
88 |
89 | baseline的老哥由于种种原因并没有放出PPT,但是在大赛群里简单说了一下思路:**pipeline,5个模型。第一个模型用于判断答案数量;第二个模型用于检索,将document分成20段,检索出top5;第三个模型 阅读理解 抽取答案,得到五个候选;第四个模型 答案排序,基于候选答案上下文排序,取top3;第五个模型 答案关联排序,依据答案数量 直接生成结果。**
90 |
91 | 更新:该团队也在科赛平台放出了[技术分享](https://www.kesci.com/home/project/5dbd09b3080dc300371f056f),大家可以参考。
92 |
93 | 我的理解是:
94 |
95 | - 第一个模型是一个2分类,分别代表该问题有1个答案、2个答案;具体实现是直接输入问题,通过`BERT`后将`[CLS]`位置的向量投影到2维空间,进行2分类。值得注意的是其实本次竞赛也有3答案的问题,但是非常非常少,所以在这里就不考虑了
96 | - 第二个模型是由于`BERT`最大支持512长度字符,所以以句子为基本单元拼接document,达到512长度后便作为`一段`,5个document拼接后平均有大几千字符,所以平均被分成了20段,该模型的目的是检索出所有document中最好的top5;具体实现是根据`一段`中是否包含答案来构造数据集,通过`BERT`后将`[CLS]`位置的向量投影到2维空间,进行2分类
97 | - 第三个模型是标准的MRC,对于上一步得到的top5,抽取答案,得到5个候选答案
98 | - 第四个模型是基于候选答案的上下文排序,**依据是有答案的段落不一定是好段落,能抽出答案的段落才是**;具体做法是抽出top5答案所在的上下文,将问题与上下文拼接后通过`BERT`,将`[CLS]`位置的向量投影到1维空间算出一个rank分数,利用这个分数进行排序,然后取top3对应的答案
99 | - 第五个模型是基于候选答案上下文,建立候选答案间关系,对候选答案作关联排序;这部分的具体实现我还没太懂,知道的朋友可以告诉我,我也想学习学习~
100 | - 最后根据第一个模型所预测的答案个数 k,取排序后的top k个答案
101 |
102 | ### Lxy团队
103 |
104 | 该团队是初赛和复赛的第一,也放出了答辩PPT和详细的[技术分享](https://www.kesci.com/home/project/5dc26951080dc300371ffa4a),可以仔细研究。
105 |
106 | Lxy致力于预训练模型架构的优化,给人一种耳目一新的赶脚,简单说一下他们的思路:
107 |
108 | - 在文档预处理方面,将文档以句子为单位拆分成长度在512左右的子文档,进行子文档筛选,极大减少了文档长度,并且召回率达到97%以上
109 | - 在问题预处理方面,主要是制定规则来处理`多答案问题`和`推理问题`。比较新颖的是他们利用哈工大pyltp的分词和词性标注工具,对问题进行处理,然后利用`词性`定制了一些`拆分规则`,对多答案问题和推理问题进行拆分
110 | - 在模型细节方面,PPT讲了很多,该团队基于`ERNIE 1.0`,尝试了很多种不同的模型结构,还是挺有意义的:
111 | - 在`ERNIE`输出层,添加3层Query-Context CoAttention
112 | - 利用`ERNIE`的最后3层编码结果分别输入给3个Query-Context CoAttention模块
113 | - etc...
114 |
115 | ### SJL团队
116 |
117 | 该团队也放出了PPT,大家可以参考,这里简单说一下思路:
118 |
119 | - 由于`BERT`处理字长限制,使用基于`TF-IDF`的段落截断,能定位96%以上答案
120 | - 对于多答案,基于问号进行了问题拆分,也就是处理了有多个问号的多答案情况,值得注意的是,这里的第二问的主语常常是代词,所以对于第二问`拼接了第一问的前40%文本`,虽然简单但是极为有效;对于一问多答的情况,只进行单答案预测,放弃了这种情况
121 | - 对于推理题,训练了一个模型实现原问句拆分;训练集来源是初赛训练集中随机选取2000个问句进行人工标注
122 | - 模型方面在`BERT`输出层额外添加了BiLSTM和DGCNN层,另外还用`[CLS]`位置的向量投影到1维后代表`段落含有答案的概率`,然后再点乘`段落与问句的TF-TF-IDF相似概率`,当做一个`Gate`使用在`Span 概率`上
123 |
--------------------------------------------------------------------------------