BPE(Byte Pair Encoding)分詞算法

下面是對 BPE(Byte Pair Encoding)分詞算法的深入介紹,涵蓋其背景、原理、實現細節、數學機制、優缺點以及在自然語言處理中的實際應用。


一、背景與動機

在自然語言處理中,模型輸入通常需要被轉換為數值序列,而這首先需要將文本拆分為可處理的最小單元。傳統的分詞策略有三類:

  1. 詞級分詞(Word-level Tokenization):容易出現 OOV(Out-of-Vocabulary)問題;

  2. 字符級分詞(Character-level Tokenization):過于細碎,序列長度太長;

  3. 子詞級分詞(Subword-level Tokenization):在這兩者之間取得平衡,BPE 就屬于這一類。

BPE 分詞的核心思想是:通過數據驅動的方法找出最常見的字符組合,以此構建詞匯表,使模型既能處理高頻詞,又能組合出低頻詞或新詞。


二、BPE 的起源

最早的 BPE 是一種用于數據壓縮的算法,由 Philip Gage 在 1994 年提出。它的原始用途是用頻繁的字節對替換為一個新符號,從而減少文件大小。

2016 年,Sennrich 等人將其引入自然語言處理,用于構建子詞單元,從而提升神經機器翻譯的效果(論文標題為 "Neural Machine Translation of Rare Words with Subword Units")。


三、BPE 分詞算法的核心思想

BPE 是一個基于統計的、貪心的合并策略,其核心思想是:

不斷合并訓練語料中出現頻率最高的符號對(symbol pair)為新符號,直到達到預定詞表大小或合并次數。

這些“符號”最初是字符,隨著合并的進行,可能變成字符組合。


四、BPE 的詳細算法流程

輸入:

  • 語料(文本數據)

  • 目標詞匯表大小(或最大合并次數)

步驟:

第一步:初始化

將所有詞語按字符劃分,每個詞結尾添加一個特殊終止符,如 </w>,以區分詞邊界。例如:

"low"    → l o w </w>
"lower"  → l o w e r </w>
"newest" → n e w e s t </w>

每個詞都被拆成字符序列,并統計出現頻率。


第二步:統計字符對頻率

遍歷整個詞表,統計每個相鄰字符(或子詞)對出現的總次數。

例如:

"l o w </w>":字符對 ("l", "o")、("o", "w")、("w", "</w>")

將這些字符對及其頻率記錄下來。


第三步:合并頻率最高的字符對

找出出現頻率最高的字符對(如 "o w"),并將其視為一個新子詞 "ow"。

例如:

"l o w </w>" → "l ow </w>"
"l o w e r </w>" → "l ow e r </w>"

更新詞表,替換所有出現該字符對的地方。


第四步:重復步驟 2~3

繼續統計新的子詞對頻率,并合并頻率最高的一對,直到達到指定的合并次數或詞表大小為止。


第五步:構建最終詞表

在所有合并步驟中出現過的子詞都可以構成詞表(vocabulary),用于編碼文本。


舉個簡化例子:

給定詞頻如下:

low: 5
lowest: 2
newest: 6
newer: 3

初始化分詞(添加 </w>):

l o w </w>      ×5
l o w e s t </w>×2
n e w e s t </w>×6
n e w e r </w>  ×3

第一輪統計所有字符對頻率,如 ("e", "s") 出現頻率最高 → 合并為 "es"

繼續合并 → ("es", "t") → "est" → ("n", "e") → "ne"……

直到構建出子詞如:

"low", "new", "est", "er", "ne", "er", "lowest", "newest"

這樣,無論是高頻詞(如 newest)還是低頻詞(如 newer),都能被拆解成已知子詞。


五、BPE 分詞的編碼與解碼

編碼:

編碼時,BPE 會根據訓練生成的子詞詞表,用最長匹配的策略將輸入詞切分為子詞組合。

比如輸入詞 newer

  • 子詞詞表有:newer

  • 輸出:new er

若詞表沒有 newer 但有 newer,則輸出:n e w er

解碼:

將子詞逐個拼接回原始詞,如果有 </w> 終止符,就表示到一個詞的結尾。


六、BPE 的優點與缺點

優點:

  1. 處理 OOV(未登錄詞)能力強:所有詞都可以拆成子詞,模型不會因不認識詞而出錯。

  2. 詞表大小可控:相比整詞級分詞,詞表更小,占用內存更少。

  3. 訓練速度快,易于實現

  4. 子詞建模兼顧精細性與語義性,保留了一定的語言結構信息。

缺點:

  1. 合并操作是貪心策略,非全局最優

  2. 同一個詞可能被拆分成不同子詞序列,影響一致性(尤其在跨語料中)

  3. 不會考慮上下文:合并是基于頻率的,無法根據語境靈活調整。


七、BPE 與其他分詞算法對比

方法OOV處理詞表大小序列長度是否上下文相關
Word-level
Char-level
BPE
Unigram LM更靈活
SentencePiece更健壯


八、在實際系統中的應用

1. HuggingFace Transformers

HuggingFace 的 tokenizers 庫中提供了 ByteLevelBPETokenizer,被 GPT-2 和 RoBERTa 等模型使用。

2. SentencePiece + BPE 模式

Google 的 BERT 和 T5 使用 SentencePiece,它支持 BPE 和 Unigram 模型。

3. GPT 系列

OpenAI GPT 系列(包括 GPT-2、GPT-3)使用了一種改進版的 BPE,稱為 Byte-Level BPE,對輸入進行字節級別處理,能處理任意 UTF-8 字符。


九、小結

BPE 是一種高效的分詞算法,介于詞級和字符級之間。通過頻率驅動的合并策略,構建出對語言有表達能力的子詞單元,有效減少詞表大小,提升模型泛化能力。如今,它已成為現代 NLP 模型(如 Transformer 系列)的基礎技術之一。

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

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

相關文章

ssm學習筆記day07mybatis

項目的準備 創建springboot項目&#xff08;moudle&#xff09;&#xff0c;加入依賴lombok(自動添加setter,getter,toString)、Spring Web&#xff08;處理servlet請求&#xff09;、MySQL Driver(mysql的驅動器&#xff09;、JDBC&#xff08;JAVA與mysql的接口&#xff09;、…

Kubernetes 高級調度01

目錄 一、 初始化容器 InitContainer 1. InitContainer 的基本概念 2. 延遲指定時間后啟動 3. 使用初始化容器修改內核參數 4. 等待依賴的服務啟動后再啟動應用 5. pause 容器 二、 臨時容器 Ephemeral Containers 1. 臨時容器的概念 2. 臨時容器的使用示例 三、 自動…

Spring MVC2

在Spring MVC1中&#xff0c;我們知道了MVC的定義&#xff0c;同時也知道了RequestMapping和RestController這個注解的作用。本篇文章&#xff0c;我們將學習使用Spring MVC獲取請求參數和返回不同的響應等等請求傳遞單個參數如圖所示&#xff0c;創建RequestController類&…

項目文章(IF:9.3)轉錄因子ChIP-seq助力揭示CsphyB-CsPIF4-CsBRC1模塊調控ABA合成和腋芽生長發育

分枝生長是作物農業特性中的一項重要指標&#xff0c;它直接影響植株的結構和作物的產量。黃瓜&#xff08;學名&#xff1a;Cucumis sativus L.&#xff09;是一種在全球范圍內具有重要經濟價值和營養價值的重要蔬菜作物。在田間環境中&#xff0c;具有更多側枝的黃瓜植株更受…

NSSCTF Web 一點學習

[SWPUCTF 2021 新生賽]jicao連接&#xff1a;利用hackbar&#xff0c;按照php的判斷條件來得到flag[SWPUCTF 2021 新生賽]easyrce連接&#xff1a;url讀取并且執行先用ls查看flag位置&#xff1a;找到了個看起來是flag的文件cat一下&#xff1a;得到flag[SWPUCTF 2021 新生賽]c…

【STM32項目】環境監測設計

????大家好&#xff0c;這里是5132單片機畢設設計項目分享&#xff0c;今天給大家分享的是基于《基于STM32的環境監測設計》。 目錄 1、系統功能 2.1、硬件清單 2.2、功能介紹 2.3、控制模式 2、演示視頻和實物 3、系統設計框圖 4、軟件設計流程圖 5、原理圖 6、主…

不同系統記錄項目進度不一致,如何統一口徑

不同系統記錄項目進度不一致&#xff0c;會造成項目管理混亂、信息混淆和決策失誤。統一口徑的方法包括&#xff1a;采用統一的項目管理平臺、明確數據記錄與更新規范、建立進度數據對接與整合機制。特別是采用統一的項目管理平臺&#xff0c;通過統一的信息輸入與輸出渠道&…

玩轉Docker | 使用Docker部署Drawnix在線白板工具

玩轉Docker | 使用Docker部署Drawnix在線白板工具 前言一、Drawnix介紹Drawnix簡介Drawnix主要特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署Drawnix服務下載Drawnix鏡像編輯部署文件創建容器檢查容器狀態檢查服務端口安全設置四、訪問Drawnix服務訪…

Linux操作系統從入門到實戰(九)Linux開發工具(中)自動化構建-make/Makefile知識講解

Linux操作系統從入門到實戰&#xff08;九&#xff09;Linux開發工具&#xff08;中&#xff09;自動化構建-make/Makefile前言一、 make/Makefile是什么&#xff1f;1. 我們先想個問題&#xff1a;手動編譯代碼有多麻煩&#xff1f;2. 為了解決麻煩&#xff0c;才有了自動化工…

開源b2b2c商城源碼 支持多端適用 含完整代碼包和圖文搭建教程

在電商行業蓬勃發展的當下&#xff0c;b2b2c商城系統成為眾多企業拓展業務版圖的有力工具。這種支持自營與商家入駐并存的系統&#xff0c;含豐富平臺商品種類&#xff0c;能通過多元化運營提升平臺競爭力。本文分享一個開源b2b2c商城源碼的相關知識&#xff0c;并詳細介紹其搭…

Vue3入門-指令補充

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;vscode\node.js &#x1f680;所屬專欄&#xff1a;Vue3 文章目錄1. 指令修飾符1.1 按鍵修飾符1.2 事件修飾符1.3 v-model修飾符2. v-model用在其他表單元素上3. 樣式綁定3.1 操作class4. 操作style5.…

UDP類型套接字

理解UDP協議&#xff1a;互聯網世界的"明信片"通信 UDP是什么&#xff1f;為什么需要它&#xff1f; 想象一下&#xff0c;你正在給朋友寄送兩種不同的東西&#xff1a;一份重要的合同文件和一疊度假時的風景明信片。對于合同文件&#xff0c;你會選擇掛號信&#xf…

redis快速入門教程

更新中基本概念安裝centOS安裝redis&#xff1a;yum install redis -y啟動&#xff1a;systemctl start redis設置開機啟動&#xff1a;systemctl enable redis檢查運行狀態&#xff1a;systemctl status redis遠程訪問編輯配置文件 vi /etc/redis.conf在其中修改為bind 0.0.0.…

UDP和TCP的主要區別是什么

UDP&#xff08;用戶數據報協議&#xff09;和 TCP&#xff08;傳輸控制協議&#xff09;是互聯網傳輸層的兩大核心協議&#xff0c;主要區別體現在??連接方式、可靠性、傳輸效率、頭部開銷??及??適用場景??上。以下是具體對比&#xff1a;??一、核心區別對比表???…

ASP .NET Core 8結合JWT輕松實現身份驗證和授權

身份驗證和授權是每一個后端服務必不可少的&#xff0c;可以實現對非法請求進行攔截&#xff0c;能夠有效保護數據的安全性。 JSON Web Token&#xff08;JWT&#xff09;是一項開放標準&#xff08;RFC 7519&#xff09;&#xff0c;它定義了一種緊湊且自包含的方法&#xff…

5G時代的智慧燈桿:塔能“一桿多用”方案如何激活城市新基建?

在《5G應用“揚帆”行動計劃》持續推進的進程之中&#xff0c;智慧桿已然成為了5G基站部署環節極為重要的載體&#xff0c;并且被明確地歸入到新型基礎設施建設的重點范疇之內。相關政策提出&#xff0c;要在2025年達成重點區域5G網絡全面且深度覆蓋的目標&#xff0c;與此同時…

護照閱讀器:國外證件識別的 OCR “解碼師”

國外證件版式多樣、語種繁雜&#xff0c;人工識別不僅耗時&#xff0c;還易因翻譯誤差、格式不熟悉導致信息錯漏。尤其在跨境業務場景中&#xff0c;傳統識別方式嚴重影響效率與準確性。護照閱讀器搭載的 OCR 技術成為破局關鍵。它能精準提取國外護照、駕照等證件上的多語種文字…

Linux部署Python服務

1、創建項目目錄與虛擬環境#確保安裝 Python 和 python3-venv 工具 sudo apt update sudo apt install python3 python3-pip python3-venvmkdir myproject cd myproject python3 -m venv venv # 創建虛擬環境#Linux source venv/bin/activate # 激活虛擬環境#Windowds venv\S…

【Python辦公】使用Python和Tkinter構建Excel數據導入MySQL工具(GUI版)

目錄 專欄導讀前言項目概述技術棧環境準備核心代碼實現1. 導入必要的庫2. 主應用類設計3. 用戶界面設計數據庫配置區域數據庫選擇區域4. 數據庫連接功能測試連接獲取數據庫列表5. 數據導入功能關鍵技術點解析1. SQLAlchemy 2.x 兼容性2. MySQL 8.0 認證問題3. 避免啟動時連接錯…

華為OD機試_2025 B卷_猜數字(Python,100分)(附詳細解題思路)

題目描述 一個人設定一組四碼的數字作為謎底&#xff0c;另一方猜。 每猜一個數&#xff0c;出數者就要根據這個數字給出提示&#xff0c;提示以XAYB形式呈現&#xff0c;直到猜中位置。 其中X表示位置正確的數的個數&#xff08;數字正確且位置正確&#xff09;&#xff0c;而…