BERT模型入门(2)BERT的工作原理

news/2024/12/21 16:48:24/

文章目录


如名称所示,BERT(来自Transformer的双向编码器表示)是基于Transformer模型。我们可以将BERT视为只有编码器部分的Transformer。

在上一个主题《Transformer入门》中,我们了解到将句子作为输入喂给Transformer的编码器,它会返回句子中每个单词的表示作为输出。这正是BERT的本质——来自Transformer的编码器表示(Encoder
Representation from Transformer)。那么,“双向”这个词又是什么意思呢?

在 “Bidirectional Encoder Representation from Transformers” (BERT) 中的 “Bidirectional” 这个词,指的是模型在处理文本数据时能够同时考虑文本中的前后上下文信息。

以下是对 “Bidirectional” 的具体解释:

(1)传统单向语言模型:在 BERT 之前,常见的语言模型如 LSTM 或 GRU,通常是单向的。这意味着它们要么从左到右(正向)读取文本信息,要么从右到左(反向)读取。这样,每个词的表示只包含了它在一个方向上的上下文信息。

(2)双向性:而 “Bidirectional” 意味着模型在处理一个词时,能够同时考虑这个词左边和右边的上下文。这样,每个词的表示都能融合来自两个方向的信息,从而更加全面地理解词义和上下文。

在 BERT 模型中,“Bidirectional” 的实现方式如下:

(1)**Masked Language Model (MLM) **:在训练过程中,随机地遮盖(mask)输入序列中的一些词,然后要求模型预测这些被遮盖的词。由于模型不知道哪些词会被遮盖,因此它必须考虑所有词在两个方向上的上下文。

(2)**Next Sentence Prediction (NSP) **:在训练时,模型还会接收成对的句子作为输入,并学习预测第二个句子是否是第一个句子的后续。这进一步增强了模型对上下文的理解。

通过这种方式,BERT 成为了一个真正意义上的双向模型,它能够捕获文本中的复杂依赖关系,并在各种自然语言处理任务中取得了显著的性能提升。

Transformer的编码器本质上是双向的,因为它可以双向读取句子。因此,BERT基本上是从Transformer获得的双向编码器表示(the Bidirectional Encoder Representation obtained from the Transformer)。

让我们通过一个例子来理解BERT是如何作为Transformer的双向编码器表示的。让我们使用上一节中看到的同一个句子。

假设我们有句子A:He got bit by Python。现在,我们将这个句子作为输入喂给Transformer的编码器,并得到句子中每个单词的上下文表示(embedding,嵌入)作为输出。一旦我们将句子作为输入喂给编码器,编码器就会使用多头注意力机制(将句子中的每个单词与句子中的所有单词关联起来,以学习单词之间的关系和上下文意义)理解句子中每个单词的上下文,并返回句子中每个单词的上下文表示作为输出。

如下图所示,我们将句子作为输入喂给Transformer的编码器,并得到句子中每个单词的表示(representation)作为输出。我们可以堆叠N个编码器,如下图所示。我们只展开了编码器1,以减少混乱。在下面的图中,R_He是单词“He”的表示,R_got是单词“got”的表示,以此类推。每个标记的表示大小将是编码器层的大小。假设编码器层的大小是768,那么每个标记的表示大小将是768:

在这里插入图片描述

图2.3 – BERT生成句子中每个单词的表示

同样,如果我们把句子B,“Python is a popular programming language.”,喂给Transformer的编码器,我们得到句子中每个单词的上下文表示作为输出,如下图所示:

在这里插入图片描述

图2.4 – BERT生成句子中每个单词的表示

因此,使用BERT模型,对于给定的句子,我们得到句子中每个单词的上下文表示(embedding,嵌入)作为输出。

现在我们了解了BERT是如何生成上下文表示的,接下来我们将查看BERT的不同配置。


感谢您的阅读,欢迎关注!



http://www.ppmy.cn/news/1556971.html

相关文章

MLM: 掩码语言模型的预训练任务

MLM: 掩码语言模型的预训练任务 掩码语言模型(Masked Language Model, MLM)是一种用于训练语言模型的预训练任务,其核心目标是帮助模型理解和预测语言中的上下文关系。以下是对这一概念的详细说明: 基本定义: MLM是一…

JAVA进制转换-对不同位数的转换方法

JAVA进制转换-对不同位数的转换方法 实例结果代码补叙 实例 第一个输入参数设为被转换的数值,第二个输入参数设为源来的位数,第三个输入参数设为目标的位数。 /*** 位数转换* args[0] 被转换值* args[1] 源位数* args[2] 目标位数*/public static vo…

Python 助力 DBA:高效批量管理数据库服务器的多线程解决方案-多库查询汇总工具实现

批量数据库服务器连接测试与数据汇总:Python实现方案 作为数据库服务器运维人员,我们经常需要面对大量服务器的连接测试和数据汇总工作。本文将介绍一个使用Python实现的高效解决方案,可以帮助我们快速完成这些任务。 需求概述 从配置文件…

阻塞队列与线程池原理

1、阻塞队列 阻塞队列:当队列已满的时候,向队列中添加元素的操作会被阻塞;当队列为空的时候,从队列中取元素的操作会被阻塞。 Java 中用 BlockingQueue 接口表示阻塞队列。BlockingQueue 接口作为 Queue 的子接口,主…

SQLite 命令

SQLite 命令 SQLite 是一种轻量级的数据库管理系统,它是一个C库,提供了不需要独立服务器进程的零配置数据库。SQLite 是非常受欢迎的,因为它简单、快速、可靠,并且适用于各种大小的项目。本文将详细介绍 SQLite 的常用命令和操作…

AI 在游戏领域的革命性技术

2AGI.NET | 探索 AI 无限潜力,2AGI 为您带来最前沿资讯。 2AGI.NET:AI 游戏专题 本文介绍了AI技术在游戏领域的应用及其在其他行业的技术拓展。AI虚拟小镇通过1000多个智能体模拟真实人类行为,准确率高达85%。这种技术不仅改变了游戏行业&…

使用JUnit进行集成测试

在软件开发中,集成测试是一个非常重要的环节。 它可以确保不同模块之间的协作正确性,同时也可以发现系统的潜在问题。 JUnit是一个流行的Java测试框架,它可以帮助我们编写和运行各种类型的测试,包括单元测试和集成测试。 本文将…

c语言----选择结构

基本概念 选择结构是C语言中用于根据条件判断来执行不同代码块的结构。它允许程序在不同的条件下执行不同的操作,使程序具有决策能力。 if语句 单分支if语句 语法格式: if (条件表达式) { 执行语句块; } 功能: 当条件表达式的值为真&#…