摘要 本文拜读了提出 Bert 模型的论文,考虑了在 Bert 中算法模型的实现.比较了 Bert 与其他如 Transformer、GPT 等热门 NLP 模型.BERT 在概念上很简单,在经验上也很强大。它推动了 11 项自然语言处理任务的最新技术成果,而这 11 项 NLP 任务可分类为四大自然语言处理下游任务,本文聚焦分析实现一个简单的问答任务,使用了来自 BERT-large 的训练集,测试数据集(作业四爬取的 wiki 数据集),测试结果令人满意。

关键词 Bert; Transformer; GPT; NLP; 问答任务

一、前言

由于本课设用的 BERT-large 真的巨巨巨巨大。有 24 层,1024 大小的 embedding,总共 340M 个参数!总的来说,它是 1.34GB。然而国内下载实在太慢,故使用 Google Colab 提供的 jupyter 来运行相关代码。

想做但没有做出的:利用 bertviz(),一个 Transformer 模型中可视化注意力的工具,时间有些仓促,原本觉得能更好地展示 Bert 的运行过程,种种原因没有细看。

可视化的替代方案:将文本语段中的开始词和结束词分别评分,然后将其可视化。对于简短的文本有较好的效果。

数据集根据课设,一个简单联动作业四的 wiki 数据集中的文本内容(Demo),由于爬取的数据没有答案标签,因此只简单判断答案。

大规模数据集以及部分参考代码来自的 HW7 问答,数据集(包括训练集、验证集和测试集[文章 + 问题 + 答案])。

二、论文的简短介绍

涉及领域,前人工作等

本文主要涉及 NLP 的一种语言模型,之前已经出现了【1】ELMo 和【2】GPT 这些较为强大的模型,ELMo 的特征提取器不是很先进,GPT 没有使用双向,这篇论文结合两者的思想或做法,大大提升了最终效果。

2.1 中心思想

本论文文在前人研究基础上,沿用了 pre-train 和 fine-tuning 结构。使用双向 transformer 结构(不同于 ELMO 的双向,而是"掩蔽语言模型"(MLM)),并加入 Next Sentence Prediction(NSP),在 11 个自然语言处理任务上获得了新的最先进的结果。

2.2 论文思路及创新点

框架图和重要部分如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2sSXXy9p-1654394471007)(https://www.writebug.com/myres/static/uploads/2022/6/4/09b7bbb4656588cfc7943b29b17f0855.writebug)]

主要组成构建有:pre-training:Embedding、Masked LM、Next Sentence Prediction 和 fine-tuning

创新点有:

与 GPT 比较,使用了双向(GPT 只用了单向结构)

与 ELMo 比较,使用了更强的提取器:transformer,而且由于它的双向——使用了独立训练的从左到右和从右到左的 LMs 的浅连接。

论文中做种与 GPT 进行了对比,BERT 和 GPT 的培训方式还有其他一些不同之处:

GPT在BooksCorpus上训练(800M单词);
BERT被训练成书虫维基百科(2500万字)。
GPT使用一个句子分隔符([SEP])和分类器标记([CLS]),它们只在微调时引入;
BERT在在预处理时,学习[SEP], [CLS]和A/B嵌入。
GPT训练1M步,批处理32000字;
BERT被训练1M步,批处理大小为12.8万字。
GPT对所有微调实验使用5e-5相同的学习率;
BERT选择特定于任务的微调学习率,该学习率在开发集上执行得最好。

2.3 BERT 四大下游任务之问答任务

BERT 等预训练模型的提出,简化了我们对 NLP 任务精心设计特定体系结构的需求,我们只需在 BERT 等预训练模型之后下接一些网络结构,即可出色地完成特定任务。BERT 在概念上很简单,在经验上也很强大。它推动了 11 项自然语言处理任务的最新技术成果,而这 11 项 NLP 任务可分类为四大自然语言处理下游任务。下面讲简单分析其中的问答任务。

SQuAD v1.1:Rajpurkar 等人[25]提出的斯坦福问答数据(Stanford Question Answering Dataset)是 10 万个问题/答案对的集合。给定一个问题以及 Wikipedia 中包含答案的段落,任务是预测段落中的答案文本范围(start,end)。

到目前为止,所有提出的 BERT 微调方法都是在预训练模型中添加了一个简单的分类层,并且在下游任务上共同对所有参数进行了微调。然而,并非所有任务都可以轻松地由 BERT 体系结构表示,因此需要添加特定于任务的模型体系结构。如图 8.11(c)所示,阅读理解任务首先需要将问题和文本用“[SEP]”连接起来,并输入模型。然后,我们再将 BERT 最后一层向量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G78IctMX-1654394471010)(https://www.writebug.com/myres/static/uploads/2022/6/4/f1c9bc6a9ea2f33fdced828017d83f23.writebug)]

输入到输出层。具体运算逻辑是初始化输出层的权重矩阵

,并通过如下公式计算答案指针概率向量 logit:

其中 L 为序列的长度,K 为 2,表示 logit 是个 L 行 2 列的矩阵,第 1 列为答案开头 start 的指针概率向量,第 2 列为答案结尾 end 的指针概率向量。

因为 K 为 2,所以我们能分别抽出答案的开头 start_logit 和答案 end_logit 的结尾。并根据两者与真实答案对(start, end)之间的差值计算 start_logit 和 end_logit,最后求出总的 loss,如下公式所示,我们便可以进行梯度下降训练了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oE7cALmf-1654394471011)(https://www.writebug.com/myres/static/uploads/2022/6/4/c52d03fb096251221735fc42be1a7e30.writebug)]

三、基于 Bert 的 QA 模型

四、程序简要说明

模型:

预训练模型 bert-large-uncased-whole-word-masking-finetuned-squad

数据来源:自拟测试语句 + 科比 wiki 英文网介绍 + 自拟问题语句

代码来源:个人编写,由于预训练模型较大和本地环境问题,采用 Colab 线上编程

4.1 BERT 的输入格式

中的图片来源:https://blog.csdn.net/qq_42388742/article/details/113575739

为了向 BERT 提供 QA 任务,我们将问题和文本打包到输入中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRAP4s0n-1654394471011)(https://www.writebug.com/myres/static/uploads/2022/6/4/b98f57af4cf2fc585fae3f08aa9a9372.writebug)]

这两段文本由特殊的标记[SEP]分隔。

BERT 还使用了"Segment Embeddings"来区分问题和文本。这只是 BERT 学习到的两个嵌入(对于片段“A”和“B”),在将它们输入到输入层之前,它将它们添加到 token embeddings 中。

BERT 需要高亮显示包含答案的文本“span”(答案)——这表示为简单地预测哪个 token 标志答案的开始,哪个 token 标志答案的结束。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g5sGHBnv-1654394471012)(https://www.writebug.com/myres/static/uploads/2022/6/4/aa5b06f76830bd5c25e9a1d215ba46f9.writebug)]

  • 对于在文档中的每个单词,返回一个最终的嵌入到分类器中。开始 tokens 的分类器只有一组权值(由上图中的蓝色“strat”矩形表示)它应用于每个单词。
  • 在获取输出嵌入和“开始”权重之间的点积之后,我们应用 softmax 激活来生成所有单词的概率分布。我们选择的是概率最高的单词作为起始 tokens。
  • 我们对结束 token 重复这个过程——我们有一个独立的权值向量。

4.2 简单的一个 QA

加载 Bert 自带的预训练模型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhXkK40E-1654394471013)(https://www.writebug.com/myres/static/uploads/2022/6/4/6f795e062bfa06c0ef737dd84662bfb1.writebug)]

首先定义一个 Question Answering 如下:

期待的答案当然是 321

为了准确地查看标记器(tokenizer)在做什么,让我们打印出带有 id 的标记。

我们拼接 question 和 answer_text 在一起,但 BERT 仍然需要一种方法来区分它们。bert 有两个特殊的"Segment" 嵌入。一个是 A,一个是 B。在单词嵌入进入 BERT 层之前,段 A 嵌入需要添加到 question 标记中,段 B 嵌入需要添加到每个 answer_text 标记中。

这些添加的内容由 transformers 库为我们处理,我们所需要做的就是为每个令牌指定一个’0’或’1’。

以下代码实现查看最有可能的开始词和结束词来突出答案。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7O8yQ3WS-1654394471015)(https://www.writebug.com/myres/static/uploads/2022/6/4/702429d6e3863e18cc6d1e138cae997a.writebug)]

与期待答案一致。

4.3 可视化单词分数

以 2.3 的例子为例,展示可视化的过程

4.3.1 显示每个输入单词作为“start”单词的得分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXPLVwGh-1654394471015)(https://www.writebug.com/myres/static/uploads/2022/6/4/e9e0836d211b87ed4ce25b93b860ee23.writebug)]

4.3.2 显示作为“end”单词的每个输入单词的得分。

4.3.3 合并 start 和 end

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RofflnC-1654394471016)(https://www.writebug.com/myres/static/uploads/2022/6/4/a3fb59ec4f4f7153639a3a8d59745d30.writebug)]

4.4 汇总画图和 QA 模型

详情见附件代码。

4.5 长文本的 QA 例子

我们将英文 wiki 网关于科比的信息获取下来,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3bdRH7W-1654394471018)(https://www.writebug.com/myres/static/uploads/2022/6/4/9d343edcba8403fbb08fb4788558913c.writebug)]

向模型提出了以下问题并都得到了正确答案:

问题 答案 判断
HowmanyNBAchampionships;hasBryantwon? Answer: “five” 正确
HowmanytimeshasBryant;beenanAll-Star? Answer: “18” 正确
Howmanytimeshaskobe;beenontheall-defensiveteam? Answer: “12” 正确
whatdoesKobeBeanBryantdo? Answer:;“an american professional basketball player” 正确

给出最后一个问题的可视化过程:

五、大规模数据集的尝试

5.1 数据来源及展示

① 的 HW7 问答,数据集(包括训练集、验证集和测试集[文章 + 问题 + 答案])

Training set: 26935 QA pairs
Dev set: 3523 QA pairs
Test set: 3492 QA pairs
{train/dev/test} _questions:
List of dicts with the following keys:
id (int)
paragraph_id (int)
question_text (string)
answer_text (string)
answer_start (int)
answer_end (int)
{train/dev/test
}
_paragraphs:
List of strings
paragraph_ids in questions correspond to indexs in paragraphs
paragraph may be used by several questions

②JSON 格式

训练集(hw7_train.json)和验证集(hw7_dev.json)的格式如下表

questions; “id”:0,;“paragraph_id”:538,;“question_text”:“哪一個訓練中心的設備被使用來訓練網絡城與媒體城勞工的未來知識?”,;“answer_text”:“杜拜知識村”,;“answer_start”:312,;“answer_end”:316;“id”:2546,;“paragraph_id”:764,;“question_text”:“瑞士近衛隊的制服代表著哪一個時期的風格?”,;“answer_text”:“文藝復興時期”,;“answer_start”:71,;“answer_end”:76
……
paragraphs

测试集(hw7_test.json)格式如下表:

questions “id”:0,;“paragraph_id”:792,;“question_text”:“士官長的頭盔上會有何裝飾物?”,;“answer_text”:null,;“answer_start”:null,;“answer_end”:null
paragraphs

5.2 程序结果及展示

5.2.1 训练模型并保存

如下图,训练出的模型在验证集上有 0.721 的 accuracy。

5.2.2 测试集结果展示

然后我们将训练好的模型,应用于测试集上。以下为相应代码:

print("EvaluatingTestSet...")
result=[]model.eval()withtorch.no_grad():fordataintqdm(test_loader):output=model(input_ids=data[0].squeeze(dim=0).to(device),token_type_ids=data[1].squeeze(dim=0).to(device),attention_mask=data[2].squeeze(dim=0).to(device))result.append(evaluate(data,output))result_file="result.csv"withopen(result_file,'w')asf:f.write("ID,Answer\n")fori,test_questioninenumerate(test_questions):f.write(f"{test_question['id']},{result[i].replace(',','')}\n")print(f"Completed!Resultisin{result_file}")

在运行以上代码后,生成结果文件(result.csv)。

如下图,留空的为找不到相应答案,其余的部分预测答案与人工作答相差无异。

六、附录更多操作深入

Bert 实战(Pytorch)----问答 fine-Tuning_名字填充中的博客-CSDN 博客;

【NLP-2019】解读 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding - 忆凡人生 - 博客园;

Pytorch-Bert 预训练模型的使用(调用 transformers) - 最咸的鱼 - 博客园;

;GitHub - jessevig/bertviz: Tool for visualizing attention in the Transformer model (BERT, GPT-2, Albert, XLNet, RoBERTa, CTRL, etc.);

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

Pytorch-Bert 预训练模型的使用(调用 transformers) - 最咸的鱼 - 博客园;

;GitHub - jessevig/bertviz: Tool for visualizing attention in the Transformer model (BERT, GPT-2, Albert, XLNet, RoBERTa, CTRL, etc.);

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

基于Bert论文构建Question-Answering模型相关推荐

  1. Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测

    Python基于statsmodels包构建多元线性回归模型:模型构建.模型解析.模型推理预测 目录

  2. R基于H2O包构建深度学习模型实战

    R基于H2O包构建深度学习模型实战 目录 R基于H2O包构建深度学习模型实战 #案例分析

  3. 基于Bert的实体关系抽取模型

    关注微信公众号:NLP分享汇.[喜欢的扫波关注,每天都在更新自己之前的积累] 文章链接:https://mp.weixin.qq.com/s/OebxnvwjQiVbBZZFL2Un3A 前言 信息抽 ...

  4. 跑论文Unsupervised Question Answering by Cloze Translation的实验遇到的bug以及解决方法

    前言 花了3~4天,其实不止,也可以说没有那么久,因为前期没有实验环境的时候熟悉了下ubuntu的用法啥的,然后跑这个论文代码的时候也是停停歇歇的,因为服务器要用我师姐的账号联网,但是我师姐也要用,还 ...

  5. 论文略读 | Question Answering on Knowledge Bases and Text using Universal Schema and Memory Networks

    文章创新点: 使用文本和KB组合的通用模式,结合记忆网络来完成问答 提出模型: UNISCHEMA 提出原因: 知识库问答会受到不完整性的影响,文本虽然包含大量事实,但是存在非结构化文本,将KB和文本 ...

  6. 大数据分析案例-基于XGBoost算法构建二手车价格评估模型

  7. 记,远程pycharm调试论文Unsupervised Question Answering by Cloze Translation的实验遇到的神之奇怪bug

    背景 项目地址:https://github.com/facebookresearch/UnsupervisedQA 我服务器是把这个项目跑起来了的,然后老师说要把代码给搞懂,然后问了下师兄,说走远程 ...

  8. 【论文泛读95】一石二鸟:窃取模型并从基于BERT的API推断属性

    贴一下汇总贴:论文阅读记录 论文链接:<Killing Two Birds with One Stone: Stealing Model and Inferring Attribute from ...

  9. 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》

    论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...

最新文章

  1. OpenCASCADE:建立Body
  2. PHP构建数据结构填充数据
  3. 一站式学习Redis 从入门到高可用分布式实践(慕课)第六章 Redis开发运维常见问题...
  4. ffmpeg开发指南(使用 libavformat 和 libavcodec)
  5. Study on Android【五】--自定义ContentProvider的语义
  6. Protobuf介绍及简单使用(下)之文件读写
  7. javascript 应用_如何利用JavaScript的功能使您的应用脱机工作
  8. 随想录(软件中的bug)
  9. Java-API-Package:org.springframework.web.bind.annotation
  10. c++ 读取写入txt
  11. 基于javaweb的客户信息管理系统搭建
  12. 基于javaSwing、MySQL的酒店客房管理系统(附源码)
  13. 从京东618秒杀聊聊秒杀限流的多种实现!
  14. 南京毕业生租房补贴发票开具地点一览表
  15. Excel键盘快捷键大全
  16. h5 vue利用canvas实现手机签名并且可旋转功能
  17. 游戏BI数据统计分析相关
  18. 职业规划,如何月入1万、3万、5万、10万?
  19. Java中的包(package)详情解释
  20. 中国冶金工业节能减排规划及投资前景预测报告2022年

热门文章

  1. 拉里 埃里森_拉里·埃里森(Larry Ellison)的宝座
  2. 如何修改CAD制图时光标尺寸大小?
  3. android 根目录uri,如何在根目录下创建一个文件夹Android
  4. SwiftUI TextField 限制只能输入数字
  5. 沧小海笔记之基于xilinx的三速以太网相关知识的学习与理解
  6. 2021年危险化学品经营单位主要负责人报名考试及危险化学品经营单位主要负责人新版试题
  7. 仙剑游戏系列..感想
  8. Error: The apk for your currently selected variant (app-release-unsigned.apk) is not signed. Please
  9. php表格调整行间距,excel如何调整行距
  10. pmp中ram和raci的区别_【PMP考前冲刺】知识点大全(六)