菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)—— 介绍及分词

南楼画角 提交于 2020-02-13 03:04:59

数据部分请见上一篇文章:

官方基于了DuReader给了两个基线模型:(BiDAFMatch-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函数分别对文本段、样例进行分词,如图:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!