【NLP】1、BERT | 双向 transformer 预训练语言模型

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法

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

出处:Google

一、背景

在 BERT 之前的语言模型如 GPT 都是单向的模型,但 BERT 认为虽然单向(从左到右预测)预测任务符合语言模型的建模过程,但对一些语言理解任务不太友好,因为要理解一句话说的是什么意思的话(如 VQA), 同时看到一整句话也是可以的,是符合逻辑的,而不是只能一个单词一个单词的来逐个看。

所以 BERT 打破了语言模型单向的限制,做了一个双向的模型,就是做完形填空的时候运行看左边也运行看右边,而且是受 Cloze (1953年的论文)这个方法的启发

具体的做法就是每次随机选一些 token 然后 mask 掉这些信息,目标是预测这些 token,这样就允许训了一个双向且深的 transformer 模型结构

此外,BERT 还做了一个任务——下一个句子的预测(next sentence prediction),就是给模型两个句子,让模型判断这两个句子在原文中是不是相邻的,能让模型学习句子层面的信息

二、方法

BERT 的两个步骤:

  • 预训练:使用无标注的数据训练的预训练模型(左边)
    • mask model:输入的是句子对儿,会把句子先进行拆词,并在序列首位放置 [CLS] 在句子中间放置 [SPE] 这两个特殊的 token,然后对普通的 token(除过特殊 token 之外的从句子中拆出来的 token)进行 15% 概率的擦除,然后在这 15% 的 token 中选择 80% 的直接用 [MASK] 替换掉这个 token,10%的随机放置 token,10% 不改变 token。
    • next sentence prediction:预测下一个句子,在 VQA 和 语言推理中都是句子对,所以使用这种方法对这两个任务类似的理解的任务有提升。输入的数据中有 50% 真的是下一个句子,50% 是随机拿来的句子。
  • 微调:针对不同的下游任务,还会使用有标签的数据来微调,使用预训练模型参数初始化,所有权重都会参与训练(右边)

模型超参数:base 共 110M 参数(也就是 1.1亿)对标的是 GPT 模型大小,large 共 340M 参数(也就是 3.4亿)

  • transformer block 个数:base 12 层,large 24 层
  • hidden 层大小:base 768,large 1024
  • 多头注意力机制 head 的个数:base 12 头,large 16 头
    在这里插入图片描述

输入和输出:

  • 输入是一个序列,可以是一个句子,也可以是两个句子,两个句子也会并成一个序列
  • 序列的构成方式:使用的切词方法是 WordPiece,因为如果按照空格切词的话会导致词典很大,WordPiece 是说如果一个词出现频率不高的话,那么就切开看它的子序列,子序列出现多的话保留子序列就可,可以使用 30000 token vocabulary 就能表示一个大的文本了。切好词之后就要把两个句子整合成一个序列,序列的第一个词用于都是 [CLS],bert 希望这个 token 表示整个序列的特征。还有一个 [SEP] token 表示将两个句子在这里切开,因为毕竟每个句子还是独立的个体,所以要有标志将其切开。在图 1 左侧就展示了,将句子切成 token,然后将求每个 token 的 embedding,
  • 每个 token 还要加 位置的 embedding 和 segment embedding,如图 2 所示

在这里插入图片描述

  • BERT 的每个 token 的输入是由三个部分相加得到的
  • token embedding:就是输入 transformer 之前的一次简单 embedding
  • segment embedding:表示第一句话还是第二句话
  • position embedding:token 在序列中的位置

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PowerJob的启动及使用

首先,本文中提到的server就是指powerjob-server模块(也就是powerJob的重点之一的调度服务) 一、初始化项目 1. PowerJob的下载 官方文档 2. 导入到IDEA中,下载依赖后,打开powerjob-server模块的a…

nvm安装使用教程

文章目录 下载配置安装最新稳定版 node安装指定版本查看版本切换版本删除版本 常见问题安装node后 显示拒绝访问的问题使用cnpm会报错的问题降低cnpm版本npm镜像 下载 NVM for Windows 下载地址:https://link.juejin.cn/?targethttps%3A%2F%2Fgithub.com%2Fcoreyb…

【云计算】Docker特别版——前端一篇学会

docker学习 文章目录 一、下载安装docker(一)Windows桌面应用安装(二)Linux命令安装 二、windows注册登录docker三、Docker的常规操作(一)、基本的 Docker 命令(二)、镜像操作(三)、容器的配置(四)、登录远程仓库 四、镜像管理(一…

SQL 数据库

安装配置 【1】 MySQL安装配置教程(超级详细、保姆级) 【2】 MySQLNavicat安装配置教程(超级详细、保姆级) 学习资料 【戴师兄】SQL入门免费教程 刷题链接:https://share.mubu.com/doc/4BHMMbbvIMb 学习笔记&#xf…

C语言入门 Day_9 条件判断

目录 前言: 1.if判断 2.else判断 3.易错点 4.思维导图 前言: 我们知道比较运算和逻辑运算都会得到一个布尔型的数据,要么为真(true),要么为假(false)。 今天我们来学习真和假在…

什么是软件压力测试?软件压力测试工具和流程有哪些?

软件压力测试 一、含义:软件压力测试是一种测试应用程序性能的方法,通过模拟大量用户并发访问,测试应用程序在压力情况下的表现和响应能力。软件压力测试的目的是发现系统潜在的问题,如内存泄漏、线程锁、资源泄漏等,…

无涯教程-PHP - preg_replace()函数

preg_replace() - 语法 mixed preg_replace (mixed pattern, mixed replacement, mixed string [, int limit [, int &$count]] ); preg_replace()函数的操作与POSIX函数ereg_replace()相同,不同之处在于可以在模式和替换输入参数中使用正则表达式。 可选的输…

IDEA项目实践——VUE介绍与案例分析

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring集成mybatis、spring当中的事务 IDEA项目实践——Spring当中的切面AOP IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——Spring框架简介,以及IOC注解 I…

完成出版工作

书籍完成出版,正式上线售卖。若有需要,可在淘宝,当当,京东这些平台上都可以搜索到,书名是《多智能体机器人系统控制及其应用》,提前感谢,封面如下。 至于本专栏,留作大家讨论和书籍…

怎么维护自己的电脑

文章目录 我的电脑日常维护措施维护技巧键盘&屏幕清洁清理磁盘空间控制温度 电脑换电池 无论是学习还是工作,电脑都是IT人必不可少的重要武器,一台好电脑除了自身配置要经得起考验,后期主人对它的维护也是决定它寿命的重要因素&#xff0…

学习笔记|课后练习解答|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(下):课后练习分析与解答

文章目录 课后练习解答需求分解增加KEY3控制代码如下: 第一版代码问题分析Tips:STC-ISP的设置 Tips:定时器实现完整电磁炉显示功能的代码测试流程 总结 课后练习解答 增加按键3,按下后表示启动,选择的对应的功能的LED…

Rust之自动化测试(一):如何编写测试

开发环境 Windows 10Rust 1.71.1 VS Code 1.81.1 项目工程 这里继续沿用上次工程rust-demo 编写自动化测试 Edsger W. Dijkstra在他1972年的文章《谦逊的程序员》中说,“程序测试可以是一种非常有效的方法来显示错误的存在,但它对于显示它们的不存在…

.NET 8 Preview 7 中的 ASP.NET Core 更新

作者:Daniel Roth 排版:Alan Wang .NET 8 Preview 7 现在已经发布,其中包括了对 ASP.NET Core 的许多重要更新。 以下是预览版本中新增功能的摘要: 服务器和中间件 防伪中间件 API 编写 最小 API 的防伪集成 Native AOT 请求委托…

2023国赛数学建模A题思路模型代码汇总 高教社杯

本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

mybatis讲解(2)之动态SQL的运用

目录 经典面试题: 1.mybatis动态sql 2.模糊查询(3种方式) 3.查询返回结果集 总结: 前言:在我上篇已经学习了Mybatis简介以及如何去连接数据库,具有增删改查的方法。那么我们今天来学习Mybatis的第二节关…

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介

📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。 💐学习建议:1、养成习惯,学习java的任何一个技术…

GitLab与GitLab Runner安装(RPM与Docker方式),CI/CD初体验

背景 GitLab 是一个强大的版本控制系统和协作平台,记录一下在实际工作中关于 GitLab 的安装使用记录。 一开始使用 GitLab 时,是在 CentOS7 上直接以 rpm 包的方式进行安装,仅作为代码托管工具来使用,版本: 14.10.4 …

人机界面通过RJ45口无线连接多台PLC

人机界面是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。人机界面产品由硬件和软件两部分组成,硬件部分包括处理器、显示单元、输入单元、通讯接口、数据存贮单元等,HMI软件一般分为两部分&am…

React+Typescript 父子组件事件传值

好 之前我们将 state 状态管理简单过了一下 那么 本文 我们来研究一下事假处理 点击事件上文中我们已经用过了 这里 我们就不去讲了 主要来说说 父子之间的事件 我们直接来编写一个小dom 我们父组件 编写代码如下 import Hello from "./components/hello";functio…

opencv-dnn

# utils_words.txt 标签文件 import osimage_types (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")def list_images(basePath, containsNone):# return the set of files that are validreturn list_file…