【自然语言处理(NLP)】基于Bi-DAF的机器阅读理解

news/2024/5/3 5:57:11/文章来源:https://blog.csdn.net/m0_54754302/article/details/127390609

【自然语言处理(NLP)】基于Bi-DAF的机器阅读理解


在这里插入图片描述


作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~
.
博客主页ぃ灵彧が的学习日志
.
本文专栏人工智能
.
专栏寄语:若你决定灿烂,山无遮,海无拦
.
在这里插入图片描述

文章目录

  • 【自然语言处理(NLP)】基于Bi-DAF的机器阅读理解
  • 前言
    • (一)、任务描述
    • (二)、环境配置
  • 一、数据准备
    • DuReader数据集
  • 二、进阶使用
    • (一)、任务定义与建模
    • (二)、模型原理介绍
    • (三)、数据格式说明
  • 三、相关代码
    • (一)、解压数据集
    • (二)、提升模型表现
    • (三)、生成词表
  • 三、模型训练
  • 四、模型评估
  • 五、模型预测
    • (一)、结果保存
    • (二)、模型推断
  • 总结


前言

(一)、任务描述

在机器阅读理解(MRC)任务中,我们会给定一个问题(Q)以及一个或多个段落§/文档(D),然后利用机器在给定的段落中寻找正确答案(A),即Q + P or D => A. 机器阅读理解(MRC)是自然语言处理(NLP)中的关键任务之一,需要机器对语言有深刻的理解才能找到正确的答案。本项目基于paddlepaddle,针对DuReader阅读理解数据集数据集实现并升级了一个经典的阅读理解模型——BiDAF模型,该模型的结构图如下所示:

在这里插入图片描述

在DuReader数据集上的效果如下表所示:

ModelDev ROUGE-LTest ROUGE-L
BiDAF (原始论文基线)39.2945.90
本基线系统47.6854.66

(二)、环境配置

本示例基于飞桨开源框架2.0版本。

import paddle
import paddle.nn.functional as F
import re
import numpy as npprint(paddle.__version__)# cpu/gpu环境选择,在 paddle.set_device() 输入对应运行设备。
# device = paddle.set_device('gpu')

输出结果如下图1所示:
在这里插入图片描述


一、数据准备


DuReader数据集

DuReader是一个大规模、面向真实应用、由人类生成的中文阅读理解数据集。DuReader聚焦于真实世界中的不限定领域的问答任务。相较于其他阅读理解数据集,DuReader的优势包括:

  • 问题来自于真实的搜索日志
  • 文章内容来自于真实网页
  • 答案由人类生成
  • 面向真实应用场景
  • 标注更加丰富细致

更多关于DuReader数据集的详细信息可在DuReader官网找到


二、进阶使用

(一)、任务定义与建模

阅读理解任务的输入包括:

  • 一个问题Q (已分词),例如:[“明天”, “的”, “天气”, “怎么样”, “?”];
  • 一个或多个段落P (已分词),例如:[[“今天”, “的”, “天气”, “是”, “多云”, “转”, “晴”, “,”, “温度”, “适中”, “。”], [“明天”, “气温”, “较为”, “寒冷”, “,”, “请”, “注意”, “添加”, “衣物”, “。”]]。

模型输出包括:

  • 段落P中每个词是答案起始位置的概率以及答案结束位置的概率 (boundary model),例如:起始概率=[[0.01, 0.02, …], [0.80, 0.10, …]],结束概率=[[0.01, 0.02, …], [0.01, 0.01, …]],其中概率数组的维度和输入分词后的段落维度相同。

模型结构包括:

  • 嵌入层 (embedding layer):输入采用one-hot方式表示的词,得到词向量;
  • 编码层 (encoding layer):对词向量进行编码,融入上下文信息;
  • 匹配层 (matching layer):对问题Q和段落P之间进行匹配;
  • 融合层 (fusion layer):融合匹配后的结果;
  • 预测层 (output layer):预测得到起始、结束概率。

(二)、模型原理介绍

下图显示了原始的模型结构(如BiDAF模型结构图)。在本基线系统中,我们去掉了char级别的embedding,在预测层中使用了pointer network,并且参考了R-NET中的一些网络结构。


(三)、数据格式说明

DuReader数据集中每个样本都包含若干文档(documents),每个文档又包含若干段落(paragraphs)。有关数据的详细介绍可见官网、论文以及数据集中包含的说明文件,下面是一个来自训练集的样本示例

{"documents": [{"is_selected": true,"title": "板兰根冲剂_百度百科","most_related_para": 11,"segmented_title": ["板兰根", "冲剂", "_", "百度百科"],"segmented_paragraphs": [["板兰根", "冲剂", ",", "药", "名", ":", ... ],["【", "功效", "与", "主治", "】", ...],...],"paragraphs": ["板兰根冲剂,药名...","【功效与主治】...",...],"bs_rank_pos": 0},{"is_selected": true,"title": "长期喝板蓝根颗粒有哪些好处和坏处","most_related_para": 0,"segmented_title": ["长期", "喝", "板蓝根", "颗粒", "有", "哪些", "好处", "和", "坏处"],"segmented_paragraphs": [["板蓝根", "对", "感冒", "、", "流感","、", ...],...],"paragraphs": ["板蓝根对感冒、流感、流脑、...",...],"bs_rank_pos": 1},...],"answer_spans": [[5, 28]],"fake_answers": ["清热解毒、凉血;用于温热发热、发斑、风热感冒、咽喉肿烂、流行性乙型脑炎、肝炎、腮腺炎。"],"question": "板蓝根颗粒的功效与作用","segmented_answers": [["清热解毒", "、", "凉血", ";", "用于", "温", "热", "发热", ...],["板蓝根", "的", "用途", "不仅", "是", "治疗", "感冒", ...],...],"answers": ["清热解毒、凉血;用于温热发热、发斑、风热感冒、咽喉肿烂、流行性乙型脑炎、肝炎、 腮腺炎 。","板蓝根的用途不仅是治疗感冒,板蓝根的功效与作用多,对多种细菌性、病毒性疾病都有较好的预防与治疗作用。",...],"answer_docs": [0],"segmented_question": ["板蓝根颗粒", "的", "功效", "与", "作用"],"question_type": "DESCRIPTION","question_id": 91161,"fact_or_opinion": "FACT","match_scores": [0.9583333333333334]
}

三、相关代码


(一)、解压数据集


# 从work中把代码解压出来,解压数据集
!unzip -qo data/data9722/demo.zip
!mv home/aistudio/data/demo data
!rm -r home
# !tar -zxf data/data9722/dureader_machine_reading-dataset-2.0.0.tar.gz -C data

(二)、提升模型表现

为了提升模型在DuReader2.0数据集上的表现,采用了一种新的段落抽取策略。该段落抽取策略可通过运行以下命令执行:


# 使用demo的话 这里不用执行
!cd src && sh run.sh --para_extraction
!mv extracted/* data/extracted

输出结果如下图1所示:

在这里插入图片描述


(三)、生成词表

在模型训练开始之前,需要先运行以下命令来生成词表以及创建一些必要的文件夹,用于存放模型参数等:


!cd src && sh run.sh --prepare

输出结果如下图2所示:

在这里插入图片描述


三、模型训练

运行下面的命令,即可开始训练。更多的参数配置可在src/args.py中修改,默认使用data/demo中的数据进行训练


!cd src && sh run.sh --train --pass_num 50

部分输出结果如下图3所示:

在这里插入图片描述


四、模型评估

通过运行以下命令,可以利用训练好的模型在验证集进行评估,评估结束后程序会自动计算ROUGE-L指标并显示最终结果。默认使用data/demo中的数据进行评估。


!cd src && sh run.sh --evaluate  --load_dir ../data/models/50

输出结果如下图4所示:

在这里插入图片描述


五、模型预测

通过运行以下命令,可以利用训练好的模型进行预测,预测结果会保存在data/result/目录下,可以使用文本编辑的模型打开json文件查看预测结果,默认使用data/demo中的数据进行预测

同时predict脚本在预测完成后还会将模型的参数进行固化,如果需要将功能拆分,可以修改run.py文件,将freeze 和predict拆分开


!cd src && sh run.sh --predict  --load_dir  ../data/models/50

(一)、结果保存

预测的结果以这样的形式保存在文件中,根据question_type 和question_id给出对应的question

{"yesno_answers": [], "entity_answers": [[]], "answers": ["在使用路由器上网时,我们会发现在路由器上,标注得有WAN口(有的路由器是Internet口)和LAN口(有的路由器标注的是1、2、3、4)。很多用户一看就晕了,根本就不知道WAN口与LAN口的区别,自然不知道应该怎么连接了。"], "question_type": "DESCRIPTION", "question_id": 221576}

(二)、模型推断

# 使用固化后的模型参数进行推断
!cd src && python infer.py --predict --result_dir ../data/infer_results/

输出结果如下图5所示:

在这里插入图片描述


总结

本系列文章内容为根据清华社出版的《自然语言处理实践》所作的相关笔记和感悟,其中代码均为基于百度飞桨开发,若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

最后,引用本次活动的一句话,来作为文章的结语~( ̄▽ ̄~)~:

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

ps:更多精彩内容还请进入本文专栏人工智能,进行查看,欢迎大家支持与指教啊~( ̄▽ ̄~)~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_228413.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flume环境搭建

1、新建一个专门放文件的目录:mkdir /export/server 2、将Flume的安装包上传到/export/server目录并解压,重命名: tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /export/server mv apache-flume-1.8.0-bin flume 3、修改flume-env.sh文件…

威尔士和英格兰同属英国,但为啥还要在世界杯上进行PK?

聊到威尔士VS英格兰队的比赛,那就不得不普及一个足球常识啊。当我们打开英国的地图,你会发现有四个地区英格兰,苏格兰,威尔士和北爱尔兰都是属于英国的。我们还会常常看到英格兰,苏格兰,威尔士和北爱尔兰四…

FPGA控制W5500完成UDP环回测试

FPGA控制W5500完成UDP环回测试1 前言2 前期准备3 W5500寄存器描述4 W5500 环回测试4.1 W5500初始化4.1.1 通用寄存器初始化4.1.2 socket寄存器初始化4.2 W5500数据接收4.3 W5500数据发送4.4 数据环回5 总结&#x…

Android: SimpleAdapter+GridView 简单图片展示

1:原理解析: 一个xml放总布局,一个xml放适配器要加载的模板(我喜欢这样理解); java中写适配事件; 2:目录: 3:主布局:最重要的是要放一个GridView …

ByteX-shrink_r源码解析

背景 为什么要对R文件内联处理? 这里首先说一下Android R文件的产生,对于Android开发者我们都知道,当我们要使用要使用一些布局文件,drawable等其他资源时,可以直接用 R.id. R.drawble.等直接使用,而这个…

易基因科技|单细胞甲基化测序低至2500元/样

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。12月活动来袭~ 限时特惠!单细胞甲基化测序低至2500元/样! 易基因高通量单细胞DNA甲基化测序:单细胞DNA甲基化组学研究很大程度上受制于建库…

定时执行专家 —— 使用网络唤醒功能实现远程开机

目录 ◆ 关于网络唤醒 ◆ 定时执行专家 - 远程开机功能 - 设置方法 ◆ 使用网络唤醒实现远程开机的一些前提条件 ◆ 关于网络唤醒 Wake-on-LAN简称WOL或WoL,中文多译为“网上唤醒”、“远程唤醒”技术。WOL是一种技术,同时也是该技术的规范标准&…

CSS自定义属性与前端页面的主题切换

基于级联变量的CSS自定义属性,已经出来很多年了。 虽然有less、sass等预处理器大行其道,但是自定义属性也有它的特点和用处,诸如在js中读写、作用域设置等等,在处理UI主题切换等功能上也发挥着很大的作用。 自定义属性 CSS自定义…

[附源码]SSM计算机毕业设计学习资源共享与在线学习系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux驱动: rtc子系统

1. 前言 限于作者能力水平,本文可能存在的谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文分析代码基于Linux 3.10内核,硬件平台为嵌入式ARM32平台. 3. rtc子系统 3.1 相关代码文件列表 drivers/rtc/class.c …

Lactoferrin-PEG-alginate 乳铁蛋白-聚乙二醇-海藻酸钠

产品名称:乳铁蛋白-聚乙二醇-海藻酸钠 英文名称:Lactoferrin-PEG-alginate 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体,取决于分子量 PEG分子量可选:350、550、750、1k、…

Redis高级篇——Redis的优化

一、Redis的键值设计 1.1key的结构 Redis的Key在自定义时,最好遵循以下三个规则: 基本格式:[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 如:登录业务,保存用户信息的key 定义为…

python常用代码总结2

1、列表的常规追加元素、追加列表操作 (1)列表追加多个元素,比如追加0-9 ls [] ls.extend(list(range(10)))ls Out[20]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (2)列表追加多个相同的元素,比如追加10个0 ls1 [] for i in range(10):ls1.append(0)ls1 Ou…

直播邀请函 | 第12届亚洲知识产权营商论坛:共建创新价值 开拓崭新领域

由香港特别行政区政府、香港贸易发展局及香港设计中心共同举办的亚洲知识产权营商论坛,每年为世界各地知识产权业界专家、商界领袖提供一个理想平台,共同探讨亚洲知识产权市场的最新发展,发掘更多商机。 去年,论坛共邀请70余位国…

聚观早报 | 中国茶申遗成功;特斯拉市值蒸发4个推特

今日要闻:中国茶申遗成功;特斯拉市值蒸发4个推特;iPhone14Pro出货量预期下调;FF91距交付仅剩一步之遥;AI绘画一天新增60万用户中国茶申遗成功 11月29日晚,我国申报的“中国传统制茶技艺及其相关习俗”在摩洛…

[附源码]JAVA毕业设计高速公路服务区管理系统(系统+LW)

[附源码]JAVA毕业设计高速公路服务区管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

最全面的Spring教程(五)——文件上传与下载

前言 本文为 【SpringMVC教程】文件上传与下载 相关知识&#xff0c;具体将对使用MultipartResolver处理文件上传的步骤&#xff0c;两种文件下载方式&#xff08;直接向response的输出流中写入对应的文件流、使用 ResponseEntity<byte[]>来向前端返回文件&#xff09;等…

智慧城市运营中心建设方案(SCOC)智慧城市的心脏

一、大数据&#xff1a;智慧城市的基础与引擎 中国每天正以消失100个村庄的速度快速步入城镇化&#xff0c;未来10年内将有5亿以上的人涌入城市。这无疑会给城市的建设带来巨大的压力&#xff0c;城市资源有限&#xff0c;规模不可能无限扩张&#xff0c;城市在就业、教育、住房…

HashMap底层数据结构,扩容机制

HashMap的底层结构是数组链表 没有哈希冲突的元素放在数组里面&#xff0c; 哈希冲突的元素用链表串起来 初始数组长度是16&#xff0c;对应源码&#xff1a; static final int DEFAULT_INITIAL_CAPACITY1; 最大的容量为2的30次方&#xff0c;一个很大很大很大的数 还定义了…

多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂

多个版本JDK切换 多个JDK&#xff1a;JDK17、JDK19、JDK1.8轻松切换&#xff08;无坑版&#xff09;小白也可以看懂 提示&#xff1a;看了网上很多教程&#xff0c;5w观看、32w观看、几千观看的&#xff0c;多多少少带点坑&#xff0c;这里我就把踩过的坑都给抹了 文章目录多个…