《深度学习》bert自然语言处理框架

目录

一,关于bert框架

1、什么是bert

2、模型结构

        自注意力机制:

3、预训练任务

4、双向性

5、微调(Fine-tuning)

6、表现与影响

二、Transformer

1、传统RNN网络计算时存在的问题

1)串联

2)并行计算效果不好

2、统word2vec存在的问题

3、Transformer结构

1)关于Encoder-Decoder

2)编码器Encoder

3)语义编码

4)解码器Decoder

5)自注意力机制self attention

        • 如何实现自注意力机制?

6)self attention如何计算

        1、计算一段话中每个词之间的匹配程度

        2、通过匹配程度得到每个词的特征重要性。

7)多头机制multi-header

8)多层堆叠

9)三件函数位置编码

如何计算?

优点:

10)Add与Normalize

11)整体框架


一,关于bert框架

1、什么是bert

        BERT(Bidirectional Encoder Representations from Transformers)是一个基于Transformer架构的双向编码器表示模型,它通过预训练学习到了丰富的语言表示,并可以用于各种自然语言处理任务。

2、模型结构

        BERT基于Transformer的编码器部分,采用了多层自注意力机制前馈神经网络。这种结构使得BERT能够同时考虑文本中的上下文信息,从而捕捉到更加丰富的语义特征。

        自注意力机制:

                自注意力机制,是一种让模型在处理输入数据时能够自我关注捕捉序列内部元素之间关系的机制。与传统的注意力机制不同,自注意力机制不依赖于外部信息,而是直接分析序列内部的相互依赖性。它通过对序列中的每个元素计算它与其他所有元素之间的关联性,并据此生成一个加权向量,这个加权向量可以看作是该元素在当前上下文中的表示。

3、预训练任务

        BERT通过两个无监督的预测任务进行预训练,即遮蔽语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)。在MLM任务中,模型需要预测被遮蔽的词;在NSP任务中,模型需要判断两个句子是否是连续的。这两个任务使得BERT能够学习到语言的深层结构和语义信息。

4、双向性

        与之前的语言模型(如GPT)主要依赖之前或之后的上下文不同,BERT是双向的。这意味着它在预测一个词时会同时考虑该词前后的上下文,从而更准确地捕捉语义信息。

5、微调(Fine-tuning)

        在完成预训练后,BERT可以通过微调来适应各种下游任务。微调是指在特定任务的数据集上对预训练模型进行进一步的训练,以使其更好地适应该任务。BERT的灵活性使得它可以应用于多种自然语言处理任务,如文本分类、命名实体识别、问答等。

6、表现与影响

        BERT在各种自然语言处理任务中都取得了显著的成绩,刷新了多项基准测试的记录。它的成功推动了预训练语言模型的发展,为后续更多先进模型(如RoBERTa、ALBERT等)的出现奠定了基础。

二、Transformer

1、传统RNN网络计算时存在的问题

1)串联

        导致数据必须从h1-h2-…hm。数据训练时间变长,因为需要要等h1的结果出来才能计算h2,h2结果出来才能计算h3,最终一个一个计算完得到最终结果。

2)并行计算效果不好

        也就是不能多台服务器同时训练一个网络,在CNN中可以把多个卷积核放在多台电脑中训练,但是在RNN中必须从头到尾的来对模型进行训练,无法在多台电脑上进行训练

        在上图的x1、x2、x3........之前应该要有一个词嵌入层,将输入模型的词或字的转变成词向量的格式,然后再传入模型。

2、统word2vec存在的问题

        1)词向量一旦训练好了,就不会改变

        2)不同语境中的词含义不同,例如  【a、台湾人说机车。 b、机车】 因此根据上下文不同的语境,应该有多个不同的词向量。

3、Transformer结构

1)关于Encoder-Decoder

        Encoder-Decoder也就是编码-解码框架,目前大部分attention模型都是依附于Encoder-Decoder框架进行实现。

        在NLP中Encoder-Decoder框架主要被用来处理序列-序列问题,也就是输入一个序列,生成一个序列的问题,这两个序列可以分别是任意长度。

        比如:

        文本摘要:输入一篇文章(序列数据),生成文章的摘要(序列数据)

        文本翻译:输入一句或一篇英文(序列数据),生成翻译后的中文(序列数据)

        问答系统:输入一个question(序列数据),生成一个answer(序列数据)

2)编码器Encoder

        编码器,对于输入的序列<x1,x2,x3…xn>进行编码,使其转化为一个语义编码C,这个C中就储存了序列<x1,x2,x3…xn>的信息,编码方法:主要RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU,例如RNN中用h4直接作为语义编码C的值。

        或者说,编码器将输入的文本序列转换为一系列上下文感知的编码表示。编码器由多个相同的层组成,每个层包含了自注意力机制(Self-Attention)和前馈神经网络(Feed-Forward Neural Network)两个子层。在自注意力机制中,编码器可以根据上下文信息自动地关注输入序列中与当前位置有关的其他位置,从而捕捉到上下文之间的依赖关系。前馈神经网络则对自注意力机制的输出进行非线性变换和特征提取。

3)语义编码

        例如当我们翻译法语中的“Boujour”时,我们大脑是先将Bonjour所表达的概念意识提取出来,这也就是一个编码的过程。 然后提取出来的这个意识概念也就是我们的Feature Vector. 接下来我们的大脑就会基于这个意识概念,去我们大脑中的英语语言库中把与这个意识概念匹配的英文单词提取出来, 这也就是解码的过程。

4)解码器Decoder

        解码器,根据输入的语义编码C,然后将其解码成序列数据,解码方式也可以采用RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU。 Decoder和Encoder的编码解码方式可以任意组合

        或者说,解码器的任务是将编码器产生的上下文感知的编码表示转换为目标语言的文本序列。解码器也由多个相同的层组成,每个层同样包含自注意力机制和前馈神经网络两个子层。此外,解码器还包含一个额外的自注意力机制,用于在生成目标语言序列时对输入序列进行关注,从而引入了源语言和目标语言之间的关联。

5)自注意力机制self attention

        在Transformer模型中,自注意力机制(Self-Attention)是一种用来建模序列内部关系的机制。它是一种注意力机制的变体,用于在序列中捕捉不同位置之间的依赖关系,以及为每个位置提供上下文信息。

        自注意力机制将输入序列映射为三个不同的表示:查询(Query)、键(Key)和值(Value)。对于每个位置的查询,通过计算与所有位置的键的相似度得到一个权重分布,然后将该权重分布与对应位置的值进行加权求和,得到该位置的输出表示。

        一句话中,哪些是重点?如何让计算机关注到话语中的重点?

        例如下图,it指代的是animal还是street?

        • 如何实现自注意力机制?

                1、首先输入经过编码后得到的词向量

                2、构建三个矩阵,相当于cnn的卷积核, 分别为wQ、wK、wv矩阵。

                3、将每一个词向量与矩阵相乘,得到QKV矩阵。 其中查询Q:需要查询的,键K:等着被查的 ,值V:实际的特征信息

6)self attention如何计算
        1、计算一段话中每个词之间的匹配程度

                q1和k1的内积表示第1个词和第1个词的匹配程度为112

                q1和k2的内积表示第1个词和第2个词的匹配程度为96

        2、通过匹配程度得到每个词的特征重要性。

7)多头机制multi-header

        卷积神经网络种有多组卷积核,就会产生多个特征图。 同理,在transformer中有多组q、k、v就会得到多种词的特征表达。

        在Transformer模型中,多头机制(multi-head)是指将模型的自注意力机制(self-attention)分为多个头部(heads)进行并行计算。每个头部都有自己独立的一组注意力权重(attention weights),用于计算输入序列中不同位置的重要性。

        通过引入多个头部,模型可以在不同的注意力空间(attention space)中学习到不同的特征表示。每个头部可以关注输入序列中的不同位置,学习到不同的语义关系,从而提升模型的表达能力和泛化能力。

8)多层堆叠

        多层堆叠是指将多个Transformer模块按照一定顺序进行堆叠,形成一个深层的神经网络结构。每个Transformer模块都由多个子层组成,包括自注意力子层前馈神经网络子层

        多层堆叠的主要目的是增加模型的表示能力和学习能力。通过增加堆叠的层数,模型可以学习到更复杂的特征表示,并能够处理更长距离的依赖关系。每一层都可以提取不同层次的特征,从而提高模型的表达能力和泛化能力。

        在多层堆叠中,每个Transformer模块的输入是前一层的输出。每层的输入序列经过自注意力子层和前馈神经网络子层后,再进行残差连接(residual connection)和层归一化(layer normalization),最后得到该层的输出。多层堆叠中的每个模块都可以共享参数,这使得模型更加紧凑和高效。

9)三件函数位置编码

        前面的模型,并没有考虑词的顺序,只是单纯考虑一段话有哪些词。因此模型中需要加入位置编码。

        位置编码是一种用于表示输入序列中每个元素在序列中的位置信息的技术。由于Transformer模型中没有使用循环神经网络或卷积神经网络,无法通过相对位置或位置索引来直接捕捉到序列元素的位置关系。因此,位置编码被引入以提供位置信息。

        位置编码通常是通过将位置信息编码为一个与词向量维度相同的向量来实现的。在Transformer模型中,常用的位置编码方法是采用三角函数的方式,即通过正弦和余弦函数来编码序列中每个位置的位置信息。

如何计算?

        word embedding:是词向量,由每个词根据查表得到

        pos embedding:就是位置编码。

        composition:word embedding和pos embedding逐点相加得到,既包含语义信息又包含位置编码信息的最终矩阵。

公式:

        pos:指当前字符在句子中的位置(如:”你好啊”,这句话里面“你”的pos=0)

        dmodel:指的是word embedding的长度(例“民主”的word embedding为[1,2,3,4,5],则dmodel=5),

        2i表示偶数,2i+1表示奇数。取值范围:i=0,1,...,dmodel−1。偶数使用公式(1),奇数时使用公式(2)。

         当pos=3,dmodel=128Positional Encoding(或者说是pos embedding PE)的计算结果为:

优点:

        1、可以使PE分布在[-1,1]区间。

        2、不同语句相同位置的字符PE值一样(如:当pos=0时,PE=0)。

10)Add与Normalize

11)整体框架

        outputs(shifted right):指在解码器处理过程中,将之前的输出序列向右移动一位,并在最左侧添加一个新的起始符(如“<sos>”或目标序列开始的特殊token)作为新的输入。这样做的目的是让解码器在生成下一个词时,能够考虑到已经生成的词序列。

        作用:通过“shifted right”操作,解码器能够在生成每个词时,都基于之前已经生成的词序列进行推断。这样,解码器就能够逐步构建出完整的输出序列

        示例说明:假设翻译任务,输入是“我爱中国”,目标输出是“I love China”。在解码器的处理过程中: 在第一个步,解码器接收一个起始符(如“<sos>”)作为输入,并预测输出序列的第一个词“I”。 在第二个步,解码器将之前的输出“I”和起始符一起作为新的输入(即“<sos> I”),并预测下一个词“love”。 以此类推,直到解码器生成完整的输出序列“I love China”。

12)训练数据

        1、随机的将句子中的15%的词汇进行mask。让模型去预测mask的词汇。 注:一般选择字进行mask,词的可能性太多,例如今天,明天,后天,上午,下午,没有,再次等等。

        2、预测两个句子是否应该连在一起。

        CLS:分类标记(Classification Token)用于表示输入序列的开始。在输入序列中,CLS应放置在句子的开头。在训练过程中,CLS也当作一个词参与训练,得到对应与其他词汇关系的词向量。

        SEP:分隔符标记(Separator Token)用于分隔两个句子或表示单个句子的结束。在处理多个句子时SEP应放置在每个句子的结尾。在训练过程中,SEP也当作一个词参与训练,得到对应与其他词汇关系的词向量。

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

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

相关文章

开源 - Ideal库 - 常用时间转换扩展方法(一)

从事软件开发这么多年&#xff0c;平时也积累了一些方便自己快速开发的帮助类&#xff0c;一直在想着以什么方式分享出来&#xff0c;因此有了这个系列文章&#xff0c;后面我将以《开源-Ideal库》系列文章分享一些我认为比较成熟、比较方便、比较好的代码&#xff0c;如果感觉…

网络安全漏洞管理十大度量指标

前言 当前&#xff0c;网络安全漏洞所带来的风险及产生的后果&#xff0c;影响到网络空间乃至现实世界的方方面面&#xff0c;通信、金融、能源、电力、铁路、医院、水务、航空、制造业等行业各类勒索、数据泄露、供应链、钓鱼等网络安全攻击事件层出不穷。因此&#xff0c;加…

R语言*号标识显著性差异判断组间差异是否具有统计意义

前言 该R代码用于对Iris数据集进行多组比较分析&#xff0c;探讨不同鸢尾花品种在不同测量变量&#xff08;花萼和花瓣长度与宽度&#xff09;上的显著性差异。通过将数据转换为长格式&#xff0c;并利用ANOVA和Tukey检验&#xff0c;代码生成了不同品种间的显著性标记&#x…

Web前端PC端开发者工具详细介绍(约10000字保姆级讲解)

1.Elements部分 首先按下F12键即可进入开发者工具页面&#xff0c;以CSDN博客页面为例&#xff0c;如下可以看到右侧是该页面所对应的前端代码。 在Elements部分的Styles模块下可以看页面的各个类别的样式等。 &#xff08;1&#xff09;点击.cls可以开启动态修改元素的class&a…

SQL Server 日志记录

SQL Server是一个关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;旨在有效地存储、组织、检索和操作大量结构化数据。SQL Server日志是监控数据库活动、排查问题和确保数据一致性的基础&#xff0c;这些日志记录了SQL Server实例中发生的事件的时间顺序。它们充当…

Qt QCustomplot 在采集信号领域的应用

文章目录 一、常用的几种开源库:1、QCustomPlot:2、QChart:3、Qwt:QCustomplot 在采集信号领域的应用1、应用实例时域分析频谱分析2.数据筛选和处理其他参考自然界中的物理过程、传感器和传感器网络、电路和电子设备、通信系统等都是模拟信号的来源。通过可视化模拟信号,可以…

【数据结构】堆和二叉树(2)

文章目录 前言一、建堆和堆排序1.堆排序 二、二叉树链式结构的实现1.二叉树的遍历 三、链式二叉树的功能函数1.二叉树结点个数2.二叉树叶子结点个数3.二叉树的高度4.二叉树第k层结点个数5. 二叉树查找值为x的结点6.二叉树销毁 总结 前言 接着上一篇博客&#xff0c;我们继续分…

PDF多功能工具箱 PDF Shaper v14.6

如今对PDF处理的软件很多都是只是单一的功能。PDF Shaper给你完全不同的体验&#xff0c;因为PDF Shaper是一款免费的PDF工具集合的软件。有了PDF Shaper&#xff0c;你以后再也不用下载其他处理PDF的软件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…

猫用空气净化器哪个牌子好?求除毛好、噪音小的宠物空气净化器!

换毛季家里孩子不省心&#xff0c;疯狂掉落的猫毛和空气中乱飞的浮毛可把我折磨死了。每天下班都要抽出时间来清理&#xff0c;不然这个家就不能要了。猫毛靠我自己可以打扫&#xff0c;浮毛还得借助宠物空气净化器这种专业工具。所以我最近着手做功课&#xff0c;打算入手一台…

Halcon 矫正图像 图像矫正

目录 原图 矫正后的图像 ​编辑 示例代码 原图 矫正后的图像 示例代码 找ROI部分代码暂无法分享 HomMat2DInvert : []Row_T : []Col_T : []region_features (ROI, rectangularity, Value)if (Value > RectY)HomMat2DInvert : []smallest_rectangle1 (ROI, Row_T, Col…

Spring Boot 3.x 中使用 SpringDoc 2 / Swagger3(详解)

大家好&#xff0c;我是码哥&#xff0c;《Redis 高手心法》作者。 SpringBoot 已经成为 Java 开发的首选框架&#xff0c;今天码哥跟大家聊一聊 Spring Boot3 如何与 Swagger3 集成打造一个牛逼轰轰的接口文档。 为什么要用 Swagger 唐二婷&#xff1a;我最讨厌两件事&#xf…

Java中四种引用类型【快速理解】图文

一、强引用 我们正常手动new出来的对象都是强应用&#xff0c;不对他进行别的操作的时候它是不会进行垃圾回收的。除非将它的引用断开&#xff0c;此时调用垃圾回收器才会将它回收。 二、软引用 三、虚引用 虚引用的意思就是&#xff0c;引用关系是虚的&#xff0c;如果创造出…

C语言-详细讲解-洛谷P1075 [NOIP2012 普及组] 质因数分解

1.题目要求 2.题目解析 解题点在于如何分解质因数&#xff0c;这里介绍一下短除法。&#xff08;虽然解决这个问题可以不用短除法&#xff09; 3.代码实现 贴一下自己的代码 #include <stdio.h> #include <math.h>int main() {int n, i;scanf("%d",…

Kubernetes Extended Resource 扩展资源使用简介

Kubernetes 除了提供基于 CPU 和内存的传统计算资源调度外&#xff0c;还支持自定义的 Extended Resource 扩展资源&#xff0c;以便调度和管理其它各种类型的资源。 Extended Resource Extended Resource 扩展资源的创建和使用过程如下图所示&#xff1a; 定义资源&#xff…

javaweb基于springboot社区养老服务管理系统

简介&#xff1a; 系统整体设计分为三个角色&#xff0c;分别是社区员工、社区老人、社区系统管理员。在功能模块上分为三大块&#xff1a;人员管理模块、健康管理模块和活动管理模块。 人员管理模块能够对社区系统管理员信息、社区员工信息、社区老人信息进行管理。健康管理模…

鸿蒙应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&am…

Jenkins应用详解(Detailed Explanation of Jenkins Application)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

《大道平渊》· 廿肆 —— 欲望应当内敛,而非张扬。

《大道平渊》 廿肆 什么是欲望&#xff1f;哲学家德勒兹认为&#xff0c;欲望没有客体。 其本身&#xff0c;就是一种渴望维持自身的运动。 欲望是由生物的本性产生的、想达到某种目的的要求&#xff0c;无善恶之分。 . 那么欲望的本身是什么&#xff1f; 是一种情绪和思想…

支持向量机相关证明 解的稀疏性

主要涉及拉格朗日乘子法&#xff0c;对偶问题求解

ProtoBuf 快速上手

关于 ProtoBuf 的含义和安装推荐看&#xff1a;ProtoBuf 的含义和安装 步骤0&#xff1a;引⼊ ProtoBuf 包 <!-- protobuf ⽀持 Java 核⼼包 --> <dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactI…