谈谈变压器中的位置编码

变压器中的位置编码

一、说明

   在上一期的“Transformers for Everyone”系列中,我们介绍了 Transformer 的概念,并深入研究了第一个关键架构元素:输入嵌入。如果你错过了第一集,你可以通过阅读来赶上:适合所有人的变形金刚。在本文中,我们将探讨另一个值得我们关注的关键元素:“位置编码”。

   位置编码就像句子中单词的 GPS。正如我们希望模型能够理解单词一样,我们也希望它能够掌握句子中单词的空间排列。

   想象一下,如果我们能为模型提供有关单词如何相对于彼此定位的信息——无论它们是近的还是远的。这有助于模型理解上下文和含义。

二、运作方式

   原句:我们从原来的句子开始,“Yobi是一家伟大的公司。正如我们在上一篇文章中了解到的那样,我们已经将其转换为嵌入。

在这里插入图片描述

   位置编码向量:接下来,我们创建一个称为位置编码向量的特殊向量。这个向量与我们的嵌入大小相同,并被添加到它们中。

   但是,此向量保持固定,并表示每个单词在句子中的位置。
在这里插入图片描述

   编码器输入:两个向量的结果都是一个编码器输入,一个与我们的嵌入大小相同的向量。此编码器输入将词嵌入的丰富性与位置编码提供的空间感知相结合。

   位置编码使模型不仅可以理解单词,还可以理解它们在句子中的上下文。它是语言翻译、文本生成等任务的重要组成部分。
在这里插入图片描述

   使用 BERT 的示例(可选)
   注意:
   与早期的 transformer 模型不同,BERT 不使用单独的步骤来添加位置编码。相反,它在预训练阶段学习位置信息。
   每个令牌的嵌入在从 BERT 模型出来时都已经编码了位置信息。这与 Vaswani 等人的原始 Transformer 模型不同,后者将位置编码显式添加到嵌入中。
1/我们将从导入库和定义句子开始

import torch
from transformers import BertTokenizer, BertModel
sentence = "Yobi is a great company"

   阿拉伯数字/初始化分词器和模型 (BERT):我将使用这个:https://huggingface.co/bert-base-uncased(英语的 BERT 的特定版本,如果需要,您可以选择其他版本)

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

   BertTokenizer 用于将句子转换为模型可以理解的格式 (BERT)
   BertModel 是将生成嵌入的模型。
   3/句子的标记化:

inputs = tokenizer(sentence, return_tensors='pt', add_special_tokens=True)
input_ids = inputs['input_ids']

   可选:我们转换回标记只是为了查看模型看到的确切标记,CLS(由 BERT 标记器在每个输入序列的开头添加)和 SEP(用于标记句子的结尾或在需要理解它们之间关系的任务中分隔两个不同的句子)是特殊的标记

tokens = tokenizer.convert_ids_to_tokens(input_ids[0])
print(tokens) #['[CLS]', 'yo', '##bi', 'is', 'a', 'great', 'company', '[SEP]']

   注意:在这种情况下,Yobi 被拆分为子词单元:“yo”、“##bi”。BERT 使用子词标记化 (WordPiece) 来处理未知单词并减少词汇量。## 表示“bi”是前面标记的延续。

   4/生成嵌入:我们将标记化的句子传递给 BERT 模型,嵌入将包含输入句子中每个标记的嵌入。

with torch.no_grad():
    outputs = model(input_ids)
    embeddings = outputs.last_hidden_state

   5/准备编码器输入:我们将嵌入分配给一个变量,该变量将在处理管道的下一阶段使用,我们将在下一集🙂中看到

encoder_input = embeddings

   自选:您可以打印“encoder_input”的形状

print(encoder_input.shape) #torch.Size([1, 8, 768])

   这意味着批处理中有 1 个序列,序列中有 8 个标记,每个标记由一个 768 维向量表示。
在这里插入图片描述

   变形金刚 AImemes。图片来源:blog.searce/decoding-llms-513522a5afc
我们在文章的最后,在整个剧集中,我们发现了位置编码在理解单词方面的关键作用,以及它们在句子中的上下文,这些句子是由嵌入输入编码器的单词形成的!请继续关注下一集😁的更多见解

请考虑关注有关商业、数据科学、机器学习和扩展现实的更多文章:。

统计与数据科学 : https://medium.com/@soulawalid/list/statistics-data-science-65305693779d
商务 : https://medium.com/@soulawalid/list/business-1528f08575a7
量子机器学习 : https://medium.com/@soulawalid/list/qml-be0b06f7a986
扩展现实 : https://medium.com/@soulawalid/list/extended-reality-bf03607b0b80
神经营销学 : https://medium.com/@soulawalid/list/neuromarketing-8f94149e3c73

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】 gcc(linux下的编译器)程序的编译和链接详解

目录 前言:快速认识gcc 1. 程序的翻译环境和执行环境 2.编译和链接 2.1翻译环境 2.2编译环境 1. 预处理 gcc -E指令 test.c(源文件) -o test.i(生成在一个文件中,可以自己指定) 预处理完成之后就停下来&am…

状态压缩的三种模型

第一种类型&#xff08;摆放方块&#xff09;&#xff1a; 代码如下&#xff1a; #include<iostream> #include<climits> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #include<s…

vue3+ts+element home页面侧边栏+头部组件+路由组件组合页面教程

文章目录 效果展示template代码script代码样式代码 效果展示 template代码 <template><el-container class"home"><el-aside class"flex" :style"{ width: asideDisplay ? 70px : 290px }"><div class"aside-left&q…

项目中自动引入神器 - unplugin-auto-import/unplugin-vue-components

前端 项目中 自动引入 神器 前言 在开发中&#xff0c;我们总喜欢站在巨人的肩膀上开发&#xff0c;比如用一些 框架&#xff1a;vue,react, 组件库&#xff1a;element&#xff0c;ant。 工具函数&#xff1a;axios&#xff0c;lodash 现在是模块化时代&#xff0c;我们…

基于SpringBoot后端实现连接MySQL数据库并存贮数据

目录 一、什么是MySQL数据库 二、基于SpringBoot框架连接MySQL数据库 1、首先添加MySQL依赖&#xff1a; 2、配置数据库连接&#xff1a; 3、创建实体类&#xff1a; 4、创建Repository接口&#xff1a; 5、使用Repository&#xff1a; 三、编写业务SQL语句 1、使用Spring Data…

浅模仿小米商城布局(有微调)

CSS文件 *{margin: 0;padding: 0;box-sizing: border-box; }div[class^"h"]{height: 40px; } div[class^"s"]{height: 100px; } .h1{width: 1528px;background-color: green; } .h11{background-color:rgb(8, 220, 8); } .h111{width: 683px;background-c…

异或和之和【蓝桥杯】/拆位+贡献法

异或和之和 拆位贡献法 思路&#xff1a;刚开始考虑遍历L和R&#xff0c;同时可以用一个二维数组存储算过的值&#xff0c;但是时间复杂度还是O(n^2)&#xff0c;所以这种还是要拆位和利用贡献法 可以对于每个位&#xff0c;一定区间内&#xff0c;如果有奇数个1则异或值为1&…

阿里云ECS选型推荐配置

本文介绍构建Kubernetes集群时该如何选择ECS类型以及选型的注意事项。 集群规格规划 目前在创建Kubernetes集群时&#xff0c;存在着使用很多小规格ECS的现象&#xff0c;这样做有以下弊端&#xff1a; 网络问题&#xff1a;小规格Worker ECS的网络资源受限。 容量问题&…

Cubase 8.0 下载地址及安装教程

Cubase是一款流行的音乐制作和音频录制软件&#xff0c;由德国公司Steinberg开发。它是一款专业级的数字音频工作站&#xff08;DAW&#xff09;&#xff0c;广泛应用于音乐制作、音频录制、混音和制作等领域。 Cubase提供了丰富的功能和工具&#xff0c;用于录制、编辑、混音…

ubuntu22.04物理机双系统手动分区

ubuntu22.04物理机双系统手动分区 文章目录 ubuntu22.04物理机双系统手动分区1. EFI系统分区2. 交换分区3. /根分区4. /home分区分区后的信息 手动分区顺序&#xff1a;EFI系统分区(/boot/efi)、交换分区(/swap)、/根分区、/home分区。 具体参数设置&#xff1a; 1. EFI系统分…

Java SPI 机制

SPI 机制的定义 在Java中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;机制是一种用于实现软件组件之间松耦合的方式。它允许在应用程序中定义服务接口&#xff0c;并通过在类路径中发现和加载提供该服务的实现来扩展应用程序功能。 SPI 机制通常涉及三…

霉霉说地道中文,口型、卡点几乎完美,网友:配音时代结束了?

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站 每天给大家更新可用的国内可用chatGPT资源 更多资源欢迎关注 「给电影配音的时代即将结束了。」 AI 的发展让很多人直呼饭碗被抢了&#xff0c;以前是艺术家、程序员…… 现在配音员也要失业了&a…

Docker部署一个SpringBoot项目(超级详细)

注意&#xff1a;下面的教程主要是针对 Centos7 的&#xff0c;如果使用的其他发行版会有细微的差别&#xff0c;请查看官方文档。 Docker部署一个SpringBoot项目&#xff08;超级详细&#xff09; 一、安装Docker1.卸载旧版2.配置Docker的yum库3.安装Docker4.设置开机自启动5.…

超级充电测试基础认识

超级充电技术是电动汽车&#xff08;EV&#xff09;充电技术的一种&#xff0c;它的主要目标是在最短的时间内为电动汽车充满电。这种技术的出现&#xff0c;对于推动电动汽车的普及和发展具有重要的意义。 超级充电测试是对超级充电设备和系统进行全面、深入的检查和评估&…

SQL107 将两个 SELECT 语句结合起来(二)(不用union,在where里用or)

select prod_id,quantity from OrderItems where quantity 100 or prod_id like BNBG% order by prod_id;在where子句里使用or

Windows 7 静态 IP 地址

Windows 7 静态 IP 地址 References 静态 IP 地址设置为 192.168.1.198 控制面板 -> 查看网络状态和任务 更改适配器设置 网络连接 -> 属性 TCP / IPv4 警告 - 已计划将多个默认网关用于提供单一网络 (例如 intranet 或者 Internet) 的冗余。 6.1. 关闭 redundancy VMw…

Day23 代码随想录(1刷) 二叉树

669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&#xff0c;原有的父代…

Web系统开发之——文章管理

原文地址&#xff1a;Web系统开发之——文章管理 - Pleasure的博客 下面是正文内容&#xff1a; 前言 经过一番考量&#xff0c;关于Web应用系统功能部分的开发&#xff0c;决定采取基础的文字文章管理为核心功能。 不再采取前后端分阶段完成的方式&#xff0c;而是以一个一个…

机器学习模型——KNN

KNN的基本概念&#xff1a; KNN(K-Nearest Neighbor)就是k个最近的邻居的意思&#xff0c;即每个样本都可以用它最接近的k个邻居来代表。KNN常用来处理分类问题&#xff0c;但也可以用来处理回归问题。 核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某…

TCPView下载安装使用教程(图文教程)超详细

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;更多干货&#xff0c;请关注专栏《网络安全自学教程》 TCPView是微软提供的一款「查看网络连接」和进程的工具&#xff0c;常用来查看电脑上的TCP/UDP连接…