机器学习:Bert and its family

news2024/11/28 4:43:46

在这里插入图片描述

Bert

在这里插入图片描述
先用无监督的语料去训练通用模型,然后再针对小任务进行专项训练学习。

在这里插入图片描述

  • ELMo
  • Bert
  • ERNIE
  • Grover
  • Bert&PALS

Outline

在这里插入图片描述

Pre-train Model

在这里插入图片描述

首先介绍预训练模型,预训练模型的作用是将一些token表示成一个vector

在这里插入图片描述
比如:

  • Word2vec
  • Glove

但是对于英文,有太多的英文单词,这个时候应该对单个字符进行编码:

  • FastText
    在这里插入图片描述

对于中文,可以对部首偏旁,或者把中文字当做图片送人网络中得到输出:
在这里插入图片描述
上述方法的问题不会考虑每个句子意思中相同字会有不同的意思,产生相同的token:
在这里插入图片描述
contextualized word embedding
在这里插入图片描述
类似于sequence2sequence模型的encoder一样。
在这里插入图片描述
在这里插入图片描述
同样的token,给出不一样的embedding,上述句子都有苹果两字。

  • Bigger Model在这里插入图片描述
  • Smaller Model
    在这里插入图片描述
    重点关注ALBERT,将模型变小的技术:
    在这里插入图片描述
    网络架构设计:
    在这里插入图片描述
    让模型能读很长的内容,不仅是一篇文章,有可能是一本书。
  • Transformer-XL
  • Reformer
  • Longformer

self-attention的计算复杂度是 O ( n 2 ) O(n^2) O(n2)

How to fine-tune

如何进行预训练
在这里插入图片描述
在这里插入图片描述

  • 输入:
    一个句子还是两个句子,[sep]进行分割。
    在这里插入图片描述
  • 输出部分:
    输出一个class,加入一个[cls],产生跟整个句子有关的embedding
    在这里插入图片描述
    如果没有cls,就是把所有的embedding合起来送入模型,得到一个输出。
    在这里插入图片描述
    第二种就是给每个token一个class,相当于每个embedding一个class
    在这里插入图片描述
    Extraction-based QA
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    General Sequence
    如何用在生成文本呢?
    在这里插入图片描述
    上述结构encoder得不到好的使用

在这里插入图片描述
将预训练模型当做encoder使用,每次产生一个word后,送入模型继续生成,直到产生eos结束符。

在这里插入图片描述
微调有两种方法:

  • 第一种:预训练模型不动,对其产生的embedding 针对具体任务进行训练,只对上层模型微调;
  • 第二种:预训练模型和具体任务模型联合到一起训练,消耗会大一些;
    第二种方法会比对第一种方法获得的效果要更好一点,但是训练整个模型会遇到的一些问题:
    在这里插入图片描述
  • 训练完了之后预训练模型也发生了改变,相当于每个任务都会有一个不同的预训练模型,每个模型都比较大,这样非常的浪费。

针对上述问题,解决方法:

  • Adapter:只训练少量的参数结构APT

在这里插入图片描述
在这里插入图片描述
fine-tune的时候只会调APT结构的参数,但是是插入到transformer结构中,加深了网络:
在这里插入图片描述

  • Weighted Features
    综合每一层的embedding,送到具体的任务中学习,权重参数可以学出来。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    模型的loss,泛化能力。start-point到end-point,两点间距离越宽,凹的越浅说明泛化能力越一般;两点间距离越近,凹得越深说明泛化能力越好。

How to pre-train

如何进行预训练:

在这里插入图片描述

翻译任务

  • Context Vector(Cove)
    在这里插入图片描述
    把输入的句子A送入encoder,然后decoder得到句子B,需要大量的pair对data

Self-supervised Learning

在这里插入图片描述
self-supervised的input和output是自己产生出来的。

Predict Next Token

给定输入,预测下一个token

在这里插入图片描述
有了w1预测w2,用w1, w2预测w3, 然后用w1,w2,w3预测w4, 但是不能用右边的数据用来预测左边的数据:
在这里插入图片描述
在这里插入图片描述
基础架构网络使用的是LSTM:

  • LM
  • ELMo
  • ULMFiT

后续一些算法将LSTM换成Self-attention
在这里插入图片描述

  • GPT
  • Megatron
  • Turing NLG

注意:控制Attention的范围

在这里插入图片描述
可以用来生成文章: talktotransformer.com

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
如果只考虑左边的出现关系,为什么不考虑右边文本呢?

Predict Next Token-Bidrectional

左右两边产生的context,二者联合起来作为最终表示:
在这里插入图片描述

但是问题是左边只能看到左边的,无法看到右边的结束,右边只能看到右边的,无法看到左边的开始。

Masking input

在这里插入图片描述

随机的盖住某个词,是看到了完整的句子才来预测这个词是什么。
这种思想往前推,跟以前的cbow非常像:
在这里插入图片描述
Bert与cbow的区别就是左右两边的长度可以无限,而不是有个window窗口长度。

随机mask是否够好呢?有几种mask方法:

  • wwm
  • ERNIE
  • SpanBert
  • SBO
    在这里插入图片描述
    盖住一整个句子或者盖住好几个词。或者先把Entity找出来,然后把这些词盖住:
    在这里插入图片描述
    在这里插入图片描述
    盖住的长度按照上述图的出现概率。
    在这里插入图片描述
    盖住的左右两边的embedding来预测,以及输入的index来恢复中间的哪个词。
    SBO的设计期待左右两边的token embedding能够包含左右两边的embeeding信息。

XLNet

结构不是使用的Transformer,而是使用Transformer-XL

在这里插入图片描述

随机把顺序打乱,用各式各样不同的信息训练一个token。

Bert的训练语料比较规整:
在这里插入图片描述
Bert不擅长做Generative任务,因为bert训练的时候给的是整个句子,而generative只是给一部分,然后由左得右预测下一个token
在这里插入图片描述

MASS/BART

在这里插入图片描述
要对w1,w2, w3,w4进行一些破坏,不然model学不到任何东西,破坏的方法:
在这里插入图片描述
在这里插入图片描述

  • mask(随机mask)
  • delete(直接删掉)
  • permutation(打乱)
  • rotation(改变起始位置)
  • Text Infilling (插入一个别的误导,少掉一个mask)

结果是:
在这里插入图片描述

UniLM

在这里插入图片描述
在这里插入图片描述
UniLM进行多项训练

Replace or Not

  • ELECTRA,避开了需要训练和生成的东西,判断哪个位置是否被置换,训练非常简单,另外每个输出都被用到。
    *在这里插入图片描述
    置换的词不好弄,如果是随便置换肯定很容易知道。所以有了下面的结果,用一个小的bert预测的结果作为替换的结果,小的bert效果不要太好,不然预测的结果跟真实的一样,得不到替换的效果,因为替换的结果是一模一样的。
    在这里插入图片描述
    在这里插入图片描述
    只需要四分之一的计算量,就能达到XLNet的效果。

Sentence Level

在这里插入图片描述
需要整个句子的embedding。
在这里插入图片描述

  • 使用skip thought,如果两个句子的预测结果比较像,那么两个输入句子也比较像。
  • quick thought,如果两个句子的输出是相连的,让相似的句子距离越近越好。
    上述方法避开做生成的任务。

原始的Bert其实还有一项任务NSP,预测两个句子是否是相接的还是不相接的。两个句子中间用sep符号分割。
在这里插入图片描述

  • nsp:效果表现不好
  • Roberta:效果一般
  • sop: 正向是相接,反向是不相接,被用在ALBERT
  • structBert:Alice,
    在这里插入图片描述

T5 Comparison

在这里插入图片描述
5个T就叫T5
4个C就叫C4

ERNIE

希望在train的时候加入knowledge

在这里插入图片描述
Audio Bert
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt Creator创建控制台项目显示中文乱码

今天在使用Qt Creator创建c项目的时候显示中文乱码,这里分享一下解决办法,主要是由于我们的电脑大部分是GBK编码格式的是,然后Qt默认创建的一般是utf-8编码类型的。编码类型不一致就会导致中文乱码的现象。 从控制台的属性可以看到我们的程序…

Observability:Synthetic monitoring - 动手实践

在我之前的如下文章里: Observability:Synthetic monitoring - 合成监测入门(一)(二) Observability:Synthetic monitoring - 创建浏览器监测,配置单独的浏览器监测器及项目 我详…

基于RASC的keil电子时钟制作(瑞萨RA)(3)----使用J-Link烧写程序到瑞萨芯片

基于RASC的keil电子时钟制作3_使用J-Link烧写程序到瑞萨芯片 概述硬件准备视频教程软件准备hex文件准备J-Link与瑞萨开发板进行SWD方式接线烧录 概述 这一节主要讲解如何使用J-Link对瑞萨RA芯片进行烧录。 硬件准备 首先需要准备一个开发板,这里我准备的是芯片型…

【Node.js 安装】Node.js安装与使用教程

Node.js 安装 Node.js 是什么那什么是运行时 如何安装 Node.jsNode 使用教程 Node.js 是什么 先说结论,Node.js 它是一套 JavaScript 运行环境,用来支持 JavaScript 代码的执行 JavaScript 诞生于 1995 年,几乎是和互联网同时出现&#xf…

leetcode-206.反转链表

leetcode-206.反转链表 文章目录 leetcode-206.反转链表一.题目描述二.代码提交三.易错点 一.题目描述 二.代码提交 代码 class Solution {public:ListNode *reverseList(ListNode *head) {ListNode *temp; // 保存cur的下一个节点ListNode *cur head;ListNode *pre nullptr…

scikit-learn集成学习代码批注及相关练习

一、代码批注 代码来自:https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_twoclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-twoclass-py import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import …

【stable diffusion】保姆级入门课程02-Stable diffusion(SD)图生图-基础图生图用法

目录 学前视频 0.本章素材 1.图生图是什么 2.图生图能做什么 3.如何使用图生图 4.功能区域 4.1.提示词区域 4.2.图片提示词反推区域 1.CLIP反推 2.DeepBooru 反推 4.3.图片上传区域 4.4.结果图区域 4.5.缩放模式 4.6.重绘幅度 7.结语 8.课后训练 学前视频 …

【Ranking】50 Matplotlib Visualizations, Python实现,源码可复现

详情请参考博客: Top 50 matplotlib Visualizations 因编译更新问题,本文将稍作更改,以便能够顺利运行。 1 Ordered Bar Chart 有序条形图有效地传达项目的排名顺序。但是,将图表上方的指标值相加,用户将从图表本身获得准确的信息…

制造业想要数字化转型应该从哪方面入手?

制造业可以通过关注以下几个关键领域来开启数字化转型之旅: 数据收集和分析:实施系统收集和分析来自各种来源(例如机器、传感器和生产过程)的数据至关重要。这些数据可以提供有关运营效率、质量控制和预测性维护的见解。 物联网&…

Flask Bootstrap 导航条

(43条消息) Flask 导航栏,模版渲染多页面_U盘失踪了的博客-CSDN博客 (43条消息) 学习记录:Bootstrap 导航条示例_bootstrap导航栏案例_U盘失踪了的博客-CSDN博客 1,引用Bootstrap css样式,导航栏页面跳转 2,页面两列…

【冒泡排序】模仿qsort的功能实现一个通用的冒泡排序

文章目录 前言曾经学的冒泡排序存在着一些局限性首先第一步:写一个main()函数,分装一个test1函数test1函数 用来描写类型的性状 在test1创建了bubble_int 函数,下一步就是实现它,分两步走步骤一:写函数参数步骤二&…

Matlab论文插图绘制模板第107期—标签散点图

在之前的文章中,分享了Matlab散点图绘制模板: 进一步,再来分享一种特殊的散点图:标签散点图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中,大家总是奔波于家和公司之间。大部分时间用于工作中,也就很难及时知晓家中的动态情况,对于家中有老人、小孩或宠物的(甚至对居住环境安全不放心的),这已然是…

ubuntu下tmux安装

目录 0. 前言1. Tmux介绍2. 安装3. 验证安装 0. 前言 本节安装tmux终端复用工具,在Ubuntu中运行一些服务或脚本的时候往往不能退出终端,需要一直挂着。在有图形界面的linux中你还可以新开一个终端去做别的事,但是在无界面linux中&#xff0c…

re学习(22)伪造CTF(谜之操作)

思维导图:找flag关键之处 1.字符串 (flag, sorry) 2.导入函数:(Import _scanf ) 其他函数(敏感函数) createfileA:将flag放在一个文件中 Createprocess&am…

基于HCL的​​​​​​​网络规划与部署综合实训报告

0、前言 本次实验是对之前有关网络规划与综合部署的综合实验,适合入门的同学们进行学习,该实验选择了使用华三模拟器进行,希望能够帮助大家了解相关的指令。 一、实训目的及意义 ① 掌握网络规划和设计的基本流程 从需求分析开始做起&#x…

4-2 3D images: Volumetric data Representing tabular data

本文所用到的资料下载地址 By stacking individual 2D slices into a 3D tensor, we can build volumetric data representing the 3D anatomy of a subject. We just have an extra dimension, depth, after the channel dimension, leading to a 5D tensor of shape N C D…

【MySQL进阶(三)】 InnoDB体系架构之内存池(buffer pool)

InnoDB体系架构之内存池 一、InnoDB 体系结构二、缓冲池 buffer pool内部结构free 链(管理空闲缓冲页)怎么知道数据页是否被缓存? flush 链表(管理脏页)1. 脏页2. 链表结构3. 刷盘时机 LRU 链表(控制数据热…

blender 纹理材质

添加材质纹理需要哪五个节点? 映射节点:调整纹理的位置、大小、缩放; 纹理坐标:怎么映射,以什么方式去映射这张图,换句话说就是如何将 2D 的图片映射到 3D 的图像上;纹理坐标就是以什么坐标方式…

【学会动态规划】下降路径最小和(8)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…