NLP模型BERT和经典数据集!

Bert几个数据集的概念Cola、MRPC、XNLI、MNLI等 一直在几个数据集之间犯晕, 【关于 Bert 源码解析III 之 微调 篇 】 那些的你不知道的事-技术圈 GLUE部分基准数据集介绍:RTE、MRPC、SST-2、QNLI、MNLI、QQP_skysys的研究小屋 -优快云博客 GLUE共有九个任务,分别是CoLA、SST-2、MRPC、STS-B、QQP、MNLI、QNLI、RTE、WNLI。如下图图2所示,可以分为三类,分别是单句任务,相似性和释义任务 其中做了详细说明,我提取一下概念: 一、 句子对分类任务 1、Xnli :2个句 阅读详情

 Datawhale干货 

作者:陈安东,中央民族大学,Datawhale成员

对于刚入门NLP的伙伴来说,看到NLP任务很容易觉得眼花缭乱,找不到切入点。总的来说,NLP分为五大类无数小类,虽然种类繁多,却环环相扣。无论我们一开始学习的是什么方向,当做过的东西越来越多,学习范围越来越大的时候,总可以形成闭环。

这一次,我们从教机器做阅读理解题起航,介绍用火到“出圈”的Bert和常见数据集入手NLP的整体流程。

NLP五大类别

从机器阅读理解起步

什么是机器阅读理解?形式就像下图:

答案是机器做出的

怎么样,是不是感觉很酷!让我们的模型来做阅读理解题目,好似机器有了人类理解的能力。当然,也不能太乐观,现在机器阅读理解任务还在逐步探索阶段。在训练方式上,对于不同机器阅读理解数据集,就会有对这个任务的不同解法。对于机器阅读理解任务,我们将其分为三个类型。难度逐步上升:

  • 简单问题:对答案的简单匹配和抽取

  • 复杂问题:加入推理

  • 基于对话的问答系统:自由问答和特定任务场景的问答

可以看出,如果答案在文章内可以清晰的找到,那么模型就不需要生成答案,只需要将答案抽取出来就好了,这样的任务是简单的,可以使用SQuAD 1.0学习。

更近一步,有些阅读理解的问题中是没有答案的,正确的答案就是不回答,这种行为更接近智能,任务也变的更困难,需要用SQuAD 2.0学习。

此外还有对话系统,它的答案要和实时场景相匹配所以难度更高,这里主要讨论前两种。

绕不开的SQuAD数据集

上面关于机器阅读理解描述中,我们反复提及用SQuAD数据集进行训练。对于想要从事相关方向的同学来说,这个数据集几乎是绕不过的。

SQuAD(Stanford Question Answering Dataset)是斯坦福大学通过众包的方式来构建的一个机器阅读理解数据集。本质上,这就是一个大规模的英文阅读理解数据集,现在做和英文的阅读理解相关所有任务,都用它。

数据开源地址:https://gas.graviti.cn/dataset/hello-dataset/SQuAD_v2?utm_medium=0725datawhale

数据集现在有SQuAD1.0 和 SQuAD2.0两个版本,适用于不同的研究场景:

SQuAD1.0

1.0版本的数据集中包含107,785的问题以及对应的536篇文章。文章源自维基百科上的一系列文章。

与之前其他数据集的区别:相较于以前的阅读理解数据集,SQuAD更大,包含的文章内容也更多。其具体的形式是,SQuAD的答案是短语或者一段话,而不再是一个单词。答案里面包含的信息增多了,所以任务的难度也增加了。

特点:阅读理解的所有答案,都可以在文章中完全可以找到(答案可以从文章中完全copy过来)。并且文中的答案是不能是跨行的。也就是说答案是文章指定的一个区间。所以,SQuAD的答案生成是抽取式的。

数据集示例如下:

SQuAD2.0

在阅读理解中,遇到有些问题无法通过阅读现有文章的内容来回答,该怎么办?

有些信息我们无法通过文章找到,在使用1.0版本的数据集中,模型遇到了那些无法回答的问题,也会强制给出一个回答,这样的情况显然不够智能。所以在2.0版本的数据集中,增加了50,000条没有答案的问题,通过这个数据集中,希望模型可以学会对于没有答案的问题不作回答。也就是说希望我们的模型要有“知道自己不知道”的能力。

2.0版的数据集形式就如上面图片所示,上面的图片中展示的两个问题都是没有答案的,没有答案的问题不回答才是正确的。

总结来说,SQuAD是一个主流的抽取式的英语阅读理解数据集。现在大家都在SQuAD2.0上刷榜。

通过上面的榜单可以看到,在SQuAD2.0这个数据集中,前五名的模型获得的效果已经远超人类。如果将这些模型做一个分析,可以说每个模型里面都装着一个Bert。

浅说BERT

Bert这个预训练模型,在2021年的今天应该是当之无愧的”网红“。作为一个入门的介绍,这里先讲Bert在原论文中是如何被训练的。之后介绍SQUAD数据集是如何与Bert结合的。

从结构角度来说,Bert是由Transformer的Encoder(编码器)构成的。通过强大的编码能力,可以将语言映射在一个向量空间中,将单词表示为向量,也就是大家常说的Embedding(词向量)。Bert的所做的就是,输入一个句子,基于任务然后吐出来一个基于训练任务的词向量(embedding)。

知道Bert是什么,那么下面就介绍一下Bert在原论文中的两种训练方式。

两个训练方法

① Masked LM

将一句话输入之后,随机mask掉一个单词,具体mask的方式就是将那个词替换为[MASK]这个符号,然后再mask位置的输出接到一个简单的线性分类器当中。我们希望的是一个简单的线性分类器可以得到正确的答案。如果简单的分类器可以输出正确的答案,就说明这个embedding(词向量)的效果相当的好

② Next Sentence Prediction

预测输入的两个句子是不是一句话

输入两句话,然后Bert输出的是单词的embedding(词向量)。这时从图中可以看出,有两个特殊的输入单词———SEP和CLS。SEP这个单词的意思就是告诉Bert,左右的两个句子是分开的。CLS这个单词的意思就是告诉Bert,这里是要做一个分类任务。然后将这个CLS输出的embedding放入一个简单的分类器中(simple linear)来预测两个句子是不是一句话。如何可以分辨的很好,说明了Bert对于语句相似性有很好的的表示效果。

在Bert的完整训练过程中,这两个训练任务是都要有。这样可以训练出性能优秀的Bert。

在Bert里为了完成不同的任务,设计了不同的特殊单词。这里顺便做一下总结:

  • [CLS]:告诉模型要做分类任务,其中最后一层的第一个embedding作为分类任务的presention。

  • [SEP]:告诉Bert左右两边的输入是不同的。

  • [UNK]:没出现在Bert字典里的字会被这个单词替代。

  • [PAD]:zero padding,将长度不同的序列补充为固定长度,方便做batch运算。

  • [MASK]:未知遮罩

用Bert做机器阅读理解

现在我们已经知道了SQuAD这个数据集以及模型Bert。现在就可以通过Bert和SQuAD来做机器阅读理解了。

接下来详细说一说在Bert中,如何在SQuAD上解决阅读理解这个问题的。

在原始的Bert任务中,就已经利用SQuAD来做阅读理解任务了。它使用了SEP的这个特殊单词,将Qury(问题)和Document(文章)一起作为输入。然后在Bert中获取良好的embedding(词向量),然后将这个embedding(词向量)的结果接入一个分类器,分别得到答案在文章中位置的id和结束位置的id。因为SQuAD数据集中的答案是可以直接在文章中抽取出来,所以得到答案起始位置的id和结束位置的id可以直接抽取出正确的答案。

我们使用文章一开始那个例子给大家举例。当我将文章和问题输入给Bert之后,将Bert输出的Embedding(词向量)接入到一个阅读理解任务的模型中(这个模型可以先忽略,对于Bert来说,不同的任务会不同的模型来辅助)。我们发现,输出的结果是'雪'和‘藻’在文本中的位置65和67。然后我们将65-67这三个字抽取出来就得到了答案“雪衣藻”。

对于英文的SQuAD数据集,我们的做法和上面一模一样。

那么对于SQuAD2.0数据集来说,这个数据集中有一些没有答案的问题。我们对于这样的问题解法其实和上面没有任何区别,如果我们获得起始位置id比结束位置id大的情况,那么这种不合理的输出,我们就认为这个问题没有答案。

实践一下用Bert的效果:

# https://gas.graviti.cn/dataset/hello-dataset/SQuAD_v2 下载数据集

# 载入文本
with open('SQuAD_v2_dev-v2.json','r',encoding='utf-8') as reader:
    input_data = json.load(reader)


# 看看这个json格式
input_data.keys()

squad_data = input_data['data']
print('有',len(squad_data),'个类别',)

# 看一篇文章的细节
squad_data[1].keys()

print('一个类有',len(squad_data[1]['paragraphs']),'篇文章')

squad_data[1]['paragraphs'][1].keys()

context = squad_data[1]['paragraphs'][1]['context']context

# 拿到一个问题

squad_data[1]['paragraphs'][1]['qas'][1]

question = squad_data[1]['paragraphs'][1]['qas'][1]['question']

# 得到这个题目的答案
answer = squad_data[1]['paragraphs'][1]['qas'][1]['answers']answer

# 调用Hugging Face 的API

# 使用Hugging Face 的API。Hugging Face已经帮大家训练好了Bert模型,大家可以直接用来做推理(记得注册Hugging Face)
# 推理API的调用指南:https://huggingface.co/docs/hub/inference

import json
import requests

headers = {"Authorization": f"Bearer {'此处用自己的API账号'}"}  API_URL = "https://api-inference.huggingface.co/models/deepset/roberta-base-squad2"

def query(payload):
    data = json.dumps(payload)
    response = requests.request("POST", API_URL, headers=headers, data=data)
    return json.loads(response.content.decode("utf-8"))

data = query(
    {
        "inputs": {
            "question": question,
            "context": context,
        }
    }
)

data['answer']

# 看看推理结果,和上边的答案是不是完全一样?

最后

这篇文章中,先是介绍了NLP的基本任务。然后以SQuAD数据集为中心,介绍了机器阅读理解任务的一些分类,知道抽取式任务是简单的,而问答任务是困难的。最后以Bert为例,介绍SQuAD数据集在Bert模型上是怎么解的。

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

阅读原文可获取数据集

[NLP自然语言处理]谷歌BERT模型深度解析 全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进率5.6%)等。可以预见的是,BERT将为NLP带来里程碑式的改变,也是NLP领域近期最重要的进展。BERT模型开启了NLP的新时代!从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。 阅读详情

相关推荐

自然语言处理中的Transformer和BERT

2018年马上就要过去,回顾深度学习在今年的进展,让人印象最深刻的就是谷歌提出的应用于自然语言处理领域的BERT解决方案,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(https://arxiv.org/abs/1810.04805)。BERT解决方案刷新了各大NLP任务的榜单,在各...

Zhangbei_的博客 1万+

【NLP】第 5 章 :使用Hugging Face的任务

Gradio 是一个专门为部署和推理机器学习模型而构建的Web 框架。Gradio 使我们能够通过 Web 界面快速公开我们的 ML 模型,而无需学习太多编码。通过收购 Gradio,Hugging Face 向前迈进了一步,为 huggingface 社区提供了一个简单的界面,可以在 huggingface 模型上部署和提供 UI。

sikh_0529的博客 4767

NLP自然语言处理Bert大模型系列学习

本文介绍了BERT模型的几种主要变体及其代码实现,包括原始BERT、RoBERTa和ALBERT。原始BERT提供基础和大型版本,RoBERTa通过优化训练策略提升性能,ALBERT则采用参数共享技术降低资源消耗。文章提供了详细的PyTorch训练和推理代码示例,涵盖数据预处理、模型配置和预测流程,适用于文本分类任务。不同变体适用于不同场景,如RoBERTa适合性能优先的任务,ALBERT适合资源受限环境。

日常分享模型调优、Data Agent 搭建实操案例与行业技术思考,记录从数据预处理到智能体迭代的完整实践。沉心打磨可落地的算法方案,输出干货向技术内容,与同好一同探索数据智能与大模型进阶路径。 1503

【BERT-多标签文本分类实战】之四——数据集预处理

可以看到,每个文本平均有1.2个标签,相对其他数据集来说,是极低的。:在使用预训练词向量的时候,首先会构建一个词典,然后把文本里面的每个单词逐个转化成词典里面对应的序号,最后根据序号再去预训练词向量里面找对应单词的d维向量,于是一条文本就变成了。除此之外,我们还应该关心数据集平均一个本文有几个标签、最多有几个标签、最少有几个标签,哪些标签出现的比较频繁,这些有助于我们加深对数据集、任务难点的了解。在处理数据集的文本数据前,有必要了解一下使用预处理词向量的模型,是如何处理文本数据的。的文本有3964个。

十一月廿七风雨大作 1万+

自然语言处理(NLP)大模型

自然语言处理(NLP)领域中的一种重要技术,具有强大的语言理解和生成能力。以下是对NLP大模型的详细介绍:

2402_84466582的博客 2377

【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 训练之数据集处理、训练代码实现

【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 训练之数据集处理、训练代码实现

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

BERT训练之数据集处理(代码实现)

【代码】BERT训练之数据集处理(代码实现)

Hiweir的博客 1222

【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 原理及代码实现

模型架构 - **基于Transformer编码器**:BERT仅使用Transformer的编码器部分,其多层双向Transformer编码器允许模型在处理每个单词时,同时考虑该单词的左右上下文信息,从而生成深度的双向语言表征。 - **多层结构**:基础版本的BERT有12层Transformer编码器层,而BERT - Large有24层,层数越多,模型的表达能力越强,但计算量也越大。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

conda pytorch笔记

预训练模型的使用方式。

小虾米就是我喽 341

PCIE配置和地址空间

来源:https://www.jianshu.com/p/574e9a2cbc4e 每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下: 图6.1 整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Brid.

qq_28643619的博客 4064

python + QXDM5高通平台通过自动化截取log方法及代码

python + QXDM5高通平台通过自动化截取log方法及代码

dgzj2001的博客 1822

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

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

fengdu78的博客 802

【高清照片】深圳光博会看PCIe Over Fibre 实现方案

本文分析了PCIe over Fibre技术及其在数据中心的应用前景。该技术通过光纤延伸PCIe总线,解决了传统铜缆距离限制问题,支持跨机架资源池化。目前主要有两种实现方式:CDFP混合光缆方案和Retimer转接卡方案,各有优缺点。文章还探讨了CDFP接口的现状、低速信号传输解决方案,以及PCIe速率与光通信发展的对应关系。最后对比了PCIe光缆与以太网光缆的关键差异,指出PCIe光互连在协议透明度和边带信号处理上的特殊要求。随着标准推进,PCIe over Fibre将成为数据中心扩展高带宽、低时延互连

Saniffer的博客 1393

深度学习自然语言处理(NLP)模型BERT:从理论到Pytorch实战

BERT(Bidirectional Encoder Representations from Transformers)是一种基于深度学习的自然语言处理(NLP)模型。它是由Google在2018年提出的,采用了Transformer架构,并在大规模语料库上进行了预训练。BERT的特点之一是其双向(Bidirectional)处理能力,它能够同时考虑到句子中所有单词的上下文,而不仅仅是单词之前或之后的部分。这种双向性使得BERT在许多NLP任务中表现出色,例如文本分类、问答和命名实体识别等。

专注 AI、大数据、Python、爬虫、数据分析可视化、机器学习、推荐算法、知识图谱、大模型应用与全栈系统开发,长期沉淀真实项目案例、源码解析、系统设计、部署经验与工程化实践,分享可运行、可复用、可落地的技术方案。 3万+

手机OIS马达拆解:从苹果的悬丝到三星的滚珠,不同方案如何影响你的拍照体验?

本文深度解析手机OIS马达技术,对比苹果悬丝式、三星滚珠式和LG记忆合金式三种主流方案的机械原理与成像体验差异。通过详实的数据和测试结果,揭示不同OIS技术如何影响防抖性能、模组厚度及长期可靠性,为摄影爱好者和技术爱好者提供实用选购建议。

weixin_42554408的博客 309

BUCK电路的EMI优化设计案例

10μH的电感以及SW铺铜面积都比较大,在保证电流能力的情况下,切掉部分SW面积,换用更小体积的小感值电感。最终结果如图14.38所示,优化SW面积和电感后,提升了10dB左右,基本满足了class 5的限值要求。如图14.36,为一个BUCK电路的LED驱动板,从原理图来看,绿色的滤波器输入地和黄色的功率地通过输入电容隔开,这样高频电流环路的噪声电流会先经过输入的陶瓷电容,但是实际的PCB布局中,可以看到输入地和高频电流环路重合,噪声可以直接耦合到输入环路上。图 14.36 一个BUCK电路的布局。

qq_43416206的博客 525

[LLM] 自然语言处理 --- BERT模型原理

BERT简介 NLP:自然语言处理(NLP)是信息时代最重要的技术之一。理解复杂的语言也是人工智能的重要组成部分。Google AI 团队提出的预训练语言模型 BERT(Bidirectional Encoder Representations from Transformers) BERT,全称是 Pre-training of Deep Bidirectional Transformers...

摩登都市天空---专栏 7591

一张图看懂 ABAP CDS 两大子语言:CDS DDL 与 CDS DCL 以及缺席的 DML

ABAP CDS 的核心设计思想围绕语义数据模型(DDL)与数据访问控制(DCL)展开,而非单纯作为SQL查询工具。其DDL通过声明式语法定义业务导向的数据视图,强调模型稳定性与复用性;DCL则将访问控制逻辑下沉到模型层,实现行级权限过滤。ABAP CDS刻意剥离DML功能,交由ABAP SQL处理数据变更,形成清晰的分层架构。这种设计使数据定义、访问控制与应用逻辑解耦,为现代ABAP应用提供更安全、可维护的数据治理方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 977

收藏!一篇看懂BERT模型

BERT(Bidirectional Encoder Representations from Transformers)自 2018 年由谷歌提出以来,便在自然语言处理(NLP)领域掀起了一场革命。它凭借独特的架构与训练方式,成为了众多 NLP 任务的首选模型,深刻改变了我们理解和应用语言的方式。unsetunset一、BERT 重要意义

Z4400840的博客 1万+

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1548

26. Fabric2.2 司法存证的智能合约分析

有很多同学反馈 Fabric 智能合约读起来比较费劲,对于新手不友好看不懂,这里选择一个司法存证的智能合约,阅读、分析智能合约基础框架与核心流程代码,培养大家智能合约编写的方法论。

菜鸟的博客 1340

一文弄懂Bert模型:什么是Bert ?为什么需要BERT ?BERT模型结构

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

Androiddddd的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Pytorch用BERT对CoLA、新闻组文本数据集自然语言处理NLP:主题分类建模微调可视化分析

通过以上对 20 Newsgroups 数据集运用 BERTopic 模型进行主题建模、分析以及可视化的完整过程展示,我们可以看到 BERTopic 模型能够有效地从文本数据中提取出有意义的主题信息,并以直观的可视化方式呈现出来。这为我们深入理解文本数据的内在结构和主题分布提供了有力的工具和方法,在文本数据分析、信息检索等诸多领域具有重要的应用价值。我们再次确认了主题编号列表topics的长度与数据集文本数量一致,均为 18846,这也验证了模型对每个文本都进行了主题分配操作。

大数据部落 1503

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

原创 | 从ULMFiT、Transformer、BERT等经典模型看NLP 发展趋势

自然语言处理(Natural Language Process,简称NLP)是计算机科学、信息工程以及人工智能的子领域,专注于人机语言交互,探讨如何处理和运用自然语言。自然语言处理的研究...

数据派THU 1628

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 统计学中数据分析方法汇总!
下一篇: 为何程序员们没事总爱戴个耳机,看完恍然大悟...
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值