【NLP 59、大模型应用 —— 字节对编码 bpe 算法】

news2025/4/19 2:27:24

目录

一、词表的构造问题

二、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:

Ⅳ、最高频的组合被视为一个新的字符,新的字符集合:

['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 tiktoken

encoding = 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.coloradmin.cn/o/2336923.html

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

相关文章

Python对ppt进行文本替换、插入图片、生成表格

目录 1. 安装pptx2. 文本替换和插入图片3. 生成表格 1. 安装pptx pip install python-pptx2. 文本替换和插入图片 文本通过占位符例如{{$xxx}}进行标记,然后进行替换;图片通过ppt中的图形和图片中的占位符进行标记ppt如下 具体实现 from pptx import …

AI(学习笔记第一课) 在vscode中配置continue

文章目录 AI(学习笔记第一课) 在vscode中配置continue学习内容:1. 使用背景2. 在vscode中配置continue2.1 vscode版本2.2 在vscode中下载continue插件2.2.1 直接进行安装2.2.2 在左下角就会有continue的按钮2.2.3 可以移动到右上角2.2.3 使用的时候需要login 2.3 配…

C++ (初始面向对象之继承,实现继承,组合,修饰权限)

初始面向对象之继承 根据面向对象的编程思路,我们可以把共性抽象出来封装成类,然后让不同的角色去继承这些类,从而避免大量重复代码的编写 实现继承 继承机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保…

每日搜索--12月

12.1 1. urlencode是一种编码方式,用于将字符串以URL编码的形式进行转换。 urlencode也称为百分号编码(Percent-encoding),是特定上下文的统一资源定位符(URL)的编码机制。它适用于统一资源标识符(URI)的编码,也用于为application/x-www-form-urlencoded MIME准备数…

一天一个java知识点----Tomcat与Servlet

认识BS架构 静态资源:服务器上存储的不会改变的数据,通常不会根据用户的请求而变化。比如:HTML、CSS、JS、图片、视频等(负责页面展示) 动态资源:服务器端根据用户请求和其他数据动态生成的,内容可能会在每次请求时都…

游戏报错?MFC140.dll怎么安装才能解决问题?提供多种MFC140.dll丢失修复方案

MFC140.dll 是 Microsoft Visual C 2015 运行库的重要组成部分,许多软件和游戏依赖它才能正常运行。如果你的电脑提示 "MFC140.dll 丢失" 或 "MFC140.dll 未找到",说明系统缺少该文件,导致程序无法启动。本文将详细介绍 …

小白如何从0学习php

学习 PHP 可以从零开始逐步深入,以下是针对小白的系统学习路径和建议: 1. 了解 PHP 是什么 定义:PHP 是一种开源的服务器端脚本语言,主要用于 Web 开发(如动态网页、API、后台系统)。 用途:构建…

常见的 14 个 HTTP 状态码详解

文章目录 一、2xx 成功1、200 OK2、204 No Content3、206 Partial Content 二、3xx 重定向1、301 Moved Permanently2、302 Found3、303 See Other注意4、Not Modified5、307 Temporary Redirect 三、4xx 客户端错误1、400 Bad Request2、401 Unauthorized3、403 Forbidden4、4…

Linux Kernel 8

可编程中断控制器(Programmable Interrupt Controller,PIC) 支持中断(interrupt)的设备通常会有一个专门用于发出中断请求Interrupt ReQuest,IRQ的输出引脚(IRQ pin)。这些IRQ引脚连…

原子操作CAS(Compare-And-Swap)和锁

目录 原子操作 优缺点 锁 互斥锁(Mutex) 自旋锁(Spin Lock) 原子性 单核单CPU 多核多CPU 存储体系结构 缓存一致性 写传播(Write Propagation) 事务串行化(Transaction Serialization&#…

【WPF】 在WebView2使用echart显示数据

文章目录 前言一、NuGet安装WebView2二、代码部分1.xaml中引入webview22.编写html3.在WebView2中加载html4.调用js方法为Echarts赋值 总结 前言 为了实现数据的三维效果,所以需要使用Echarts,但如何在WPF中使用Echarts呢? 一、NuGet安装WebV…

OpenCV 图像拼接

一、图像拼接的介绍 图像拼接是一种将多幅具有部分重叠内容的图像合并成一幅完整、无缝且具有更广阔视野或更高分辨率图像的技术。其目的是通过整合多个局部图像来获取更全面、更具信息价值的图像内容。 二、图像拼接的原理 图像拼接的核心目标是将多幅有重叠区域的图像进行准…

数学建模AI智能体(4.16大更新)

别的不说就说下面这几点,年初内卷到现在,就现阶段AI水平,卷出了我比较满意的作品,这里分享给各位同学,让你们少走弯路: 1.轻松辅导学生 2.帮助学习 3.突破知识壁垒,缩短与大佬的差距 4.打破…

Linux》》bash 、sh 执行脚本

通常使用shell去运行脚本,两种方法 》bash xxx.sh 或 bash “xxx.sh” 、sh xxx.sh 或 sh “xxx.sh” 》bash -c “cmd string” 引号不能省略 我们知道 -c 的意思是 command,所以 bash -c 或 sh -c 后面应该跟一个 command。

如何用“AI敏捷教练“破解Scrum项目中的“伪迭代“困局?

一、什么是“伪迭代”? “伪迭代”是指团队表面上采用Scrum框架,但实际运作仍沿用瀑布模式的现象。例如:迭代初期开发人员集中编码、末期测试人员突击测试,导致资源分配不均;需求拆分粗糙,团队无法在固定时…

使用 vxe-table 来格式化任意的金额格式,支持导出与复制单元格格式到 excel

使用 vxe-table 来格式化任意的金额格式,支持导出与复制单元格格式到 excel 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 安装 npm install vx…

金币捕鱼类手游《海洋管家》源码结构与系统分层解析

在休闲互动类移动应用开发中,捕鱼类项目因玩法成熟、逻辑清晰而成为不少开发者接触多端架构与模块化管理的重要起点。本文以一款名为《海洋管家》的项目源码为样例,简要解析其整体结构与主要功能模块,供有类似项目需求或系统学习目的的开发者…

Go语言实现OAuth 2.0认证服务器

文章目录 1. 项目概述1.1 OAuth2 流程 2. OAuth 2.0 Storage接口解析2.1 基础方法2.2 客户端管理相关方法2.3 授权码相关方法2.4 访问令牌相关方法2.5 刷新令牌相关方法 2.6 方法调用时序2.7 关键注意点3. MySQL存储实现原理3.1 数据库设计3.2 核心实现 4. OAuth 2.0授权码流程…

【2025年认证杯数学中国数学建模网络挑战赛】C题 数据预处理与问题一二求解

目录 【2025年认证杯数学建模挑战赛】C题数据预处理与问题一求解三、数据预处理及分析3.1 数据可视化3.2 滑动窗口相关系数统计与动态置信区间耦合分析模型3.3 耦合关系分析结果 四、问题一代码数据预处理问题一 【2025年认证杯数学建模挑战赛】C题 数据预处理与问题一求解 三…

2025年最新Web安全(面试题)

活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧&#xff01…