用BERT进行机器阅读理解

谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复“谷歌BERT论文”下载彩标PDF论文) 谷歌AI论文BERT双向编码器表征模型:机器阅读理解NLP基准11种最优(公号回复“谷歌BERT论文”下载彩标PDF论文) 原创: 秦陇纪 数据简化DataSimp 今天 数据简化DataSimp导读:谷歌AI语言组论文《BERT:语言理解的深度双向变换器预训练》,介绍一种新的语言表征模型BERT——来自变换器的双向编码器表征量。异于最新语言表征模型,BERT基于所有层的左、右语境来预训练... 阅读详情


  磐创AI分享  

作者 | Edward Qian
编译 | VK
来源 | Towards Data Science

这里可以找到带有代码的Github存储库:https://github.com/edwardcqian/bert_QA。本文将讨论如何设置此项功能.


机器(阅读)理解是NLP的领域,我们使用非结构化文本教机器理解和回答问题。

https://www.coursera.org/specializations/deep-learning?ranMID=40328&ranEAID=J2RDoRlzkk&ranSiteID=J2RDo.Rlzkk-XtffRH2JEnDifWa3VrZJ1A&siteID=J2RDo.Rlzkk-XtffRH2JEnDifWa3VrZJ1A&utm_content=2&utm_medium=partners&utm_source=linkshare&utm_campaign=J2RDoRlzkk

2016年,斯坦福德NLP将由超过100000对问答对组成的SQuAD (斯坦福问答数据集)集合在一起,这些数据集由维基百科文章编制。挑战是训练一个机器学习模型,以基于上下文文档回答问题。

当提供上下文(自由文本)和问题时,模型将返回最有可能回答问题的文本子集。

世界上顶尖的人工智能从业人员解决了这个问题,但两年后,没有一个模型能超越人类的标准。然而,2018年底,谷歌大脑引入了通用语言理解模型BERT(Transforms的双向编码器表示)。经过一些微调,与小组测试集相比,该模型能够超越人类的基准。

来自论文:https://arxiv.org/pdf/1606.05250.pdf,这些是用于评估的指标:

完全匹配。这个度量标准衡量的是精确匹配任何一个真实答案的百分比。

(宏平均)F1得分。这个度量了预测和真实答案之间的平均重叠。我们把预测和真实标签当作token列表,并计算它们的F1。我们对给定问题的所有真实答案取最大F1,然后对所有问题取平均值。

基于初始的团队数据集:

  • 人类注释者的精确匹配得分为82.304%,F1得分91.221%

  • 原BERT模型获得85.083%的精确匹配分数,F1得分91.835%


今天,我将向你演示如何使用BERT建立自己的阅读理解系统。这里可以找到带有代码的Github存储库。

https://github.com/edwardcqian/bert_QA

先设置Docker。????

设置Docker

Docker对于容器化应用程序很有用。我们将使用Docker使这项工作更为有用,结果更可重复。按照以下说明在系统上安装Docker。

你还需要docker compose,它是在macos和windows上与docker一起提供的。如果你使用Linux,可以在此处安装它:https://runnable.com/docker/introduction-to-docker-compose

从Github仓库保存代码

除了训练过的数据和预训练的权重之外,所有代码和必要的依赖项都在repo中。注意:只有当你想自己训练模型时,才需要数据。如果没有,你可以使用我预训练过的权重。另一个注意:除非你有一个强大的GPU或大量的时间,否则我不建议训练这个模型。

如果你想亲自训练模型…

在这里下载Team2.0数据集:https://rajpurkar.github.io/SQuAD-explorer/。将“Training Set v2.0”和“Dev Set v2.0”保存到bert_uqa/data。

如果你想使用预训练的权重…

我已经针对SQuAD 2.0训练了模型。你可以在这里下载。解压缩文件并保存内容asbert_uqa/weights。

创建Docker容器

Docker容器是使用Docker映像中提供的指令构建的工作环境。我们需要一个docker-compose.yaml配置文件来定义容器的外观。

version: '3'
services:
    pytorch:
        image: 'edwardcqian/huggingface_transformers_pytorch:2.5.1'
        tty: true
        restart: always
        volumes:
            - ./:/workspace

我为huggingface的Pytorch Transformer制作了一个定制的docker镜像,你可以在dockerhub上找到。为了本教程的目的,你不需要像配置文件那样拉取任何镜像。配置文件还将本地bert_QA文件夹作为容器中的/workspace。

  • 通过在terminal/shell根目录中运行docker compose up-d来启动容器。第一次将需要几分钟。

  • 检查我们的包含是否已启动,并使用Docker ps运行。

  • 将bash shell附加到正在运行的容器:

docker exec -it <your_container_name> bash

训练模型

如果你使用我的预训练的权重,请跳过此步骤。我们将使用huggingface提供的默认训练脚本来训练模型。

在bash shell中运行此命令:

python run_squad.py \
  --model_type bert \
  --model_name_or_path bert-base-uncased \
  --do_train \
  --do_eval \
  --do_lower_case \
  --train_file data/train-v2.0.json \
  --predict_file data/dev-v2.0.json \
  --per_gpu_train_batch_size 12 \
  --learning_rate 3e-5 \
  --num_train_epochs 2.0 \
  --max_seq_length 384 \
  --doc_stride 128 \
  --output_dir weights/

注意:如果没有GPU,则per_gpu_train_batch_size将不会做任何操作

这将训练模型权重并将其保存到权重目录。

用模型进行推断

现在让我们用这个模型来做一些酷的事情。

在shell中启动ipython会话,并导入ModelInference模块以从weights/加载权重。将上下文文档作为参数传递给mi.add_target_text()。

摄入语料库后,使用mi.evaluate()提问。只有当模型确信答案存在于文本中时,模块才会返回答案。否则,模型将输出“找不到有效答案”。

from model_inference import ModelInference

mi = ModelInference('weights/')

mi.add_target_text((
  'The Normans (Norman: Nourmands; French: Normands; Latin: Normanni) '
  'were the people who in the 10th and 11th centuries gave their name to '
  'Normandy, a region in France. They were descended from Norse '
  '(\"Norman\" comes from \"Norseman\") raiders and pirates from Denmark, '
  'Iceland and Norway who, under their leader Rollo, '
  'agreed to swear fealty to King Charles III of West Francia. '
  'Through generations of assimilation and mixing with the native '
  'Frankish and Roman-Gaulish populations, their descendants would gradually '
  'merge with the Carolingian-based cultures of West Francia. '
  'The distinct cultural and ethnic identity of the Normans emerged initially '
  'in the first half of the 10th century, '
  'and it continued to evolve over the succeeding centuries.'
))

mi.evaluate('Where is Normandy')
# france

mi.evaluate('What are Normans called in latin?')
# normanni

mi.evaluate('When was normandy named?')
# in the 10th and 11th centuries

mi.evaluate('What kind of songs did the Normans sing?')
# No valid answers found.

mi.evaluate('What is you quest?')
# No valid answers found.

结论

NLP在过去几年里已经走了很长的路。预训练的BERT权值对NLP的影响与AlexNet对图像识别的影响相似。它为自然语言理解提供了许多新的应用。

觉得还不错就给我一个小小的鼓励吧!

Bert基础(二十)--Bert实战:机器阅读理解任务 也就是Tanoue在原始文本中占一个字符,但是分词后,它占了三个,所以我们在定位答案的起始位置时需要根据一个字符进行定位,但是我们训练处理的时候时使用编码后的input_ids,所以我们就必须把offsets_mapping和原始的内容匹配好才能根据起始位置找到真正的答案。同时答案可能同时出现了多个窗口,因为有数据的重复,而且相似的答案也可能会出现在不同的位置,所以我们后面处理的时候需要进行对比。:北京是中国的首都,它是一座历史悠久的城市,有着丰富的文化遗产和现代化的城市景观。 阅读详情

相关推荐

神经机器阅读理解(MRC)技术全景:从任务分类到BERT革命

一篇综述论文带你掌握2019年前MRC领域的技术脉络与未来挑战。

码力砖家 1279

【NLP】用BERT进行机器阅读理解

作者 | Edward Qian编译 | VK来源 | Towards Data Science这里可以找到带有代码的Github存储库:https://github.com/edward...

fengdu78的博客 1145

基于BERT的中文阅读理解多步注意力网络

基于BERT的中文阅读理解多步注意力网络,周志善,闫丹凤,阅读理解是当前自然语言理解中一个重要的任务,它可以很好的衡量一个自然语言处理模型的能力。为了促进阅读理解任务的发展,有很多�

基于BERT模型的机器阅读理解

使用BERT模型实现机器阅读理解,可以搜索引擎,教育,医疗等领域

m0_63642362的博客 5202

麒麟V10 x86_64系统下Qt 5.12.7安装全攻略(附常见报错解决方案)

本文详细介绍了在麒麟V10 x86_64系统上安装Qt 5.12.7的完整流程,包括在线和离线两种安装方案,并提供了常见报错的解决方案。从环境准备到项目配置优化,再到高级调试技巧,全面覆盖Qt开发在国产操作系统上的实践要点,帮助开发者高效搭建开发环境。

weixin_29294395的博客 511

opencv图像去畸变

opencv图像去畸变

智能机器人产学研基地 4878

彻底搞懂bert阅读理解源码

Bert & Transformer阅读理解源码详解 参考论文 https://arxiv.org/abs/1706.03762 https://arxiv.org/abs/1810.04805 在本文中,我将以run_squad.py以及SQuAD数据集为例介绍阅读理解的源码,官方代码基于tensorflow-gpu 1.x,若为tensorflow 2.x版本,会有各种错误,建议切换版本至1.14。 当然,注释好的源代码在这里 章节 Demo传参 数据篇 番外句子分类 创造实例 实例转换

qq_50974223的博客 1316

Halcon Socket TCP通讯:从算子调用到工业视觉系统集成

本文详细介绍了Halcon Socket TCP通讯在工业视觉系统中的应用与优化技巧。从基础算子调用到高并发处理,再到与PLC、机器人及MES系统的集成实战,提供了全面的解决方案和性能优化建议,帮助开发者高效实现工业视觉系统的通讯需求。

weixin_33502772的博客 248

利用“bert模型”预测英语“完形填空”答案

被课程大作业逼着学习了解了一下bert,转念一想,这不是正好用来解答英语完形填空作业吗,因此有了以下代码: 首先我们导入会用到的库啊,pytorch_pretrained_bert这个库我是第一次用啊,需要去pip install 或者conda install: import numpy as np import torch from pytorch_pretrained_bert import BertTokenizer, BertForMaskedLM impor...

weixin_53563701的博客 2721

Python+OpenCV实现车牌检测与识别

使用Python+OpenCv实现车牌检测与识别,算法思想来自于网上资源,先使用图像边缘和车牌颜色定位车牌,再识别字符。车牌定位在预测方法中,为说明清楚,完成代码和测试后,加了很多注释,请参看源码。车牌字符识别也在预测方法中,请参看源码中的注释,需要说明的是,车牌字符识别使用的算法是OpenCv的SVM,OpenCv的SVM使用代码来自于OpenCv附带的样本。由于训练样本有限,你测试时会发现,车...

不脱发的程序猿 1万+

【STK】手把手教你利用STK进行弹道导弹和运载火箭发射仿真的相关方法全过程解析

写这个系列主要是这几年做了一些弹道导弹和运载火箭发射的相关仿真项目,stk软件由于其专业性在国内比较小众,相关的教程和书籍、经验贴都不是很多,因此新手在进行开发中容易遇到较多困难,把自己的一些经验体会写下来,一方面供自己总结回顾,另一方面也希望对大家有所帮助。这个系列计划分几篇文章写完,每章的内容结构相似,都分为①如何确定发射场位置和发射轨迹、②导入导弹和运载火箭模型、③设计模型分段动作、④飞行参数分析和相关应用这四个部分,每篇文章争取完整描述1-2个实际项目的操作过程。

weixin_44184852的博客 5990

GraphQL 查询语言深度解析:从词法到语义读懂 graphql-spec 的 Language 章节

GraphQL 查询语言(Query Language)是 GraphQL 规范中客户端向服务端发起请求的核心载体,本篇文章以 graphql-spec 仓库中 spec/Section 2 -- Language.md 为骨架,系统讲解该语言的词法文法、语法文法与静态语义:源文本如何处理、记号(Token)如何切分、文档(Document)、操作(Operation)、选择集(Selection

gitblog_00281的博客 403

双脉冲测试(Double Pulse Test, DPT)是一种广泛应用于功率半导体器件(如IGBT、MOSFET、SiC MOSFET等)动态性能测试的标准方法

它通过在受控电路中施加两个短时脉冲,模拟器件在实际开关电路中的工作状态,从而测量器件的动态特性,如开关时间、开关损耗、电压/电流过冲等。1. 双脉冲测试的原理双脉冲测试通过在功率器件上施加两个短时栅极驱动脉冲,模拟器件在开关电源或逆变器中的开通和关断行为。双脉冲测试的核心是通过控制电感负载中的电流,建立特定的测试条件,从而精确测量器件在开关瞬态中的电气特性。以下是对双脉冲测试的详细解释,包括其原理、测试电路、测试过程、测量参数以及注意事项。3. 测试过程双脉冲测试通过施加两个短时脉冲来实现测试目标。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1533

150、机器阅读理解dureader-bert

机器阅读理解很有可能成为人机问答中的主力技术,目前FAQ大多使用的是语义匹配模型,该模型需要进行很多的人工标注,成本较高。与语义匹配模型相比,机器阅读理解可以减少人工标注的数量,降低成本。同时可以对未知问题自动寻找QA对。减少人工寻找答案的困难。 本文的机器阅读理解模型主要包含以下5个步骤: 1、根据F1-score寻找相关段落: 通过计算query和候选段落的F1-score的匹配程度。在一篇文档中找出最相关的三个段落。 2、根据F1-score寻找答案模块: 根据F1-score在最相关的三个

u012416045的博客 1343

52-Halcon-- smooth_object_model_3d函数功能(滑处理3D对象模型)

Halcon中smooth_object_model_3d算子详解 该算子用于3D模型平滑处理,提供三种算法:'laplacian'(快速去噪)、'taubin'(高质量防收缩)和'low_pass'(频域滤波)。核心参数包括迭代次数(默认5)、平滑强度(0-1)和边缘保护选项。典型应用包括扫描数据去噪、CAD模型光顺和逆向工程优化。支持自适应平滑、结合模型简化等高级技巧,并可通过分块处理优化大型模型性能。参数组合需根据具体场景选择,如快速去噪推荐拉普拉斯方法(5次迭代,强度0.3),特征保持推荐低通滤波(

weixin_45590420的博客 873

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【直播】陈安东:Bert与机器阅读理解的故事

Bert与机器阅读理解的故事 直播信息 主讲人:陈安东,Datawhale成员,动手学数据分析开源项目 核心贡献者。 直播时间:2021年07月28日 20:00 - 21:00 直播内容: 经典数据集Squad讲解 bert预训练方法 Squad使用bert进行训练 直播网址: https://live.bilibili.com/21482458 直播内容: 组队学习之余,来读读组队学习中发生的故事! 钱振:助教的那些事 红星:队长的那些事

老马的程序人生 791

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Bert机器问答模型QA(阅读理解)

Github参考代码:https://github.com/edmondchensj/ChineseQA-with-BERT https://zhuanlan.zhihu.com/p/333682032 数据集来源于DuReader Dataset,即百度经验上的问答,在上述链接中提供下载方式。 感谢作者提供的代码。 1、数据集处理 (1)首先数据集格式需要转为SQuAD数据集格式,SQuAD数据集介绍参考。https://blog.youkuaiyun.com/m0_45478865/article/de.

叶子的博客 4927

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NLP模型BERT和经典数据集!

↑↑↑关注后"星标"Datawhale每日干货&每月组队学习,不错过Datawhale干货作者:陈安东,中央民族大学,Datawhale成员对于刚入门NLP...

Datawhale 2430

基线理解_机器阅读理解探索与实践

​1. 背景机器阅读理解,又称阅读理解问答,要求机器阅读并理解人类自然语言文本,在此基础上,解答跟文本信息相关的问题。该任务通常被用来衡量机器自然语言理解能力,可以帮助人类从大量文本中快速聚焦相关信息,降低人工信息获取成本,在文本问答、信息抽取、对话系统等领域具有极强的应用价值。近年来,机器阅读理解受到工业界和学术界越来越广泛的关注,是自然语言处理领域的研究热点之一。2. 机器阅读理解机器阅读理解...

weixin_39617497的博客 380

机器阅读理解总结

机器阅读理解总结 引言 本文主要是总结下自己最近学习到的机器阅读理解的相关知识。文章的主要结构分以下步骤: 常见的机器阅读理解的任务 阅读理解任务的分析 以及解决机器阅读理解的模型 分析这些模型之间的差异 阅读理解任务主要是让机器根据给定的文本回答与文本相关的问题,15年以前由于小规模的数据集和基于规则的方法问题不能兴起,后面兴起了是因为:1、深度学习框架的阅读理解提出。2、大规模数据集的公布...

weixin_46133588的博客 2115

【NLP】NLP模型BERT和经典数据集!

作者:陈安东,中央民族大学,Datawhale成员对于刚入门NLP的伙伴来说,看到NLP任务很容易觉得眼花缭乱,找不到切入点。总的来说,NLP分为五大类无数小类,虽然种类繁多,却环环相扣。...

fengdu78的博客 802

2.3+2.4 实战演练之机器阅读理解(上)(下)

在bert中,cls是起始符,而sep是分隔符。在3中我们介绍了基于截断策略的机器阅读理解任务实现,有些部分并不完整。(比如没有评估函数,没有使用测试集测试,仅仅简单采用了截断策略)那么接下来在本节中我们将学习基于滑动窗口策略的机器阅读理解任务实现。如上图所示,这是一种简单的无重叠滑动窗口,有一个问题就是如果我们的答案是9-12,那么这个其实最后得到的答案就并不完整。在实际中,我们会采用如下图所示的带有重叠overflow的滑动窗口比如我们的最后答案在第一条中起始位置是2,结束位置是7;

a131529的博客 1763

机器阅读理解那些事儿

今日,“机器之心”公众号刷爆了超强小姐姐陈丹琦的文章,笔者前两天也刚看了小姐姐的论文,当时无意中点开开源的github链接,发现小姐姐一路绿灯的github也是十分敬佩! 再放一张小姐姐的主页图片,再次膜拜下~ 小姐姐做的方向是机器阅读理解和智能问答(QA),博主也看了一段时间的该方向论文,现在来聊一聊机器阅读理解中的世界~ 阅读理解,其实我们大家从小到大都在做,从语文阅读理解到英语阅读理解,...

renxingkai的博客 3366

bert做文本摘要_BERT-WWM

New May 31st, 2019: Whole Word Masking Models (google-research)https://github.com/google-research/bertWhole Word Masking (wwm)是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。 简单来说,原有基于WordPiece的分词方式...

weixin_35916106的博客 1689
上一篇: 四年收获及工作感悟。
下一篇: 一文了解11个常见的多变量分析方法!
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值