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.pswp.cn/diannao/77187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77187.shtml
英文地址,請注明出處:http://en.pswp.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:生成一個隨機數,這個隨機數與種子有個…