Transformer結構--輸入編碼(BPE,PE)

在Transformer結構中,輸入編碼是模型處理文本數據的關鍵步驟,其中**BPE(Byte Pair Encoding,字節對編碼)PE(Positional Encoding,位置編碼)**是兩種重要的編碼方式,它們分別解決了分詞和位置信息的問題。以下是對這兩種編碼方式的詳細解析:

BPE(Byte Pair Encoding)

1. 背景與目的

  • 傳統分詞問題:在自然語言處理中,傳統的分詞方式(如基于空格或標點符號的分詞)往往無法有效處理未知詞(OOV,Out-of-Vocabulary)或稀有詞。這些詞在訓練數據中未出現或出現頻率極低,導致模型難以學習到它們的表示。
  • BPE的引入:BPE是一種數據壓縮算法,最初用于文本壓縮。在NLP中,BPE被用作一種子詞(subword)分詞算法,旨在將文本分解為更小的單元(子詞),從而更有效地處理未知詞和稀有詞。

2. 算法原理

  • 初始化詞表:BPE從一個基礎詞表開始,通常包含所有單個字符。
  • 迭代合并:BPE通過迭代地合并最頻繁出現的字符對(或子詞對)來擴展詞表。每次合并后,新的子詞被添加到詞表中,而原始的字符對被替換為新的子詞。
  • 終止條件:合并過程持續進行,直到詞表大小達到預設的閾值或合并次數達到上限。

3. 優點

  • 處理未知詞:BPE能夠將未知詞分解為已知的子詞組合,從而允許模型學習到這些詞的表示。
  • 靈活性:BPE可以根據不同的任務和數據集調整詞表大小,以平衡分詞粒度和模型性能。
    在這里插入圖片描述

在這里插入圖片描述

BPE代碼

import tiktokendef main():print("Hello from hello-world!")# 獲取編碼enc = tiktoken.get_encoding("cl100k_base")# 編碼文本tokens = enc.encode("tiktoken是OpenAI開源的一個快速分詞工具。它將一個文本字符串(例如“tiktoken很棒!”)和一個編碼(例如“cl100k_base”)作為輸入,然后將字符串拆分為標記列表。-----aa aa aa bb bb bb cc cc aabbcc aabb ")print(tokens)  # 輸出: [24912, 2375]# 解碼文本text = enc.decode(tokens)print(text)  # 輸出: hello worldif __name__ == "__main__":main()

PE(Positional Encoding)

1. 背景與目的

  • Transformer的局限性:Transformer模型基于自注意力機制,能夠并行處理輸入序列中的所有元素。然而,這種并行性導致模型無法直接捕捉到序列中元素的位置信息。
  • 位置編碼的引入:為了解決這個問題,Transformer引入了位置編碼(PE),為輸入序列中的每個元素添加位置信息。

2. 實現方式

  • 正弦和余弦函數:Transformer使用正弦和余弦函數來生成位置編碼。對于位置 p o s pos pos和維度 i i i,位置編碼的值由以下公式給出:

    P E ( p o s , 2 i ) = sin ? ( p o s 1000 0 2 i / d model ) PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PE(pos,2i)=sin(100002i/dmodel?pos?)
    P E ( p o s , 2 i + 1 ) = cos ? ( p o s 1000 0 2 i / d model ) PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PE(pos,2i+1)=cos(100002i/dmodel?pos?)

    其中, d model d_{\text{model}} dmodel?是模型的維度。

  • 添加到輸入嵌入:生成的位置編碼被添加到輸入序列的詞嵌入(word embedding)中,形成最終的輸入表示。

3. 優點

  • 捕捉位置信息:位置編碼允許Transformer模型捕捉到輸入序列中元素的位置信息,從而更準確地理解序列的結構和語義。
  • 可學習性:雖然位置編碼是預先計算的,但它與詞嵌入一起被輸入到模型中,允許模型在訓練過程中學習到更優的位置表示。

BP代碼

PyTorch提供了torch.nn.Embedding和自定義操作,可以更高效地實現PE:

import torch
import mathclass PositionalEncoding(torch.nn.Module):def __init__(self, d_model, max_len=5000):super(PositionalEncoding, self).__init__()self.d_model = d_model# 創建位置編碼矩陣pe = torch.zeros(max_len, d_model)position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))pe[:, 0::2] = torch.sin(position * div_term)  # 偶數維度pe[:, 1::2] = torch.cos(position * div_term)  # 奇數維度pe = pe.unsqueeze(0)  # 添加batch維度,形狀: (1, max_len, d_model)self.register_buffer('pe', pe)  # 注冊為緩沖區,不參與訓練def forward(self, x):""":param x: 輸入張量 (batch_size, seq_len, d_model):return: 添加位置編碼后的張量"""x = x + self.pe[:, :x.size(1)]  # 截取與輸入序列長度匹配的PEreturn x# 示例:生成長度為10,維度為512的位置編碼
d_model = 512
pe_layer = PositionalEncoding(d_model)
x = torch.zeros(32, 10, d_model)  # 假設batch_size=32, seq_len=10
x_with_pe = pe_layer(x)
print(x_with_pe.shape)  # 輸出: torch.Size([32, 10, 512])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86806.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Confluence-測試用例設計指導方法

測試經驗知識庫 典型的測試場景驗證點各個項目有價值的經驗和測試點 測試經驗知識庫 - 草稿測試用例執行量化指導建議 何時需要進行全量測試和如何定義和執行測試用例量的一些建議和標準 端對端(E2E)測試用例設計指導方案 在測試行業中,端到端…

淺析JVM

一、JVM運行流程 如圖: JVM由四個部分構成: 1.類加載器 加載類文件到內存2.運行時數據區 寫的程序需要加載到這里才能運行3.執行引擎 負責解釋命令,提交操作系統執行4.本地接口 融合不同編程語言為java所用,如Java程序驅動打印…

多個 Job 并發運行時共享配置文件導致上下文污染,固化 Jenkins Job 上下文

基于 context.py 固化 Jenkins Job 上下文的完整方案,適用于你當前的工作流(Python Jenkins Pipeline),解決: 多個 Job 并發運行時共享配置文件導致上下文污染;讀取環境變量或 JSON 文件時被其他 Job 修改…

簡木易支付系統 功能齊全,對接接口超多

簡木易支付系統,作為一款引領行業潮流的卓越支付解決方案,依托先進的 PHP MySQL 技術架構精心打造。在開發過程中,它巧妙運用了功能強大的 ThinkPHP8 框架,完美融合前端主流技術 Vue、Element 以及 Layuiadmin,共同鑄…

【軟考高項論文】信息系統項目的人力資源管理

摘要 本文圍繞信息系統項目的人力資源管理展開論述。以我在2024年參與的為大型國有企業構建供應鏈管理系統項目為例,闡述了項目人力資源管理的主要流程,包括規劃、組建、建設和管理團隊四個過程,以及所運用的工具和理論。同時,分…

【EI會議征稿】東北大學主辦第三屆機器視覺、圖像處理與影像技術國際會議(MVIPIT 2025)

一、會議信息 大會官網:www.mvipit.org 官方郵箱:mvipit163.com 會議地點:遼寧沈陽 主辦單位:東北大學 會議時間:2025 年 9 月 27 日-9 月 29 日 二、征稿主題 集中但不限于“機器視覺、圖像處理與影像技術”等其…

從零開始的云計算生活——第二十三天,稍作休息,Tomcat

目錄 一.故事背景 二.Tomcat概述 1、Tomcat介紹 2、Tomcat歷史 二、Tomcat原理分析 1、Http工作原理 2、Tomcat整體架構 3、Coyote連接器架構 4、Catalina容器架構 5、Jasper處理流程 6、JSP編譯過程 7、Tomcat啟動流程 8、Tomcat請求處理流程 三、Tomcat安裝與配…

幾種基于Doherty結構的GAN氮化鎵功放設計方法介紹

功率放大器是現代無線通信系統中最重要的組件之一。理想情況下,它們能夠以高線性度和高效率提供高輸出功率。但通常在這三個關鍵的功率放大器性能參數之間需要進行權衡取舍,而且具有最高輸出功率和線性度的放大器往往會犧牲效率。 在支持寬帶寬和高數據…

前端打印計算單位 cm、mm、px

A4 縱向 寬:21cm,210mm,793.698px 高:29.7cm,297mm,1122.520px A4 橫向 寬:29.7cm,297mm,1122.520px 高:21cm,210mm,793.698px …

c# sugersql 獲取子表數據排序

在C#中使用Sugar ORM(一個流行的.NET ORM框架)獲取子表數據并進行排序,可以通過以下幾種方式實現: 1. 使用HasMany或HasOne配置 首先,確保你在配置實體時已經正確設置了HasMany或HasOne關系。例如,假設你…

【nRF52832】【環境搭建 3】【如何新建一個純單片機開發的工程】

1. 前言 笨叔,又要開始扯淡了!!! 不感興趣的同學,可以跳過了!!! 笨叔之前在大學里面, 剛接觸單片機時。就被 windows 平臺 例如 keill 5 、IAR 等一堆開會環境差點勸退。 當時也是堅持咬牙一點點摸索過來的。剛摸索明白,覺得單片…

Spring-loC與DI

目錄 1 loC控制反轉思想 2 DI依賴注入 3 loC詳解 3.1 存儲Bean (1)Controller (2)Service (3)Repository (4)Component (5)Configuration &#xf…

職業本科單片機與嵌入式技術實訓室建設設想

一、引言 在當今數字化與智能化飛速發展的時代,單片機與嵌入式技術作為信息技術領域的關鍵支撐,廣泛應用于工業控制、智能家居、物聯網、汽車電子等眾多行業,成為推動產業升級和創新發展的核心驅動力。職業本科教育旨在培養適應生產、建設、…

傳統消防演練與 VR 消防演練的區別有哪些

演練形式:傳統消防演練往往依托真實的場地,像空曠的廣場、廢棄的建筑物或是專門的消防訓練基地等。參與者能觸摸并使用實實在在的消防設備,例如干粉滅火器、二氧化碳滅火器、消防水帶等。在演練時,會通過點燃模擬火源、釋放煙霧等…

【零基礎學AI】 第6講:數據可視化基礎

本節課你將學到 理解數據可視化在AI中的重要作用 掌握Matplotlib的基本架構和核心概念 學會創建各種類型的圖表(線圖、柱狀圖、散點圖、餅圖等) 掌握圖表美化和自定義技巧 完成銷售趨勢圖表制作實戰項目 開始之前 什么是數據可視化? 數據可…

基于SSM+JSP 的旅游管理系統

【旅游景點管理系統】【送文檔】|SSM | JSP 【運行開發環境】 jdk1.8 idea mysql maven tomcat 【技術棧】 Spring SpringMVC mybatis JSP 【項目功能】 兩個角色;管理員功能有游客管理、輪播圖管理、景點管理、景點類型管理;普…

系統 | 電腦重置 圖文教程

背景: 換內存條,換完,聲卡網卡崩盤,分析原因可能是未斷電操作(什么光感自動斷電 還是手動的香),網卡由于代理沒關,關完即可。聲卡一直沒好,電腦店說是硬件問題;自行排查了…

MyBatis深度面試指南

一、MyBatis核心解析:半ORM框架的底層真相 1. 本質與工作流 半ORM定義: 對象映射:通過ResultMap將ResultSet自動轉為Java對象(省去JDBC手動映射)。SQL控制:開發者需手動編寫SQL,框架不自動生成(與Hibernate核心區別)。工作流四步: 解析mybatis-config.xml → 構建Sq…

使用Docker部署mysql8

1、拉取mysql8的鏡像: 1 [rooti-zgn6som8 ~]# docker pull mysql:8.0 2、創建配置和數據文件夾并修改權限: 1 2 3 4 mkdir -p /data/mysql8/conf mkdir -p /data/mysql8/data chmod -R 755 /data/mysql8/ 3、配置一個自定義的配置文件my.cnf: 1 …

Vue3—插槽solt

默認插槽 父組件 <Sidebar><div>{{ strData }}</div></Sidebar> let strData ref(我是你爸爸真偉大&#xff0c;養你這么大);//定義插槽數據子組件 <slot>沒有數據&#xff0c;我先默認顯示一下 loading。。。。。。。</slot>父組件提供…