数据部分请见上一篇文章:
官方基于了DuReader给了两个基线模型:(BiDAF 和 Match-LSTM):
-
Match-LSTM是广泛应用的MRC模型,Match-LSTM为了在文章中找到答案,依次遍历文章,动态地将注意力权重与文章的每个标记进行匹配。最后,使用一个应答指针层来查找文章中的答案跨度。
BiDAF既使用了语境对问题的注意,又使用了问题对上下文的注意,从而突出了问题和上下文中的重要部分。然后,利用注意流层融合所有有用的信息,从而得到每个位置的向量表示。
每个模型分别给出了在百度的深度学习架构 PaddlePaddle 和谷歌的深度学习架构 TensorFlow 中的实现,我主要阅读了其在TensorFlow中上的实现。
运行环境
我的运行环境如下表所示:
系统平台 | CPU | 内存 | GPU | CUDA | cuDNN | Python | tensorflow |
---|---|---|---|---|---|---|---|
Ubuntu18.04 | 4110 | 32G | RTX 2080Ti | 10.0 | 7.4 3 | 7.4 | 2.0 |
代码及数据集下载
代码的下载地址:github库主页
数据集下载地址:DuReader
代码下载后解压可以看到目录如下图所示:
数据集下载可以运行data/目录下的download.sh文件下载,可以直接下载原始数据和已经处理过的数据分别保存在data/raw/、data/preprocessed/文件夹下,也可以手动从数据集页面下载后解压到对应目录。
下载第三方依赖
基线系统使用了Bleu和Rouge标准来评估模型效果,计算这两个分数的代码依赖于第三方库: “https://github.com/tylin/coco-caption”。可以通过运行utils/文件夹下的download_thirdparty.sh下载,命令如下:
bash download_thirdparty.sh
这个指令会自动下载评估代码并保存在utils/目录下。
分词
数据集下载后,运行基线系统前需要处理一下。中文自然语言处理的必不可少的处理过程是分词。最新的基线程序中,没找到关于分词的部分,为了保证完整性,我增加了分词的部分代码,使用的是jieba分词模型。分词需要对’question’,‘title’,‘paragraphs’,进行,将分词结果保存到’segmented_question’, ‘segmented_title’, ‘segmented_paragraphs’。
分词代码
为了便于理解,我们只对一行数据的分词进行展示。代码还是运行于jupyter notebook:
import json
import jieba
#读取数据
n = 5
f = open('./data/raw/trainset/search.train.json','r',encoding='utf8')
for i in range(n):
line = f.readline()
f.close()
sample = json.loads(line)
#分词函数
def seg_word(text):
text_temp = list(jieba.cut(text))
return text_temp
#分割一个样本函数
def seg_data(sample):
# 对answers和question进行分词
sample["segmented_answers"] = [seg_word(answer) for answer in sample["answers"]]
sample["segmented_question"] = seg_word(sample["question"])
for doc in sample["documents"]:
# 对每个篇章的title和paragraphs进行分词
doc["segmented_title"] = seg_word(doc["title"])
doc["segmented_paragraphs"] = [seg_word(para) for para in doc["paragraphs"]]
然后可以通过seg_word、seg_data函数分别对文本段、样例进行分词,如图:
- 使用seg_word对文本段进行分词:
- 使用seg_data对一个样本进行分词:
参考文献:
DuReader数据集
DuReader Baseline Systems (基线系统)
DuReader:百度大规模的中文机器阅读理解数据集
DuReader数据集之数据预处理代码解析
来源:CSDN
作者:青萍之默
链接:https://blog.csdn.net/wmq104/article/details/104219669