当前位置: 首页 > news >正文

自然语言处理-BERT处理框架-transformer

 

目录

 

1.介绍

2.Transformer

        2.1 引言

        2.2 传统RNN网络的问题

        2.3 整体架构

        2.4 Attention

        2.5 Self-Attention如何计算

3.multi-headed机制

4. BERT训练方法


1.介绍

        BERT:当前主流的解决框架,一站式搞定NLP任务。(解决一个NLP任务时的考虑方法之一)

        BERT:google开源的框架

        BERT:自然语言的通用解决框架

                必备知识:Word2vec,RNN(了解词向量模型,RNN模型如何建模)

                重点:Transformer网络架构

                训练方法: BERT训练方法

                google开源提供预训练模型,直接使用

2.Transformer

        2.1 引言

        BERT时基于Transformer框架的,所以了解Tansformer就基本了解BERT。

        提出问题:transformer要做一件什么事呢??

        答:就像将自然语言翻译成计算机语言,让其学习。

        其基本组成依旧是机器翻译模型中常见的Seq2Seq网络。输入输出都很直观,其核心就是中间的网络架构了。

        2.2 传统RNN网络的问题

        

        可以看出这种依次计算的方式,计算效率不高,且后面的计算需要依赖前面的计算结果。 

预训练好的词向量就不会改变了,这种对于复杂语境应用不好。所以能不能让其并行计算,提高运算效率,且词向量的构成考虑到上下文的语境呢???

        答案:self-Attention机制来考虑进行并行计算,输出结果的是同时你算出来的,现在已经基本取代RNN了。

        2.3 整体架构

        接下来我们将围绕这几个问题来展开对Tansformer的介绍:
        1. 输入如何编码?
        2.输出结果是什么?

        3.Attemtion的目的?

        4.怎样组合在一起?


         2.4 Attention

        对于输入的数据,你的关注点是什么?(不同的数据,关注点不同,比如:一张带背景的人像,关注点是人像而不是背景)

        如何才能让计算机关注到这些有价值的信息?

        Self-Attention是计算机自己判断。

        每个词不能只考虑到自己,在训练的过程中,所有词构成句子,但是每个词分配的权重不同。在编码时,不能只考虑自己,要把上下文都融入,编码成向量。

例如:

        it代表的东西不同,怎么让计算机识别出来呢?每个词都要考虑上下文,结合每个词对它的影响来进行编码。

        2.5 Self-Attention如何计算

        其实,说到底,Self-Attention就是如何编码,提取特征。

         1. 通过Embedding随机或者其他什么方式去初始化词向量表,W^Q,W^K,W^v权重矩阵

         2. 训练这三个矩阵

        得到X*W^Q,Q1,Q2同理得到K1,K2;V1,V2 

 

        当两个向量求内积,若是两个向量垂直表示其线性无关,其值为0,若是两个向量线性相关其值越大表示两个向量相关性越大。那么q_i*k_j(i,j\in n)表示上下文每个词相关性,值越大相关性越大。

         为了不让分值随着向量维度增大而增加,让计算难度增大,最终除以\sqrt{d_k}

        每一个词的Attention计算

        softmax后就得到整个加权结果 

         经过上述一系列分析,Self-Attention解决了并行计算和词向量的构建编码考虑到了上下文语境的问题。

3.multi-headed机制

        

 

4. BERT训练方法

        transformer中Encoder是重要的,就是编码方式。再将其进行下游任务微调,使其变成分类,预测等类型的任务。是自然语言处理的万金油模板。

        

       

        

           

相关文章:

  • centos 7系统升级内核(ELRepo仓库)、小版本升级、自编译内核
  • Element-plus点击当前行之后获取数据显示跟随行数据
  • Java将list数组中重复的对象进行去重
  • java反射和注解
  • 基于Spring Boot与Vue的智能房产匹配平台+文档
  • Log4j日志框架讲解(全面,详细)
  • 上帝之眼(BEVSee):多相机间无需标定,将各自目标统一到同一坐标系下(代码开源,提供数据集)
  • C++编程(五)单例模式 友元
  • 如何寻找一个领域的顶级会议,并且判断这个会议的影响力?
  • SpringBoot学习04-[定制SpringMVC]
  • 在Qt中,直接include <moc_xxxxx.cpp> 为什么不会出现符号冲突的错误?
  • UTONMOS:探索未来区块链与元宇宙的游戏奇妙融合
  • linux的常用系统维护命令
  • Linux的一些杂项函数总结
  • rabbitmq消息队列提出的问题(个人想法)
  • Apache的基本使用
  • Git的一些常用操作
  • JavaScript设计模式系列一:工厂模式
  • java第三方包学习之lombok
  • jQuery(一)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Linux快速复制或删除大量小文件
  • React Transition Group -- Transition 组件
  • React-生命周期杂记
  • Sass 快速入门教程
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • zookeeper系列(七)实战分布式命名服务
  • 高性能JavaScript阅读简记(三)
  • 聊聊redis的数据结构的应用
  • 那些年我们用过的显示性能指标
  • 配置 PM2 实现代码自动发布
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 一道闭包题引发的思考
  • 阿里云重庆大学大数据训练营落地分享
  • ​520就是要宠粉,你的心头书我买单
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #100天计划# 2013年9月29日
  • $.ajax,axios,fetch三种ajax请求的区别
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (1)Nginx简介和安装教程
  • (3) cmake编译多个cpp文件
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (正则)提取页面里的img标签
  • (转载)虚函数剖析
  • *p++,*(p++),*++p,(*p)++区别?
  • .net wcf memory gates checking failed
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • :如何用SQL脚本保存存储过程返回的结果集
  • [ Algorithm ] N次方算法 N Square 动态规划解决