foreach 怎么给第一条数据加上selected_机器阅读理解之DuReader数据集描述

0557503edbed2014a03a8b1a0da6c1fb.png

之前一直在分享文本蕴含(文本匹配、自然语言推理)的相关论文,有兴趣的同学可以在我的专栏(https://zhuanlan.zhihu.com/c_1131882304422936576)里找一下;想想已经三四个月没有写东西了,一直在忙,现在有些时间,想开始分享一些机器阅读理解的相关论文,并加上自己的一些拙见,为了让自己更加理解模型,也为了帮助一些同学少走一些弯路。

在分享机器阅读理解论文之前,我们先分享一个机器阅读理解的数据-DuReader数据集(毕竟数据是一切的基础,没有数据,就没法训练模型呀)。我将从数据来源、形式、分布以及意义来介绍DuReader数据集。

DuReader,从名字(Du和Reader)就可以看出来,是百度整理出来的阅读理解数据集。DuRader数据集由一系理的4元组构成,每个4元组

就是一条样本,其中,
表示一个问题,
表示问题的类型,
表示问题相关文档集合,
表示一系列答案(由人手工标注)。它相较于之前阅读理解数据集,主要有三个特点:(1)
数据来源更加贴近实际;(2) 问题的类型较丰富;(3) 数据规模大

(1)数据来源:问题和文档均来自于百度搜索和百度知道,而答案是人工手动生成的,因此数据集更加切合真实场景。

(2)问题类型:DuReader数据集的问题类型包括实体型(Entity)、描述型(Description)和是非型(YesNo);其中每种类型还分为事实性(Fact)和观点型(Opinion)。对于实体型问题,答案一般是单个实体或一系列实体;对于描述型问题,答案则通常由几句话的摘要组成,一般包括“如何”或“为什么”的问题、两个或多个对象的比较问题以及询问商品的优缺点的问题等;对于是非型问题,答案应该是肯定的或否定的,并提供支持依据。具体问题形式如图1所示。

d3b3b3d74cfff6e0c660cae6e36c9151.png
图1

各类型问题在数据集中所占比重如图2所示。目前传统的方法基本上都采用span切割的方式,即从单个文档中切割出某个字符串片段来回答问题的方法。而这种span切割的方法对实体型问题可能具有较好的结果,但是对于是非型问题和观点型问题就不那么合适了(特别是当答案涉及到从几个不同文档中提取时)。从图2中我们可以发现,数据集中描述型和是非型的问题共占了68.1%。因此该数据集对于目前方法来说是一个挑战,想要取得较好的结果,就要提出更加先进的模型算法。

08c6e9be1098e77efb69dddce66123b5.png
图2

(3)数据规模:DuReader数据集共包含了20万个问题、100万个文档和超过42万个人类总结的答案。数据规模十分庞大,足够研究者做任何实验。在DuReader数据集中,文档平均长度为396个词,答案的平均长度为4.8个词,答案的平均长度为69.6个词,并且每个问题一般对应5个文档,每个文档平均有7个段落。

但是对于使用者来说,更希望知道其内部具体的数据结构,因此还将介绍一下DuReader数据集的数据结构和数据内每一个符号的含义

Baidu Research Open-Access Dataset​ai.baidu.com
ae0994c50f393c20540fdede049e4804.png

其中,DuReader_v2.0_raw.zip是原始的数据集,DuReader_v2.0_preprocessed.zip是经过百度预处理之后的数据集。

原始数据集结构

{
	'documents': [{
			'is_selected': True or Flase,
			'title': ' String',
			'paragraphs':[ ' String', ' String', ' String'
			]
		},
		{
			'is_selected': True or Flase,
			'title': ' String',
			'paragraphs':[ ' String', ' String', ' String'
			]
		}
	],
	'answers': [' String', ' String', ' String'
	],
	'question’: ‘String',
	'question_type': DESCRIPTION or ENTITY or YESNO,
	'fact_or_opinion': FACT or OPINION,
	'question_id': 191572
}

原始数据结构如上,下面进行详细分析,question_id表示问题的编号;fact_or_opinion表示问题是属于事实类型还是观点类型;question_type表示问题的大类型,属于描述型、实体型还是是非型;question表示所述问题,是一个字符串;answers表示答案集合,是一个list类型,里面包含0个、1个或多个字符串,每一个字符串表示一个答案;documents表示文档集合,是一个list类型,里面包含多个字典型元素,每一个字典型元素包含一个文档的所有信息,如下,is_selected表示该篇文档是否包含答案,是一个bool类型,title表示该篇文档的标题,是一个字符串类型,paragraphs表示该篇文档中的具体内容,是一个list类型,里面包含多个字符串,每一个字符串表示该篇文档的一个段落。

预处理过数据的数据结构

{
	'documents': [{
				'is_selected': True or Flase,
				'most_related_para': 0 or 1 or 2…..
				'title': ' String',
				'segmented_title': [fenci],
				'paragraphs':[ ' String', ' String', ' String'
				]
				' segmented_paragraphs':[ [fenci], [fenci], [fenci]
				]
			},
			{
				'is_selected': True or Flase,
				'most_related_para': 0 or 1 or 2…..
				'title': ' String',
				'segmented_title': [fenci],
				'paragraphs':[ ' String', ' String', ' String'
				]
				' segmented_paragraphs':[ [fenci], [fenci], [fenci]
				]
			},
		],
	'answers': ['String', 'String', 'String'
		],
	'segmented_answers': [[fenci], [fenci], [fenci]
		],
	'fake_answers': [‘String’]
	'answer_spans':[[int,int]]
	'question': ‘String’,
	'segmented_question': [fenci],
	'question_type': DESCRIPTION or ENTITY or YESNO,
	'fact_or_opinion': FACT or OPINION,
	'question_id': 191572,
	'match_scores':[float32],
	'answer_docs':[int]
}

预处理过的数据结构如上,下面进行详细分析,question_id表示问题的编号;fact_or_opinion表示问题是属于事实类型还是观点类型;question_type表示问题的大类型,属于描述型、实体型还是是非型;question表示所述问题,是一个字符串;segmented_question 表示所述问题的分词结果;answers表示答案集合,是一个list类型,里面包含0个、1个或多个字符串,每一个字符串表示一个答案;segmented_answers表示答案集合的分词结果;fake_answers 表示自动生成的答案,是一个list类型,如果答案集为空,那么list为空,否则包含一个字符串;match_scores 表示自动生成答案的评分,使用的是F1值;answer_docs表示生成答案所在的文档标号,是一个list类型,包含一个数值;documents表示文档集合,是一个list类型,里面包含多个字典型元素,每一个字典型元素包含一个文档的所有信息,如下,is_selected表示该篇文档是否包含答案,是一个bool类型,title表示该篇文档的标题,是一个字符串类型,paragraphs表示该篇文档中的具体内容,是一个list类型,里面包含多个字符串,每一个字符串表示该篇文档的一个段落;segmented_paragraphs表示该篇文档中的具体内容的分词结果;most_related_para表示文档中那个段落最与答案或者问题接近,是一个数值。

最优段落的选择:

使用一篇文档中的所有段落分别与答案集求查全率,得到最高的查全率的段落为最优段落,如果出现查全率相等的情况,取段落短的为最优段落。查全率recall,是段落词与答案词相同的个数,除以答案词的总个数。

伪答案的生成:

对所选的最优段落,遍历词块,计算词块与答案集的F1值,得到F1值最大的词块,记录该词块所在的文档和该文档最优段落的起始和结束位置。

对于测试集,没有答案集合,选择最优段落则是使用一篇文档中的所有段落分别与问题集求查全率,得到最高的查全率的段落为最优段落,如果出现查全率相等的情况,取段落短的为最优段落。

总结

以上就是我对DuReader数据集的理解,如果有不对的地方,请大家见谅并多多指教。如果喜欢的话,希望可以多多点赞关注,也可以私聊相互讨论问题呦。

接下来,可能要对dureader数据集数据预处理代码进行讲解。然后会分享QANet、DCM等论文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值