从浅到深理解bert

2023-11-15

更多查看https://github.com/B-C-WANG/AI-Storage

4.2. 4.2从浅到深理解bert

4.2.1. 理解Attention

  • 参考https://www.cnblogs.com/robert-dlut/p/8638283.html
  • Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射
  • 在计算attention时主要分为三步,第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;然后第二步一般是使用一个softmax函数对这些权重进行归一化;最后将权重和相应的键值value进行加权求和得到最后的attention。目前在NLP研究中,key和value常常都是同一个,即key=value
  • 相似度的计算方法:点积-Q转置乘以K或Q转置乘以W乘以K,拼接:将QK拼接乘以W,感知机:tanh(WQ+UK)

4.2.2. 理解self-attention

  • VKQ分别是指上一节中的Value,Key和Query
  • Scaled Dot-Product Attention(简写SDPA):QK的点积过后除以了维度的sqrt,避免内积过大,然后softmax过后乘以V,得到输出,输出维度和V相同
  • Multi-head Attention(简写MHA,包括了SDPA):输出V,K,Q,经过线性变换后输入上面的SDPA中,不过注意此时V K Q之后的线性层和SDPA都有多个,也就是多头的体现,得到多个softmax概率乘以V的结果,然后拼接起来
  • 因此,MHA有三个输入,分别是VKQ。Encoder-dencoder attention中,VKQ分别是Xe,Xe和Xd(Xe为encoder输入,Xd为decoder输入)。encoder中的Self-attention中,VKQ均为Xe,而decoder的Self-attention,VKQ均为Xd
  • 为何需要完全相同的VKQ?这样的话里面的每个词都要和该句子中的所有词进行attention计算。目的是学习句子内部的词依赖关系,捕获句子的内部结构
  • 关于时间复杂度,文中提到Self-Attention为n^2 x d,RNN为n x d^2,CNN为k x n x d^2,其中RNN不能并行,还需要计算n次,其他均计算1次。n为输入序列大小,d为embedding维度。由此,在使用RNN的场合都应当考虑使用self-attention替代
  • Self-Attention对于长距离依赖非常好,因此可以捕获长距离依赖关系
  • Self-Attention可以看成和RNN,CNN,Dense等等同的角色,作为构建NN模型需要考虑到的一环,Self-Attention在形式上和ResNet中的残差块相似,输入矩阵或向量的X,经过QWK向量求得Softmax,然后再将概率乘回X,输入和输出shape相同

4.2.3. 理解Transformer

  • 参考https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc
  • 一个典型的Transformer由6个Encoders和6个Decoders组成,每个Encoder或decoder串联,具有相同结构不同权重
  • encoder均为先通过一个encoder Self-Attention(encoder self-attention即VKQ都是Xe),然后通过一个Dense输出
  • decoder则是先通过decoder self-attention(VKQ都是Xd),然后经过一个encoder-decoder attention(VK是Xe,Q是Xd),需要注意,每个decoder不仅仅从上一个串联的decoder中输入Xd,还从最后一个encoder的结果的KV中输入分别的Xe
  • 和CNN相同,这样的方式没有考虑到序列信息,因此Transformer使用了Position Embeding的方法,将和word embeding相同大小的position embeding加入word embeding中,用以加入位置信息

4.2.4. Bert及其预训练

  • bert包含3个embedding,词的embedding,句子的embedding和position embedding,为了训练这些embedding需要特定的非监督任务
  • 训练word embeding-Masked ML:将一些词随机用Mask替换,训练怎样预测这些词,输入是替换后的词语,网络结构只用到Transformer Encoder,最终输出使用softmax直接接完整的词的onehot作损失
  • 训练句子的embeding-Next Sentence Prediction:判断两个句子是否是上下文,输入整个序列,使用[cls]标签切分两句话,变成2x1的向量,然后最终softmax二分类

4.2.5. Bert前向传播

  • 输入一个序列的word,经过embeding后加上position embeding,传入encoders得到最后一层encoder的K和V输出,将KV输出复制和decoder数目相同的份数,每一个都作为decoder中的encoder-decoder self-attention的两个Xe,然后decoder输入Xd,传递到最后一层,通过Linear+Softmax得到预测的词的概率,最终是一次性输出所有的翻译结果的词的softmax,按照顺序取,取到<end>这个词结束

4.2.6. Bert的下游任务

分类任务

  • bert最终针对一个句子输出sequence_length x bert_feature_dim 大小的矩阵,sequence_length是句子中词的数目,每个词有一个bert feature dim大小的向量,可以使用CNN等接上bert输出用于后续任务
  • 使用bert输出的向量的第一个词(也就是<start>)的向量,去掉其他剩下所有词的向量,也可以用于分类(第一个词作为简单的一个句子的特征向量)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从浅到深理解bert 的相关文章

  • SGDClassifier 每次为文本分类提供不同的准确度

    我使用 SVM 分类器将文本分类为好文本和乱码 我正在使用 python 的 scikit learn 并按如下方式执行 Created on May 5 2017 import re import random import numpy
  • IOB 准确度和精密度之间的差异

    我正在使用命名实体识别和分块器对 NLTK 进行一些工作 我使用重新训练了分类器nltk chunk named entity py为此 我采取了以下措施 ChunkParse score IOB Accuracy 96 5 Precisi
  • Spacy 中的自定义句子分割

    I want spaCy使用我提供的句子分割边界而不是它自己的处理 例如 get sentences Bob meets Alice SentBoundary They play together gt Bob meets Alice Th
  • 否定句子的算法

    我想知道是否有人熟悉算法句子否定的任何尝试 例如 给定一个句子 这本书很好 请提供任意数量的意思相反的替代句子 例如 这本书不好 甚至 这本书不好 显然 以高精度实现这一点可能超出了当前 NLP 的范围 但我确信在这个主题上已经有了一些工作
  • 如何训练斯坦福 NLP 情感分析工具

    地狱大家 我正在使用斯坦福核心 NLP 包 我的目标是对推文直播进行情感分析 按原样使用情感分析工具对文本 态度 的分析非常差 许多积极因素被标记为中性 许多消极因素被评为积极 我已经在文本文件中获取了超过一百万条推文 但我不知道如何实际获
  • 快速NLTK解析成语法树

    我正在尝试将数百个句子解析为语法树 我需要快速完成 问题是如果我使用 NLTK 那么我需要定义一个语法 而我不知道我只知道它会是英语 我尝试使用this https github com emilmont pyStatParser统计解析器
  • 使用正则表达式标记化进行 NLP 词干提取和词形还原

    定义一个函数 名为performStemAndLemma 它需要一个参数 第一个参数 textcontent 是一个字符串 编辑器中给出了函数定义代码存根 执行以下指定任务 1 对给出的所有单词进行分词textcontent 该单词应包含字
  • 保存具有自定义前向功能的 Bert 模型并将其置于 Huggingface 上

    我创建了自己的 BertClassifier 模型 从预训练开始 然后添加由不同层组成的我自己的分类头 微调后 我想使用 model save pretrained 保存模型 但是当我打印它并从预训练上传时 我看不到我的分类器头 代码如下
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 斯坦福 CoreNLP:使用部分现有注释

    我们正在尝试利用现有的 代币化 句子分割 和命名实体标记 同时我们希望使用斯坦福 CoreNlp 额外为我们提供 词性标注 词形还原 和解析 目前 我们正在尝试以下方式 1 为 pos lemma parse 创建一个注释器 Propert
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 用于词性标记的优秀 Java 库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Lucene 标准分析器与 Snowball

    刚刚开始使用 Lucene Net 我使用标准分析器索引了 100 000 行 运行了一些测试查询 并注意到如果原始术语是单数 则复数查询不会返回结果 我知道雪球分析器增加了词干支持 这听起来不错 不过 我想知道 超过标准的雪球锣是否有任何
  • 获取 NLTK 索引的所有结果

    我正在使用 NLTK 来查找单词的一致性 但我不知道如何获取所有结果并将它们放入list or set 例如 text concordance word 仅打印前 25 个结果 TL DR text concordance lines 10
  • nltk 标记化和缩写

    我用 nltk 对文本进行标记 只是将句子输入到 wordpunct tokenizer 中 这会拆分缩写 例如 don t 到 don t 但我想将它们保留为一个单词 我正在改进我的方法 以实现更精确的文本标记化 因此我需要更深入地研究
  • 文本摘要评估 - BLEU 与 ROUGE

    根据两个不同摘要系统 sys1 和 sys2 的结果和相同的参考摘要 我使用 BLEU 和 ROUGE 对它们进行了评估 问题是 sys1 的所有 ROUGE 分数均高于 sys2 ROUGE 1 ROUGE 2 ROUGE 3 ROUGE
  • NLTK 可用的停用词语言

    我想知道在哪里可以找到 NLTK 停用词支持的语言 及其键 的完整列表 我找到一个列表https pypi org project stop words https pypi org project stop words 但它不包含每个国家
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 使用 NLP 进行句子压缩 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 使用机器翻译 我可以获得一个句子的非常压缩的版本 例如 我真的很想喝一杯美味可口的咖啡将被翻译为我想喝咖

随机推荐

  • Python实现ACO蚁群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 蚁群优化算法 Ant Colony Optimization ACO 是一种源于大自然生物世界的新的仿生进化
  • 背景差分法《python图像处理篇》

    引言 背景差分常用于运动目标检测 是一种动态检测的方法 即观察两帧图像间的差距 哪个物体存在相对运动 其基本原理就是将两幅图像做减法 只不过这里的两幅图像分为输入图像和背景图像 此方法对于动态常见特别敏感 例如监控环境下的下雪 刮风时的树叶
  • ❤ jeecgboot 使用

    jeecgboot 使用 JDictSelectTag 字典下拉去掉请选择 JDictSelectTag
  • 最近大火的ChatGPT和RPA机器人相结合会带来什么前景?

    ChatGPT是由人工智能技术驱动的自然语言处理工具 它可以通过理解和学习人类语言进行对话 并根据聊天的上下文进行互动 真正像人类一样进行聊天和交流 甚至完成撰写电子邮件 视频脚本 文案 翻译 代码 写论文等任务 ChatGPT和RPA都是
  • line-height行高的解析

  • golang 框架_Go Web 框架 Gin 实践9—将Golang应用部署到Docker

    Go语言中文网 致力于每日分享编码知识 欢迎关注我 每天一起进步 项目地址 https github com EDDYCJY go gin example 注 开始前你需要安装好 docker 配好镜像源 本章节源码在 f 20180324
  • 同花顺某v参数详解

    声明 本文章中所有内容仅供学习交流 抓包内容 敏感网址 数据接口均已做脱敏处理 严禁用于商业用途和非法用途 否则由此产生的一切后果均与作者无关 若有侵权 请联系我立即删除 目标站点 aHR0cDovL3EuMTBqcWthLmNvbS5jb
  • 自定义控件中 wrap_content 属性无效的分析解决

    问题 在自定义一个类似锁屏页面时间日期样式的控件 继承 View 的时候 发现在 xml 中使用 wrap content 属性相当于使用了 match parent 属性 原因分析 进入View的源码 可以看到 onMeasure 的方法
  • jdbc连接数据库(MySQL 8.0.19)url设置

    本文只针对下述版本的url设置问题 我的JDK版本是11 0 1 MySQL版本8 0 19 MySQL的8系列版本应该都可以 一般连接失败的原因是url没设置好 这里我所设置的url亲测有效 String urlString jdbc m
  • Kali之渗透攻击

    渗透攻击是指黑客为了获得非法利益 通过各种手段进入网络系统 计算机系统中 在未经授权的情况下获取信息 利用漏洞控制系统和执行越权操作的一种行为 其目的在于获取非法利益 破坏或者窃取关键数据 以及对网络系统进行控制 在学习渗透攻击这一知识点过
  • world特殊符号

    world特殊符号 论文需要 和圆里面一个乘号 论文需要 和圆里面一个乘号 1 首先打开word文档 找到要 插入符号 的地方 2 选择插入功能下面的 符号按钮 3 选择符号下面的 其他符号 4 将字体选为 symbol 这个字体 5 在这
  • Hive 一文读懂

    Hive 简介 1 1 什么是Hive 1 hive简介 Hive 由Facebook开源用于解决海量结构化日志的数据统计 Hive是基于Hadoop的一个数据仓库工具 可以将结构化的数据文件映射为一张表 并提供类SQL查询功能 2 Hiv
  • opencv边缘检测-拉普拉斯算子

    sobel算子一文说了 索贝尔算子是模拟一阶求导 导数越大的地方说明变换越剧烈 越有可能是边缘 那如果继续对f t 求导呢 可以发现 边缘处 的二阶导数 0 我们可以利用这一特性去寻找图像的边缘 注意有一个问题 二阶求导为0的位置也可能是无
  • python报错AttributeError module ‘scipy.misc‘ has no attribute ‘imresize‘和 ‘imread‘

    python报错AttributeError module scipy misc has no attribute imresize 和 imread 报错原因 scipy版本过高 解决方案 降低scipy版本 如下 pip install
  • 迁移学习之resnet50——解决过拟合及验证集上准确率上不去问题

    keras之resnet50迁移学习做分类 问题1描述 迁移学习用resnet50做分类 验证集上的准确率一直是一个大问题 有时候稳定在一个低的准确率 我的一次是一直在75 上下波动 问题2描述 resnet50迁移学习 训练集上的准确率一
  • IDEA使用jsp可以访问页面,转换为html弹出页面为404

    这种办法为绕过controller直接访问静态页面 大家只要路径对 在springmvc xml中配置好一个 标签即可
  • 【mysql】mysql 常用建表语句

    1 建立员工档案表 要求字段 员工员工编号 员工姓名 性别 工资 email 入职时间 部门 2 合理选择数据类型及字段修饰符 要求有NOT NULL auto increment primary key等 make by kakane D
  • arcgis10.2破解版下载及其详细教程;;;附带10.1-10.6的破解版,没有教程

    1 arcgis10 2破解版 https blog csdn net bigemap article details 81131840 2 arcgis10 1 10 5破解版安装包 https blog csdn net e wsq a
  • 【c++】8.map和vector容器查找、删除指定元素、emplace、insert

    1 查找与删除 vector 和 map 容器中指定元素 vector 查找或删除vector的指定元素 123 方法1 使用迭代器 不同于map map有find方法 vector本身没有find这一方法 std vector
  • 从浅到深理解bert

    更多查看https github com B C WANG AI Storage 4 2 4 2从浅到深理解bert 4 2 1 理解Attention 参考https www cnblogs com robert dlut p 86382