tokenpocket官方网站首页|token啥意思

作者: tokenpocket官方网站首页
2024-03-08 19:16:27

什么是Token?ChatGPT 中 Token 的概念解读:理解模型输入的基本单位 - 知乎

什么是Token?ChatGPT 中 Token 的概念解读:理解模型输入的基本单位 - 知乎切换模式写文章登录/注册什么是Token?ChatGPT 中 Token 的概念解读:理解模型输入的基本单位一笑​辽宁科技大学 控制科学与工程博士在读在自然语言处理领域中,机器学习模型通常以 token 作为其输入单位。对于 ChatGPT 这样的大型语言模型,了解 token 的概念是理解模型工作原理的关键。一、Token是文本中的最小单位Token 可以被理解为文本中的最小单位。在英文中,一个 token 可以是一个单词,也可以是一个标点符号。在中文中,通常以字或词作为 token。ChatGPT 将输入文本拆分成一个个 token,使模型能够对其进行处理和理解。二、词汇表映射方式对于模型而言,token 是一种数字化的表示形式。每个 token 都与一个唯一的数字 ID 相关联,模型通过这些 ID 来区分不同的 token。在训练过程中,模型学习了将文本映射到这些数字 ID 的方法,以便能够对新的文本进行编码和解码。下面是具体过程(不感兴趣可跳过)这个过程可以通过一种称为词汇表(vocabulary)的映射方式实现。词汇表是一个由模型事先建立的映射表,将每个可能的 token 映射到一个唯一的数字 ID。例如,对于英文单词,一个词汇表可能包含诸如 "hello"、"world"、"chat" 等单词,并为每个单词分配一个唯一的数字 ID。当输入文本被拆分成 token 之后,模型会查找每个 token 在词汇表中的对应 ID,并用这些 ID 来表示输入文本。具体来说,拆分文本为 token 的方式可以根据任务和模型的需求而有所不同。一种常见的方式是通过空格或标点符号来分割文本,将每个单词作为一个 token。然而,对于一些语言,如中文,分词是一个更复杂的过程,需要考虑词和字符之间的关系。一旦输入文本被转换为数字 ID 的序列,模型就可以将其作为输入进行处理。这些数字 ID 可以被表示为向量形式,例如使用独热编码(one-hot encoding)或者更常见的词嵌入(word embedding)表示方法。词嵌入将每个 token 表示为一个连续的向量,其中每个维度代表了某种语义特征。在处理 token 时,模型可以通过逐个 token 的方式进行操作,或者通过考虑 token 之间的关系来获取更多的上下文信息。这取决于具体的模型架构和任务要求。总结而言,ChatGPT 将输入文本拆分为 token,并使用词汇表将每个 token 映射为数字 ID。这种表示形式使得模型能够对文本进行处理和理解,并能够通过学习 token 之间的关系来获取更多的语义信息。三、为什么Token有长度限制模型的输入有一个固定的最大长度限制。当输入文本超过这个限制时,必须进行截断或者其他处理方式来适应模型的要求。这就意味着长文本可能会被分割成多个部分,每个部分成为一个 token 序列。模型有长度限制是由于计算资源和内存限制的存在。大型语言模型如 ChatGPT 包含了数亿甚至数十亿个参数,需要大量的计算资源和内存来运行。为了实现高效的训练和推理,模型的输入必须受到限制。限制输入长度有以下几个原因:计算资源:处理长序列需要更多的计算资源和内存。随着输入长度的增加,模型的计算量也随之增加。为了保证模型能够在合理的时间内完成计算,设置一个最大长度限制是必要的。内存限制:模型的内存资源是有限的。将长序列完整地加载到内存中可能会超出可用的内存容量。通过限制输入长度,可以确保模型能够适应内存的限制并有效地进行计算。训练效果:长序列通常会引入更多的噪声和冗余信息,同时增加模型的复杂度。这可能导致训练过程变得更加困难和低效。通过限制输入长度,可以使训练更加集中和高效,有助于提高模型的性能。四、特殊token在处理 token 时,一些特殊的 token 也起着重要的作用。例如,起始 token(start token)和结束 token(end token)用于指示对话或文本的开头和结尾。模型可以通过这些特殊的 token 来生成连贯的输出。此外,还有一些特殊的 token,如填充 token(padding token)和掩码 token(mask token),用于扩展输入序列的长度或在序列中标记不需要进行处理的部分。总结总结起来,token 是机器学习模型在自然语言处理任务中的输入单位。ChatGPT 将文本拆分成 token 序列,并通过数字 ID 来表示每个 token。理解 token 的概念可以帮助我们更好地了解模型如何处理和理解文本输入。希望这篇博客能帮助你更好地理解 ChatGPT 中的 token 概念!如有需要,可以进一步展开讨论和探索这个话题,留言即可。发布于 2023-05-17 17:24・IP 属地日本tokenOpenAIChatGPT​赞同 85​​2 条评论​分享​喜欢​收藏​申请

什么是token?你是怎么理解token? - 知乎

什么是token?你是怎么理解token? - 知乎切换模式写文章登录/注册什么是token?你是怎么理解token?星光说日常分享丨学习干货丨种草答主1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。3、使用Token的目的:  Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。发布于 2021-03-31 23:32客户端token服务端​赞同 33​​2 条评论​分享​喜欢​收藏​申请

什么是token?token是用来干嘛的?_token是什么意思-CSDN博客

>

什么是token?token是用来干嘛的?_token是什么意思-CSDN博客

什么是token?token是用来干嘛的?

最新推荐文章于 2024-01-09 22:36:02 发布

置顶

儒雅的烤地瓜

最新推荐文章于 2024-01-09 22:36:02 发布

阅读量7.2w

收藏

654

点赞数

126

分类专栏:

JavaScript

文章标签:

token

身份加密

session

Local Storage

服务器

原文链接:http://www.iwanshang.cn/news-20220612857.html

版权

JavaScript

专栏收录该内容

35 篇文章

13 订阅

订阅专栏

相信很多从事计算机行业的朋友都听说过token这么个东西,但是其他行业的人就很少了解到token,下面就给大家来详细介绍一下token是什么意思?token是用来干嘛的这一块的内容,希望能帮助到大家。

token是什么意思

作为计算机术语时,是“令牌”的意思。Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。说白了token是一个身份卡,有权限的作用。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。  

token产生的背景

HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。  

token是用来干嘛的

使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。

大概的流程:

1️⃣客户端使用用户名和密码请求登录。

2️⃣服务端收到请求,验证用户名和密码。

3️⃣验证成功后,服务端会生成一个token,然后把这个token发送给客户端。

4️⃣客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。

5️⃣客户端每次向服务端发送请求的时候都需要带上服务端发给的token。

6️⃣服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。  

token的使用小结:

◾ 前端登陆的时候向服务器发送请求,服务器验证成功,会生成一个token

◾ 前端会存储这个token,放在session或cookie中,用于之后的业务请求身份验证

◾ 拿着这个token,可以在当前登录的账号下进行请求业务,发送请求时,token会放在请求头里,服务器收到这个业务请求,验证token,成功就允许这个请求获取数据

◾ token可以设置失效期  

利用token机制进行登录认证,可以有以下方式:

a. 用设备mac地址作为token

客户端:客户端在登录时获取设备的mac地址,将其作为参数传递到服务端

服务端:服务端接收到该参数后,便用一个变量来接收,同时将其作为token保存在数据库,并将该token设置到session中。客户端每次请求的时候都要统一拦截,将客户端传递的token和服务器端session中的token进行对比,相同则登录成功,不同则拒绝。

此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。缺点是服务器端需要保存mac地址;优点是客户端无需重新登录,只要登录一次以后一直可以使用,对于超时的问题由服务端进行处理。

b. 用sessionid作为token

客户端:客户端携带用户名和密码登录

服务端:接收到用户名和密码后进行校验,正确就将本地获取的sessionid作为token返回给客户端,客户端以后只需带上请求的数据即可。

此方式的优点是方便,不用存储数据,缺点就是当session过期时,客户端必须重新登录才能请求数据。

当然,对于一些保密性较高的应用,可以采取两种方式结合的方式,将设备mac地址与用户名密码同时作为token进行认证。  

APP利用token机制进行身份认证

用户在登录APP时,APP端会发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果验证成功,就会生成相应位数的字符产作为token存储到服务器中,并且将该token返回给APP端。

以后APP再次请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让用户重新登录。其中,服务器上会给token设置一个有效期,每次APP请求的时候都验证token和有效期。  

token的存储

token可以存到数据库中,但是有可能查询token的时间会过长导致token丢失(其实token丢失了再重新认证一个就好,但是别丢太频繁,别让用户没事儿就去认证)。

为了避免查询时间过长,可以将token放到内存中。这样查询速度绝对就不是问题了,也不用太担心占据内存,就算token是一个32位的字符串,应用的用户量在百万级或者千万级,也是占不了多少内存的。  

token的加密

token是很容易泄露的,如果不进行加密处理,很容易被恶意拷贝并用来登录。加密的方式一般有:

在存储的时候把token进行对称加密存储,用到的时候再解密。

文章最开始提到的签名sign:将请求URL、时间戳、token三者合并,通过算法进行加密处理。

最好是两种方式结合使用。

还有一点,在网络层面上token使用明文传输的话是非常危险的,所以一定要使用HTTPS协议。

优惠劵

儒雅的烤地瓜

关注

关注

126

点赞

654

收藏

觉得还不错?

一键收藏

知道了

6

评论

什么是token?token是用来干嘛的?

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。说白了token是一个身份卡,有权限的作用

复制链接

扫一扫

专栏目录

请求时token过期自动刷新token操作

10-14

主要介绍了请求时token过期自动刷新token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

JWT Token生成及验证

07-16

JWT Token生成及验证,JSON WEB TOKEN,简单谈谈TOKEN的使用及在C#中的实现

6 条评论

您还未登录,请先

登录

后发表或查看评论

JWT Token生成及验证(源码)

04-12

JWT Token生成及验证(源码)

5分钟彻底搞懂什么是token

最新发布

这里全是通俗易懂的神经网络算法解析,和好玩的实战项目

01-09

2038

而一旦将词分成子词,模型只需要记住"bug"、"value" 和 "de" 这三个 token 即可,而且还可以扩展识别出 "decrease "的意思。还可能把 “debug” 这个单词看作两个 token,分别为"de" 和 "bug",这样模型可能知道 “de” 前缀代表“减少”的意思。因为当时接触视觉模型多一些,在视觉模型的性能评估中,有一个关键指标叫做 fps,通俗理解就是一秒钟可以处理的图片数。否则,模型可能需要记住"bug"、"debug","value","devalue"四个token.

深入理解token

rizon886的博客

02-10

4047

摘要: Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位

不久前,我在在前后端分离实践中提到了基于 Token 的认证,现在我们稍稍深入一些。

通常情况下,我们在讨论某个技术的时候,都是从问题开始。那么第一个问题:

为什么要用 Token?(无状态token开始比较有用)

而要回答这个问题很简单——因为它能解决问题!

可以解决哪些问题呢?

...

Android使用token维持登陆状态的方法

01-04

什么是token

token(令牌)是一串唯一的字符串,通常由服务端生成,在注册完成时返回给客户端,用来标识此用户,客户端将此字符串存储在本地。在以后的网络请求时,客户端先查询本地的token,如果有则直接使用此令牌进行网络请求,没有则提示未登录,转到登陆注册界面。

此外,还可以在服务端或者客户端添加过期判别机制。

token的作用

token可以显著减少服务端对用户表的查询,同时使用户不必每次都登陆,提高了系统的可用性与健壮性。

使用SharedPreferences保存token

获取token并保存

NetWorks.regPost(user, password, email, t

什么是Token(令牌)

热门推荐

阿狸来了,哇咔咔

10-16

5万+

Acess Token

访问资源接口(API)时所需要的资源凭证

简单token 的组成: uid(用户唯一的身份标识) 、time (当前时间的时间戳) ,sign(签名,token的前几位以hash算法压缩成的一定长度的16进制字符串)

特点:

服务端无状态变化、可扩展性好

支持移动端设备

安全

支持跨域程序调用

token 的身份验证流程

客户端使用用户名和密码进行登录

服务端收到请求,去验证用户名与密码

验证成功后,服务端会签发一个token 并把这个token 发

Token详解

Shuo

09-22

9401

描述了token和jwt,以及jwt的使用。

token基本流程

weixin_48321825的博客

03-15

1万+

token在项目中的使用

token是对session的一个升级,解决了前后端分离的session不能共享的一个难题

1、token基本流程

(1)用户登陆,发送手机号码和验证码

(2)后台接收参数,查找用户,用户存在就生成token,返回给前端

(3)前端登陆成功,把token存到vuex(做持久化)

(4)使用axios拦截器,读取vuex中的token,并放入请求头

(5)请求其他接口,就会带上token

(6)后台在需要登陆的接口上,获取token,解密token获得userId,返回前端需要的数

基于 Cookie/Session 的认证方案

Tatooine

04-29

976

基于 Cookie/Session 的认证方案

Cookie

Cookie 的工作原理

由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是。cookie 指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie 的保存时间,可以自己在程序中设置。如果没有设置保存时间,应该是一关闭浏览器,cookie 就自动消失。

Cookie 实

token的详解

zheng_qq的博客

09-19

1万+

123123132

你管這破玩意兒叫Token1

08-03

1. 首先用户登录,server 会为用户生成一个 sessi on,为其分配唯一的 sessi onId,这个 sessi onId 是与某个用户绑定的,

1

俄版米家 app 看token用的

06-14

智能家居中的小米设备集成到diy平台,或者组合到智能平台时,比如home assistant hass hass.io,需要token,用这个俄版的米家可以方便查看

基于acess_token和refresh_token实现token续签

03-19

基于acess_token和refresh_token实现token续签

前端token值时效性问题怎么解决?

11-15

因为token值每次都是动态获取的且是有有效期的,token值设置有效期是为了防止token泄露 解决办法:在每次发送带token的请求接口前,先在请求拦截器中获取token,然后在响应拦截器中将刷新获取到的token值更新到需要...

onenet MQTT Token计算工具

09-30

onenet MQTT Token计算工具

vue生成token并保存到本地存储中

12-12

首先回顾一下token: token认证是RESTFUL.api的一个很重要的部分,通过token认证和token设置,后端会有一个接口传给前台: http://localhost/yiiserver/web/index.php/token?client_appid=aaa&client_appkey=bbb 其实...

token是什么? token失效怎么解决?

07-16

token是一种用于身份验证和访问控制的令牌。在网络应用中,当用户成功登录后,服务器会为其分配一个唯一的token,用于标识用户身份和授权访问特定资源。

当一个token失效时,可能是由于以下几个原因:

1. 过期失效:token可能设置了一个有效期限,当超过该有效期限,token将自动失效。

2. 用户主动注销:用户可以主动注销token,使其失效。

3. 强制失效:管理员或安全策略可能会强制使某个token失效。

如果一个token失效,可以通过以下方法解决:

1. 重新登录:用户可以尝试使用原有的账号密码重新登录系统,以获取新的有效token。

2. 刷新token:在某些系统中,当token即将过期时,可以使用刷新token来获取一个新的有效token。

3. 申请新的token:如果没有其他解决方法,用户可以联系系统管理员或开发人员,申请一个新的token来替换失效的token。

请注意,具体的解决方法可能因系统而异,以上仅为一般性的解决思路。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

儒雅的烤地瓜

博客等级

码龄4年

241

原创

1662

点赞

4645

收藏

4181

粉丝

关注

私信

热门文章

什么是token?token是用来干嘛的?

72561

解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常

41188

Base64详解:玩转图片Base64编码

41020

Draw.io | 一款强大且支持在线编辑和导出的流程图绘制神器

27204

Vue.use()的用法详解

19802

分类专栏

TCP/IP | OSI模型

21篇

TCP

14篇

HTTP

18篇

Vue.js

45篇

⭐️ Vue踩过的坑

7篇

⭐ Vue.js入门基础

12篇

小程序

17篇

Git

10篇

shell

2篇

开发工具

9篇

JavaScript

35篇

⭐ 前端练手Demo

3篇

⭐️ JS高级教程

17篇

⭐️ JS入门基础

1篇

⭐️ DOM教程

10篇

⭐️ JQuery教程

10篇

Element Vue

Node.js

6篇

⭐ Node.js入门基础

5篇

MySQL

⭐ MySQL入门基础

4篇

CSS

17篇

⭐️ CSS踩过的坑

1篇

⭐ CSS入门基础

10篇

HTML

7篇

Bootstrap

2篇

⭐ Bootstrap入门基础

4篇

ECharts

计算机网络

44篇

服务器

2篇

Nginx

实用工具

7篇

实用插件

2篇

科技星辰

19篇

最新评论

Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)

Fy哥:

项目团队开发时,很有必要

Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)

I'mAlex:

写的很详细很明白,赞。我后面也会写个git专栏,深入剖析git原理,让同学们能够知其然知其所以然。欢迎交流

一文讲透TCP/IP协议 | 图解+秒懂+史上最全

ykbczxgj:

路由器的诞生目录下马超地址和端口的映射记录中左边交换机表格中b,a,d的端口是不是错了呀

解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常

儒雅的烤地瓜:

这是你要打开的网站的服务器出现了问题,网页找不到了,您需要询问该站的负责人

解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常

卷死在路上:

输入后就500 Internal Server Error,这个怎么解决

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

整合总结ES6中常用的新特性,供大家参考

JS中常用占位符使用方法详解_ |%s|%d|%f|%o|%O|%c|

ES6扩展运算符——三个点(...)用法详解

2024年12篇

2023年134篇

2022年137篇

目录

目录

分类专栏

TCP/IP | OSI模型

21篇

TCP

14篇

HTTP

18篇

Vue.js

45篇

⭐️ Vue踩过的坑

7篇

⭐ Vue.js入门基础

12篇

小程序

17篇

Git

10篇

shell

2篇

开发工具

9篇

JavaScript

35篇

⭐ 前端练手Demo

3篇

⭐️ JS高级教程

17篇

⭐️ JS入门基础

1篇

⭐️ DOM教程

10篇

⭐️ JQuery教程

10篇

Element Vue

Node.js

6篇

⭐ Node.js入门基础

5篇

MySQL

⭐ MySQL入门基础

4篇

CSS

17篇

⭐️ CSS踩过的坑

1篇

⭐ CSS入门基础

10篇

HTML

7篇

Bootstrap

2篇

⭐ Bootstrap入门基础

4篇

ECharts

计算机网络

44篇

服务器

2篇

Nginx

实用工具

7篇

实用插件

2篇

科技星辰

19篇

目录

评论 6

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

用户身份验证的令牌——Token - 知乎

用户身份验证的令牌——Token - 知乎首发于人工智能大数据学习交流切换模式写文章登录/注册用户身份验证的令牌——Token企通查北京奥德塔数据科技有限公司Token是什么?所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。图:来源于网络拿实际过程举例,当你下载QQ或微信后第一次用账号和密码成功登录后,Token就为我们免去了每次打开应用都要输入账号跟密码的过程。为什么要使用Token?为什么要使用Token?这个问题其实很好回答——因为它能解决问题!当下用户对产品的使用体验要求在逐渐提高,从产品体验方面来讲,Token带来的体验更容易能让用户接受。那么Token都可以解决哪些问题呢?Token具有随机性、不可预测性、时效性、无状态、跨域等特点。 Token完全由应用管理,所以它可以避开同源策略Token可以避免CSRF攻击Token可以是无状态的,可以在多个服务间共享Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。Token的生命周期1)用户未登录用户执行注册/登录→一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→前端拿到返回的Token后,存入浏览器本地存储2)用户每次访问博客页面从本地存储中拿出Token→JS将Token 放入request的Authorization头,发送http请求向后端索要数据→服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。如何设置Token的有效期?其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。那么为Token设置有效期还有必要吗?对于这个问题,大家不妨先看两个例子:例1:登录密码登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。例2:安全证书SSL安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。那么,Token的有效期多长合适呢?一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。使用 Token 和 Refresh Token 的时序图如下:1)登录 图:来源于网络2)业务请求 图:来源于网络3)Token 过期,刷新 Token 图:来源于网络参考文献:发布于 2021-01-14 10:19tokenWeb 应用HTTP​赞同 91​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录人工智能大数据学

NLP领域中的token和tokenization到底指的是什么? - 知乎

NLP领域中的token和tokenization到底指的是什么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册机器学习自然语言处理语言学NLP领域中的token和tokenization到底指的是什么?这是一个非常简单的基本概念问题,但作为小白,真的不太清晰显示全部 ​关注者267被浏览712,783关注问题​写回答​邀请回答​好问题 22​添加评论​分享​27 个回答默认排序Glan格蓝​武汉大学 工学硕士​ 关注前面都讲了是指什么,我来浅答一下目前大模型时代分词是怎么做的☺️,主要内容为WordPiece,Byte-Pair Encoding (BPE),Byte-level BPE(BBPE)分词方法的原理以及其代码实现,全篇阅读可能需要45分钟,建议收藏~Tokenization(分词) 在自然语言处理(NLP)的任务中是最基本的一步,把文本内容处理为最小基本单元即token(标记,令牌,词元,没有准确的翻译)用于后续的处理,如何把文本处理成token呢?有一系列的方法,基本思想是构建一个词表通过词表一一映射进行分词,但如何构建合适的词表呢?以下以分词粒度为角度进行介绍:1.word(词)粒度在英文语系中,word(词)级别分词实现很简单,因为有天然的分隔符。在中文里面word(词)粒度,需要一些分词工具比如jieba,以下是中文和英文的例子:中文句子:我喜欢看电影和读书。

分词结果:我 | 喜欢 | 看 | 电影 | 和 | 读书。

英文句子:I enjoy watching movies and reading books.

分词结果:I | enjoy | watching | movies | and | reading | books.word(词)粒度的优点有:语义明确:以词为单位进行分词可以更好地保留每个词的语义,使得文本在后续处理中能够更准确地表达含义。上下文理解:以词为粒度进行分词有助于保留词语之间的关联性和上下文信息,从而在语义分析和理解时能够更好地捕捉句子的意图。缺点:长尾效应和稀有词问题: 词表可能变得巨大,包含很多不常见的词汇,增加存储和训练成本,稀有词的训练数据有限,难以获得准确的表示。OOV(Out-of-Vocabulary): 词粒度分词模型只能使用词表中的词来进行处理,无法处理词表之外的词汇,这就是所谓的OOV问题。形态关系和词缀关系: 无法捕捉同一词的不同形态,也无法有效学习词缀在不同词汇之间的共通性,限制了模型的语言理解能力,比如love和loves在word(词)粒度的词表中将会是两个词。2.char(字符)粒度以字符为单位进行分词,即将文本拆分成一个个单独的字符作为最小基本单元,这种字符粒度的分词方法适用于多种语言,无论是英文、中文还是其他不同语言,都能够一致地使用字符粒度进行处理,因为英文就26个字母以及其他的一些符号,中文常见字就6000个左右。中文句子:我喜欢看电影和读书。

分词结果:我 | 喜 | 欢 | 看 | 电 | 影 | 和 | 读 | 书 | 。

英文句子:I enjoy watching movies and reading books.

分词结果:I | | e | n | j | o | y | | w | a | t | c | h | i | n | g | | m | o | v | i | e | s | | a | n | d | | r | e | a | d | i | n | g | | b | o | o | k | s | .char(字符)粒度的优点有:统一处理方式:字符粒度分词方法适用于不同语言,无需针对每种语言设计不同的分词规则或工具,具有通用性。解决OOV问题:由于字符粒度分词可以处理任何字符,无需维护词表,因此可以很好地处理一些新创词汇、专有名词等问题。缺点:语义信息不明确:字符粒度分词无法直接表达词的语义,可能导致在一些语义分析任务中效果较差。处理效率低:由于文本被拆分为字符,处理的粒度较小,增加后续处理的计算成本和时间。3.subword(子词)粒度在很多情况下,既不希望将文本切分成单独的词(太大),也不想将其切分成单个字符(太小),而是希望得到介于词和字符之间的子词单元。这就引入了 subword(子词)粒度的分词方法。在BERT时代,WordPiece 分词方法被广泛应用[1],比如 BERT、DistilBERT等。WordPiece 分词方法是 subword(子词)粒度的一种方法。3.1 WordPieceWordPiece核心思想是将单词拆分成多个前缀符号(比如BERT中的##)最小单元,再通过子词合并规则将最小单元进行合并为子词级别。例如对于单词"word",拆分如下:w ##o ##r ##d然后通过合并规则进行合并,从而循环迭代构建出一个词表,以下是核心步骤:计算初始词表:通过训练语料获得或者最初的英文中26个字母加上各种符号以及常见中文字符,这些作为初始词表。计算合并分数:对训练语料拆分的多个子词单元通过合拼规则计算合并分数。合并分数最高的子词对:选择分数最高的子词对,将它们合并成一个新的子词单元,并更新词表。重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词表的效益)。分词:使用最终得到的词汇表对文本进行分词。简单举例[1]:我们有以下的训练语料中的样例,括号中第2位为在训练语料中出现的频率:("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)我们对其进行拆分为带前缀的形式:("h" "##u" "##g", 10), ("p" "##u" "##g", 5), ("p" "##u" "##n", 12), ("b" "##u" "##n", 4), ("h" "##u" "##g" "##s", 5)所以这些样例的初始词表将会是:["b", "h", "p", "##g", "##n", "##s", "##u"]接下来重要的一步进行计算合并分数,也称作互信息(信息论中衡量两个变量之间的关联程度[2]),简单来说就是以下公式来计算score=(freq_of_pair)/(freq_of_first_element×freq_of_second_element)

分数 = 合并pair候选的频率 / (第一个元素的频率 × 第二个元素的频率)对于上述样例中这个pair("##u", "##g")出现的频率是最高的20次,但是"##u"出现的频率是36次, "##g"出现的频率是20次,所以这个pair("##u", "##g")的分数是(20)/(36*20) = 1/36,同理计算这个pair("##g", "##s")的分数为(5)/(20*5) = 1/20,所以最先合并的pair是("##g", "##s")→("##gs")。此时词表和拆分后的的频率将变成以下:Vocabulary: ["b", "h", "p", "##g", "##n", "##s", "##u", "##gs"]

Corpus: ("h" "##u" "##g", 10), ("p" "##u" "##g", 5), ("p" "##u" "##n", 12), ("b" "##u" "##n", 4), ("h" "##u" "##gs", 5)重复上述的操作,直到达到你想要的词表的大小Vocabulary: ["b", "h", "p", "##g", "##n", "##s", "##u", "##gs", "hu", "hug"]

Corpus: ("hug", 10), ("p" "##u" "##g", 5), ("p" "##u" "##n", 12), ("b" "##u" "##n", 4), ("hu" "##gs", 5)代码实现:用一些包含中英文的文本作为训练语料,因为英文有天然的分隔符,所以在这个例子中,中文已经进行了分词:sentences = [

"我",

"喜欢",

"吃",

"苹果",

"他",

"不",

"喜欢",

"吃",

"苹果派",

"I like to eat apples",

"She has a cute cat",

"you are very cute",

"give you a hug",

]统计每个词出现的频率并初始化初始词表:from collections import defaultdict

# 构建频率统计

def build_stats(sentences):

stats = defaultdict(int)

for sentence in sentences:

symbols = sentence.split()

for symbol in symbols:

stats[symbol] += 1

return stats

stats = build_stats(sentences)

print("stats:", stats)

alphabet = []

for word in stats.keys():

if word[0] not in alphabet:

alphabet.append(word[0])

for letter in word[1:]:

if f"##{letter}" not in alphabet:

alphabet.append(f"##{letter}")

alphabet.sort()

# 初始词表

vocab = alphabet.copy()

print("alphabet:", alphabet)

# 结果

stats: defaultdict(, {'我': 1, '喜欢': 2, '吃': 2, '苹果': 1, '他': 1, '不': 1, '苹果派': 1, 'I': 1, 'like': 1, 'to': 1, 'eat': 1, 'apples': 1, 'She': 1, 'has': 1, 'a': 2, 'cute': 2, 'cat': 1, 'you': 2, 'are': 1, 'very': 1, 'give': 1, 'hug': 1})

# 初始词表

alphabet: ['##a', '##e', '##g', '##h', '##i', '##k', '##l', '##o', '##p', '##r', '##s', '##t', '##u', '##v', '##y', '##果', '##欢', '##派', 'I', 'S', 'a', 'c', 'e', 'g', 'h', 'l', 't', 'v', 'y', '不', '他', '吃', '喜', '我', '苹']根据初始词表拆分每个词:splits = {

word: [c if i == 0 else f"##{c}" for i, c in enumerate(word)]

for word in stats.keys()

}

print("splits:", splits)

# 结果

splits: {'我': ['我'], '喜欢': ['喜', '##欢'], '吃': ['吃'], '苹果': ['苹', '##果'], '他': ['他'], '不': ['不'], '苹果派': ['苹', '##果', '##派'], 'I': ['I'], 'like': ['l', '##i', '##k', '##e'], 'to': ['t', '##o'], 'eat': ['e', '##a', '##t'], 'apples': ['a', '##p', '##p', '##l', '##e', '##s'], 'She': ['S', '##h', '##e'], 'has': ['h', '##a', '##s'], 'a': ['a'], 'cute': ['c', '##u', '##t', '##e'], 'cat': ['c', '##a', '##t'], 'you': ['y', '##o', '##u'], 'are': ['a', '##r', '##e'], 'very': ['v', '##e', '##r', '##y'], 'give': ['g', '##i', '##v', '##e'], 'hug': ['h', '##u', '##g']}根据上述提到的计算互信息的分数公式进行计算:def compute_pair_scores(splits):

letter_freqs = defaultdict(int)

pair_freqs = defaultdict(int)

for word, freq in stats.items():

split = splits[word]

if len(split) == 1:

letter_freqs[split[0]] += freq

continue

for i in range(len(split) - 1):

pair = (split[i], split[i + 1])

letter_freqs[split[i]] += freq

pair_freqs[pair] += freq

letter_freqs[split[-1]] += freq

scores = {

pair: freq / (letter_freqs[pair[0]] * letter_freqs[pair[1]])

for pair, freq in pair_freqs.items()

}

return scores

pair_scores = compute_pair_scores(splits)

for i, key in enumerate(pair_scores.keys()):

print(f"{key}: {pair_scores[key]}")

if i >= 5:

break一些结果:('喜', '##欢'): 0.5

('苹', '##果'): 0.5

('##果', '##派'): 0.5

('l', '##i'): 0.5

('##i', '##k'): 0.5

('##k', '##e'): 0.125我们需要的是将分数最高的进行合并然后开始循环迭代,看一看分数最高的pair(子词对):best_pair = ""

max_score = None

for pair, score in pair_scores.items():

if max_score is None or max_score < score:

best_pair = pair

max_score = score

print(best_pair, max_score)

# 结果

('S', '##h') 1.0结果为('S', '##h') 1.0,所以最先合成的就是('S', '##h')→'##Sh',合并的函数如下:def merge_pair(a, b, splits):

for word in stats:

split = splits[word]

if len(split) == 1:

continue

i = 0

while i < len(split) - 1:

if split[i] == a and split[i + 1] == b:

merge = a + b[2:] if b.startswith("##") else a + b

split = split[:i] + [merge] + split[i + 2 :]

else:

i += 1

splits[word] = split

return splits最后就是一直进行循环迭代,直到vocab达到了我们想要的数量vocab_size = 50

while len(vocab) < vocab_size:

scores = compute_pair_scores(splits)

best_pair, max_score = "", None

for pair, score in scores.items():

if max_score is None or max_score < score:

best_pair = pair

max_score = score

splits = merge_pair(*best_pair, splits)

new_token = (

best_pair[0] + best_pair[1][2:]

if best_pair[1].startswith("##")

else best_pair[0] + best_pair[1]

)

vocab.append(new_token)

print("vocab:", vocab)

# 结果

vocab: ['##a', '##e', '##g', '##h', '##i', '##k', '##l', '##o', '##p', '##r', '##s', '##t', '##u', '##v', '##y', '##果', '##欢', '##派', 'I', 'S', 'a', 'c', 'e', 'g', 'h', 'l', 't', 'v', 'y', '不', '他', '吃', '喜', '我', '苹', 'Sh', '喜欢', '苹果', '苹果派', 'li', 'lik', 'gi', 'giv', '##pl', '##ppl', '##ry', 'to', 'yo', 'ea', 'eat']上述就是WordPiece分词方法的代码实现,一般来说最后会在词表中加上一些特殊词汇,以及英文中26个字母加上各种符号以及常见中文字符,不过如果训练语料比较大以及词表比较大那这些应该也是已经包括了,只需要添加特殊词汇:all_vocab = vocab + ["[PAD]", "[UNK]", "[CLS]", "[SEP]", "[MASK]"] + other_alphabet在大语言模型时代,最常用的分词方法是Byte-Pair Encoding (BPE)和Byte-level BPE(BBPE),Byte-Pair Encoding (BPE)最初是一种文本压缩算法在15年被引入到NLP用于分词[3],在训练 GPT 时被 OpenAI 用于tokenization,后续好多模型GPT,RoBERTa等都采用了这种分词方法。Byte-level BPE(BBPE)是于19年在BPE的基础上提出以Byte-level(字节)为粒度的分词方法[4],目前 GPT2,BLOOM,Llama,Falcon等采用的是该分词方法。3.2 Byte-Pair Encoding (BPE)Byte-Pair Encoding (BPE)核心思想是逐步合并出现频率最高的子词对而不是像Wordpiece计算合并分数,从而构建出一个词汇表,以下是核心步骤:计算初始词表:通过训练语料获得或者最初的英文中26个字母加上各种符号以及常见中文字符,这些作为初始词表。构建频率统计:统计所有子词单元对(两个连续的子词)在文本中的出现频率。合并频率最高的子词对:选择出现频率最高的子词对,将它们合并成一个新的子词单元,并更新词汇表。重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词汇表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词汇表的效益)。分词:使用最终得到的词汇表对文本进行分词。简单的代码实现[5]:用一些包含中英文的文本作为训练语料和上面相同,因为英文有天然的分隔符,所以在这个例子中,中文已经进行了分词:sentences = [

"我",

"喜欢",

"吃",

"苹果",

"他",

"不",

"喜欢",

"吃",

"苹果派",

"I like to eat apples",

"She has a cute cat",

"you are very cute",

"give you a hug",

]统计每个词出现的频率并初始化初始词表:# 构建频率统计

def build_stats(sentences):

stats = defaultdict(int)

for sentence in sentences:

symbols = sentence.split()

for symbol in symbols:

stats[symbol] += 1

return stats

stats = build_stats(sentences)

print("stats:", stats)

alphabet = []

for word in stats.keys():

for letter in word:

if letter not in alphabet:

alphabet.append(letter)

alphabet.sort()

# 初始词表

vocab = alphabet.copy()

print("alphabet:", alphabet)

# 结果

stats: defaultdict(, {'我': 1, '喜欢': 2, '吃': 2, '苹果': 1, '他': 1, '不': 1, '苹果派': 1, 'I': 1, 'like': 1, 'to': 1, 'eat': 1, 'apples': 1, 'She': 1, 'has': 1, 'a': 2, 'cute': 2, 'cat': 1, 'you': 2, 'are': 1, 'very': 1, 'give': 1, 'hug': 1})

# 初始词表

alphabet: ['I', 'S', 'a', 'c', 'e', 'g', 'h', 'i', 'k', 'l', 'o', 'p', 'r', 's', 't', 'u', 'v', 'y', '不', '他', '吃', '喜', '我', '果', '欢', '派', '苹']根据初始词表拆分每个词,计算左右pair(子词对)出现的频率splits = {word: [c for c in word] for word in stats.keys()}

print("splits:", splits)

def compute_pair_freqs(splits):

pair_freqs = defaultdict(int)

for word, freq in stats.items():

split = splits[word]

if len(split) == 1:

continue

for i in range(len(split) - 1):

pair = (split[i], split[i + 1])

pair_freqs[pair] += freq

return pair_freqs

pair_freqs = compute_pair_freqs(splits)

for i, key in enumerate(pair_freqs.keys()):

print(f"{key}: {pair_freqs[key]}")

if i >= 5:

break

# 结果

splits: {'我': ['我'], '喜欢': ['喜', '欢'], '吃': ['吃'], '苹果': ['苹', '果'], '他': ['他'], '不': ['不'], '苹果派': ['苹', '果', '派'], 'I': ['I'], 'like': ['l', 'i', 'k', 'e'], 'to': ['t', 'o'], 'eat': ['e', 'a', 't'], 'apples': ['a', 'p', 'p', 'l', 'e', 's'], 'She': ['S', 'h', 'e'], 'has': ['h', 'a', 's'], 'a': ['a'], 'cute': ['c', 'u', 't', 'e'], 'cat': ['c', 'a', 't'], 'you': ['y', 'o', 'u'], 'are': ['a', 'r', 'e'], 'very': ['v', 'e', 'r', 'y'], 'give': ['g', 'i', 'v', 'e'], 'hug': ['h', 'u', 'g']}

('喜', '欢'): 2

('苹', '果'): 2

('果', '派'): 1

('l', 'i'): 1

('i', 'k'): 1

('k', 'e'): 1然后开始循环迭代找到出现频率最高的pair(子词对):best_pair = ""

max_freq = None

for pair, freq in pair_freqs.items():

if max_freq is None or max_freq < freq:

best_pair = pair

max_freq = freq

print(best_pair, max_freq)结果为【('喜', '欢') 2】,所以最先合成的就是('喜', '欢')→'喜欢',然后合并的函数如下:def merge_pair(a, b, splits):

for word in stats:

split = splits[word]

if len(split) == 1:

continue

i = 0

while i < len(split) - 1:

if split[i] == a and split[i + 1] == b:

split = split[:i] + [a + b] + split[i + 2 :]

else:

i += 1

splits[word] = split

return splits最后就是一直进行循环直到vocab达到了我们想要的数量:# 假设我们想要的词典为50

merges = {}

vocab_size = 50

while len(vocab) < vocab_size:

pair_freqs = compute_pair_freqs(splits)

best_pair = ""

max_freq = None

for pair, freq in pair_freqs.items():

if max_freq is None or max_freq < freq:

best_pair = pair

max_freq = freq

splits = merge_pair(*best_pair, splits)

merges[best_pair] = best_pair[0] + best_pair[1]

vocab.append(best_pair[0] + best_pair[1])

print("merges:", merges)

print("vocab:", vocab)

# 结果

merges: {('喜', '欢'): '喜欢', ('苹', '果'): '苹果', ('a', 't'): 'at', ('c', 'u'): 'cu', ('cu', 't'): 'cut', ('cut', 'e'): 'cute', ('y', 'o'): 'yo', ('yo', 'u'): 'you', ('v', 'e'): 've', ('苹果', '派'): '苹果派', ('l', 'i'): 'li', ('li', 'k'): 'lik', ('lik', 'e'): 'like', ('t', 'o'): 'to', ('e', 'at'): 'eat', ('a', 'p'): 'ap', ('ap', 'p'): 'app', ('app', 'l'): 'appl', ('appl', 'e'): 'apple', ('apple', 's'): 'apples', ('S', 'h'): 'Sh', ('Sh', 'e'): 'She', ('h', 'a'): 'ha'}

vocab: ['I', 'S', 'a', 'c', 'e', 'g', 'h', 'i', 'k', 'l', 'o', 'p', 'r', 's', 't', 'u', 'v', 'y', '不', '他', '吃', '喜', '我', '果', '欢', '派', '苹', '喜欢', '苹果', 'at', 'cu', 'cut', 'cute', 'yo', 'you', 've', '苹果派', 'li', 'lik', 'like', 'to', 'eat', 'ap', 'app', 'appl', 'apple', 'apples', 'Sh', 'She', 'ha']再加上一些特殊词汇和其他词汇:all_vocab = vocab + ["[PAD]", "[UNK]", "[BOS]", "[EOS]"] + other_alphabet上述就是BPE的代码实现,BPE理论上还是会出现OOV的,当词汇表的大小受限时,一些较少频繁出现的子词和没有在训练过程中见过的子词,就会无法进入词汇表出现OOV,而Byte-level BPE(BBPE)理论上是不会出现这个情况的。3.3 Byte-level BPE(BBPE)基础知识:Unicode: Unicode 是一种字符集,旨在涵盖地球上几乎所有的书写系统和字符。它为每个字符分配了一个唯一的代码点(code point)用于标识字符。Unicode 不关注字符在计算机内部的具体表示方式,而只是提供了一种字符到代码点的映射。Unicode 的出现解决了字符集的碎片化问题,使得不同的语言和字符能够在一个共同的标准下共存。然而,Unicode 并没有规定如何在计算机内存中存储和传输这些字符。UTF-8: UTF-8(Unicode Transformation Format-8)是一种变长的字符编码方案,它将 Unicode 中的代码点转换为字节序列。UTF-8 的一个重要特点是它是向后兼容 ASCII 的,这意味着标准的 ASCII 字符在 UTF-8 中使用相同的字节表示,从而确保现有的 ASCII 文本可以无缝地与 UTF-8 共存。在 UTF-8 编码中,字符的表示长度可以是1到4个字节,不同范围的 Unicode 代码点使用不同长度的字节序列表示,这样可以高效地表示整个 Unicode 字符集。UTF-8 的编码规则是:单字节字符(ASCII 范围内的字符)使用一个字节表示,保持与 ASCII 编码的兼容性。带有更高代码点的字符使用多个字节表示。UTF-8 使用特定的字节序列来指示一个字符所需的字节数,以及字符的实际数据。例如,英文字母 "A" 的 Unicode 代码点是U+0041,在 UTF-8 中表示为 0x41(与 ASCII 编码相同);而中文汉字 "你" 的 Unicode 代码点是U+4F60,在 UTF-8 中表示为0xE4 0xBD 0xA0三个字节的序列。所以简单的来说:Unicode 是字符集,为每个字符分配唯一的代码点。UTF-8 是一种基于 Unicode 的字符编码方式,用于在计算机中存储和传输字符。Byte(字节):计算机存储和数据处理时,字节是最小的单位。一个字节包含8个(Bit)二进制位,每个位可以是0或1,每位的不同排列和组合可以表示不同的数据,所以一个字节能表示的范围是256个。言归正传:Byte-level BPE(BBPE)和Byte-Pair Encoding (BPE)区别就是BPE是最小词汇是字符级别,而BBPE是字节级别的,通过UTF-8的编码方式这一个字节的256的范围,理论上可以表示这个世界上的所有字符。所以实现的步骤和BPE就是实现的粒度不一样,其他的都是一样的。初始词表:构建初始词表,包含一个字节的所有表示(256)。构建频率统计:统计所有子词单元对(两个连续的子词)在文本中的出现频率。合并频率最高的子词对:选择出现频率最高的子词对,将它们合并成一个新的子词单元,并更新词汇表。重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词汇表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词汇表的效益)。分词:使用最终得到的词汇表对文本进行分词。简单代码实现,不做赘述,读者朋友们可以自己实现一下from collections import defaultdict

sentences = [

"我",

"喜欢",

"吃",

"苹果",

"他",

"不",

"喜欢",

"吃",

"苹果派",

"I like to eat apples",

"She has a cute cat",

"you are very cute",

"give you a hug",

]

# 构建初始词汇表,包含一个字节的256个表示

initial_vocab = [bytes([byte]) for byte in range(256)]

vocab = initial_vocab.copy()

print("initial_vocab:", initial_vocab)

# 构建频率统计

def build_stats(sentences):

stats = defaultdict(int)

for sentence in sentences:

symbols = sentence.split()

for symbol in symbols:

stats[symbol.encode("utf-8")] += 1

return stats

stats = build_stats(sentences)

splits = {word: [byte for byte in word] for word in stats.keys()}

def compute_pair_freqs(splits):

pair_freqs = defaultdict(int)

for word, freq in stats.items():

split = splits[word]

if len(split) == 1:

continue

for i in range(len(split) - 1):

pair = (split[i], split[i + 1])

pair_freqs[pair] += freq

return pair_freqs

pair_freqs = compute_pair_freqs(splits)

def merge_pair(pair, splits):

merged_byte = bytes(pair)

for word in stats:

split = splits[word]

if len(split) == 1:

continue

i = 0

while i < len(split) - 1:

if split[i:i+2] == pair: # 检查分割中是否有这对字节

split = split[:i] + [merged_byte] + split[i + 2 :]

else:

i += 1

splits[word] = split

return splits

vocab_size = 50

while len(vocab) < vocab_size:

pair_freqs = compute_pair_freqs(splits)

best_pair = ()

max_freq = None

for pair, freq in pair_freqs.items():

if max_freq is None or max_freq < freq:

best_pair = pair

max_freq = freq

splits = merge_pair(best_pair, splits)

merged_byte = bytes(best_pair)

print("vocab:", vocab)着重解释一下为什么Byte-level BPE(BBPE)不会出现OOV问题,初始的词表里有256个表示如下:[b'\x00', b'\x01', b'\x02', b'\x03', b'\x04', b'\x05', b'\x06', b'\x07', b'\x08', b'\t', b'\n', b'\x0b', b'\x0c', b'\r', b'\x0e', b'\x0f', b'\x10', b'\x11', b'\x12', b'\x13', b'\x14', b'\x15', b'\x16', b'\x17', b'\x18', b'\x19', b'\x1a', b'\x1b', b'\x1c', b'\x1d', b'\x1e', b'\x1f', b' ', b'!', b'"', b'#', b'$', b'%', b'&', b"'", b'(', b')', b'*', b'+', b',', b'-', b'.', b'/', b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9', b':', b';', b'<', b'=', b'>', b'?', b'@', b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I', b'J', b'K', b'L', b'M', b'N', b'O', b'P', b'Q', b'R', b'S', b'T', b'U', b'V', b'W', b'X', b'Y', b'Z', b'[', b'\\', b']', b'^', b'_', b'`', b'a', b'b', b'c', b'd', b'e', b'f', b'g', b'h', b'i', b'j', b'k', b'l', b'm', b'n', b'o', b'p', b'q', b'r', b's', b't', b'u', b'v', b'w', b'x', b'y', b'z', b'{', b'|', b'}', b'~', b'\x7f', b'\x80', b'\x81', b'\x82', b'\x83', b'\x84', b'\x85', b'\x86', b'\x87', b'\x88', b'\x89', b'\x8a', b'\x8b', b'\x8c', b'\x8d', b'\x8e', b'\x8f', b'\x90', b'\x91', b'\x92', b'\x93', b'\x94', b'\x95', b'\x96', b'\x97', b'\x98', b'\x99', b'\x9a', b'\x9b', b'\x9c', b'\x9d', b'\x9e', b'\x9f', b'\xa0', b'\xa1', b'\xa2', b'\xa3', b'\xa4', b'\xa5', b'\xa6', b'\xa7', b'\xa8', b'\xa9', b'\xaa', b'\xab', b'\xac', b'\xad', b'\xae', b'\xaf', b'\xb0', b'\xb1', b'\xb2', b'\xb3', b'\xb4', b'\xb5', b'\xb6', b'\xb7', b'\xb8', b'\xb9', b'\xba', b'\xbb', b'\xbc', b'\xbd', b'\xbe', b'\xbf', b'\xc0', b'\xc1', b'\xc2', b'\xc3', b'\xc4', b'\xc5', b'\xc6', b'\xc7', b'\xc8', b'\xc9', b'\xca', b'\xcb', b'\xcc', b'\xcd', b'\xce', b'\xcf', b'\xd0', b'\xd1', b'\xd2', b'\xd3', b'\xd4', b'\xd5', b'\xd6', b'\xd7', b'\xd8', b'\xd9', b'\xda', b'\xdb', b'\xdc', b'\xdd', b'\xde', b'\xdf', b'\xe0', b'\xe1', b'\xe2', b'\xe3', b'\xe4', b'\xe5', b'\xe6', b'\xe7', b'\xe8', b'\xe9', b'\xea', b'\xeb', b'\xec', b'\xed', b'\xee', b'\xef', b'\xf0', b'\xf1', b'\xf2', b'\xf3', b'\xf4', b'\xf5', b'\xf6', b'\xf7', b'\xf8', b'\xf9', b'\xfa', b'\xfb', b'\xfc', b'\xfd', b'\xfe', b'\xff']通过上述的方式其实是在一直根据训练语料循环迭代合成子词或者词,最后形成词表,比如“苹果”通过UTF-8进行编码后为“\xe8\x8b\xb9\xe6\x9e\x9c”,如果词表里面有,那“苹果”就通过词表映射成了1个表示,准确来说是1个token;如果词表里没有,那就用256中的“\xe8+\x8b+\xb9+\xe6+\x9e+\x9c”来表示“苹果”这个词,那就是6个token。在先前的各种分词方法中,如果词典里没有”苹果“这个词,也没有”苹“,”果“这样的子词的话,那就变成了[UNK]。所以在现在的大模型中,以Byte-level BPE(BBPE)这种方式进行分词是不会出现OOV,但词表中如果没有word级别的词的话,一些中英文就会分词分的很细碎,比如Llama在中文上就会把一些词分成多个token其实就是UTF-8后的中文编码,对编码效率以及语义会有影响,于是出现了一些扩充Llama中文词表的工作。上述分词算法在工程上实现一般使用sentencpiece工具包[6],谷歌在这个包中实现了上述的一系列算法,扩充Llama中文词表的工作也都是在此上面实现的。后续我也会写一篇文章进行详细的讲解。欢迎关注~其他文章:参考^ab[1] https://huggingface.co/learn/nlp-course/chapter6/6?fw=pt^[3] https://zh.wikipedia.org/zh-hans/%E4%BA%92%E4%BF%A1%E6%81%AF^[3] https://arxiv.org/abs/1508.07909^[4] https://arxiv.org/abs/1909.03341^[5] https://huggingface.co/learn/nlp-course/chapter6/5?fw=pt^[6] https://github.com/google/sentencepiece编辑于 2023-09-02 18:19​赞同 302​​8 条评论​分享​收藏​喜欢收起​OpenLLMAI​​浙江大学 工学硕士​ 关注简而言之:token可以理解为最小语义单元,翻译的话个人喜欢叫词元(当然翻译成令牌、词都行),可以是word/char/subword。tokenization是指分词,目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如学习embedding或者作为高级模型的输入)使用。原文:0.序章笔者在上一篇文章中对最近折腾大模型的过程进行了反思,痛定思痛,决定除了工作部分以外不再浪费太多时间去跑更大规模的模型,同时决心开一些新坑来倒逼输入并与大家交流讨论,暂时的想法是在OpenLLM下面做两个系列:LLM基础组件和LLM炼丹术。注:从4.11开始,不知不觉居然写到OpenLLM 008了,这十几天累成狗了,最快乐的时候居然是忙里偷闲写这些东西的时候,amazing!LLM基础组件tokenization&tokenizers:分词算法与分词器位置编码attention机制基础架构与attention mask归一化激活函数行为思路分词算法与分词器作为LLM(大语言模型)的基础组件,作用相当于文本与模型的桥梁。因此作为LLM基础组件系列的开篇,本文将对主流的分词算法和分词器进行全面的梳理和介绍。updates2023/04/30,资料阅读+整理,完成大纲;2023/05/01,主流subword算法伪代码;bert分词代码解读;2023/05/02,+byte-level BPE、优缺点、示例、总结等,主体内容基本算是写完了;剩余的代码实现示例和具体模型的分词器示例后续有空再补(看优先级和精力);2023/05/03,XX;1.分词算法tokenization算法大致经历了从word/char到subword的进化,这一章首先介绍不同的分词粒度,然后对主流的三大subword分词算法进行介绍,配合代码和实例,希望可以对subword算法有一个比较全面的梳理。0.文本应该分成什么粒度?分词的目的是将输入文本分成一个个词元,保证各个词元拥有相对完整和独立的语义,以供后续任务(比如学习embedding或者作为高级模型的输入)使用。首先,最自然的粒度当然是词粒度。词,作为语言最自然的基本单元,在英文等语言中有着天然的空格分隔,但是对于中文等语言可能需要额外的分词算法来进行处理(比如中文的jieba分词)。不过,我们总归是有办法获得各种各样的词的,这并不是一个致命的问题。真正影响词粒度分词算法应用问题主要有:1)词粒度的词表由于长尾效应可能会非常大,包含很多的稀有词,存储和训练的成本都很高,并且稀有词往往很难学好;2)OOV问题,对于词表之外的词无能为力;3)无法处理单词的形态关系和词缀关系:同一个词的不同形态,语义相近,完全当做不同的单词不仅增加了训练成本,而且无法很好的捕捉这些单词之间的关系;同时,也无法学习词缀在不同单词之间的泛化。那么,一个很自然的想法就是使用字符粒度的词表,这样OOV问题迎刃而解了,但是字符粒度太细了,会造成新的问题:1)无法承载丰富的语义;2)序列长度增长,带来计算成本的增长。所以,如何结合word和char粒度各自的优势呢?subword分词应运而生,顾名思义,粒度介于char和Word之间,基本思想为常用词应该保持原状,生僻词应该拆分成子词以共享token压缩空间,所以可以较好的平衡词表大小与语义表达能力,比如OOV问题可以通过subword的组合来解决。目前有三种主流的Subword分词算法,分别是Byte Pair Encoding (BPE), WordPiece和Unigram Language Model。总结一下,文本的分词粒度:word:优点:词的边界和含义得到保留;缺点:1)词表大,稀有词学不好;2)OOV;3)无法处理单词形态关系和词缀关系;char:优点:词表极小,比如26个英文字母几乎可以组合出所有词,5000多个中文常用字基本也能组合出足够的词汇;缺点:1)无法承载丰富的语义;2)序列长度大幅增长;subword:可以较好的平衡词表大小与语义表达能力;1.BPEBPE最早其实是一种数据压缩算法,基本思想是将经常一起出现的数据对替换为不在数据串中的其他字符,后续可以通过一个merge表来恢复原始数据。在2015年,由论文[1508.07909] Neural Machine Translation of Rare Words with Subword Units引入NLP领域。核心思想:从一个基础小词表开始,通过不断合并最高频的连续token对来产生新的token。具体做法:输入:训练语料;词表大小V1.准备基础词表:比如英文中26个字母加上各种符号;2.基于基础词表将语料拆分为最小单元;3.在语料上统计单词内相邻单元对的频率,选择频率最高的单元对进行合并;4.重复第3步直到达到预先设定的subword词表大小或下一个最高频率为1;输出:BPE算法得到的subword词表下面是一个BPE的训练示例:优势与劣势:优势:可以有效地平衡词汇表大小和编码步数(编码句子所需的token数量,与词表大小和粒度有关)。劣势:基于贪婪和确定的符号替换,不能提供带概率的多个分词结果(这是相对于ULM而言的);decode的时候面临歧义问题。BPE的劣势:代码实现:refs:[1508.07909] Neural Machine Translation of Rare Words with Subword Units理解NLP最重要的编码方式 — Byte Pair Encoding (BPE),这一篇就够了 - 硅谷谷主的文章 - 知乎https://zhuanlan.zhihu.com/p/424631681 2.Byte-level BPE2019年12月:《Neural Machine Translation with Byte-Level Subwords》,论文提出了一种新的subword算法,称之为BBPE,即Byte-level BPE。核心思想:将BPE的思想从字符级别扩展到子节级别。具体做法:摘要:几乎所有现有的机器翻译模型都建立在基于字符的词汇表之上:characters, subwords or words(只是字符的粒度不同)。 然而,来自噪声文本或字符丰富的语言(如日语和中文)的稀有字符可能会不必要地占用词汇槽并限制其紧凑性。 在字节级别表示文本并使用 256 字节集作为词汇表是解决此问题的潜在方法。 然而,高昂的计算成本阻碍了它在实践中的广泛部署或使用。 在本文中,我们研究了字节级子词,具体为字节级 BPE (BBPE),它比字符词汇表更紧凑,没有词汇表外的标记,但比仅使用纯字节更有效。 我们声称上下文化 BBPE 嵌入是必要的,这可以通过卷积层或循环层来实现。 我们的实验表明,BBPE 具有与 BPE 相当的性能,而其大小仅为 BPE 的 1/8。 在多语言设置中,BBPE 最大限度地共享多种语言的词汇并实现更好的翻译质量。 此外,我们表明 BBPE 可以在具有非重叠字符集的语言之间实现可迁移的模型。我们考虑文本的UTF8编码,它将每个Unicode字符编码成1到4个字节。这允许我们将句子建模为字节序列,而不是字符序列。虽然有覆盖150多种语言的138K Unicode字符,但我们可以将任何语言的句子表示为UTF-8字节序列(只需要256个可能的字节中的248个)。文本的字节序列表示通常比字符序列表示长得多(高达4倍),这使得按原样使用字节(只使用256的子节集)在计算上要求很高。作为另一种选择,我们考虑将字节序列分割成可变长度的n-gram(字节级“subwords”)。具体地说,我们学习关于字节级表示的BPE词汇,该表示用字节n-gram扩展了UTF-8字节集,称之为BBPE。图一展示了BBPE与BPE的对比。不同的词表对序列长度的影响:词表粒度由细到粗,分词序列的对比:我们可以验证一下上图中的部分编码,可以看到是一致的:https://www.browserling.com/tools/utf8-encode优势与劣势:优势:1)效果与BPE相当,但词表大为减小;2)可以在多语言之间通过字节级别的子词实现更好的共享;3)即使字符集不重叠,也可以通过子节层面的共享来实现良好的迁移。劣势:1)编码序列时,长度可能会略长于BPE,计算成本更高;2)由byte解码时可能会遇到歧义,需要通过上下文信息和动态规划来进行解码。refs:Neural Machine Translation with Byte-Level Subwordshttps://arxiv.org/abs/1909.03341 浅谈Byte-Level BPE - CaesarEX的文章 - 知乎https://zhuanlan.zhihu.com/p/146114164 tokenizers小结 - 马东什么的文章 - 知乎https://zhuanlan.zhihu.com/p/360290118 3.WordPieceWordPiece出自《JAPANESE AND KOREAN VOICE SEARCH》,并用于解决日语和韩语的语音问题。核心思想:与BPE类似,也是从一个基础小词表出发,通过不断合并来产生最终的词表。主要的差别在于,BPE按频率来选择合并的token对,而wordpiece按token间的互信息来进行合并。注:互信息,在分词领域有时也被称为凝固度、内聚度,可以反映一个词内部的两个部分结合的紧密程度。具体做法:除了合并对象的选择以外,基本同BPE;输入:训练语料;词表大小V1.准备基础词表:比如英文中26个字母加上各种符号;2.基于基础词表将语料拆分为最小单元;3.基于第2步数据训练语言模型,可以是unigram语言模型,通过极大似然进行估计即可;4.从所有可能得token对中选择,选择合并后可以最大程度地增加训练数据概率的token对进行合并,具体的score=(freq_of_pair)/(freq_of_first_element×freq_of_second_element),当然你也可以取个log,就变成了互信息,选择最高的单元对进行合并;5.重复第4步直到达到预先设定的subword词表大小或概率增量低于某一阈值;输出:wordpiece算法得到的subword词表优势与劣势:优势:可以较好的平衡词表大小和OOV问题;劣势:可能会产生一些不太合理的子词或者说错误的切分;对拼写错误非常敏感;对前缀的支持不够好;复合词错误的切分:前缀的错误处理:一种解决方案是:将复合词拆开;将前缀也拆开;代码实现:refs:japanese and korean voice searchhttps://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/37842.pdf4.ULMULM出自《 Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates 》。核心思想:初始化一个大词表,然后通过unigram 语言模型计算删除不同subword造成的损失来代表subword的重要性,保留loss较大或者说重要性较高的subword。具体做法:输入:训练语料;词表大小V1.准备基础词表:初始化一个很大的词表,比如所有字符+高频ngram,也可以通过BPE算法初始化;2.针对当前词表,用EM算法估计每个子词在语料上的概率;3.计算删除每个subword后对总loss的影响,作为该subword的loss;4.将子词按照loss大小进行排序,保留前x%的子词;注意,单字符不能被丢弃,以免OOV;5.重复步骤2到4,直到词表大小减少到设定值;输出:ULM算法得到的subword词表可见,ULM会倾向于保留那些以较高频率出现在很多句子的分词结果中的子词,因为这些子词如果被删除,其损失会很大。优势与劣势:优势:1)使用的训练算法可以利用所有可能的分词结果,这是通过data sampling算法实现的;2)提出一种基于语言模型的分词算法,这种语言模型可以给多种分词结果赋予概率,从而可以学到其中的噪声;3)使用时也可以给出带概率的多个分词结果。劣势:1)效果与初始词表息息相关,初始的大词表要足够好,比如可以通过BPE来初始化;2)略显复杂。代码实现:refs:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates https://arxiv.org/abs/1804.10959 NLP三大Subword模型详解:BPE、WordPiece、ULM - 阿北的文章 - 知乎https://zhuanlan.zhihu.com/p/1916484215.SentencePieceSentencePiece,有些文章将其看作一种分词方法,有的地方将其视为一个分词工具包。个人更倾向于后者,但是将其看作一种分词算法也未尝不可(因为不仅是分词算法的集成,还做了很多优化)。官方介绍:SentencePiece is an unsupervised text tokenizer and detokenizer mainly for Neural Network-based text generation systems where the vocabulary size is predetermined prior to the neural model training. SentencePiece implements subword units (e.g., byte-pair-encoding (BPE) [Sennrich et al.]) and unigram language model [Kudo.]) with the extension of direct training from raw sentences. SentencePiece allows us to make a purely end-to-end system that does not depend on language-specific pre/postprocessing.https://github.com/google/sentencepiece 主要特性多分词粒度:支持BPE、ULM子词算法,也支持char, word分词;多语言:以unicode方式编码字符,将所有的输入(英文、中文等不同语言)都转化为unicode字符,解决了多语言编码方式不同的问题;编解码的可逆性:之前几种分词算法对空格的处理略显粗暴,有时是无法还原的。Sentencepiece显式地将空白作为基本标记来处理,用一个元符号 “▁”( U+2581 )转义空白,这样就可以实现简单且可逆的编解码;无须Pre-tokenization:Sentencepiece可以直接从raw text/setences进行训练,无须Pre-tokenization;Fast and lightweight;编解码的可逆性:Decode(Encode(Normalized(text)))= Normalized(text)一个中文转Unicode的示例:https://tool.chinaz.com/tools/unicode.aspx refs:https://github.com/google/sentencepiecesentencepiece原理与实践https://www.zhihu.com/tardis/zm/art/159200073?source_id=1003 6.主流subword算法的对比wordpiece和BPE的对比wordpiece和BPE的对比:都是走的合并的思路,将语料拆分成最小单元(英文中26个字母加上各种符号,这些作为初始词表)然后进行合并,词表从小到大;核心区别就在于wordpiece是按token间的互信息来进行合并而BPE是按照token一同出现的频率来合并的。wordpiece和ULM的对比:wordpiece和ULM的对比:都使用语言模型来挑选子词;区别在于前者词表由小到大,而后者词表由大到小,先初始化一个大词表,根据评估准则不断丢弃词表,直到满足限定条件。ULM算法考虑了句子的不同分词可能,因而能够输出带概率的多个分词结果。三种subword分词算法的关系7.tokenizers库优先级靠后2.分词器1.BERT的分词器BERT的分词器由两个部分组成:BasicTokenizer:转成 unicode:Python3,输入为str时,可以省略这一步_clean_text:去除各种奇怪字符_tokenize_chinese_chars:中文按字拆开whitespace_tokenize:空格分词_run_strip_accents:去掉变音符号_run_split_on_punc:标点分词再次空格分词:whitespace_tokenize(" ".join(split_tokens)),先用空格join再按空白分词,可以去掉连续空格WordpieceTokenizer:贪心最大匹配:用双指针实现;核心代码:tokenize(self, text):2.T5的分词器3.GPT的分词器4.LLaMA的分词器5.GLM的分词器总结下面对主流模型使用的分词器进行总结(待完善):参考资料深入理解NLP Subword算法:BPE、WordPiece、ULM - Luke的文章 - 知乎https://zhuanlan.zhihu.com/p/86965595NLP三大Subword模型详解:BPE、WordPiece、ULM - 阿北的文章 - 知乎https://zhuanlan.zhihu.com/p/191648421NLP中的subword算法及实现 - 微胖界李现的文章 - 知乎https://zhuanlan.zhihu.com/p/112444056NLP BERT GPT等模型中 tokenizer 类别说明详解https://cloud.tencent.com/developer/article/1865689BERT 客制化分词器和 WWM 的实现 - 满甲的文章 - 知乎https://zhuanlan.zhihu.com/p/268515387bert第三篇:tokenizerhttps://blog.csdn.net/iterate7/article/details/108959082BERT 是如何分词的https://blog.csdn.net/u010099080/article/details/102587954同:BERT 是如何分词的 - Alan Lee的文章 - 知乎https://zhuanlan.zhihu.com/p/132361501Bert系列伴生的新分词器https://dxzmpk.github.io/2020/04/29/Bert%E7%B3%BB%E5%88%97%E4%BC%B4%E7%94%9F%E7%9A%84%E6%96%B0%E5%88%86%E8%AF%8D%E5%99%A8/Tokenizers: How machines readhttps://blog.floydhub.com/tokenization-nlp/【HugBert11】聚沙成塔:关于tokenization(词元化)的解疑释惑 - 套牌神仙的文章 - 知乎https://zhuanlan.zhihu.com/p/371300063japanese and korean voice searchhttps://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/37842.pdf[1508.07909] Neural Machine Translation of Rare Words with Subword Units 3-3 Transformers Tokenizer API 的使用https://www.zhihu.com/tardis/zm/art/390821442?source_id=1003关于transformers库中不同模型的Tokenizer - 莫冉的文章 - 知乎https://zhuanlan.zhihu.com/p/121787628NLP领域中的token和tokenization到底指的是什么? - 知乎https://www.zhihu.com/question/64984731NLP中的Tokenization - 薛定谔没养猫的文章 - 知乎https://zhuanlan.zhihu.com/p/444774532大模型中的分词器tokenizer:BPE、WordPiece、Unigram LM、SentencePiece - 眼睛里进砖头了的文章 - 知乎https://zhuanlan.zhihu.com/p/620508648浅谈Byte-Level BPE - CaesarEX的文章 - 知乎https://zhuanlan.zhihu.com/p/146114164 理解NLP最重要的编码方式 — Byte Pair Encoding (BPE),这一篇就够了 - 硅谷谷主的文章 - 知乎https://zhuanlan.zhihu.com/p/424631681 Neural Machine Translation with Byte-Level Subwordshttps://arxiv.org/abs/1909.03341 tokenizers小结 - 马东什么的文章 - 知乎https://zhuanlan.zhihu.com/p/360290118 互信息https://zh.wikipedia.org/wiki/%E4%BA%92%E4%BF%A1%E6%81%AFPython unicodedata.normalize 将Unicode文本标准化https://blog.csdn.net/weixin_43866211/article/details/98384017Weaknesses of WordPiece Tokenizationhttps://medium.com/@rickbattle/weaknesses-of-wordpiece-tokenization-eb20e37fec99 Subwordhttps://paddlepedia.readthedocs.io/en/latest/tutorials/pretrain_model/subword.html sentencepiece原理与实践https://www.zhihu.com/tardis/zm/art/159200073?source_id=1003 抱抱脸:https://huggingface.co/docs/transformers/tokenizer_summaryhttps://huggingface.co/learn/nlp-course/zh-CN/chapter2/4?fw=tfhttps://huggingface.co/learn/nlp-course/chapter6/7?fw=pthttps://huggingface.co/learn/nlp-course/chapter6/5?fw=pt编辑于 2023-05-03 00:20​赞同 152​​7 条评论​分享​收藏​喜欢

Token(计算机术语)_百度百科

n(计算机术语)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心Token是一个多义词,请在下列义项上选择浏览(共3个义项)展开添加义项Token播报讨论上传视频计算机术语收藏查看我的收藏0有用+10Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。中文名令牌,标记外文名Token学    科信息技术(IT)词    性名词目录1令牌2标记3其它▪网络▪数据处理4相关术语令牌播报编辑(信息安全术语)Token, 令牌,代表执行某些操作的权利的对象访问令牌(Access token)表示访问控制操作主体的系统对象邀请码,在邀请系统中使用Token, Petri 网(Petri net)理论中的Token密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备会话令牌(Session token),交互会话中唯一身份标识符令牌化技术 (Tokenization), 取代敏感信息条目的处理过程标记播报编辑(编译原理术语)词法分析是计算机科学中将字符序列转换为标记(token)序列的过程。从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。其它播报编辑网络Token ring 即 令牌环网,网络技术里面的:令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧。数据处理token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。相关术语播报编辑token相关的计算机术语很多,例如Token Passing、Token Ring、Token Bus等,具体参考一些计算机令牌方面的资料。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

TOKEN中文(简体)翻译:剑桥词典

TOKEN中文(简体)翻译:剑桥词典

词典

翻译

语法

同义词词典

+Plus

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录

/

注册

中文 (简体)

查找

查找

英语-中文(简体)

token 在英语-中文(简体)词典中的翻译

tokennoun [ C ] uk

Your browser doesn't support HTML5 audio

/ˈtəʊ.kən/ us

Your browser doesn't support HTML5 audio

/ˈtoʊ.kən/

token noun [C]

(SYMBOL)

Add to word list

Add to word list

C1 something that you do, or a thing that you give someone, that expresses your feelings or intentions, although it might have little practical effect

标志;表示;象征

As a token of our gratitude for all that you have done, we would like you to accept this small gift.

为了表示我们对你们所做的一切的感谢,希望你们接受我们这份小小的礼物。

It doesn't have to be a big present - it's just a token.

礼物不必大——只是为了表示一下。

token noun [C]

(PAPER WORTH MONEY)

UK (US gift certificate) a piece of paper with a particular amount of money printed on it that can be exchanged in a shop for goods of that value

礼券,代金券

a £20 book/gift/record token

一张价值20英镑的书券/礼券/唱片券

token noun [C]

(DISC)

C1 a round metal or plastic disc that is used instead of money in some machines

(某些机器中用以代替纸币的)代币,专用辅币

tokenadjective [ before noun ] uk

Your browser doesn't support HTML5 audio

/ˈtəʊ.kən/ us

Your browser doesn't support HTML5 audio

/ˈtoʊ.kən/

Token actions are done to show that you are doing something, even if the results are limited in their effect.

有标志性的;有象征意义的

The troops in front of us either surrendered or offered only token (= not much) resistance.

我们前面的军队要么投降,要么只作了象征性的抵抗。

They were the only country to argue for even token recognition of the Baltic states' independence.

他们是唯一为波罗的海沿岸国家争取哪怕是象征性承认的国家。

disapproving used to refer to something that is done to prevent other people complaining, although it is not sincerely meant and has no real effect

装点门面的;装样子的

The truth is that they appoint no more than a token number of women to managerial jobs.

事实上他们只装装样子,任命了一些女性担任管理工作。

(token在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)

C1,C1

token的翻译

中文(繁体)

標誌, 表示, 象徵…

查看更多内容

西班牙语

señal, vale, ficha…

查看更多内容

葡萄牙语

símbolo, cupom, ficha…

查看更多内容

更多语言

in Marathi

土耳其语

法语

日语

in Dutch

in Tamil

in Hindi

in Gujarati

丹麦语

in Swedish

马来语

德语

挪威语

in Urdu

in Ukrainian

俄语

in Telugu

in Bengali

捷克语

印尼语

泰语

越南语

波兰语

प्रतीक, तुमच्या भावना किंवा हेतू व्यक्त करण्यासाठी तुम्ही जे काही करता किंवा जी गोष्ट तुम्ही एखाद्याला देता, त्याचा थोडासा व्यावहारिक परिणामही होऊ शकतो.…

查看更多内容

hatıra, yadigâr, işaret…

查看更多内容

marque [feminine], jeton [masculine], bon-cadeau [masculine]…

查看更多内容

印(しるし), メダル, トークン…

查看更多内容

aandenken, bon…

查看更多内容

நீங்கள் செய்யும் ஏதாவது, அல்லது நீங்கள் ஒருவருக்கு கொடுக்கும் ஒரு விஷயம், உங்கள் உணர்வுகள் அல்லது நோக்கங்களை வெளிப்படுத்துகிறது…

查看更多内容

टोकन, निशानी, प्रतीक…

查看更多内容

પ્રતીક, સ્મરણચિન્હ, ટોકન…

查看更多内容

tegn, værdikupon…

查看更多内容

tecken, bevis, presentkort…

查看更多内容

tanda, token…

查看更多内容

das Zeichen, der Gutschein…

查看更多内容

tegn [neuter], sjetong [masculine], gavekort [neuter]…

查看更多内容

علامت, یادگار, نشان…

查看更多内容

знак, жетон…

查看更多内容

знак, символ (благодарности и т. д.), жетон…

查看更多内容

గుర్తు / ఆచరణాత్మకంగా తక్కువ ప్రభావాన్ని చూపినప్పటికీ మీరు చేసేది లేదా మీరు ఎవరికైనా ఇచ్చే వస్తువు మీ భావాలను లేదా ఉద్దేశాలను వ్యక్తపరుస్తుంది, కొన్ని యంత్రాలలో డబ్బుకు బదులుగా ఉపయోగించే ఒక గుండ్రని లోహంపు లేదా ప్లాస్టిక్ డిస్క్…

查看更多内容

স্মারক বস্তু, একটি বৃত্তাকার ধাতু বা প্লাস্টিকের ডিস্ক যা কিছু মেশিনে অর্থের পরিবর্তে ব্যবহৃত হয়…

查看更多内容

symbol, znak, žeton…

查看更多内容

tanda, kupon…

查看更多内容

สิ่งที่ใช้เป็นสัญลักษณ์, เหรียญพลาสติกหรือโลหะที่ใช้แทนเงิน…

查看更多内容

dấu hiệu, nhãn khi giá hàng hóa…

查看更多内容

dowód, znak, żeton…

查看更多内容

需要一个翻译器吗?

获得快速、免费的翻译!

翻译器工具

token的发音是什么?

在英语词典中查看 token 的释义

浏览

toiletries

toiletry bag

toilsome

toke

token

tokenism

tokenistic

tokenization

tokenize

token更多的中文(简体)翻译

全部

book token

gift token

non-fungible token

nonfungible token, at non-fungible token

non fungible token, at non-fungible token

by the same token idiom

查看全部意思»

惯用语

by the same token idiom

“每日一词”

healthspan

UK

Your browser doesn't support HTML5 audio

/ˈhelθ.spæn/

US

Your browser doesn't support HTML5 audio

/ˈhelθ.spæn/

the number of years that someone lives or can expect to live in reasonably good health

关于这个

博客

Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)

March 06, 2024

查看更多

新词

stochastic parrot

March 04, 2024

查看更多

已添加至 list

回到页面顶端

内容

英语-中文(简体)翻译

©剑桥大学出版社与评估2024

学习

学习

学习

新词

帮助

纸质书出版

Word of the Year 2021

Word of the Year 2022

Word of the Year 2023

开发

开发

开发

词典API

双击查看

搜索Widgets

执照数据

关于

关于

关于

无障碍阅读

剑桥英语教学

剑桥大学出版社与评估

授权管理

Cookies与隐私保护

语料库

使用条款

京ICP备14002226号-2

©剑桥大学出版社与评估2024

剑桥词典+Plus

我的主页

+Plus 帮助

退出

词典

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

翻译

语法

同义词词典

Pronunciation

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录 /

注册

中文 (简体)  

Change

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

中文 (简体)

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

关注我们

选择一本词典

最近的词和建议

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

语法与同义词词典

对自然书面和口头英语用法的解释

英语语法

同义词词典

Pronunciation

British and American pronunciations with audio

English Pronunciation

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

词典+Plus

词汇表

选择语言

中文 (简体)  

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

内容

英语-中文(简体) 

 

Noun 

token (SYMBOL)

token (PAPER WORTH MONEY)

token (DISC)

Adjective

Translations

语法

所有翻译

我的词汇表

把token添加到下面的一个词汇表中,或者创建一个新词汇表。

更多词汇表

前往词汇表

对该例句有想法吗?

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

token是什么意思_token的翻译_音标_读音_用法_例句_爱词霸在线词典

n是什么意思_token的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录token是什么意思_token用英语怎么说_token的翻译_token翻译成_token的中文意思_token怎么读,token的读音,token的用法,token的例句翻译人工翻译试试人工翻译翻译全文简明柯林斯牛津tokenCET4/CET6/考研/IELTS英 [ˈtəʊkən]美 [ˈtoʊkən]释义n.代币; 象征; 记号adj.作为对某事的保证的; 象征性的; 作为标志的点击 人工翻译,了解更多 人工释义词态变化复数: tokens;实用场景例句全部代币象征记号象征性的a parking token停车专用辅币牛津词典a £20 book/record/gift token价值20英镑的书券 / 唱片券 / 礼物券牛津词典Collect six tokens for a free T-shirt.收集到六张礼券可以换一件T恤衫。牛津词典Please accept this small gift as a token of our gratitude.区区薄礼,以表谢忱,请笑纳。牛津词典The penalty for failure will be high. But, by the same token, the rewards for success will be great.失败就要付出沉重的代价,同样,成功就会获得很大的回报。牛津词典The government has only made a token gesture towards helping the unemployed.政府只不过是做做样子表示了一下对失业者的帮助。牛津词典There was one token woman on the committee (= a woman who is included in the group to make it look as if women are always included, although that is not true) .委员会中有一位装点门面的女性委员。牛津词典The government agreed to send a small token force to the area.政府同意派遣一小支象征性的部队到那一地区。牛津词典a one-day token strike一天的象征性罢工牛津词典We charge only a token fee for use of the facilities.我们对使用这些设施只收取象征性的费用。牛津词典The announcement was welcomed as a step in the right direction, but was widely seen as a token gesture...该公告被认为是向正确方向迈进的一步,因而受到欢迎,但也被普遍看作是一种象征性的姿态。柯林斯高阶英语词典Miners have staged a two-hour token stoppage to demand better pay and conditions…矿工们举行了两小时的象征性停工,以要求提高工资和改善工作条件。柯林斯高阶英语词典…£10 book tokens…价值 10 英镑的购书券柯林斯高阶英语词典Here is the fifth token towards our offer. You need six of these tokens.这是第 5 张礼券,你需要 6 张才能享受我们的特价。柯林斯高阶英语词典Some of the older telephones still only accept tokens.一些较老式的电话机仍然只收代币。柯林斯高阶英语词典He kept sending gifts and assured her that they were merely small tokens of his appreciation…他不断送她礼物,并向她保证说这些只是为了略表谢意。柯林斯高阶英语词典As a token of goodwill, I'm going to write another letter.为了证明我的善意,我打算再写一封信。柯林斯高阶英语词典If you give up exercise, your muscles shrink and fat increases. By the same token, if you expend more energy you will lose fat.停止锻炼会使肌肉萎缩、脂肪增加。同样,如果花更多的精力锻炼,就会减掉脂肪。柯林斯高阶英语词典I know thee, Hester, for I behold the token.我可认识你, 海丝特, 因为我看见了那个标记.期刊摘选Black is a token of mourning.黑色是居丧的象征.《现代英汉综合大词典》You slip the token into the slot at the turnstile.你在入口处那儿把辅币塞进投币孔.期刊摘选The timid but tolerant toll man offered some timely tips as a token of tribute.那个怯懦但宽容的收费员提供了一些很及时的消息以表示他的敬意.期刊摘选Further Content Taxonomy Fields have Views and Token support and can be used with Rules.内容分类字段支持Views和Token,也可以与Rules结合使用.期刊摘选Miss Li gave her sachet to Mr. Zheng as a token of love.李小姐把随身配带的香囊送给郑公子当定情信物.期刊摘选Because it is not easily forged, commonly used for making trademarks or portfolio, card security token.由于它不易伪造, 被广泛的用于制作商标或有价证券 、 身份证的防伪标记.期刊摘选Cantou all women are Hongfen skull token , since Dunru Buddhism , Fahao extinction Masters.参透了所有女人都是红粉骷髅的道理, 自此遁入空门, 法号灭绝大师.期刊摘选By this token, the negligible management for employee became very important any more.因此, 曾经不起眼的员工管理变得越发具有战略意义.期刊摘选收起实用场景例句真题例句全部四级Many of its 800 stores are likely to close following the company’s decision to call in administrators after an attempt to sell the business for a token £1 failed.出自-2015年12月听力原文Many of its 800 stores are likely to close following the company's decision to call in administrators after an attempt to sell the business for a token £1 failed.2015年12月四级真题(第一套)听力 Section A收起真题例句英英释义Noun1. an individual instance of a type of symbol;"the word`error' contains three tokens of `r'"2. a metal or plastic disk that can be used (as a substitute for coins) in slot machines3. something of sentimental valueAdjective1. insignificantly small; a matter of form only (`tokenish' is informal);"the fee was nominal""a token gesture of resistance""a tokenish gesture"收起英英释义词组搭配by the same (或 that 或 this) tokenin the same way or for the same reason同样地,由于同样原因there was little evidence to substantiate the gossip and, by the same token, there was little to disprove it.没有什么证据来证实这则小道消息,同样也没有证据来反驳它。by the same tokenIn like manner; similarly.以相同的方式;相似地in token ofAs an indication of作为…的标志a ring given in token of love.一只象征爱情而给的戒指收起词组搭配同义词辨析symbol, badge, sign, signal, mark, token, attribute, emblem这些名词均含"标志,象征,符号"之意。symbol: 指作象征或表达某种深邃意蕴的特殊事物。badge: 一般指金属证章或写有姓名的带状标志物。sign: 普通用词,指人们公认事物的记号,也可指某种情况的征兆。 signal: 指为某一目的而有意发出的信号。mark: 普通用词,含义广泛。既可指方便于辨认而有意做的标记,又可指自然形成的标记或有别于他事物的特征。token: 语气庄重,指礼品、纪念物等作为表示友谊、爱情等的象征或标志。 attribute: 指人或物及其地位、属性的象征。emblem: 指选定象征一个国家、民族或家庭等的图案或实物。同义词n.凭证couponcheckcertificatevoucherticketn.标记;证据,证物symptomevidenceproofcluesignmarkindicationn.纪念品souvenirmementokeepsakeremembrancerelictrophy其他释义couponsignevidencecluememoryremembrancevoucheremblemticketsymptommarkcertificatemementosignaltrophycheckrelicsouvenirproofkeepsakefavorindication行业词典金融代币   辅币   凭证   释义词态变化实用场景例句真题例句英英释义词组搭配同义词辨析同义词行

在中文 NLP 等论文中,应该如何翻译 token 这个词? - 知乎

在中文 NLP 等论文中,应该如何翻译 token 这个词? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册机器学习自然语言处理在中文 NLP 等论文中,应该如何翻译 token 这个词?想问一下,在中文 NLP 等论文中,应该如何翻译 token 这个词? 现在有几种翻译方式:词例、词块。想问下有没有什么更好的翻译方法。显示全部 ​关注者187被浏览397,344关注问题​写回答​邀请回答​好问题 22​3 条评论​分享​38 个回答默认排序邱锡鹏​复旦大学 计算机科学技术学院教授​ 关注token一直没有很好的翻译,经常翻译为“标记”“词”“令牌”等,但都是在特殊语境中的翻译。上述翻译都是大众化的词,脱离了上下文,这些翻译都很难准确的表示token的含义。因此个人觉得翻译为一个相对比较生僻的词,更能体现其特殊含义。建议作如下翻译:token 词元 tokenization 词元化 tokenizer 词元分析器但在具体上下文中可以有特定的翻译。=====更新:看了下面的评论,感觉翻译成“词符”也挺好的。在认证相关的上下文时可以翻译为“令符”。编辑于 2021-06-22 18:28​赞同 398​​56 条评论​分享​收藏​喜欢收起​知乎用户​​机器学习等 5 个话题下的优秀答主在语言学特定语境下,一般会将 word type 和 word token 做比对,这时候,翻译为 词形 和 词例 比较合适。word type指的是词表中互不相同的单词形态,而word token则是指文本中具体出现的单词。很多NLP论文中说token的时候,大致是指的文本序列中具体出现的那些词,即word token。发布于 2022-01-15 13:02​赞同 103​​4 条评论​分享​收藏​喜欢

计算机里面token是什么意思? - 知乎

计算机里面token是什么意思? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册计算机计算机科学计算机网络(库罗斯,罗斯 著)(书籍)计算机里面token是什么意思?关注者7被浏览11,763关注问题​写回答​邀请回答​好问题​添加评论​分享​4 个回答默认排序知乎用户​游戏开发等 2 个话题下的优秀答主我们在古装剧里面经常看到什么免死金牌,定情信物,认亲玉佩之类的东西。token就是这样一种东西。本身是一串数字(或者字符),发行方生成它并将它传递给使用方,代表了发行方的认可和授权。和密码的主要差别在于密码是自己生成,然后证明自己的身份。token是别人生成给你,然后证明别人对你的授权。编辑于 2022-11-06 20:03​赞同 13​​2 条评论​分享​收藏​喜欢收起​薛钦亮人大码农,爱国爱党,要为祖国健康工作五十年​ 关注token可以理解为标记或者令牌,区块链和网络领域的话,类似于一个通行证用于验证使用。如果是计算机中的人工智能领域,token更像是代表一部分数据的一个表示,比如自然语言处理领域一个词的表示可能可以叫一个token,视觉领域里面可能图片切割之后的一块区域的表示叫一个token。如理解有误,请网友指正。发布于 2022-11-02 21:49​赞同 3​​添加评论​分享​收藏​喜欢收起​​