项目实训中期检查
项目实训中期检查圆满结束,我们团队也基本完成了前期的基础开发工作。在中期检查上,老师们依次检查了我们团队每位成员的代码成果以及项目实训博客,表示予以通过,但同时也提出了一些疑问和建议,我们也给出了自己的回应。检查结束之后,内部再次开了个小会于是我们再次开始开发研究工作。
.
项目进度
1.问题生成部分:
田婕与张亦琪分别使用不同的模型实现问题生成,目前田婕使用uniLM,张亦琪使用双编码器解码器论文。最终对两个模型生成的结果评分,输出得分高的问题。
2.问题分类:
白宇涛同学负责对CMRC数据集的问题分为六类,通过打了标签的数据进一步训练模型。后期在对生成的问题进行分类评价。经过讨论和商量,这个标签可以作为前期输入的分类标签,同时也作为后期判断的标签。
3.正确性判断
李浩达同学对问题是否是疑问句进行正确性判别,用在最终的评测上。目前正在运行代码,并且考虑加大难度,会加入对偶技术进行正确性判断。就是将生成的问题和文章段落作为输入,在答案生成模型中输出一个答案,比对之前的答案,如果相似度极高说明生成的问题质量合格。相当于再做了一个QA任务。
QA 和 QG 任务在概率上是有联系的,可以通过 q、a 的联合概率分布联系起来,P(q|a) 就是 QG 模型,P(a|q) 类似 QA 模型,于是就把这两个任务当做对偶任务。
.
项目技术部分分析
问题生成这一块,想采用双编码器技术提高生成的效果。目前是在pytorch环境下,用现在最典型的seq2seq技术实现问题生成。核心代码主要分为三块。
code/utils.py:进行数据清洗,转换数据格式等
code/train.py:用于模型的训练
code/infer.py:用于模型的预测
数据清洗
比如说剔除空白字符,剔除带括号的英文,处理部分不匹配数据等。不过我们运用的数据集比较干净,没有太多不规则的数据。
文本截断
我们这个模型是输入文章和答案来生成问题。相对而言答案长度可以取得较短,因为答案基本都是从原文中读取的,通常根据答案的前面部分,就已经能够推理出对应的提问。所以最终选取答案的长度为64。
篇章中答案所在位置的附近与问题的相关性最强,所以取答案所在位置的前64个字符和后128个字符作为截取的篇章。
问题文本的长度均未超过131个字符,所以相当于未做截断。
开始模型训练
训练时按照“[CLS]篇章[SEP]答案[SEP]问题[SEP]”格式输入。推断时按照“[CLS]篇章[SEP]答案[SEP]”格式输入。后面想要加入双编码技术,双编码器可以加强答案信息,使模型提出更具针对性的问题。双编码对答案和段落分开建模,但是这也增加了模型的复杂性。
问题生成任务可分为两类:一类是基于规则的方法,即在不深入理解上下文语义的情况下手动设计词汇规则或模板,将上下文转换成问题。另一类是基于神经网络的、直接从语句片段中生成问题词汇的方法,包括序列-序列模型(seq-to-seq)、编码器解码器(encoder-decoder)等。目前虽然运行的是seq-to-seq,但我们还想使用后一种双编码器问题生成方法。
.
总结体会
一个好的团队能让每个人发挥自己的长处,并且避免自己的缺点放大。我们团队中开发人员每个星期都能够开会沟通,一些方法和过程需要制定标准,有了标准,才能在实现后能方便的他人的理解和使用。从这次合作中大家也逐渐懂得需要建立互相之间的信任,一个有凝聚力的、高效的团体成员必须学会自如、迅速、心平气和地承认自己的错误、缺点并且求助,还要乐于认可别人的长处。同时能够就不同意见而争论、交换经过滤的坦率意见的团队,互相监督,互相负责,才能一步一步走下去。