初次BERT使用者的可视化指南

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Jay Alammar

编译:ronghuaiyang

导读

用可视化的方式演示了如何用Bert来做一个句子分类的应用,每一步都有非常详细的图解,特别的清楚。

在过去几年里,处理语言的机器学习模型的进展一直在迅速加快。这一进步已经离开了研究实验室,开始为一些领先的数字产品提供动力。这方面的一个很好的例子是最近关于 BERT 模型如何成为谷歌搜索背后的主要力量的公告。谷歌认为,这一步(或在搜索中应用自然语言理解的进步)代表了“过去五年最大的飞跃,也是搜索历史上最大的飞跃之一”。

这篇文章是关于如何使用 BERT 的变体对句子进行分类的简单教程。作为第一个介绍,这是一个足够基本的示例,但也足够高级,可以展示所涉及的一些关键概念。

数据集: SST2

在本例中,我们将使用的数据集是SST2,其中包含电影评论中的句子,每个句子都标记为正样本(值为 1)或负样本(值为 0):

模型: 句子情感分类

我们的目标是创建一个模型,该模型接受一个句子(就像我们的数据集中的那些句子一样),并生成 1(表示句子带有积极情绪)或 0(表示句子带有消极情绪)。我们可以这样想:

实际上,该模型是由两个模型组成的。

  • DistilBERT处理这个句子,并将从中提取的一些信息传递给下一个模型。DistilBERT 是 BERT 的小版本,由HuggingFace的团队开发并开源。它是 BERT 的一个更轻、更快的版本,与它的性能大致相当。

  • 下一个模型是来自 scikit-learn 的一个基本逻辑回归模型,它将接受 DistilBERT 处理的结果,并将句子分为正样本或负样本(分别为 1 和 0)。

我们在两个模型之间传递的数据是一个大小为 768 维的向量。我们可以把这个向量看作是我们可以用来分类的句子的嵌入。

模型训练

虽然我们将使用两个模型,但我们只训练逻辑回归模型。对于 DistillBERT,我们将使用一个已经过预先训练过并掌握了英语的模型。然而,这个模型既没有经过训练,也没有经过 finetune 来进行句子分类。然而,从 BERT 通用目标的训练中,我们得到了一些句子分类的能力。对于第一个位置(与[CLS] token 相关联)的 BERT 输出尤其如此。我认为这是由于 BERT 的第二个训练目标 — 下一个句子的分类。这个目标似乎是训练模型将句子的意义压缩到了第一个位置的输出中。transformer库为我们提供了 DistilBERT 的实现以及模型的预训练版本。

教程概要

这就是本教程的策略。我们将首先使用训练好的 distilBERT 来生成 2000 个句子的嵌入。

在这一步之后,我们将不再接触 distilBERT。这些都是我从这里学到的。我们对这个数据集做通常的训练/测试划分:

为distilBert(模型#1)的输出进行训练集/测试集分割,创建我们在(模型#2)上训练和评估逻辑回归的数据集。注意,在现实中,sklearn的train/test split在进行分割之前会对样本进行打乱,它并不只取数据集中出现的前75%的样本。

然后在训练集上训练 logistic 回归模型:

如何计算单个预测

在深入研究代码并解释如何训练模型之前,让我们先看看训练后的模型如何计算其预测。

让我们试着把这句话“a visually stunning rumination on love”分类。第一步是使用 BERT tokenizer 将单词首先分割成 tokens。然后,我们添加句子分类所需的特殊 tokens(在第一个位置是[CLS],在句子的末尾是[SEP])。

tokenizer 做的第三步是用嵌入表中的 id 替换每个 token,嵌入表是我们从训练模型中得到的一个组件。

注意,tokenizer 在一行代码中完成所有这些步骤:

tokenizer.encode("a visually stunning rumination on love", add_special_tokens=True)

我们的输入语句现在是传递给 DistilBERT 的正确形状。

这一步也可以用以下方式可视化:

DistilBERT 的数据流

通过 DistilBERT 传递输入向量的工作方式与 BERT 一样。输出将是每个输入 token 的向量。每个向量由 768 个数字(浮点数)组成。

因为这是一个句子分类任务,所以除了第一个向量(与[CLS]token 相关联的向量)外,我们忽略了所有其他向量。我们传递的这个向量作为逻辑回归模型的输入。

从这里开始,逻辑回归模型的工作就是根据它从训练阶段学到的知识对这个向量进行分类。我们可以把预测计算想象成这样:

我们将在下一节中讨论训练以及整个过程的代码。

代码

在本节中,我们将重点介绍训练这个句子分类模型的代码。

让我们从 importing 工具开始。

import numpy as np
import pandas as pd
import torch
import transformers as ppb # pytorch transformers
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split

数据集可以从 github 上得到,因此我们只需将其直接导入到 pandas dataframe 中。

df = pd.read_csv('https://github.com/clairett/pytorch-sentiment-classification/raw/master/data/SST2/train.tsv', delimiter='\t', header=None)

我们可以使用 df.head()查看 dataframe 的前五行,看看数据是什么样的。

df.head()

输出:

导入预训练的 DistilBERT 模型和 tokenizer

model_class, tokenizer_class, pretrained_weights = (ppb.DistilBertModel, ppb.DistilBertTokenizer, 'distilbert-base-uncased')

## Want BERT instead of distilBERT? Uncomment the following line:
#model_class, tokenizer_class, pretrained_weights = (ppb.BertModel, ppb.BertTokenizer, 'bert-base-uncased')

# Load pretrained model/tokenizer
tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
model = model_class.from_pretrained(pretrained_weights)

我们现在可以 tokenize 数据集了。注意,这里我们要做的事情与上面的示例稍有不同。上面的例子只处理了一个句子。在这里,我们将使用批处理的方式 tokenize 和处理所有的句子(仅为了资源考虑,notebook 将处理更小的一组示例,比如 2000 个示例)。

Tokenization

tokenized = df[0].apply((lambda x: tokenizer.encode(x, add_special_tokens=True)))

这样就把每个句子都转换成了 id 列表。

数据集当前是列表(或 panda 的 Series/DataFrame)的列表。在 DistilBERT 将其作为输入处理之前,我们需要使用 token id 0 填充更短的句子,从而使所有向量具有相同的大小。

填充之后,我们有了一个矩阵/张量,准备传给 BERT:

使用 DistilBERT 处理

现在,我们从填充后的 token 矩阵中创建了一个输入张量,并将其发送给 DistilBERT。

input_ids = torch.tensor(np.array(padded))

with torch.no_grad():
last_hidden_states = model(input_ids)

运行此步骤后,last_hidden_states保存 DistilBERT 的输出。在我们的例子中,这是个形状为(2000,66,768)的 tuple。2000(因为我们只局限于 2000 个例子),66(这是 2000 个例子中最长序列中的标记数),768(在 DistilBERT 模型中隐藏单元的数量)。

展开 BERT 输出张量

我们来展开这个三维输出张量。我们可以先从它的维度开始:

对句子做处理的历程

输入的每一行都与数据集中的一个句子相关联。对第一句话处理路径,我们可以把它想象成这样:

对重要的部分切片

对于句子分类,我们只对 BERT 的[CLS] token 的输出感兴趣,所以我们选择立方体的那一部分并放弃其他部分。

这就是我们切片三维张量得到我们感兴趣的二维张量的方法:

 # Slice the output for the first position for all the sequences, take all hidden unit outputs
features = last_hidden_states[0][:,0,:].numpy()

现在features是一个 2d numpy 数组,其中包含数据集中所有句子的嵌入。

我们从BERT的输出中切出的张量

逻辑回归的数据集

现在我们已经有了 BERT 的输出,我们已经组装了训练逻辑回归模型所需的数据集。768 列是特征,并且我们从初始数据集中获得了标签。

我们用来训练逻辑回归的数据集。这些特征是我们在前面的图中分割的[CLS]token(位置#0)的BERT的输出向量。每一行对应数据集中的一个句子,每一列对应Bert/DistilBERT模型顶层transformer block的前馈神经网络的一个隐藏单元的输出。

在完成传统的机器学习训练集/测试集分割之后,我们可以构建逻辑回归模型并针对数据集进行训练。

labels = df[1]
train_features, test_features, train_labels, test_labels = train_test_split(features, labels)

将数据集分割成训练/测试集:

接下来,在训练集上训练逻辑回归模型。

lr_clf = LogisticRegression()
lr_clf.fit(train_features, train_labels)

现在模型已经训练好了,我们可以根据测试集对它进行评分:

lr_clf.score(test_features, test_labels)

结果表明,该模型的准确率达 81%左右。

分数基准

作为参考,这个数据集的最高准确率分数是96.8。DistilBERT 可以通过训练来提高它在这个任务中的分数 —— 这个过程称为 finetune,它更新 BERT 的权重,使它在句子分类中获得更好的性能(我们可以称之为“下游任务”)。finetune 后的馏分达到了90.7的准确率分数。全尺寸的 BERT 模型可以达到94.9

—END—

英文原文:https://jalammar.github.io/a-visual-guide-to-using-bert-for-the-first-time/

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

ronghuaiyang
关注 关注
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
初次使用BERT可视化指南
weixin_44766179的博客
12-25 3130
初次使用BERT可视化指南 在过去几年里,处理语言的机器学习模型的进展一直在迅速加快。这一进步已经离开了研究实验室,开始为一些领先的数字产品提供动力。这方面的一个很好的例子是最近公布的BERT模型如何成为谷歌搜索背后的主要力量。谷歌认为,这一步(即自然语言理解在搜索领域的应用进展)代表了过去五年最大的飞跃,也是搜索历史上最大的飞跃之一。 这篇文章是关于如何使用BERT的变体对句子进行分类的简单...
wifiphisher使用介绍
weixin_34061555的博客
02-05 2064
1、github地址:https://github.com/sophron/wifiphisher 2、需要安装在kali linux下面 3、需要两个无线网卡 4、安装方法是使用介绍,参考github
bert拿特征last_hidden_state中的第0个词来进行分类如何理解
fei321321的博客
04-26 165
bert中文文本分类任务,发现训练输出结果向量仅使用了第一个token(就是一句话中的第一个位置)的向量,很明显,这不对。
wifiphisher 钓鱼工具的使用
dichengpai8268的博客
04-16 1390
wifiphisher 钓鱼工具的使用一、简介 Wifiphisher是一个安全工具,具有安装快速、自动化搭建的优点,利用它搭建起来的网络钓鱼攻击WiFi可以轻松获得密码和其他凭证。与其它(网络钓鱼)不同,这是社会工程攻击,不包含任何的暴力破解,它能轻松获得门户网站和第三方登陆页面的证书或WPA/WPA2的密钥。 wifiphisher在kail linux 上工作,并获得...
wifiphisher教程及注意事项
weixin_49071539的博客
12-09 4361
wifiphisher使用教程 1. 接入网卡–>虚拟机–>可移动设备–>选择网卡名称–>连接主机 2. 查看网卡是否接入成功----------------------ifconfig 3. 启动网卡------------airmon-ng start wlan0 4. 下载安装wifiphisher kali下-----------------------apt-get install wifiphisher 其它的系统也可安装,可能要GitHub上找文件 5. 启动wifip
cuda 10 环境下安装 pytorch_geometric
Mortal's blog
12-21 454
1. 安装pytorch pip install torch==1.4.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html 2. 安装依赖 浏览器打开https://pytorch-geometric.com/whl/torch-1.4.0.html 然后用wget下载对应python版本的四个依赖,使用pip install安装 https://pytorch-geometric.com/whl/torch-1.4.0.html ht
bert模型句子向量化
08-23
bert模型句子向量化
可视化Bert注意力权重.zip
02-06
自注意力机制
finbervis:用于(多标签)序列分类任务的微调BERT模型可视化调试工具
04-11
FinBerVis 使用手动标记的文本微调微调预训练的BERT变压器模型,以进行情感分析。 针对此模型或更普通的模型开发可视化调试工具: 可视化调试工具,可针对(多标签)序列分类任务微调BERT模型
使用BERT进行文档摘要模型开发的详细指南.pdf
08-08
- 数据准备:构建文档-摘要数据集,预处理文本,BERT词化。 - 模型构建:Encoder用BERT获取语义特征,Decoder用Seq2Seq生成摘要。 - 模型训练:fine-tune BERT+seq2seq模型,调优超参数。 - 摘要推断:加载预训练模型,输入...
RBERTviz:与RBERT一起使用的可视化工具
04-25
RBERTviz提供工具,可方便地可视化RBERT软件包中的BERT模型。安装您可以使用以下命令从安装RBERTviz: # install.packages("devtools")devtools :: install_github( " jonathanbratt/RBERTviz " , build_vignettes =...
distilbert-base-uncased-finetuned-sst-2-english 预训练模型
01-12
来自 https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english/tree/main#
wifiphisher 使用_奔腾X80使用机械钥匙使用方法,锁止和解锁车门,天线位置说明...
weixin_39790717的博客
10-28 1341
奔腾X80使用机械钥匙使用方法【奔腾X80使用机械钥匙使用方法】使用机械钥匙( 不带智能钥匙一键起动系统的车辆)1-按下释放按钮2-钥匙将自动弹出( 折叠式钥匙)如果要折叠钥匙,按住释放按钮,并将钥匙折入固定器内。■ 钥匙号码牌请将号码牌放在安全的地方,不要放在车内。如果钥匙丢失,一汽轿车销售服务中心可利用钥匙号码牌制作新钥匙。■ 需要将车辆钥匙交给停车服务员时*根据具体情况,请锁定杂物箱,取出机...
WiFi安全测试工具WiFiPhisher
weixin_30700099的博客
01-23 471
官方下载地址:https://github.com/sophron/wifiphisher打不开的要翻GFW好事做到底http://pan.baidu.com/s/1hqmssIC========================== 开源无线安全工具Wifiphisher能够对WPA加密的AP无线热点实施自动化钓鱼攻击,获取密码账户。由于利用了社工原理实施中间人攻击,Wifiphisher在实...
使用WifiPhisher进行WiFi开发
w1304099880的博客
10-26 3889
你好朋友!今天我们将使用非常棒的工具“WIFIphisher”演示WIFI-网络钓鱼攻击,请阅读其描述以获取更多详细信息。 Wifiphisher是一种安全工具,可以针对WiFi客户端安装自动受害者定制的网络钓鱼攻击,以获取凭据或使用恶意软件感染受害者。它主要是一种社会工程攻击,与其他方法不同,它不包括任何强制攻击。这是从强制门户网站和第三方登录页面(例如社交网络)或WPA / WPA...
wifiphisher 如何正确安装
weixin_45929045的博客
12-29 9083
首先强调一下,kali 下必须安装好了python3,不会的自行解决。 wifiphisher 没有被安装正确,或者不能执行,排除python没有安装好,就是没有在regohostapd下进行安装。安装我的方法 成功率应该有95%。 第一步 安装 roguehostpad 非常重要!非常重要!非常重要!!! 检查下是否安装python --eg 命令 python 2....
kali的wifiphisher进行无线攻击和诱导密码破解(没事钓鱼工具篇)
巴胡子
07-31 8534
1、wifiphisher这个工具需要在kali进行安装首先输入 apt-get install wifiphisher 2、等待安装完成后(如果安装失败往往后面会有提示应该怎样做)输入 wifiphisher 3、等待界面跳出,直接用上下键选择无线,选定后敲一下回车即可 此时这条无线就已经断网,继而创造出一条假的无线,当用户使用的时候会弹出一个输入命令界面,如果对方连接网络就会在你的电脑上有显示...
优秀的 WIFI 渗透工具汇总
hl1293348082的专栏
03-28 6235
今天给大家收集和整理了一些常用的 WiFi 渗透工具,工具对于我们这些人来说是最熟悉的东西之一了,选择一个好的工具会让你事半功倍。(工具顺序不分名次) WIFI 监听网卡推荐 3070 和 8187,二者各有优劣,但是无伤大雅。 1.Aircrack-ng Aircrack-ng 是 Kali Linux 里面最热门的 WiFi 破解领域的软件。 Aircrack-ng 套件包含的工具能够捕捉数据包和握手包,生成通信数据,或进行暴力破解攻击以及字典攻击。 Aircrack-ng 是一款多合一整
bert文本分类可视化代码示例
最新发布
06-19
在使用BERT进行文本分类后,我们通常会对模型的预测结果进行可视化,以便更好地理解和评估模型性能。以下是一个简单的使用Hugging Face的Transformers库进行BERT文本分类并在PyTorch中进行可视化的基本代码示例: `...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • BERT中的词向量指南,非常的全面,非常的干货 72448
  • 信息检索中的度量指标全解析 62433
  • 图解SimCLR框架,用对比学习得到一个好的视觉预训练模型 29031
  • Mish:一个新的state of the art的激活函数,ReLU的继任者 28492
  • CBAM:融合通道和空间注意力的注意力模块 26103

分类专栏

  • 计算机视觉 1篇
  • 职业发展 1篇
  • 数据科学 3篇
  • 项目 1篇

最新评论

  • 图解SimCLR框架,用对比学习得到一个好的视觉预训练模型

    SkillsDepend: 太棒了,看了好多文章就这个讲得最清楚表情包

  • 基于深度学习的2D和3D仿射变换配准

    weixin_45370269: 新链接https://colab.research.google.com/drive/1aTca_cn8O_y5-PmSkXS_XKgaJAMZuBMr?usp=sharing

  • 图像修复中的一个里程碑:全局和局部一致性的图像补全

    m0_74352685: 可以提供一下实现的代码吗?

  • SHAP值的解释,以一种你期望的方式解释给你听

    一个学数学的程序媛: 写的很好!有个问题,文中举的例子是一个样本的各特征shap值,如果想看整体的各特征shap值,是样本求出来之后取平均吗~

  • Equalized Focal Loss for Dense Long Tailed Object Detection 论文解读

    m0_54833680: 你好,请问成功了吗

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 马斯克的大语言模型Grok的发布声明
  • 微调TrOCR,训练TrOCR能识别弯曲和模糊文本
  • TrOCR:基于Transformer的OCR介绍和使用
2023年15篇
2022年8篇
2021年127篇
2020年266篇
2019年242篇
2018年68篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司荷坳网站优化软件同乐外贸网站制作民治关键词按天扣费大运推广网站大浪建站光明建站双龙网页设计观澜网站搜索优化惠州阿里店铺运营塘坑模板推广同乐seo双龙百姓网标王吉祥网站优化软件坪地关键词按天收费坪地模板推广坂田网站优化软件东莞百姓网标王横岗优化吉祥设计公司网站大浪百姓网标王推广爱联百搜词包大鹏英文网站建设盐田网络推广南联网页制作坪山百搜标王横岗网站优化推广石岩网络推广南山企业网站制作平湖网站推广系统大芬SEO按天收费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化