NLP 八股 DAY1:BERT

BERT全称:Pre-training of deep bidirectional transformers for language understanding,即深度双向Transformer。

模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹络,可以完成NLP的下游任务,⽐如⽂本分类、机器 翻译等。Masked LM和Next Sentence Prediction。 

只使⽤了transformer的encoder部分,它的整体框架是由多层transformer的encoder堆叠⽽成的。 每⼀层的encoder则是由⼀层muti-head-attention和⼀层feed-forword组成,⼤的模型有24层, 每层16个attention heads,⼩的模型12层,每层12个attention heads。feed-forward的维度是4 * d_model也就是4 * 768 = 3072。 

在BERT中,输⼊的向量是由三种不同的embedding求和⽽成,分别是: a. wordpiece embedding:词嵌⼊,WordPiece是指将单词划分成⼀组有限的公共⼦词单元,能在单词的有效性和字符的灵活性之间取得⼀个折中的平衡; b. position embedding:不是三⻆函数⽽是⼀个跟着训练学出来的向量,也就是nn.Embedding; c. segment embedding:⽤于区分两个句⼦的向量表示。这个在问答等⾮对称句⼦中是⽤区别的。

BERT常⻅⾯试问题:bert的具体⽹络结构,以及训练过程,bert为什么⽕,它在什么的基础上改进 了些什么?

答:bert是⽤了transformer的encoder侧的⽹络,作为⼀个⽂本编码器,使⽤⼤规模数据进⾏预训练,预训练使⽤两个loss,⼀个是mask LM,遮蔽掉源端的⼀些字,然后根据上下⽂去预测这些字;⼀个是next sentence,判断两个句⼦是否在⽂章中互为上下句,然后使⽤了⼤规模的语料去预训练。在它之前是GPT,GPT是⼀个单向语⾔模型的预训练过程(它和gpt的区别就是bert为啥叫双向bi-directional),更适⽤于⽂本⽣成。

mask的具体做法:Masked LM 即掩码语⾔模型,它和⼀般的语⾔模型如N元语⾔模型不同。 a. N元语⾔模型第 i 个字的概率和它前 i-1 个字有关,也就是要预测第 i 个字,那么模型就得先从头到尾依次预测出第1个到第 i-1 个字,再来预测第 i 个字;这样的模型⼀般称为⾃回归模型 (Autoregressive LM)。 b. ⽽Masked LM 通过随机将句⼦中的某些字MASK掉,然后通过该MASK掉的字的上下⽂来预测 该字,我们称这样的语⾔模型为⾃编码语⾔模型(Autoencoder LM)。Bert 的 MASK 机制是 这样的:它以token为单位随机选择句⼦中 15%的 token,然后将其中 80% 的 token 使⽤ [MASK] 符号进⾏替换,将 10% 使⽤随机的其他 token 进⾏替换,剩下的10%保持不变。 

更细节的阐述:在⼀个句⼦中,随机选中⼀定百分⽐(实际是15%)的token,将这些token⽤" [MASK]"替换。然后⽤分类模型预测"[MASK]"实际上是什么词。作者发现,在pre-training阶段, ⼀句话中有15%的token被选中,然后将这些token⽤"[MASK]"替换。⽽在fine-tuning阶段,给 BERT模型的输⼊并没有token被"[MASK]"替换。为了减少pre-training与fine-tuning阶段的差异, 在pre-training阶段,对MLM任务进⾏改进:在被选中的15%的token中,有80%被替换为" [MASK]",有10%被替换为⼀个随机token,有10%保持不变。如下所示: 

具体怎么做分类:输⼊[CLS]我 mask 中 mask 天 安 ⻔[SEP],预测句⼦的mask,多分类问题。

NSP任务:下⼀个句⼦预测,⽤于判断两个句⼦是否互为上下⽂。输⼊[CLS]a[SEP]b[SEP],预测b 是否为a的下⼀句,即⼆分类问题。 

具体实现:因为与⽂本中已有的其它词相⽐,CLS这个⽆明显语义信息的符号会更“公平”地融合⽂ 本中各个词的语义信息,从⽽更好的表示整句话的语义。

11. BERT和transformer

a. 相同点:

  • ⅰ. 基础架构相同,BERT使⽤Transformer作为编码器;
  • ⅱ. 都使⽤了位置编码;
  • ⅲ. 都是多层堆叠的层级结构。

b. 不同点:

  • ⅰ. 训练⽅式不同,Transformer在训练时,输⼊序列从左到右进⾏处理,逐步⽣成输出。这意 味着在⽣成每个位置的隐藏表示时,只能依赖于已经⽣成的左侧部分;BERT: 使⽤了双 向(双向上下⽂)的训练⽅式。它通过遮蔽输⼊⽂本中的⼀些词,然后预测这些词的上下 ⽂,从⽽使模型能够考虑到每个词的上下⽂信息。
  • ⅱ. 此外还有输出层的差异:Transformer通常在输出层使⽤Softmax函数进⾏概率分布的计 算,适⽤于分类任务,BERT常⽤于⽣成上下⽂相关的词嵌⼊,⽽不是直接在输出层进⾏分 类。

BERT采⽤LayerNorm结构,和BatchNorm的区别主要是做规范化的维度不同

  • a. BatchNorm针对⼀个batch⾥⾯的数据进⾏规范化,针对单个神经元进⾏,⽐如batch⾥⾯有64 个样本,那么规范化输⼊的这64个样本各⾃经过这个神经元后的值(64维)。图像领域⽤BN⽐ 较多的原因是因为每⼀个卷积核的参数在不同位置的神经元当中是共享的,因此也应该被⼀起规范化。
  • b. LayerNorm则是针对单个样本,不依赖于其他数据,常被⽤于⼩mini-batch场景、动态⽹络场 景和 RNN,特别是⾃然语⾔处理领域,就BERT来说就是对每层输出的隐层向量(768维)做规范化。 

Attention时为啥要除以根号下dk:作者在论⽂中的解释是点积后的结果⼤⼩是跟维度成正⽐的,所以经过softmax以后,梯度就会变很⼩,除以根号下dk后可以让attention的权重分布⽅差为1,⽽不是dk。 

NLP中构造词表

  • a. 传统构造词表的⽅法,是先对各个句⼦进⾏分词,然后再统计并选出频数最⾼的前N个词组成词表。 
  • b. 存在问题: ⅰ. 模型预测的词汇是开放的,对于未在词表中出现的词(Out Of Vocabulary, OOV),模型将 ⽆法处理及⽣成; ⅱ. 词表中的低频词/稀疏词在模型训练过程中⽆法得到充分训练,进⽽模型不能充分理解这些 词的语义; ⅲ. ⼀个单词因为不同的形态会产⽣不同的词,但是在词表中这些词会被当作不同的词处理, ⼀⽅⾯增加了训练冗余,另⼀⽅⾯也造成了⼤词汇量问题。 

上述问题的⼀种解决思路是使⽤字符粒度来表示词表,虽然能够解决OOV问题,但单词被拆分成字 符后,⼀⽅⾯丢失了词的语义信息,另⼀⽅⾯,模型输⼊会变得很⻓,这使得模型的训练更加复杂 难以收敛。针对上述问题,Subword(⼦词)模型⽅法被提出。它的划分粒度介于词与字符之间,⽐如 可以将”looking”划分为”look”和”ing”两个⼦词,⽽划分出来的"look",”ing”⼜能够⽤来构造其它 词,如"look"和"ed"⼦词可组成单词"looked",因⽽Subword⽅法能够⼤⼤降低词典的⼤⼩,同时对 相近词能更好地处理。 

⽬前有三种主流的Subword算法,它们分别是:Byte Pair Encoding (BPE), WordPiece和Unigram Language Model。 

理解BERT中的三部分输⼊:(1)wordpiece embedding:词嵌⼊,使⽤wordpiece⽅法对语料进 ⾏分词并编码;(2)position embedding:不是三⻆函数⽽是⼀个跟着训练学出来的向量,也就是 nn.Embedding;(3)segment embedding⽤于处理句⼦对任务,对输⼊序列中的每个单词标记其 所属句⼦,通常使⽤ 0 和 1 表示两个句⼦,然后通过嵌⼊层将每个句⼦标记转换为⼀个向量表示。 

当⼀个batch的数据输⼊模型的时候,⼤⼩为(batch_size, max_len, embedding),其中batch_size 为batch的批数,max_len为每⼀批数据的序列最⼤⻓度,embedding则为每⼀个单词或者字的 embedding维度⼤⼩。⽽Batch Normalization是在batch间选择同⼀个位置的值做归⼀化,相当于 是对batch⾥相同位置的字或者单词embedding做归⼀化,Layer Normalization是在⼀个Batch⾥⾯ 的每⼀⾏做normalization,相当于是对每句话的embedding做归⼀化。显然,LN更加符合处理⽂本 的直觉。 

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

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

相关文章

Flutter_学习记录_动画的简单了解

用AnimationController简单实现如下的效果图&#xff1a; 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…

sql sqlserver的特殊函数COALESCE和PIVOT的用法分析

一、COALESCE是一个返回参数中第一个非NULL值的函数&#xff0c; 列如&#xff1a;COALESCE&#xff08;a,b,c,d,e&#xff09;;可以按照顺序取abcde&#xff0c;中的第一个非空数据&#xff0c;abcde可以是表达式 用case when 加ISNULL也可以实现&#xff0c;但是写法复杂了…

类与对象C++详解(上)

目录 1.类的定义 1.1 类定义格式 补充: struct与class的区别&#xff08;c语言与c&#xff09; 1.2 访问限定符 1.3 类域 2.实例化 3.对象大小 4.this指针 1.类的定义 1.1 类定义格式 class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&…

LabVIEW 天然气水合物电声联合探测

天然气水合物被认为是潜在的清洁能源&#xff0c;其储量丰富&#xff0c;预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性&#xff0c;天然气水合物的探测面临诸多挑战&#xff0c;涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…

神经网络常见激活函数 9-CELU函数

文章目录 CELU函数导函数函数和导函数图像优缺点pytorch中的CELU函数tensorflow 中的CELU函数 CELU 连续可微指数线性单元&#xff1a;CELU&#xff08;Continuously Differentiable Exponential Linear Unit&#xff09;,是一种连续可导的激活函数&#xff0c;结合了 ELU 和 …

《安富莱嵌入式周报》第350期:Google开源Pebble智能手表,开源模块化机器人平台,开源万用表,支持10GHz HRTIM的单片机,开源CNC控制器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1YPKEeyEeM/ 《安富莱嵌入式周报》第350期&#xff1a;Google开…

小米平板怎么和电脑共享屏幕

最近尝试使用小米平板和电脑屏幕分屏互联 发现是需要做特殊处理的&#xff0c;需要下载一款电脑安装包&#xff1a;小米妙享 关于这个安装包&#xff0c;想吐槽的是&#xff1a; 没有找到官网渠道&#xff0c;是通过其他网络方式查到下载的 不附录链接&#xff0c;原因是因为地…

(学习总结23)Linux 目录、通配符、重定向、管道、shell、权限与粘滞位

Linux 目录、通配符、重定向、管道、shell、权限与粘滞位 Linux 目录通配符重定向管道shell 介绍Linux 权限Linux 权限的概念用户切换命令 su Linux权限管理文件访问者的分类&#xff1a;常用文件类型与其标识符&#xff1a;文件基本权限和权限值的表示方法&#xff1a;更改文件…

深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器

作为一位个人开发者兼产品经理&#xff0c;我的工作日常紧密围绕着云资源的运维和管理。在这个过程中&#xff0c;操作系统扮演了至关重要的角色&#xff0c;而操作系统控制台则成为了我们进行系统管理的得力助手。本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功…

Android10 音频参数导出合并

A10 设备录音时底噪过大&#xff0c;让音频同事校准了下&#xff0c;然后把校准好的参数需要导出来&#xff0c;集成到项目中&#xff0c;然后出包&#xff0c;导出方式在此记录 设备安装debug系统版本调试好后&#xff0c; adb root adb remount adb shell 进入设备目录 导…

dnslog+sqlmap外带数据

目录 爆库 爆表 爆列 爆数据 sqlmapDNSlog 外带参数 –dns-domain参数注入 –dns-domain参数为dnslog平台的域名&#xff08;我们也可以使用本地&#xff09; 爆库 python sqlmap.py -u "http://127.0.0.1/sqli/less-8/index.php/?id1" -techniqueB -dns-dom…

sql注入中information_schema被过滤的问题

目录 一、information_schema库的作用 二、获得表名 2.1 sys.schema_auto_increment_columns 2.2 schema_table_statistics 三、获得列名 join … using … order by盲注 子查询 在进行sql注入时&#xff0c;我们经常会使用information_schema来进行爆数据库名、表名、…

Flutter 常见布局模型

Flutter的常见的布局模型有容器&#xff08;Container&#xff09;、弹性盒子布局&#xff08;Flex、Row、Column、Expanded&#xff09;、流式布局&#xff08;Wrap、Flow&#xff09;、层叠布局&#xff08;Stack、Position&#xff09;、滚动布局&#xff08;ListView、Grid…

深度学习框架探秘|TensorFlow:AI 世界的万能钥匙

在人工智能&#xff08;AI&#xff09;蓬勃发展的时代&#xff0c;各种强大的工具和框架如雨后春笋般涌现&#xff0c;而 TensorFlow 无疑是其中最耀眼的明星之一。它不仅被广泛应用于学术界的前沿研究&#xff0c;更是工业界实现 AI 落地的关键技术。今天&#xff0c;就让我们…

TypeScript 与后端开发Node.js

文章目录 一、搭建 TypeScript Node.js 项目 &#xff08;一&#xff09;初始化项目并安装相关依赖 1、创建项目目录并初始化2、安装必要的依赖包 &#xff08;二&#xff09;配置 TypeScript 编译选项&#xff08;如模块解析方式适合后端&#xff09; 二、编写服务器代码 &a…

DDD该怎么去落地实现(3)通用的仓库和工厂

通用的仓库和工厂 我有一个梦&#xff0c;就是希望DDD能够成为今后软件研发的主流&#xff0c;越来越多研发团队都转型DDD&#xff0c;采用DDD的设计思想和方法&#xff0c;设计开发软件系统。这个梦想在不久的将来是有可能达成的&#xff0c;因为DDD是软件复杂性的解决之道&a…

国家队出手!DeepSeek上线国家超算互联网平台!

目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下&#xff0c;企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构&#xff0c;通过统一的内容资源池与智能化管理工具&#xff0c;重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒&#xff0c;…

算法1-1 玩具谜题

题目描述 小南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈&#xff0c;它们有的面朝圈内&#xff0c;有的面朝圈外。如下图&#xff1a; 这时 singer 告诉小南一个谜题&…