Transformer的Word Embedding

一、Transformer 中的词嵌入是什么?

1. 定义与作用

词嵌入(Word Embedding):将离散的词语映射为低维连续向量,捕捉语义和语法信息。
在 Transformer 中的位置
• 输入层:每个词通过嵌入层转换为向量(如 embedding_dim=512)。
• 输出层:解码器输出的向量通过反向嵌入映射回词表概率(如 logits = decoder_output * embedding_matrix^T)。

2. 与 Word2Vec 的对比
特性Word2VecTransformer 中的词嵌入
上下文相关性静态(每个词仅一个向量)动态(同一词在不同上下文中向量不同)
训练方式独立预训练(无监督)端到端学习(通常结合预训练任务)
多义词处理无法区分多义词基于上下文动态调整(如 BERT)
位置信息通过位置编码(Positional Encoding)
参数规模较小(仅词表大小 × 嵌入维度)较大(嵌入层是模型的一部分)

二、Transformer 词嵌入的核心革新

1. 上下文相关(Contextualized Embeddings)

问题:Word2Vec 的静态词向量无法处理一词多义(例如“bank”在“river bank”和“bank account”中的不同含义)。
解决方案:Transformer 通过自注意力机制动态调整词向量:
• 输入序列中的每个词向量在编码过程中与其他词交互,生成上下文相关的表示。
示例:在句子 Apple launched a new phone 中,“Apple”的向量会包含“phone”的语义;而在 Apple pie is delicious 中,“Apple”的向量会包含“pie”的语义。

2. 位置编码(Positional Encoding)

问题:Transformer 抛弃了 RNN 的时序结构,需显式注入位置信息。
实现方式
绝对位置编码:通过正弦函数或可学习向量编码词的位置(原始论文方法):
P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d model ) PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{\text{model}}}) PE(pos,2i)=sin(pos/100002i/dmodel) P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i / d model ) PE_{(pos, 2i+1)} = \cos(pos10000^{2i/d_{\text{model}}}) PE(pos,2i+1)=cos(pos100002i/dmodel)
相对位置编码:某些变体(如 Transformer-XL)编码词之间的相对距离。

3. 预训练任务驱动

预训练任务:Transformer 的词嵌入通常通过大规模预训练任务学习:
BERT:掩码语言模型(Masked Language Model, MLM) + 下一句预测(Next Sentence Prediction, NSP)。
GPT:自回归语言模型(预测下一个词)。
优势
• 词嵌入不仅包含通用语义,还编码了任务相关的知识(如句间关系、长程依赖)。


三、Transformer 词嵌入的技术细节

1. 嵌入层的数学表示

• 给定词表大小为 V V V,嵌入维度为 d d d,嵌入层是一个 V × d V \times d V×d的矩阵。
• 输入序列 [ w 1 , w 2 , . . . , w n ] [w_1, w_2, ..., w_n] [w1,w2,...,wn] 经过嵌入层后得到矩阵 X ∈ R n × d X \in \mathbb{R}^{n \times d} XRn×d,再与位置编码 P P P 相加:
X final = X + P X_{\text{final}} = X + P Xfinal=X+P

2. 与自注意力的交互

• 自注意力机制通过查询(Query)、键(Key)、值(Value)矩阵对词向量进行交互:
Attention ( Q , K , V ) = softmax ( Q K ⊤ d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QK)V
结果:每个词的输出向量是所有词向量的加权和,权重由语义相关性决定。

3. 跨层信息传递

• Transformer 的每一层(Layer)都会更新词向量:
• 底层编码局部语法(如词性)。
• 高层编码全局语义(如指代消解、情感倾向)。


四、实例分析:BERT 的嵌入层

1. 输入表示

BERT 的输入嵌入由三部分组成:

  1. 词嵌入(Token Embeddings):将词语映射为向量。
  2. 位置嵌入(Position Embeddings):可学习的位置编码。
  3. 段嵌入(Segment Embeddings):区分句子对(如问答任务中的问题和答案)。
2. 掩码语言模型(MLM)

训练任务:随机遮盖输入中的某些词(如替换为 [MASK]),让模型预测被遮盖的词。
对词嵌入的影响
• 迫使模型通过上下文推断被遮盖词,增强嵌入的上下文敏感性。
• 示例:在句子 The [MASK] sat on the mat 中,模型需根据 satmat 推断 [MASK] 可能是 cat

3. 输出示例

• 输入词 bank 在不同上下文中的 BERT 嵌入向量:
• 上下文 1:river bank → 向量靠近 shore, water
• 上下文 2:bank account → 向量靠近 money, finance


五、代码示例:Transformer 嵌入层的实现(PyTorch)

import torch
import torch.nn as nnclass TransformerEmbedding(nn.Module):def __init__(self, vocab_size, embed_dim, max_seq_len, dropout=0.1):super().__init__()self.token_embed = nn.Embedding(vocab_size, embed_dim)self.pos_embed = nn.Embedding(max_seq_len, embed_dim)  # 可学习的位置编码self.dropout = nn.Dropout(dropout)def forward(self, x):# x: [batch_size, seq_len]positions = torch.arange(x.size(1), device=x.device).unsqueeze(0)token_emb = self.token_embed(x)        # [batch_size, seq_len, embed_dim]pos_emb = self.pos_embed(positions)    # [1, seq_len, embed_dim]return self.dropout(token_emb + pos_emb)# 使用示例
vocab_size = 10000
embed_dim = 512
max_seq_len = 128
model = TransformerEmbedding(vocab_size, embed_dim, max_seq_len)input_ids = torch.randint(0, vocab_size, (32, max_seq_len))  # 模拟输入(batch_size=32)
output_emb = model(input_ids)  # [32, 128, 512]

六、总结:Transformer 的词嵌入

  1. 上下文动态调整:通过自注意力机制捕捉长距离依赖,解决一词多义。
  2. 预训练赋能:在大规模语料上预训练,使词嵌入包含丰富的世界知识。
  3. 位置感知:显式编码位置信息,弥补无时序结构的缺陷。
  4. 端到端学习:嵌入层与模型其他部分联合优化,适应具体任务需求。

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

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

相关文章

Linux 进程间通信:信号机制

Linux 进程间通信:信号机制 在多进程操作系统中,进程之间的通信至关重要,尤其是在Linux系统中,信号(Signal)作为一种特殊的进程间通信方式,广泛用于进程之间的协调和控制。信号可以看作是操作系…

基于TRIZ创新方法论的九屏法分析系统

1. 文件头与库导入 # -*- coding: utf-8 -*- import streamlit as st import pandas as pd import numpy as np import plotly.graph_objects as go from datetime import datetime from sklearn.ensemble import RandomForestRegressor ​​作用​​:设置文件编码…

【LangChain框架组成】 LangChain 技术栈的模块化架构解析

目录 整体架构概述 整体架构层级划分 模块详细解析 1. 部署与服务层(LangServe & Deployments) 2. 应用模板层(Templates & Committee Architectures) 3. 核心功能层(LangChain) 4. 社区扩展…

自定义数据结构的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定义数据结构放入QVariant,在序列化时抛出异常 ASSERT failure in QVariant::save: “invalid type to save” 自定义数据结构如struct MyData,除了要在结构体后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的输入输出&…

vxe-table 启用 checkbox-config.reserve 实现分页复选框选择功能、获取已选数据的用法

vxe-table 启用 checkbox-config.reserve 实现分页复选框选择功能、获取已选数据的用法 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 效果 代码 获取已选择…

蓝桥杯-门牌制作

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝要为一条街的住户制作门牌号。 这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。 小蓝制作门牌的方法是先制作 00 到 99 这几个数字…

C#调用Lua方法1+C#调用Lua方法2,3

xLua中Lua调用C#代码 原因:C#实现的系统,因为Lua可以调用,所以完全可以换成Lua实现,因为Lua可以即时更改,即时运行,所以游戏的代码逻辑就可以随时更改。 实现和C#相同效果的系统,如何实现&#…

macOS Chrome - 打开开发者工具,设置 Local storage

文章目录 macOS Chrome - 打开开发者工具设置 Local storage macOS Chrome - 打开开发者工具 方式2:右键点击网页,选择 检查 设置 Local storage 选择要设置的 url,显示右侧面板 双击面板,输入要添加的内容 2025-04-08&#xff…

zustand 源码解析

文章目录 实现原理createcreateStore 创建实例CreateStoreImpl 实现发布订阅createImpl 包装返回给用户调用的 hookuseSyncExternalStoreWithSelector 订阅更新zustand 性能优化自定义数据更新createWithEqualityFncreateWithEqualityFnImpl 返回 hookuseSyncExternalStoreWith…

kotlin,Android,jetpack compose,日期时间设置

AI生成,调试出来学习,这些小组件会用了,就可以组合一个大点的程序了。 package com.example.mydatetimeimport android.app.AlertDialog import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.co…

构建k8s下Helm私有仓库与自定义Chart开发指南

#作者:程宏斌 文章目录 自定义helm模板1、开发自己的chare包2、调试chart3、安装chart 自定义helm模板 https://hub.helm.sh/ 1、开发自己的chare包 [rootmaster ~]# helm create mychare //创建一个名为mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

MOP数据库中的EXPLAIN用法

EXPLAIN 是 SQL 中的一个非常有用的工具,主要用于分析查询语句的执行计划。执行计划能展示数据库在执行查询时的具体操作步骤,像表的读取顺序、使用的索引情况、数据的访问方式等,这有助于我们对查询性能进行优化。 语法 不同的数据库系统&…

项目范围蔓延的十大诱因及应对策略

项目范围蔓延的十大诱因及应对策略是什么?主要在于: 缺乏清晰目标、利益相关方过多、需求变更未及时管控、缺少优先级体系、沟通链条冗长、管理层干预频繁、资源与预算不匹配、技术风险被低估、合同或协议不完善、缺乏阶段性验收与复盘。其中缺乏清晰目标…

做好一个测试开发工程师第二阶段:java入门:idea新建一个project后默认生成的.idea/src/out文件文件夹代表什么意思?

时间:2025.4.8 一、前言 关于Java与idea工具安装不再展开,网上很多教程,可以自己去看 二、project建立后默认各文件夹代表意思 1、首先new---->project后会得到文件如图 其中: .idea文件代表:存储这个项目的历史…

算法进阶指南 分形

问题描述 分形,具有以非整数维形式充填空间的形态特征。通常被定义为: “一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。 现…

18-产品经理-跟踪进度

禅道是一个可以帮助产品经理跟踪研发进度的系统。通过禅道,产品经理可以从多个角度了解产品的研发状态。在仪表盘中,可以展示所有产品或单一产品的概况,包括需求、计划和发布数量,研发需求状态,Bug修复率和计划发布数。…

LeetCode算法题(Go语言实现)_36

题目 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点…

深度解析:文件或目录损坏且无法读取的应对之道

引言 在数字化办公与数据存储日益普及的今天,我们时常会遭遇各种数据问题,其中“文件或目录损坏且无法读取”这一状况尤为令人头疼。无论是个人用户存储在电脑硬盘、移动硬盘、U盘等设备中的重要文档、照片、视频,还是企业服务器上的关键业务…

数据库如何确定或计算 LSN(日志序列号)

目录 如何确定或计算 LSN(日志序列号)**一、获取当前 LSN****二、确定日志解析的起始 LSN****三、LSN 与物理文件的映射****四、应用场景** 如何确定或计算 LSN(日志序列号) LSN(Log Sequence Number)是数…

[ctfshow web入门] web24

前置知识 isset:判断这个变量是否声明且不为NULL,否则返回False mt_srand:设置随机数种子,如果不手动设置,那么系统会自动进行一次随机种子的设置 mt_rand:生成一个随机数,这个随机数与种子有个…