【NLP 59、大模型應用 —— 字節對編碼 bpe 算法】

目錄

一、詞表的構造問題

二、bpe(byte pair encoding) 壓縮算法

算法步驟

示例:

步驟 1:初始化符號表和頻率統計

步驟 2:統計相鄰符號對的頻率

步驟 3:合并最高頻的符號對

步驟 4:重復合并直至終止條件

三、bpe在NLP中的使用示例

1.第一步

2.第二步

3.第三步

四、tiktoken 分詞工具

1.可視化網站

2.分詞工具 解碼序列

五、大語言模型處理中文時是分字還是分詞?

六、bbpe(Byte-Level Byte Pair Encoding)


你和生生不息的河流,生動了我人生中的美好瞬間

????????????????????????????????????????????????????????????????????????—— 25.4.11

一、詞表的構造問題

為了nlp模型訓練,詞表(字表)是必要的

統計訓練語料中的所有字符(或詞)是一種做法,但是容易出現一些問題:

????????1)測試數據中出現訓練數據中沒有的詞

????????2)詞表過大

????????3)對于不同語種,切分粒度不好確認(字 or 詞)


二、bpe(byte pair encoding) 壓縮算法

????????BPE 最初是一種數據壓縮算法,通過迭代合并數據中最頻繁出現的字節對(Byte Pair),逐步構建一個編碼表,將高頻字節對替換為一個新的符號,從而減少數據中的重復模式,達到壓縮目的。其核心邏輯是:通過統計數據中相鄰符號的頻率,不斷合并高頻符號對,生成更復雜的新符號,最終將原始數據轉換為符號序列,減少數據冗余。

算法步驟

假設輸入數據為字符串,初始符號為單個字符(或字節)

Suppose the data to be encoded is:

aaabdaaabac

The byte pair "aa" occurs most often, so it will be replaced by a byte that is not used in the data, such as "Z". Now there is??the following data and replacement table:

ZabdZabac
Z=aa

Then the process is repeated with byte pair 'ab", replacing it with "Y"?:?

ZYdZYac
Z=aa
Y=ab

The only?literal?byte pair left occurs only once, and the encoding might stop here. Alternatively, the process could continue with recursive byte pair encoding, replacing "ZY" with "X":

XdXac
Z=aa
Y=ab
X=ZY

示例:

步驟 1:初始化符號表和頻率統計

????????將輸入數據拆分為最小單元(如單個字符或字節),初始符號表為所有唯一字符的集合。

例如:

輸入數據為?{"low", "lower", "newer", "widest"}

初始符號為?{"l", "o", "w", "e", "r", "n", "w", "i", "d", "s", "t"}

步驟 2:統計相鄰符號對的頻率

????????遍歷數據,統計所有相鄰符號對(Bigram)的出現次數。

例如:

"lo" 出現 2 次("low" 和 "lower"),

"ow" 出現 1 次("low"),

"er" 出現 2 次("lower" 和 "newer"),

其他符號對頻率依次統計。

步驟 3:合并最高頻的符號對

????????選擇頻率最高的符號對,將其作為新符號加入符號表,并在數據中替換所有該符號對為新符號。

例如:

若 "er" 是最高頻對(頻率 2),合并后新符號為 "er",

數據轉換為?{"l ow", "l o er", "n ew er", "w i d e s t"}(注意空格表示符號間隔)。

步驟 4:重復合并直至終止條件

????????重復步驟 2-3,直到達到預設的合并次數(如生成 1000 個符號)或無法繼續合并(所有符號對頻率為 1)。

例如:

最終符號表包含原始字符和合并生成的新符號(如 "lo", "er", "new" 等),數據被轉換為符號序列。


三、bpe在NLP中的使用示例

1.第一步

Ⅰ、假設語料內容如下:

he had a cat

the cat is sitting on the mat

Ⅱ、統計字符集合:

['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't']

Ⅲ、統計相鄰字符同時出現的次數(字符中如有空格不算相鄰)

he:3 (he, the*2)

ha:1 (had)

ad:1 (had)

ca:2 (cat*2)

at:3 (cat*2, mat)

th:2

is:1

si:1

it:1

ti:1

in:1

ng:1

on:1

ma:1?

Ⅳ、最高頻的組合被視為一個新的字符,新的字符集合:

['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't', 'X', 'Y'],X = he,Y = at


2.第二步

Ⅰ、假設語料內容如下:

he had a cat

the cat is sitting on the mat

Ⅱ、新詞表:

['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't', 'X', 'Y'],X = he,Y = at

Ⅲ、統計相鄰字符同時出現的次數(字符中如有空格不算相鄰)

tX(t'he'):2(the * 2)

ha:1(had)

ad:1(had)

cY(c'at'):2(cat * 2)

is:1

si:1

it:1

ti:1

in:1

ng:1

on:1

mY(m'at'):1

Ⅳ、最高頻的組合被視為一個新的字符,新的字符集合:

['a', 'c', 'd', 'e', 'g', 'h', 'i', 'm', 'n', 'o', 's', 't', 'X', 'Y', 'Z', 'M'?],Z = tX(t'he'),M = ha


3.第三步

依次循環,重復合并直至終止條件


四、tiktoken 分詞工具

1.可視化網站

tokenization 可視化網站:https://www.aitokenizer.xyz/


2.分詞工具 解碼序列

import tiktokenencoding = tiktoken.get_encoding("cl100k_base")
print(encoding.encode("一切都會好的,我一直相信"))


五、大語言模型處理中文時是分字還是分詞?

????????答:既不是分字,也不是分詞,是介于字與詞之間的一種東西,我們稱之為 token,大語言模型可以把一個字切分為多個token,也可能把多個字當成一個token,這些token本質上是由訓練數據通過統計算法得到


六、bbpe(Byte-Level Byte Pair Encoding)

????????BBPE(Byte-Level Byte Pair Encoding,字節級字節對編碼)是一種分詞算法,是BPE(Byte Pair Encoding)的進階版本。它通過將文本分解為字節序列,并在字節級別合并高頻連續字節對來構建詞表,從而解決了BPE在多語言和特殊字符處理中的局限性。


????????通過bpe算法,就可以在同一段文本中將不同語種的句子粘合在一起;而數字問題用bpe思想做時,就會導致一定數學計算的問題

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

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

相關文章

TMS320F28P550SJ9學習筆記15:Lin通信SCI模式結構體寄存器

今日初步認識與配置使用Lin通信SCI模式,用結構體寄存器的方式編程 文章提供完整工程下載、測試效果圖 我的單片機平臺是這個: LIN通信引腳: LIN通信PIE中斷: 這個 PIE Vector Table 表在手冊111頁: 這是提到LINa的PI…

linux-設置每次ssh登錄服務器的時候提醒多久需要修改密碼

在 Linux 系統中,你可以通過設置 motd(Message of the Day)或 sshd 配置來在用戶通過 SSH 登錄時提醒他們密碼即將過期。以下是具體步驟: 方法 1: 使用 motd 文件 motd 文件在用戶登錄時顯示,你可以通過腳本動態生成內容,提醒用戶密碼過期時間。 編輯 /etc/motd 文件:…

matlab求和∑函數方程編程?

matlab求和∑函數方程編程? 一 題目:求下列函數方程式的和 二:代碼如下: >> sum_result 0; % 初始化求和變量 for x 1:10 % 設…

electron桌面端開發-打開指定軟件和文件

electron桌面端開發 現在越來越多的軟件開發已經趨向于簡單化,桌面端開發已經不在依賴之前的java、c等主流技術,目前基于node的開發越來越廣泛。功能點也越來越多元化。 文章目錄 electron桌面端開發前言一、打開文件的方式?二、exec使用步驟…

ShenNiusModularity項目源碼學習(17:ShenNius.Admin.Mvc項目分析-2)

ShenNiusModularity項目的后臺管理主頁面如下圖所示,該頁面為ShenNius.Admin.Mvc項目的Views\Home\Index.cshtml,使用的是layuimini后臺模板(參考文獻2),在layuimini的GitHub主頁中提供有不同樣式的頁面模版鏈接&#…

SpringBoot 與 Vue3 實現前后端互聯全解析

在當前的互聯網時代,前后端分離架構已經成為構建高效、可維護且易于擴展應用系統的主流方式。本文將詳細介紹如何利用 SpringBoot 與 Vue3 構建一個前后端分離的項目,展示兩者如何通過 RESTful API 實現無縫通信,讓讀者了解從環境搭建、代碼實…

portainer.io篇

Portainer?是一個輕量級的容器管理工具,支持Docker、Kubernetes、Docker Swarm、ACI和Nomad等多種平臺。它提供了一個直觀的Web界面,使用戶能夠輕松地管理和監控容器,包括創建、啟動、停止、刪除容器,以及查看容器的日志和配置信…

Dockerfile 文件常見命令及其作用

Dockerfile 文件包含一系列命令語句,用于定義 Docker 鏡像的內容、配置和構建過程。以下是一些常見的命令及其作用: FROM:指定基礎鏡像,后續的操作都將基于該鏡像進行。例如,FROM python:3.9-slim-buster 表示使用 Pyt…

Android Studio開發知識:從基礎到進階

引言 Android開發作為移動應用開發的主流方向之一,曾吸引了無數開發者投身其中。然而,隨著市場飽和和技術迭代,當前的Android開發就業形勢并不樂觀,競爭日益激烈。盡管如此,掌握扎實的開發技能仍然是脫穎而出的關鍵。本…

大表查詢的優化方案

?單表優化?: ?字段選擇?:盡量使用TINYINT、SMALLINT、MEDIUMINT作為整數類型,而非INT;如果字段值非負,可以使用UNSIGNED。對于字符串字段,使用枚舉或整數代替字符串類型,使用TIMESTAMP而非D…

常見MQ及類MQ對比:Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ

常見MQ及類MQ對比 基于Grok調研 Redis Stream、Redis Pub/Sub、RocketMQ、Kafka 和 RabbitMQ 關鍵點: Redis Pub/Sub 適合簡單實時消息,但不持久化,消息可能丟失。Redis Stream 提供持久化,適合需要消息歷史的場景,但…

DAPP實戰篇:使用ethersjs連接智能合約并輸入地址查詢該地址余額

本系列目錄 專欄:區塊鏈入門到放棄查看目錄-CSDN博客文章瀏覽閱讀400次。為了方便查看將本專欄的所有內容列出目錄,按照順序查看即可。后續也會在此規劃一下后續內容,因此如果遇到不能點擊的,代表還沒有更新。聲明:文中所出觀點大多數源于筆者多年開發經驗所總結,如果你…

庫magnet使用指南

Magnet 多線程控制庫使用指南 目錄 庫功能概述環境配置核心類與接口基礎使用示例代碼生成工具高級功能與改進建議完整示例代碼常見問題解答 https://blink.csdn.net/details/1872803?spm1001.2014.3001.5501 1. 庫功能概述 Magnet 庫提供以下核心功能: 多線程…

SpringCloud-快速通關(三)

SpringCloud-快速通關(一) SpringCloud-快速通關(二) SpringCloud-快速通關(三) SpringCloud-快速通關(三) 七、Seata - 分布式事務7.1、環境搭建7.1.1、簡介7.1.2、環境搭建7.1.3、seata-server7.1.4、微服務配置7.1.5、測試7.2、事務模式7.2.1、AT模式7.2.2、XA模式…

STM32 TDS+溫度補償

#define POLAR_CONSTANT (513385) /* 電導池常數,可通過與標準TDS測量儀對比計算反推 */ #define TDS_COEFFICIENT (55U) /* TDS 0.55 * 電子傳導率*/void TDS_Value_Conversion() {u32 ad0;u8 i;float compensationCoefficient;float compens…

數據分析實戰案例:使用 Pandas 和 Matplotlib 進行居民用水

原創 IT小本本 IT小本本 2025年04月15日 18:31 北京 本文將使用 Matplotlib 及 Seaborn 進行數據可視化。探索如何清理數據、計算月度用水量并生成有價值的統計圖表,以便更好地理解居民的用水情況。 數據處理與清理 讀取 Excel 文件 首先,我們使用 pan…

離線環境下docker啟動springboot項目

Docker linux 離線部署springboot 搭建dcoker環境 1. 首先在有網絡的機器上下載Docker的離線安裝包&#xff1a; - 訪問 https://download.docker.com/linux/static/stable/x86_64/ - 下載對應版本的 docker-<version>.tgz 文件 2. 將下載的安裝包傳輸到目標Linux機器上…

分布式專題-Redis Cluster集群運維與核心原理剖析

一. 哨兵集群與Redis Cluster 架構異同&#xff1a; redis單機內存不會超過10g&#xff0c;如果太大的話bgsave命令的話對單節點壓力過大。 節點多了&#xff0c;之間的通信也會非常緩慢。 redis集群模式下對從節點是沒有讀取操作的&#xff0c;只在主節點進行讀取操作。 哨…

使用 Node.js、Express 和 React 構建強大的 API

了解如何使用 Node.js、Express 和 React 創建一個強大且動態的 API。這個綜合指南將引導你從設置開發環境開始&#xff0c;到集成 React 前端&#xff0c;并利用 APIPost 進行高效的 API 測試。無論你是初學者還是經驗豐富的開發者&#xff0c;這篇文章都適合你。 今天&#…

智慧聲防:構筑海濱浴場安全屏障的應急廣播系

海濱浴場是夏季旅游的熱門目的地&#xff0c;但潮汐變化、離岸流、突發天氣、溺水事故等安全隱患時刻威脅著游客安全。傳統的安全管理依賴人工瞭望和喊話&#xff0c;存在覆蓋范圍有限、響應速度慢等問題。“智慧聲防”應急廣播系統&#xff0c;通過智能化、網絡化、多場景協同…