Bert框架详解(上)

devtools/2024/11/8 9:15:04/

目录

一、传统的自然语言处理框架存在的问题

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

2、传统word2vec存在的问题

二、Bert模型机制

1、编码-解码框架(Encoder-Decoder)

(1)、编码器(Encoder)

(2)、解码器(Decoder)

2、自注意力机制(self attention)

(1)、注意力机制

(2)、自注意力机制

 3、多头机制(multi-headed)

4、三角函数位置编码


一、传统的自然语言处理框架存在的问题

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

(1)、串联,导致数据必须从h1-h2-…hm。数据训练时间变长,因为需要要等h1的结果出来才能计算h2;

(2)、并行计算效果不好,也就是不能多台服务器同时训练一个网络。

2、传统word2vec存在的问题

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

(2)、不同语境中的词含义不同,例如  【a、你真不是东西。 b、东西】 因此根据上下文不同的语境,应该有多个不同的词向量。 

 Bert模型的编码-解码框架就能解决上述问题

二、Bert模型机制

Encoder-Decoder:也就是编码-解码框架,目前大部分attention模型都是依附于Encoder-Decoder框架进行实现。 在NLP中Encoder-Decoder框架主要被用来处理序列-序列问题。也就是输入一个序列,生成一个序列的问题。这两个序列可以分别是任意长度。

比如:

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

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

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

1、编码-解码框架(Encoder-Decoder)

(1)、编码器(Encoder)

 Encoder:编码器,对于输入的序列<x1,x2,x3…xn>进行编码,使其转化为一个语义编码C,这个C中就储存了序列<x1,x2,x3…xn>的信息。

编码方法:主要RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU,例如RNN中用h4直接作为语义编码C的值。

(2)、解码器(Decoder)

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

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

2、自注意力机制(self attention)

(1)、注意力机制

注意力机制其实是源自于人对于外部信息的处理能力。人在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。

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

(2)、自注意力机制

自注意力机制是注意力机制的变体,是输入语句内部元素之间或者输出语句内部元素之间发生的注意力机制。

如何实现slef attention呢?

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

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

<3>、将每一个词向量与矩阵相乘。得到QKV矩阵。

其中

Q:为需要查询的

K:为等着被查的

V:实际的特征信息

slef attention如何计算? 

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

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

 

每个词的Q会跟整个序列中的每一个K计算得分,然后基于得分再分配特征。

 

因此当和不同的词组合成序列,就会得到不同的特征值。因为不同的组合序列语句,注意力不同。

 

以上步骤,可通过并行计算,大大提高了计算速度。 

 3、多头机制(multi-headed)

multi-header(多头)机制:

(1)、通过不同的head得到多个特征表达,一般8个head

(2)、将所有特征拼接在一起

(3)、降维,将Z0~Z7连接一个FC全连接实现降维

将此类结构多层堆叠,就形成了多层网络

 

4、三角函数位置编码

前面的模型,并没有考虑词的顺序,只是单纯考虑一段话有哪些词。因此模型中需要加入位置编码bert模型运用了一种三角函数位置编码。

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=128时Positional Encoding(或者说是pos embedding)的计算结果为: 优点:

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

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

 

 


http://www.ppmy.cn/devtools/132268.html

相关文章

Java项目实战II基于Spring Boot的便利店信息管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的…

【Rust设计模式之建造者模式】

Rust设计模式之建造者模式 什么是建造者模式 什么是建造者模式 即将结构体属性方法与构建解离&#xff0c;使用专门的builder进行建造&#xff0c;说白了就是new和其他的方法分开&#xff0c;集中处理更方便。 直接上代码&#xff1a; #[derive(Debug)] struct children {nam…

设计模式-责任链

以下是根据文章内容生成的Java责任链设计模式的代码示例&#xff0c;包含两种不同的使用场景&#xff1a; 场景一&#xff1a;请求过滤 抽象处理器 package com.design.mode.responsibilityChain.responsibility01; public interface MyFilter {boolean doFilter(MyRequest …

LabVIEW实验室液压制动系统

压制动系统是许多实验设备的重要安全组件&#xff0c;尤其在高负荷、高速实验环境下&#xff0c;制动系统的性能对设备和操作人员的安全至关重要。传统的实验室液压制动系统监测方法存在数据采集实时性差、精度低、故障预警不及时等问题。为了提高实验安全性和设备运行的稳定性…

深入理解 C/C++ 中的不完整类型(Incomplete Type)

在 C/C 编程中&#xff0c;我们有时会遇到 “不完整类型”&#xff08;Incomplete Type&#xff09;的概念&#xff0c;尤其是在跨 C 和 C 代码之间进行集成开发时。不完整类型是编译器中的一种特殊概念&#xff0c;用于提高封装性和减少代码耦合。在这篇博客中&#xff0c;我将…

【LwIP源码学习4】主线程tcpip_thread

前言 本文对lwip的主要线程tcpip_thread进行分析。 正文 tcpip_thread是lwip最主要的线程&#xff0c;其创建在tcpip_init函数中 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);tcpip_init函数被TCPIP_Init函数调用。…

SQL用一个字段查询出数据的交集

出个SQL查询的题吧&#xff0c;有兴趣的可以看看 1、问题 下面有一份数据&#xff08;图1&#xff09;&#xff0c;由两部分组成&#xff1a;分析数据和基准数据 分析数据标识列为1&#xff0c;基准数据标识列为1&#xff0c;两字段0,1互斥 要求&#xff1a;按找出两部分数据…

qt QItemSelectionModel详解

1、概述 QItemSelectionModel是Qt框架中提供的一个功能强大且灵活的项选择模型类。它主要用于在用户界面中管理和操作用户选定的项&#xff0c;是实现交互式和响应式应用程序的重要组件。QItemSelectionModel能够帮助开发者创建用户友好和高效的多选列表、表格数据选择等应用场…