AI是未来?——token词表BPE

news2024/9/22 19:40:47

AI是未来?——token&词表&BPE


文章目录

  • AI是未来?——token&词表&BPE
  • 引⾔
  • Token简介
  • ⼤模型的词元⽅案 - ⼦词
  • BPE
    • BPE是什么?
    • 举例:
    • BPE在NLP中的应⽤
    • BPE是如何实现编码和解码的?
    • 说明:
    • 有了词表之后,就可以开始编码了:
  • ⼩结




引⾔

chatGPT流⾏之后,有个token这个“新概念”突然变得流⾏了起来:chatGPT⼀次输⼊有token数限制,费⽤按token数计算等。那么token究竟是什么?对应⼀个字符?切词后的结果?切词标准化之后的结果?本⽂将对token做⼀个介绍,并基于⽐较流⾏的BPE编码⽅案做⼀个详细的剖析。

Token简介

token跟⾃然语⾔处理(NLP)中的⼀个关键步骤相关 - 词元化(tokenization),所以token有时 候也会被翻译成“词元”。在整个的NLP处理中,词元化有3类⽅法,分别是:字符级词元化、单词级词元 化、N元语法词元化。字符级词元化就是每个字符对应⼀个token。单词级词元化⽯每个单词作为⼀个 token。N元语法词元化是多个连续单词对应⼀个token。

⼤模型的词元⽅案 - ⼦词

⼦词(subword)词元化是单词级词元化的⼀种,这种⽅案把会单词再切得更细⼀些,⽤更基础的单位来表达语⾔。⽐如:"subword"这个词,可以拆分成"sub"和"word"两个⼦词,"sub"是⼀个通⽤的前缀可以和其他组合词的"sub"前缀合并,这样⼤模型将会学会使⽤"sub"前缀。类似的,“encoded"可以拆解为"encod”+“ed”,“encoding”可以拆解为“encod”+“ing”,这样两个词的核⼼部分"encod"被提取出来了,⽽且还得到时态信息。⼦词⽅案⽐较常⻅的有BPE、WordPiece、ULM等,BPE⽐较常⻅。

BPE

BPE是什么?

BPE的全称是:Byte Pair Encode,最早在1995年提出,当初也不是⽤在NLP领域,⽽是为了实现数据压缩。这个⽅法的关键部分是“Byte Pair”,它采⽤贪婪策略每次把当前⽂本中最⾼频的两个字节压缩成⼀个新的单字节(为了防⽌混淆,要使⽤当前⽂本集合中不存在的字节)。通过⼀次次地反复替换,可以快速把原始输⼊变成⼀个⾮常短的最终⽂本 + 映射表的结构。由于总是去找最⾼频的两个字节⽤⼀个字节替换它们,因此,这个“最终⽂本”会⾜够短,且映射表的映射条数也不会很⻓。

举例:

原始输⼊:supplysupplies

第⼀轮,统计词频,最⾼频组合如下:

[(‘su’, 2), (‘up’, 2), (‘pp’, 2)]

选择将’su’替换为’X’,得到:XpplyXpplies

第⼆轮,统计词频,最⾼频的组合如下:

[(‘Xp’, 2), (‘pp’, 2), (‘pl’, 2)]

选择将’Xp’替换为’Y’,得到:YplyYplies

第三轮,统计词频,最⾼频的组合如下:

[(‘Yp’, 2), (‘pl’, 2), (‘ly’, 1)]

选择将’Yp’替换为’Z’,得到:ZlyZlies

第四轮:统计词频,最⾼频的组合如下:

[(‘Zl’, 2), (‘ly’, 1), (‘yZ’, 1)]

选择将’Zl’替换为’W’,得到:WyWies

第五轮:统计词频,最⾼频组合如下:

[(‘Wy’, 1), (‘yW’, 1), (‘Wi’, 1)]

已经全部为1,编码停⽌。

最终的结果得到:

1)字符串WyWies(⻓度为6,原始字符串⻓度为14个字符,压缩率为42.8%)

2)4条替换规则:su->X, Xp->Y, Yp->Z, Zl->W

BPE在NLP中的应⽤

在上⼀节例⼦的基础上,对替换规则依次增加两个条件:

1)要求替换规则的左侧必须⽤原⽂本集合中的字节表达(即:X必须表达为su,Y必须表达为sup),那么我们可以得到由 [su,sup,supp, suppl ] 4个⼦串构成的集合。

2)要求剔除唯⼀的更短组合,即当“Xp->Y”替换为 X+p = sup时,如果X没有和p之外的其他字节组合,那么字典中不能出现X所代表的su,清理之后,得到[suppl]这个集合。

经过上⾯两个条件的处理,我们发现最终得到的结果是supply、supplies的公共部分,通过BPE能够实现词⼲的提取!类似suppl这样的单词⽚段对应了NLP中⼦词(subword)的概念,BPE就从数据压缩算法扩展成了NLP的⼦词编码算法。

BPE是如何实现编码和解码的?

编码是指把⼀段⾃然语⾔转换为另外⼀种表示,⽐如转换成由⼀个个⼦词构成的列表。解码则是把⼦词列表表示的⼀段数据转换为对应的⾃然语⾔。

在编码和解码之前,我们⾸先需要得到⼀个词典:

1.准备好⾜够⼤的语料,并统计语料中每个单词的词频。

2.确定subword词典的⼤⼩(单词个数)

3.将单词拆解成字符序列,并在单词末尾加特殊标记(⽐如“”)

4.因此,⼀开始,字词的字典是由单个字⺟构成的

5.每⼀轮统计连续2个单位出现的频率,选择最⾼频的合并成⼀个subword

6.重复执⾏上⼀步,直到subword词表⼤⼩符合⽬标,或者最⾼频变为1

说明:

1)词尾加’‘等特殊标记的⽬的是让后缀和单词中间的词区分开来。⽐如:⽐较级的后缀’er’(high-er,fast-er) 和 error erase中的er具有不同的意义,需要做⼀定的区分。实际上词头也可以加区分符,因为 in, un等前缀和词中间的含义也有很⼤不同。

2)词表⼤⼩的变化,通常是先增加后减少的。下图是基于PTB数据集做的实验,做了1.6万轮左右之后,subword词表⼤⼩开始逐渐缩⼩。
在这里插入图片描述

3)⽬标词表的⼤⼩设定⾮常重要 。如果设置过⼩,词表中更多的是⾼频的短字⺟组合,subword不够有区分度(极限情况就是26个字⺟)。如果设置过⼤,⼀⽅⾯计算时间很⻓,另⼀⽅⾯如果语料集不够⼤,得到的往往是原来的全部词汇,失去了做⼦词的意义。⼀般会采⽤16k-32k的词表。

4)最重要的是,要有“⾜够多的语料”。前⾯的PTB数据集实际上很⼩,只有90万个单词,⼤约5M,⼀个⽐较可⽤的语料库⾄少应该要有20G的⽂本,⼤概40亿单词。

有了词表之后,就可以开始编码了:

1.⼦词按⻓度从⻓到短排序;

2.对于输⼊的单词,遍历整个⼦词表,将单词匹配中的部分切分出来,如果有⽆法转化的⼦串,编码为特殊字符(如"")

举例:

有⼦词词典:[‘five’, ‘surviv’, ‘ing’, ‘worker’]

“five surviving workers”这句话将会编码为:

five -> [‘five’]

surviving -> [‘surviv’, ‘ing’]

workers -> [‘worker’, ‘’]

整句话的列表是:[‘five’, ‘surviv’, ‘ing’, ‘worker’, ‘’]那么,如何解码呢?从上⾯的例⼦可以看出,编码其实就是对单词进⾏切分的过程。所以,只要把切开的⼦串再拼接回去,就是解码。拼接过程中需要对部分特殊的字符(如:开头,结束等)做⼀些替换处理。

⼩结

本⽂介绍了⾃然语⾔的词元化(tokenization),并以BPE算法为例介绍了⼦词的编码解码⽅法。基于本⽂的内容,⼤家也可以理解为什么GPT的2000token只能有1500个左右的单词

转载自:https://zhuanlan.zhihu.com/p/636989211

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1132055.html

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

相关文章

喜报|亚数成功入选2023年度徐汇区企业技术中心

近日,徐汇区商务委员会公示了2023年度徐汇区企业技术中心认定企业名单。亚数信息科技(上海)有限公司(以下简称亚数)凭借突出的技术创新能力,成功入选2023年度徐汇区企业技术中心。 图源:上海市徐…

「AI知多少」第一期推荐《生命3.0》

本文主要介绍《生命3.0》AI相关的读书心得 一、书名 《生命3.0》 二、简介 《生命3.0》一书中,作者迈克斯泰格马克对人类的终极未来进行了全方位的畅想,从我们能活到的近未来穿行至1万年乃至10 亿年及其以后,从可见的智能潜入不可见的意识…

【无标题】关于市面上的几款FOC驱动芯片讲解

驱动方案分为硬件模式和软件模式(单片机),控制方式设计方波、弦波、FOC等。 无刷直流 (BLDC) 电机驱动器 | TI.com.cn 1.门极驱动或者集成了MOS管的芯片,需要外置MCU 上图集合了MOS管,一般用在一百瓦以下的场合。 引脚…

图像语义分割 pytorch复现DeepLab v1图像分割网络以及网络详解(骨干网络基于VGG16)

图像语义分割 pytorch复现DeepLab v1图像分割网络以及网络详解(骨干网络基于VGG16) 背景介绍2、 网络结构详解2.1 LarFOV效果分析 2.2 DeepLab v1-LargeFOV 模型架构2.3 MSc(Multi-Scale,多尺度(预测))2.3 以VGG16为特…

@Inherited注解类

包名package java.lang.annotation; 作用 指示批注类型是自动继承的。如果注释类型声明上存在Inherited元注释,并且用户在类声明上查询注释类型,并且该类声明没有该类型的注释,则将自动查询该类的超类的注释类型。将重复此过程,直…

XQ350441.0、XQ350641.0、XQ350441.1、XQ350641.1、XQ350441.2、XQ350641.2三位五通电磁气动阀

XQ230440、XQ230640、XQ230840、XQ231040、XQ231540二位三通气动电磁阀;XQ250440、XQ250640、XQ250840、XQ251040、XQ251540二位五通电磁气动阀;XQ240440二位四通电磁气动阀;XQ230441、XQ230641、XQ230841、XQ231041、XQ231541二位三通电磁气…

Web APIs——键盘事件以及发布评论

一、事件类型 二、 键盘事件 <body><input type"text"><script>const input document.querySelector(input)input.addEventListener(keydown,function(){console.log(键盘按下了);})input.addEventListener(keyup,function(){console.log(键盘弹…

超大场景的倾斜摄影三维模型的顶层合并构建的必要性分析

超大场景的倾斜摄影三维模型的顶层合并构建的必要性分析 倾斜摄影三维模型的顶层构建是将倾斜摄影数据转换为精确的三维模型的过程。它具有许多重要的应用和意义&#xff0c;本文将介绍几个主要的原因。 一、可视化与漫游 倾斜摄影三维模型的顶层构建可以实现对地理场景的精确…

按照外部形态,构成软件系统的构建一共可以分为五类

独立而成熟的构件 成熟而独立的构件得到了实际运行环境的多次检验&#xff0c; 有限制的构件 提供了接口&#xff0c;指出了使用条件和前提&#xff0c;这种构件在装配时会产生资源冲突&#xff0c;覆盖等影响&#xff0c;在使用时需要加以测试。例如各种面向对象程序设计语言中…

【强化学习】08——规划与学习(采样方法|决策时规划)

文章目录 优先级采样Example1 Prioritized Sweepingon Mazes局限性及改进 期望更新和采样更新不同分支因子下的表现 轨迹采样总结实时动态规划Example2 racetrack 决策时规划启发式搜索Rollout算法蒙特卡洛树搜索 参考 先做个简单的笔记整理&#xff0c;以后有时间再补上细节 …

抽象轻松java——简易图书馆前置

用Maven写一个垃圾的项目&#xff0c;第一步打开IDEA&#xff0c;点击创建&#xff0c;创建一个Maven <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</versi…

antv x6 沿边图标循环动画实现

实现效果&#xff0c;如下图&#xff0c;边上存在两个图标&#xff0c;要求图标延边一直循环动画 实现方法&#xff1a; 1.注册一个自定义边&#xff0c;边上定义两个图标&#xff0c;并设置其初始位置 2.使用transition给边设置动画,利用complte方法实现循环动画

8年测试老鸟,Python Selenium自动化测试-POM分层封装框架(超全整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、POM模式是什么…

【JAVA学习笔记】41 - 接口

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/interface_ 一、快速入门 usb插槽就是现实中的接口。你可以把手机&#xff0c;相机&#xff0c;u盘都插在usb插槽上&#xff0c;而不用担心那个插槽是专门插哪个的&#x…

【广州华锐视点】VR塔吊模拟实操考核系统

随着科技的不断发展&#xff0c;虚拟现实技术已经逐渐渗透到各个领域&#xff0c;为人们带来了全新的体验。在建筑行业中&#xff0c;塔吊作为一种重要的起重设备&#xff0c;其拆装作业的安全与否直接关系到工程质量和人员生命安全。为了提高塔吊拆装作业的安全性和效率&#…

VUE3中 reacitive源码理解

Proxy 在Vue里面定义一个响应式函数 reacitive 会通过 Proxy 进行拦截&#xff0c;在截的时候里面有ge和set track get的时候有一个跟踪函数叫 track track里面会收集各种依赖&#xff0c;把依赖关系做成各种映射的关系&#xff0c;映射关系就叫 targetMap&#xff0c;vue内部拿…

ES6初步了解Map对象(含十种方法)

ES6提供了 Map数据结构。它类似于对象&#xff0c;也是键值对的集合。但是“键”的范围不限于字符串&#xff0c;各种类型的值&#xff08;包括对象&#xff09;都可以当作键。 创建方法 let m new Map()console.log(m)Map的方法 1.set( ) 添加元素 接收两个参数&#xff0c…

使用香橙派并基于Linux实现最终版智能垃圾桶项目 --- 下

最终完成效果视频&#xff1a; 使用香橙派并基于Linux实现最终版带图像识别的可回收垃圾桶 — 下_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1bc411o7zS/?spm_id_from333.999.0.0&vd_source16380169fa415d2d056dd877a8d8c1b7 硬件接线 & 最终实现图 目录 …

智能振弦传感器:参数智能识别技术的重要科技创新

智能振弦传感器&#xff1a;参数智能识别技术的重要科技创新 智能振弦传感器是一种能够自动识别传感器参数的高科技产品。它的研发得益于河北稳控科技的不断创新和努力&#xff0c;其电子标签专用读数模块模块TR01将传感器生产和标定过程实现了自动化。该模块将温度电阻两芯线…

单片机中的 _nop_() 延时以及其相关的基础扩展

使用 _nop_() 函数做延时遇到的一些问题 以及对此延伸出的一些需要了解的基本概念 ...... by 矜辰所致 完善文章内容结构&#xff0c;补充指令周期、机器周期等一些基本概念 2023/10/25前言 最近还是继续做着项目&#xff0c;因为在某 8051 内核芯片上使用到了 I…