给大家介绍哈根 space 的 一篇文章,主要是介绍 transformers v 五版本里面的 tokenize 的 这样的一个模块,这个 tokenize 的 模块我们可以给大家一起来介绍一下。首先我们先介绍一下 transformers 的 第五个版本,那么 transformers 前面它在二零二零年的时候它发布了,是 v 四的 transformers 的 这个版本, 那么 v 五版本是二零二五年的十二月份,它刚刚发布出来,那这个版本也是非常重要,应该也是里程碑式的这样的一个 ai 的 一个基础库。那么 hack and face 的 这个 transformer 的 这个库是非常重要的, 它是几乎是我们 ai 的 所有模型里面,它基本上在 transformer 里面都会去定义,所以它这个库是非常重要。在第五个版本里面,它也做了一些变更,那么它最大的变更就是它将 pie torch 设立为唯一的一个核心的一个后端,它去除了这个 flex 和 tansurf 的 这个原生支持,它主要把集中精力 把所有放在 pie torch 的 这个生态上面,以消除这个分裂就实现的深度优化。它主要是做这个方面,所以我们这个 transformers 的 第五个版本就标志着这个 transformers 阵 全面转向 pie torch, 所以 pie torch 会变得越来越重要。那么在这个里面,我们回头也可以给大家介绍一下,它主要是在四个方面,呃,模块化、精简、性能的提升,包括它也跟更多的摩推理模型去做结合,专注在这个模型定义这个层面,而不是去做其他的一些事情。哦,这个是创 form 第五个版本,我们简单给大家介绍一下这篇 博客,主要是给我们介绍 transformer 里面有一个非常重要的,就是 tokenize 这样一个过程。 tokenize 这个过程把我们大模型的,比如说文字模型里面的那个文字怎么转化成数字,让那个文字然后能转化成这个大模型,可以 认识的这个叫 token id, 或者称之为叫数字,我们一起来看一看。那什么叫 tokenize? 它举了一个简单的一个例子,用 small l m 三 b 的 一个模型,它是个文本模型,它这个有一个 x 叫 hello world, 它就把它 tokenize 的 一下,那它就会变成两个数字, hello world 就 会变成九九零六幺九幺七,它本质上它就会把两个 单词做一系列操作。在这个 tokenize 的 有一个字典里面,把这个 hello 和 word 转化成这个叫 token id, 它主要是做这样一件事,当然你也可以把这个大模型预测完成的这个 token id 转化成这个字母,就是 hello world, 它是这样 好,这个是一个比较简单的这样的一个应用,所以你可以看到它如果有一个 tokenize 的 这样一个对象,如果你输出这个叫 vocabulary, 那 么它就会把文字 这个字母所对应的 id 可以 把它给展示出来,是这样一个道理,所以在 transformational organization 的 这样一个 pop line 的 当中,它有很多的操作,它这里面给我们介绍了一下,它有五步操作,你要把这样的一个 hello world 的 这样的一个东西转化成这样的一个 大模型,任的这个 id, 那 么它会经过五个步骤,第一个步骤它叫叫标准化,就是把它变成呃大写的字母,要变成小写的统一的正则化,去除这个空格等等, 那他就把这个大写的 hello world 变成小写 hello world 等等,他要做一些政策化的一些操作,那另外他再把这样的一个字幅串,他要把它分成两个啊,他叫割分割文本的这样一个动作,他再会利用这个模型,模型里面他有一些算法,比如说 bpe, 我 们原来讲过的在 open ai 那 个时候发明的这个 bpe 的 这样的一个字母的分割,把它变成一个 token, 就 转化成这样的一个数字,这个数字就是大模型可以认的这样的一个 token id 托管案底弄完了之后,它还要进行后处理,要加上一些特殊的一些 token, 比如说这个是结束的 token, 或者要 增加一些填充符,它叫 penning 这个东西,这个是开始,这是结束,这个叫 begin, o s and o s, 弄完之后它就可以放到这个大模型里面去推理了,推理完成之后,它又将数字把它 decode, 把它再转化成,把这个 token id 再转化成 text, 它就是这样一个操作,这个就是 tokenize 的 最主要的一个作用,所以目前这个 transformer v 五版本,它就会把它变得更加简单,更加模块化。你可以看到 它能够通过这个 auto tokenize 的 这样一个对象,直接通过这个大模型自动的可以把这个 tokenize 的 这样一个对象把它给拿出来之后呢,它分别可以去拿到不同的我们前面五个这样的一个阶段处理的相应的一个方式,所以在 v 五版本里面有一个非常重要的一个功能,就是它把它模块化 变得更加精简。不像原来 v 四版本里面,如果你用拉玛,你是很难清楚他这个 tokenize 到底经过了哪几步,或者如果我要改某一步,他就会比较麻烦,他是这样的。 好,接下来他这篇博客里面再给我们介绍了一下 tokenize 的 这样一个算法。我们前面讲了他这个里面目前支持的比较多的算法,他常用的算法就是 bpe, 这个是 open ai 他 们放出来的一个算法,这个是一个主流的算法,在这个文本大模型里面 bpe 的 这样的一个,这个算法是用的是比较多的。 还有一个叫 unigraph, 这个算法也是用的比较多,是在 google 里面用的是比较多的。 google t 五里面用的是一,还有一个叫 word piece, word piece 这个算法 好,它就给我们解释了一下,这个就是我前面讲的那些解释,它这个就是给我们解释了一下到底是怎么操作。当然我们在把大模型进行预处理的过程当中,它还要加上一个模板,它叫做 template, 是 chat template 这样一个模板它要引用一下,那么它这个里面会加一些特殊字符,那这个当中像我们每个大模型它都有一个 chat 的 这个 template, 这个是跟它训练是有关的,它把它 加在我们的一些问题的前面或者后面,这样它也会比较清楚了,这是系统的回答还是到底是用户的问题,到底是 ai 的 回答,到底是什么?等于是这样, 这个我们叫 chat template, 几乎每个模型或者每个系列的模型,它这个 chat template 都有些不太一样,它通过这种方式可以将不同的模型都可以把它变成统一的一个算法啊,它的放在大模型里面去推。那最后他又介绍了一下这 transformer 的 这个 v 五版本的这个酷,这个 tokenize 的 这个类它到底是怎么实现的?这里面它 主要是有两部分,这个也是 transformer v 五版本里面一个比较大的改进。在之前 v 四版本里面它会有一个叫 fast tokenize 和 slow tokenize, 本质上来讲它这个 tokenize 原来一个 fast, 它是用 rest 来 rest 语言去开发的,所以它的效率会比较高。还有一种它是用 python 去实现它一些比较难处理的这种 tokenize 这种算法,所以它会分成两种,但是现在 v 五版本里面就把它合并了,只有一个 fast 了,除非你说你可以用这个 python 来看它的时间。好,这个就简单给大家介绍一下。最后它也给我们介绍了一下它这个 目前 v 五版本 transformer v 五版本 tokenize 它的训练过程,它会越变得会越来越简单,我们可以看一下啊,你直接可以拿比如说某个模型来训练它的 vocabulary, 它直接可以训练,这个也是跟原来比起来,这个 v 四版本比起来,它会更加 实,实现起来更加模块化,原来它结合的太紧密了,所以它不太行。但现在你可以看到它用这个 v 五架构之后,它训练会比较简单,它这里面你可以看到只说它这个里面举了一个拉玛的一个 tokenize, 它把这个文本 直接通过这个 tokenize 训练进去,它就会用只说拉玛里面的 bpe 的 这样的一个算法,它会统一的把它把这个里面的一个文本 里面的 cable 训练到这个词库里面去,所以这个就会非常方便。这个是讲他的训练过程,那最后他就对比了一下,对比了一下 v 四和 v 五之间的差异,总体来讲 v 五版本肯定经过几年的这样的一个发展,应该经过了五五年,从 v 四到 v 五的进化,经过了五年的时间的发展,那他这个 v 五版本能力会更强,所以他这篇日记 我可就给我们介绍了一下。在这个 transformer 的 这样一个库里面,这个 tokenize 的 这样一个操作,它是一个非常重要的。原来他训练他就要手工去建 pipeline, 现在他主要是调 tokenize 的 这个 training 的 这样一个方法,他就可以直接把它给弄完,他指定一些模块,它也会非常简单。 如果你要改一些 backhand 也会非常简单,就说你可以直接选择,你可以不用默认的这个 rest 的 实现方式,你可以用 python 或者用 tensor 的 这个 backhand 来实现啊,所以它就会非常灵活模块化。好吧,好,今天这样一篇技术博课就给大家介绍到这儿。
粉丝4.5万获赞32.9万

为什么大模型不直接读懂汉字?为什么大模型不直接处理单词?为什么说大语言模型处理的是 token? 今天我们来聊一聊 token。 在 大模型眼里并没有文字这个概念,不管是我们输入的聊天内容,还是它的回答, 中间都必须经过一个关键步骤, tokenizer 分 词器,简单来说,它的作用就是把文字转化成 token。 数字编号为什么要这么麻烦?因为电脑只认识零和一。如果直接用字母训练模型,不仅要处理更多的数据, 还要先学会把这五个字母拼成苹果。这个概念效率太低了,所以聪明的人类发明了词典,例如 一代表 apple, 二代表 banana, 三代表 peach, 这些数字就是 token。 token 仅仅是单词的对应吗? token 和单词并不是严格的一对一,为了让模型认识没见过的词, tokenizer 还会像拼积木一样拆分单词。比如 highest 可能会被拆成 high 加 est 最高级。哪怕是自己创造的词 goodest, 模型也能通过拆解理解它的意思。常见的 tokenizer 有 哪些?如果我们询问大模型今天的天气怎么样?每家大模型的拆分方式都不一样,千问系列用的是 q 问。 tokenizer 库,它将这句话拆分为今天的 加。 tiktok 库,它将这句话拆分为今天加的 加天气、加怎么样加问号五个部分。不同的算法会得到不同的拆分效果,虽然算法不同,核心功能都是文字到数字。为什么以前大模型写中文慢?这就要看词表大小了。 gpt 三的词表很小, 很多,省略汉字,一个字就要拆成好几个 to, 处理起来很慢。而最新的 gpt 五词表扩充到了近十五万, 囊括了绝大多数中文词汇,所以现在他处理中文的速度快了很多。 tokenizer 就 像是把人类语言翻译成机器语言的 欲处理,翻译官将文字变成数字。接下来大模型就要把这些数字扔进那个超级复杂的神经网络里计算了。科技不玄学,算力有尺度,关注我们看懂数字背后的硬核世界。

我们跟 ai 说话,用的是文字、句子、语言,可 ai 本质上只是一个由无数参数组成的数学模型,他根本不认识汉字、英文标点, 他只认识数字,只做矩阵运算。那我们打的每一句话是怎么被 ai 接收、理解、处理的呢?这中间必须有一个翻译官,他负责把人类的语言 翻译成 ai 能看懂的数字,也负责把 ai 输出的数字翻译回我们能看懂的文字。这个东西就是 tokenizer, 中文叫分词器。今天这节课,我就带你彻底搞懂 tokenizer 的 工作原理,让你明白 ai 处理文本的第一步 到底是怎么完成的。很多人以为 ai 是 直接看懂文字的,其实完全不是。在 ai 世界里,所有输入输出最终都必须是数字。你输入一句话,模型收到的其实是一串数字, 模型输出结果先吐出的也是一串数字,再转成文字。而完成这一过程的唯一桥梁就是 tokenizer。 可以 说,没有 tokenizer, 人类和 ai 之间就无法进行任何交流。 tokenizer 的 工作流程主要分为两步, 第一步是分词,第二步是映射。我们先来说第一部分词。所谓分词,就是把一整段话拆分成一个个最小的模型可以处理的单元,这个单元就叫做 token。 这里一定要注意, token 不 等于词语,也不等于字, 他是 tokenizer 根据自己的规则切出来的片段。举个很直观的例子,中文里的程序员在我们看来是一个完整的词,但在很多 tokenizer 里,会被拆成程序和元两个 token。 再比如工作方会被拆成工作和方,英文也是一样,像 helpful 这样的单词 会被拆成 help 和负两部分。常见的短单词,比如 yumi、 hell go, 通常会是一个完整的 token, 但长单词、专业词汇、生僻词基本都会被拆分,甚至连标点、空格、特殊符号都会被当成独立的 token。 所以 你要记住, token 是 ai 处理语言的最小单位,它可能是一个字、半个词、一个词、一个标点,完全由分词规则决定。这也是为什么我们在计算上下文长度 模型输入长度时,用的都是 token 数量,而不是字数或者词语数。分词完成之后就到了第二步映射。 tokenizer 会把每一个切好的 token 对 应到一个唯一的数字编号, 这个编号就叫 token id。 每一个 token 都有且只有一个 id, 就 像每个人都有唯一的身份证号一样。模型不关心 token 是 什么意思, 他只接收这串数字 id, 然后进行计算。当模型计算完成,输出一串新的数字 id 时, tokenizer 会在反向工作一遍,把数字 id 映设回对应的 token, 再把这些 token 拼接成通顺的文字展示给我们看, 这个过程就叫做解码。所以你看我们和 ai 的 一次完整对话,其实经历了文字转 token、 token 转 id、 模型计算 id 转 token、 token 转文字这一整套流程。讲到这里你就明白了, tocanizer 看起来只是一个简单的翻译工具,但它直接影响 ai 的 理解能力、生成效果和计算效率。如果分词不合理, ai 就 会误解语义。如果分词太碎, token 数量就会变多,占用更多的上下文窗口,成本也会变高。不同的大模型都有自己专属的 tocanizer, 比如 gpt 系列的 tocanizer。 国内主流大模型也都有自己的分词规则,它们的分词逻辑略有不同,但整体原理完全一致,都是先拆分 token, 再映射成数字。这也是为什么同样一段话, 在不同模型里统计出来的 token 数量不一样,原因就是他们的 tokenizer 分 词规则不同。这节课我们讲透了 tokenizer 和 token, 这是 ai 处理语言最基础、最前置的环节,搞懂了它,你才算真正走进 ai 的 底层世界。这是我们 ai 底层逻辑系列的第四课。 我们从大模型 transformer 一 路讲到 tokenizer 和 token, 每天一节课,循序渐进,从零基础一步步走向专业。下一节课,我会带你深入理解 ai 的 记忆机制,也就是 context 上下文,搞懂 ai 为什么能记住你之前说过的话, 它的记忆边界又在哪里。关注我,跟着学完这一整套体系,你会真正吃透 ai, 看懂所有黑化,理解所有技术的本质。

我是前端小组,欢迎回到我的,和前端小组一起学 vivo 三原码系列课程,今天的课也非常的关键,干货非常多,如果想要获取到我这份 ppt 讲义的方便客户对照复习的,请现在就在弹幕或者评论区刷个一一,我会在看到你们屏幕之后将资料整理发送给你们。 好的,废话不多说,我们现在就发车。我们这节将去讲解 vivo 三的一个解析器,我们会去讨论自创创是如何变成一个数结构的,正如我们 在左手边能看到的,这是一个解析器收到一段模板自创串,而解析器它的一个任务就是说将这一串的自创串去翻译成一个结构的语法数 a, s, t, 它的核心问题就是解析器是如何知道 v e, f 是 指令的。 mark plus 它是一个动态绑定的,而 count 它是一个叉值表达式,这里面是一套精密的状态机在逐字扫描和判断。而本章我们将去走进解析器的内部, 看这个是怎么去工作的。六三的解析器由两个核心模块组成,一个是 tokenize, 一个是 pass, 而 tokenize 它是逐字符去扫描识别出 token, 它其实跟冷眼的识别汉字其实没有什么太大的区别。而 pass 语法分析,它接受了 tokenize 的 一个回调,它去构建一个 a 节点,去维护一个节点站 需你好比一个句,好比一个类比,就是它其实是一个大脑去理解一个句子的一个一个方式。而它们的写作就是 tokenize 是 不断地去扫描,每识别出一个片段,去通过回调通通知 past, 它两个互补干扰职责非常清晰。 而 tokenize 的 核心是一个有限的状态机,你可以想想,它是一个阅读机器人,它有一个当前的状态,每读一个字幕,就会根据字幕内容去决定留在当前状态。它是继续地去积累, 是继续的去积累字母,还是切换到新状态,并可能触发一个回调?我们举个例子,当机器人处于一个普通文本的状态,他们遇到一个左括号, 就会切换到标签开始的状态。而当遇到一个呃遇到一个符号的时候,他会去检查下一个是否也是这样子的符号,如果是的话,就切换到叉值状态,而如果遇到其他的字母,则会继续的去积累文本解析器需要知道现在读到哪里了,这对于生成准确的数 错误提示置关重要的 octa- tokenize 是 内部维护的几个非常关键的变量呢?举在追踪位置,比如说 index succession start 指当前 token 的 起始位置, line 是 当前函数, current 是 当前列号。每当状态机完成一个 token 的 识别,它会调用 get position 函数去根据当前所引 计算出精确的行列偏移量,然后将这些位置互加到 a, s, t 节点上。我们举个例子,当解析 button on click 的 时候, 比如左边是查看的,那它的有鱼标的移动轨迹会是什么样子的?就是它。首先 index 等于零,是识别到左括号, index 等于一到六去积累标签名就是 button, 这是个 button。 而当 index 等于七的时候是,它会是遇到空格, 遇到空格之后,就意味着这个标签就已经结束了,它会去触发 press 的 一个 unopen tag name button 一个回调啊,同时它会去将这个 section start 去重置为八,而当 index 是 到了它的一个指定号,就是 unclick, 这里面的关键点就是 tokenize, 它并不会真的去删除已读取的字母,而是通过移动缩写,也就是 index 去跳过它们,而 section start 和 index 之间的字母就是当前正在处理的 token。 我 们来举一个具体的一个例子来去进行一个字母的一个解析的过程, 当它开始解析的时候,去识别到标签的一开始的一个左括号和标签名批,然后识别到标签名结束,遇到空格,去触发 past unopen tag name 的 一个回调, 然后解析一个指定名,就识别一个 weif, 去触发 on their name 的 一个回调,就是一个指定的一个回调,而解析指定值在引号内提取到 ok 属性结束,然后去完成了 weif 的 一个解析,然后标签闭合,遇到了右括号,触发 on open tag and 的 一个回调,那刚刚 它整个过程就像一个流水线一样,每个字母进来,状态机就判断一下,要么继续等,要么切换状态并通知 pass。 六、它其实是支持多种属性写法的解析器是如何区分它们的呢?那么答案就是,其实是看首字母的 to tokenize 去读取到第一个一个属性名时,它会去检查第一个字母。九、如果是 v, 那 就会继续检查是不是 v 杠, 如果是,则进入 indian name 就 指令,如果是冒号,则进入 indian name, 这是一个 we bind 的 简写,如果是 ant 符号,那就直接进入 indian name, 因为这是一个 we on 的 一个简写,如果是简号就直接也是直接进入 indian name, 这是一个 we stored 的 缩写,如果是点, 那么就直也是直接进入 without name, 这是一个 webinename, 就 当作普通属性的一个处理,那这是一个非常简单的一个首字母判断去决定了属性的分布,就是走 in their name 的 路径呢,最终生成 direct node, 以走 a true name 的 路径直接生,最终生成了 a true node。 而对于那些被识别为指令的属性 on their name, 它的回调还会做一次规范的处理。 其实归一化也就比较简单,就说无论你写的是冒号 class 还是 we on 冒号 class, 到了 past 阶段就会变成一个统一的一个结构, 而这种归一化的处理就是那后续的转化和代码生成阶段,就不需要关心用户写的是哪种形式,其实是大大的简化了处理一个逻辑。而 dockerize 遇到 双括号的时候会进入到叉值状态,然后一路扫描,直到遇到一个右括号的一个右双括号。这个过程的核心逻辑其实可以简化为遇到双括号去记住起始为止 in start 等于 index, 加 up 扫描直到右双括号就结,记住结束位置 inner and 等于 index, 而它提取中间那个内容就去,并且会去除首尾空白字符,然后它会去触发 past 的 intonation 啊。注意这里有个细节,就是右双括号和 左双括号。右双括号这两个定界符是可以通过配置的,就如果你和后端模板引擎冲突,可以改成 del 括号或者其他的符号。而解析成一个 a s t 之后,我们就会得到一颗 a s t 抽象语法数,每一个语法结构都对应的一个节点类型,而比方,比方说我们这读这里的一个根节点元素节点、文本节点叉值, 普通元素和 direct 指令。那解析完成之后,我们就得到一个完整的一个 a s 提处,然后就有对应的一个节点的标识。而这里从左边我们可以看到这是一个 element node 的 一个元素节点的一个样子, 我们可以看到它的属性和指令其实都放到 purpose 里面,是通过 type 去做区分的。然后这种设计其实是让属性的便利,非常简单, 就不需要分开处理两个数值。大家可以看到这个 element node 它其实有个 type type type purpose 初准它 look a o c 就是 位置,它的对应一个位置信息啊。需要大家注意的一点就是 we can if 和 mouse class 其实都存在 purpose 里面,通 过 type 字段来区分是普通属性还是指令。对,而且这里先买个辅笔。就虽然现在 we can if 看起来和 mouse class 一 样,都是 purpose 簇中的一员,但在下一个站点就是 transform 阶段,它将找到比较特殊的待遇,就会从 purpose 中移除,整个元素节点会被替换成一个条件表达式节点啊。这是因为 we if 是 个结构性的主谓,它会改变倒文字 数的结构,而不仅仅是修改属性。那我们来对比一下静态和动态属性的它的 a s t 结构数。而什么是动态属性,什么是静态属性?我们举一个非常简单一个例子,静态属性就是 class 的 rapper, 而动态属性就是 class, 它是一个动态的,而它们两个之间的一个 note。 其实首先它的类型标记是 tab 是 不一样的,是 attribute vs director。 需要注意一点,静态属性的值是在 b 翻译时就已经确定了,而动态属性呢,只需要在运行时通过 javascript 表达式来计算的。这个区分在后续的优化阶段非常重要,这是静态属性可以被提升,避免重复的。这个创建我们来看一个一个完整的一个视例,当我们解析啊, past and rapper 去创建 diy 节点压入站, 然后去解析到 v, e, f 等于 show 创建 p 节点压入站去解析啊,它的一个赋值就是 message, 然后创建叉值,节点作为 p 的 子节点。 当我们遇到闭合的标签 p 标签 diy, 就 节点它会出站,它这个是一个入站,出站的一个过程,然后将节点出清,然后完成父子的一个挂载。这里面其实还有一些比较比较一些有趣的一些细节。 首先他们对空白的处理,因为 html 的 中的空白其实是非常麻烦的,就是空格换行制表符 object 默认采用压缩的,压缩的策略就是元素之间的纯文本, 纯空白的文本会被移除,连续空白会被压缩成一个空格,而 pre, p, i, e 这个标签内的空白会被保留。而第二个就是一个自闭和标签,就是当遇到 image 这样子的一个自闭和标签的时候, tokenize 会触发 on self crossing tag 回调就 press, 就 知道不用等待闭合标签了。 第三个就是一个错误的提示了,因为如果你模板写错了,比如说标签没闭合, plus 会尽量浓缩进行解析,同时记住错误位置去它由于每个节点都带有比较精确的 l o c 位置信息,然后就是包括行行号,列号、偏移量,就是没有能够给出非常友好的错误提示,然后并且精准地去指向错误的一个位置。 那现在我们回到这一章节,我们来去看一下这一章节一个总体的内容啊。首先我们在这一章去了解了 view 的 三、那个模板编辑的第一个阶段 plus 解析,编辑的出发时期是什么时候出发的呢?那就是在构建时候的时候,是由 vt 和 webpack 插件在打包阶段去完成, 而运行时是在使用完整版的 view 在 浏览器中动态编辑的,而这也是一些 view pro 啊 flag 这一直做的一个方法。然后解析器的速度和输出速度就是 tempo 和自创创来自 s, f, c 的 tempo 或者组建的 tempo 选项,它的输出就是一个 ast 语法数,然后传递给 transform 的 一个阶段。 然后解析器的核心机制就是 tokenize, 是 一个状态机逐字符扫描模板,通过状态切换识别标签、属性指定差值等语法元素,内部通过 index 和 section 去追踪余标位置。 而属性分离呢,去发生在 tokenize 的 层面,去通过检查属性的首字母决定走指令还是普通属性的处理方法。 而 pass 它其实是接受 token 的 回调通知,用这样的结构去维护欠道关系,去逐渐逐步的构建出一个完整的 a s, t。 而这个阶段的核心理想其实是非常的简单,就是将无状态的文本变成有结构的数据。 下一章我们去将进入 transform 的 阶段,去看看那个编辑器就如何对数进行优化改造, beif 和 v for 的 一个特殊的处理啊。好了,这一章我们就先到这里结束了, 欢迎大家的一个观看,下一节课我们的硬核程度会再度升级。最后,如果觉得今天的内容对你们有所帮助,别忘了点赞、订阅和转发,支持一下前端小组,没有领资料的同学们记得在评论区扣幺幺幺和或者弹幕区扣幺幺幺就完整的讲一讲发给你,配合观看就效果非常的棒。我是前端小组,我们下节课再见!拜拜!

面试官问,大模型的 tokenizer 到底在做什么?要理解这个问题,我们从最底层的问题开始想。模型的输入为什么不能直接用字母?理论上可以把每个字母当成一个 token, 英文就二十六个字母, 加上标点和数字,词表非常小。但问题是,一句普通的英文可能有几十上百个字母,序列太长了。 transformer 的 注意力计算量和序列长度的平方成正比,长度翻一倍,计算量翻四倍。字体级别的输入序列长度撑不住,那反过来按整词切呢? 英文有几十万个词,中文更不用说。词表爆炸模型末端的 embedding 层参数量会大到离谱, 而且一旦遇到词表里没有的东西,比如新出的品牌名、网络用语拼写错误,模型只能输出一个 u、 n、 k, 直接抓瞎。所以需要一个折中切出来的单元,不能太细,否则序列太长,算不起。也不能太粗,否则词表太大,覆盖不全。 这就是 subword tokenization 的 思路,也是目前所有主流大模型在用的方案。其中最常见的算法叫 bpe byte pair encoding 字节对编码 bpe 的 核心逻辑其实很直觉,起点是把词表初始化为最基础的单元,通常是单个字节或者单个字体,然后拿一个大规模语料去统计, 拿两个相邻的单元一起出现的频率最高,找到之后把它们合并成一个新的 token, 加入词表,然后重新统计, 在合并频率最高的一对,如此反复,直到词表大小达到预设的上限为止。举个简化的例子,假设语料里字母 t 和 h 紧挨着出现的频率最高,就把 d、 h 合并成一个 token, 下一轮发现 ta, t 和 e 挨在一起,最多再合并成 the, 然后可能是 in 和 g 合成 in, t 和 i, n 合成 shin。 高频的组合被一轮一轮吸收成独立的 token, 低频的组合就保持在更小的碎片状态。训练结束后的效果是,常见词往往被完整保留为一个 token, 像 the, is, and 都是一个 token 稍长,但常见的词可能被切成两三段,比如 playing 切成 play 加 in。 罕见词会被拆得很碎。一个生僻的专有名词可能碎成五六个子词,甚至字节级的片段。这是一个非常优雅的自适应机制。频率高的模式自动获得更紧凑的编码。频率低的模式用更小的零件拼出来,任何文本都能被表示,不存在词表溢出的问题。同时,高频内容的编码效率还很高。 现在来讲一个经典案例,帮你更直观地理解 tocanizer 对 模型的编码效率还很高。现在来讲一个经典案例帮他, strawberry 里有几个 r, 他 答不对。 当时很多人觉得不可思议,这么简单的问题,模型怎么会出错?根源就在 tokenizer。 strawberry 在 大多数 tokenizer 里不会被切成十个字母,而是被切成类似 straw 加 berry 这样的子词。 token 模型看到的输入就是这两个块儿,它从来没有在字母级别逐个看过这个词的拼写。你让它去数字母,它没有直接的信息可用,只能靠训练中积累的模式去猜,猜错了很正常。现在的模型已经把这类问题处理得很好了,但重点是,这不是因为 organizer 的 机制变了, 递降的仍然是 subword tokenization 模型处理的仍然是子词 token 不是 单个字体,模型是通过更强的推理能力学会了补偿这个限制,它能推断出 token 内部的字体组成,再去做技术。 这个例子的价值不在于模型还有没有这个 bug, 而在于它把一个关键事实暴露得非常清楚。 tokenizer 决定了模型看到的世界长什么样。模型不认识字母,不认识像素,不认识声波,它认识的只有 token。 tokenizer 怎么切,模型就怎么看。这一步的设计会渗透到模型所有能力的边界。 词表大小是 tokenizer 设计中最核心的超参数。词表越大,高频词被完整保留的概率越高。序列越短,推理效率越好。 但代价是 embedding 层参数量增大,每个 token 在 训练中被见到的平均次数减少。低频 token 的 向量表示质量会下降。此表越小,任何文本都能被表示。 极端情况下,只用两百五十六个字节级 token 就 能编码一切,但序列会变得非常长,计算开销大,模型也更难在这么长的序列上建立有效的语义关联。主流大模型的词表通常在三万到十五万之间, g p t 系列,大约十万,困系列做了对中文更友好的词表设计, 这些数字都不是拍脑袋定的,背后是效率、覆盖率和多语言支持之间的反复实验和权衡。面试中还有一个高频问题,不同模型的 tokenizer 能互换吗? 不能,每个模型的 tokenizer 是 跟模型配套训练的词表不同,合并规则不同,同一段文本切出来的 token 系列完全不一样。 token id 的 映射也对不上,你拿 gpt 的 token id 喂给拉玛输出会是完全混乱的结果。 做模型替换迁移或者多模型对比实验的时候, tokenizer 必须跟着模型走,这点搞错了,下游全是错。 最后说几个工程中 tokenizer 相关的常见坑。第一个,上下文超线,你觉得自己的 prompt 不 长,但 token 数可能远超你的文字感觉, 尤其是大段中文代码, url 特殊符号这些东西, token 效率都很低,一段看起来不长的内容可能吃掉大量 token。 线上故障里有不少的根音就是 token 树超了上下文窗口的限制,不是模型的问题。 所以工程中一定要在发请求之前用 tokenizer 实际计算 token 数,不要靠估算。第二个,多语言场景下的成本差异。如果你的产品同时面向中英文用户,同样的功能,中文用户消耗的 token 可能是英文的一点五到二倍。 限流策略、费用预算、上下文管理全都需要把这个差异算进去。面试回答框架, tokenizer 把原始文本转换成模型,能处理的 token 系列,主流方案是 subword tokenization, 最常用的算法是 bpe。 bpe 在 大规模语料上反复合并最高频的相邻 token 对 来构建词表,结果是高频词被压缩为整 token, 低频词被拆成更小的子词碎片。 这个设计是在序列长度和词表大小之间做权衡。词表大,序列短但参数多。低频 token 质量差,词表小,覆盖权,但序列长,计算贵。 tokenizer 决定了模型看到什么。同样的文本,在不同语言下 token 效率不同, 直接影响成本和上下文容量。早期模型在字体级别任务上的短板就来自 subword。 切分模型看到的是子词块,不是字体。不同模型的 tokenizer 不 能互换,必须配套使用。工程上要用 tokenizer。 实际计算 token 数不能靠字数估算。

因为七天硬钢难度十足,所以主播充钱买了组委会的 plus 服务,多送半天。此乃第二点五天 进入 excel 篇的终极之战。做完主指标的环形图和柱状图,做区域销售数据的明细表。要想让显示的数据可以准确地跟切片器选择的月份变化,还是需要理解和熟练使用 get pivot data 函数, 不同于直接选中单元格引用这个坑位, get pivot data 引用数据的特征,比如五月成交金额,无论透视表如何,根据月份变化 get pivot data 都能找到对的数据,避免缺失。这里在作图加美化中 大功告成,终于做完这个粉嫩灵动水蜜桃的报表。根据月份区域自动筛选周太皇科技公司的销售数据,自动计算主要指标和环比变化和是化数据,还因为使用他们 的新人数据,脑筋来都是自动化分析,一直向学习完结散化五角竞猜主播在学啥?倒扣过来,那山顶在哪? 山顶怎么求那个现在山顶坐标呢?第三天,主播开学了,不多废话,继续硬刚。正式进入 tablo 的 学习,下载 tablo 桌面版, 它的定位偏向于交互式数据可化软件,等待下载。观众朋友你们说说看,如果我做这个动作,然后我先做一个这个动作,然后再做这个动作。 对啊,他怎么可能不知道我的这个动作会一下子就是科秒啊!猜不猜到科秒是手往上抬,这个是科秒?对,然后,而且他动作特别大,棒棒棒棒对吧?然然,然后 放学来到星星课,继续硬刚开不喽,刚开始接触开不喽就有惊艳到我,因为开不喽把销售员数据自动分类成离散自断和连续自断,也就是类结型和数值型自断。 拖拽字段立马生成整齐的表格,而且筛选数据太方便,只要把字段拖入筛选器,就可以直接筛选。比起 excel, 要做透视表,要做切片器方便很多。计算字段也方便,算客单价直接拖 成交金额。字段除以客户数字段储存为一个新的字段小胶囊,这种可以到处拖拽可爱的小胶囊,随便生产表的感觉很棒。 今天数据处理了一半,明天继续硬刚。今天学的还挺顺,我能硬刚成功吗?

你是否曾经好奇过,当你对着掐着 cpt 说你好的时候,这台机器到底听到了什么?他真的理解这两个汉字的意思吗?还是说,他根本就不知道你在说什么? 大家好,我是李晨浩南。接下来,请进入大模型的世界。今天我要告诉你一个可能颠覆你认知的事实, ai 其实根本就不识字。没错,不管是中文、英文还是墨迹,对于 ai 来说都只是一团乱码。它之所以能够对答如流,全靠背后的结构投给它。 你可以把它想象成 ai 的 翻译官,专门负责把人类的语言翻译成 ai 能看得懂的数字。 那这个翻译官是怎么工作的呢?举个直观的例子,当你输入苹果这两个字时,他可能会把苹果当成一个整体打包,也有可能拆分成苹和果。如果是英文 apple, 他 可能拆成 app 和 l e。 为什么要这么麻烦?因为 ai 处理信息的最小单元不是字,而是托根 托肯。你可以理解成 ai 眼中的积木块。中文或英文里,一个托肯可能是一个词, 也可能是半个词。托肯奈斯的拆分是有固定规则的,但这个规则不是人工写的一菲奥斯规则,而是从含量、数值中统计学习出来的。具体来说,托肯奈斯在训练阶段会通过算法,比如说 a、 p、 e, 反复分析文本,找出最高频出现的字母组合。比如,他发现点赞在某本书中出现了三百次,收藏出现了六百零二次, 关注出现了二百五十一次,而与之对应的赞只出现了四次,收只出现了十次。所以算法更偏向于将点赞、关注、收藏分别打包成一个托克, 这些组合一旦确定就固化成了词汇表,之后使用时就是查表,操作不会再变。这个时候你可能会问,为什么不能一个字一个字的处理?多简单, 问题就出在这个简单上。如果 ai 一个字一个字的学,他永远理解不了机器学习和学习的机器是完全不同的东西,也分不清马上是立刻的意思还是骑在马背上。 tokyo 子做的就是把语言中有意义的片段提取出来,让 ai 看到机器学习时知道这是一个完整的概念,而不是机器加学习的简单叠加。 ai 其实并不理解语言,他只是擅长在数字的迷宫里找规律,他从不真正懂你在说什么,只是 tokyo 的 排列组合恰好模拟了理解的假象。我是李善好男,关注我,带你了解更多的 ai 知识!

哈喽,大家好,我是李月,今天给大家介绍一下电力台的用法,电力台呢就是按指定的条件删除表里面的相关记录,我们可以先看一下他的语法, 他直接接芙蓉后面的表明,然后呢接指定的条件就可以了。我们先看一下下面这张表里面的内容, 我们想删除姓名为张三的资料,用户的一个信息,在删除之前呢,我们先对这张表做一个备份, 就把他的数据备份到一张临时表里面,然后我们可以查询一下这张临时表里面的数据呢,和卡斯顿表里面的数据是一致的,然后我们删除这张临时表里面张三 这个记录,再查询一下这张临时表,张三就已经被删除了,我们可以看到张三已经没有了。 然后呢这里要着重提醒一下大家们,如果在丁力塔后面不加这个物尔条件的话,他是会直接将表里面的所有记录都删除掉了。我们可以先给大家执行一下, 然后查询一下这张临时表里面已经什么数据都没有。所以说大家如果在删除的时候,一定要记得在 word 后面要加上条件, 否则很容易造成数据的丢失。好,以上就是宾利的相关用法,谢谢大家。

我们平时用 ai 的 时候,生成内容会消耗 token, 那 么 token 到底是什么?它和我们平时说的字词有什么区别?为什么 ai 非要用 token, 而不是直接处理汉字或单词? 今天我们就把 token 彻底讲透,从本质规则、案例到实用技巧,让你不仅知道 token 是 什么,更懂它为什么这么重要。首先,我们先明确一个核心定义,也是最关键的一句话, token 是 ai 处理文本的最小语义单元。 注意,是语义单元,不是文字单元。什么意思?简单说, token 是 token serr 经过训练后认为的最小且有意义,能独立参与语义表达的文本片段。它既不是单个汉字,也不是完整词语, 而是介于两者之间,兼顾语义和效率的最小单位。我们上节课举过几个例子,今天在细划在补充语义和效率的最小单位。我们上节课举过几个例子,今天再细划,在补充词的区别。先看中文场景, 我们平时说的汉字是语言的书写单位,比如程序员,每个都是独立汉字,词语是语言的最小表达单位,比如程序员工作方人工智能。但 token 不 一样, 它是 tokener 根据语义关联性和训练规则切分的。比如程序员拆成程序和源两个 to 肯,因为 tokener 认为程序是一个完整的语义片段,源也是一个独立的语义片段,两者结合才是程序员,但分开也能单独表达基础语义。 再比如人工智能,有些会拆成人工和智能两个 to 肯,有些会直接当成一个 to 肯。核心取决于这个词在训练数据中的出现频率,出现频率高,语义关联性强,就可能被当作一个 to。 肯 出现频率低,可拆分出独立语义,就会被拆分。再看英文场景,更能理解 token 的 逻辑。英文的单词是最小书写单位,比如 hope for, 但 tok elsa 会把它拆成 help 和 for 两个 token, 因为 help 是 核心语义帮助, for 是 后缀,表示充满的两者都有独立语义,拆分后能提升模型处理效率。 再比如 unhappiness, 可能会拆成 unhappiness 三的 token, 每个片段都有独立语义,而像 hello gou 这种短单词、高频词,通常会被当做一个完整 token, 因为拆分后就失去了核心语义,没有意义。还有一个容易被忽略的点, 标点符号、空格、特殊符号,甚至换行,都会被当做独立 token。 比如我们输入 ai 到底是什么? 这句话会被拆成 ai 到底是什么?五个 token, 其中问号就是一个独立 token。 再比如 hello world 会被拆成 hello world 三的 token, 这也是为什么我们有时候统计 token 数量,会发现比汉字数多,因为标点、空格都被单独计数了。 接下来我们深入一点讲一个专业知识点,但全程大白话, token 的 切分规则核心是 bp 算法,字节对编码,这是目前绝大多数 token sir 的 核心原理。 简单说, bp 算法的逻辑就是从最小片段开始,不断合并高频出现的片段,最终形成 token sir。 比如一开始 token sir 会把所有汉字拆成单的字母成序元, 然后发现程序这两个字母经常一起出现,就把它们合并成一个 toc。 再发现程序员虽然也常出现,但程序和源单独出现的频率更高,就不继续合并,保留程序和源两个 toc。 这种规则的好处是什么?一是兼顾语义和效率,既保证每个 toc 都有独立语义,让 i i 能理解,又避免拆分太细。比如每个汉字都当 toc, 导致 toc 数量激增,占用过多上下文窗口,增加计算成本。 二是适配多场景,不管是常见词、生僻词、专业术语,都能通过拆分或合并形成合适的 toon, 让 ai 高效处理。这里给大家一个非常实用的换算技巧,记下来就能直接用一个 toon, 零点七五个英文单词,一点五到二个汉字。 比如一段四百字的中文文案,大概对应两百到两百六十个 toon, 一 本六十万字的长篇小说,大概对应三百到四百万个 toon。 这个换算能帮你快速判断一段文本的 toc 数量,避免超出模型的上下文窗口。比如 gpt 五点四的上下文窗口是一百零五万个 toc, 大 概能容纳一百五十到两百一十万个汉字。 很多人会问, toc 数量到底影响什么?其实它直接影响两个核心,一是 ai 的 理解能力。 token 是 ai 处理文本的最小单位,分词越合理, token 语义越清晰, ai 越能理解文本含义。二是使用成本和效率。 token 数量越多,占用的上下文窗口越大,计算成本越高,生成速度也会略慢。 这也是为什么很多 ai 工具会限制 token 数量,本质是控制成本和提升效率。还有一个常见误区,大家一定要避开 token 字词三者没有一一对应关系, 比如工作方是一个词,三个汉字却被拆成二个。 token 和 lo 是 一个单词,五个字母被当作一个 token 是 一个符号被当作一个 token。 记住这句话,你就不会再混淆三者的关系。我们再举一个真实场景的例子,帮你巩固理解。假设你给 ai 输入,帮我写一篇关于 ai token 的 短视频文案,要求通俗易懂,一分钟左右。 这句话经过 tokanoiser 处理后,会被拆成这样的 token。 帮我写一篇关于 ai token 的 短视频文案,要求通俗易懂,一分钟左右。 每个 token 都有独立语义 tokanoiser 把这些 token 映射成 tokid 传给大模型,大模型通过计算这些数字输出,新的 tokid 再经过解码,就变成了我们看到的文案。讲到这里,你应该已经彻底明白 tok 的 本质了, 它不是汉字,不是词语,而是 ai 为了高效处理文本,理解语义,拆分出来的最小语义单元,是 tokano 的 核心输出,也是 ai 与人类语言交互的基础。 没有 token, ai 就 无法把文字转化为数字,也就无法进行任何计算和生成。下节课我们就来讲大家最关心的 ai 记忆机制, context 上下文,搞清楚 ai 为什么能记住你之前说过的话,它的记忆到底是怎么来的,又有哪些限制。