语言模型文本处理基石:Tokenizer简明概述

news2025/1/23 10:29:21

编者按:近年来,人工智能技术飞速发展,尤其是大型语言模型的问世,让 AI 写作、聊天等能力有了质的飞跃。如何更好地理解和利用这些生成式 AI,成为许多开发者和用户关心的问题。

今天,我们推出的这篇文章有助于读者深入了解大语言模型的工作原理。作者指出,大语言模型的核心在于将文本转化为数字表征,这就需要介绍 tokenizer 的概念。通过 tokenizer ,文本被分词并映射为 token id,这为模型理解文本提供了坚实的基础。作者还比较了基于统计学的文本自动补全和大语言模型的不同之处,说明了上下文窗口大小的重要性。最后,作者建议读者在使用 OpenAI 等平台时观察定价规则与 token 数量的关系,并思考为什么是这种定价规则。

本文通俗易懂地介绍了 tokenizer 在语言模型中的关键作用,让我们更好理解这类模型的工作方式,对使用生成式AI有很好的启发作用。人工智能技术的发展日新月异,理解其基础原理尤为重要。我们将持续关注该领域新进展,为读者呈现有价值的技术分析。

以下是译文,enjoy!

🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~

作者 | SCORPIL

编译 | 岳扬

在这里插入图片描述

最近,生成式人工智能(Generative AI)领域的最新进展深刻改变了AI辅助应用(AI-assisted applications)中所采用的开发模式。就在五年前,将人工智能集成到应用程序中,除了需要基础技术外,很可能还需要一支计算机科学家团队来设计神经网络架构、训练和精心微调模型。总的来说,要做很多外行人难以理解的工作。但自从不到一年前 ChatGPT 发布以来,语言模型已经变得足够智能,以至于人们只需通过礼貌地询问,就能修改它们的行为(也不一定需要礼貌地询问)。
局限性。其中大部分都或多或少地依赖于应用 LLM 来控制 LLM 的想法(在本系列的后续部分中,我们将更深入地探讨这种情况)。这类工作感觉与传统的软件工程非常不同,有部分原因是它的 empirical nature (译者注:empirical nature应当意思为此类工作方式或方法是基于实际经验和实证数据的,而不是完全基于理论或假设。),部分原因是因为这个领域还十分年轻。

如今,使用人工智能并不一定要求对神经网络、机器学习和自然语言处理等领域有深入的了解,就像从事Web开发并不需要掌握编译器和汇编语言一样。不过,在这两种情况下,对于技术底层运作的了解对我们大有裨益,并且往往是优秀工程师与卓越工程师之间的区别。

目录

01 人工智能模型的本质是一种应用程序

02 文本自动补全系统设计

03 关于单词的定义和处理方式

01 人工智能模型的本质是一种应用程序

很多软件工程师第一次接触生成式人工智能时可能会感到困惑。多年的专业经验使他们对机器的能力有着一定的预期,并且可能会让他们怀疑其中是否存在一些虚假的表象。不管这种情况是好是坏,事实并非如此:每个人工智能模型只不过是一个应用程序(或者,如果你更愿意严格定义的话,是一个应用程序的核心部分)。模型的训练方式与大多数应用程序从零开始设计的方式不同,但它们仍然只是具有输入和输出的一种应用程序。

在这里插入图片描述

该应用程序的设计目标是,在输入一段文本后,以一种类似于人类编写的方式扩展输入的文本。这就是目前所有的 LLM 所做的。大模型是否能够“理解”输入的内容,这是一个备受争议的哲学话题。然而,大多数专家都同意,目前的 LLM 在创建文本时,并没有像人类那样真正理解输入文本。当然,没有人真正知道“像人类那样理解事物”是什么意思。谁知道呢,也许我们也只是一种非常先进的数据理解机器呢?

不过,我们还是不要被哲学问题所束缚。那么,我们要如何设计(哪怕只是在理论上)这种文本补全应用程序呢?

02 文本自动补全系统设计

文本自动补全系统(Autocomplete systems)已经存在几十年了,但直到手机流行起来后,才出现了对其最有用的应用。在手机上打字确实并不是很方便,因此能够猜测用户意图并给出输入建议这种能力就成了备受追捧的功能。

如果输入“New York”,文本自动补全系统很可能会预测下一个词是“City”。创建这种系统的一种相对直接的方法是使用简单的统计方法:在一个大型文本数据集中,记录下“New York”出现的所有文本样例(以及其他所有词对的样例),并记录在这些词对(如“New York”)后面出现的是什么单词,以此来学习文本的模式。

在设计这样的系统时,一个明显的需要权衡的因素是上下文的大小,即文本自动补全系统可以在输入中一起评估的单词数量:

  • 接受更长的输入可能助于提升预测的准确度。
  • 然而,输入量越大,统计数据存储所需的内存就会呈指数级增长。由于任何特定语言中可能出现的单词组合数量都是天文数字,因此即使使用最强大的硬件,收集和使用连续几个以上单词的精确频率数据也极其困难。

一个只有很小上下文窗口的文本自动补全系统,很快就会忘了他们刚刚在说什么。尽管有明显的局限性,但这样的系统与成熟的 LLM 相比还是有优势的:运行起来更轻便,而且可以说更适合文本信息辅助(text message assistance)。现代智能手机上的“预测文本”和“自动更正”功能更接近文本自动补全(autocomplete),而不是LLM(至少在撰写本文时是如此。它们可能很快就会被成熟的生成式人工智能所取代)。你可以亲自体验一下——在移动设备上进入本文的评论区,输入几个词(如果你想不出来,可以用“In future AI will(未来人工智能将会)”),然后不断选择设备给出的第一个输入建议。我以“The movie was(这部电影是)”开始,最后得到了下面这句话:

这部电影是一部好电影,但我认为它不足以成为一部好电影,因为它是一部好电影

The movie was a good one, but I don’t think it was good enough for the movie to be a good one because it was a good one

这个句子中的每一个词都是由前一个词自然衔接起来的。如果仅从这段文字中抓取一小段,单独读起来还可以:“这部电影是一部好电影”、“但我认为它不足以成为一部好电影”、“因为它是一部好电影”。然而,整段文本却是毫无意义的。 没有任何意义的线索将它们联系在一起。

为了便于比较,以下是由 GPT-3 根据 “The movie was” 补全的文本。

这部电影于2015年11月18日在美国上映。由布拉德·伯德执导,乔治·克鲁尼、休·劳瑞和布里特·罗伯逊主演。该片由迪士尼出品,票房大获成功,全球总票房超过 2.09 亿美元。

The movie was released in the United States on November 18, 2015. It was directed by Brad Bird, and stars George Clooney, Hugh Laurie, and Britt Robertson. It was produced by Disney and was a box office success, grossing over $209 million worldwide.

从这个简单的线索开始,GPT-3似乎就离题了,开始谈论了一部名为《明日世界(Tomorrowland)》的电影。令人印象深刻,但坦率地说,这可能不是我们希望从手机的文本自动补全功能中希望得到的结果。

这个例子表明,LLM可以根据更多的信息和语境来进行预测和生成文本,而不仅仅是依靠少数词语。 毕竟,要在第二句中正确说出“Disney”,必须考虑前面的整句文本。

但回到文本自动补全功能。为了让这种简单的统计方法发挥作用,我们必须首先获取统计数据。为此,我们可以编写一个程序,计算用户输入中提供的词组频率,并将统计数据存储在某个数据库中,以便以后在文本自动补全应用程序中使用。最终,输入的文本数据越多,文本自动补全程序的输出就应该变得更准确。

这种两阶段的方法反映了人工智能(以及机器学习一般)的工作方式。(译者注:此处的两阶段指的应当是首先需要收集并处理数据(训练模型),然后才能应用这些数据来进行预测或生成结果(运行模型))在这个类比中,这些统计数据是模型,计算这些数据是训练,文本自动补全是运行模型。开发者没有直接编写代码来定义应用程序的行为,而是创建了一个类似大型语言模型的中间过程,通过这个过程来指定应用程序的行为方式。

在这里插入图片描述

03 关于单词的定义和处理方式

我们理论上的文本自动补全程序(autocomplete program)隐含地将单词作为语言的原子部分进行操作。这是一个显而易见的选择,但并非最佳选择,原因有以下几点:

  • 单词并非如其表面看起来那样被清晰地定义;“I’m”算一个词还是两个词?像“um”这样的插入语算不算一个词?像GPT这样的首字母缩略词算不算单词?这是一个单词吗:“🌸”?“bbbbbbbb”呢?
  • “Apple”和“apples”是同一个单词的两种形式还是两个不同的单词?
  • 如果只关注单词,我们就会忽略标点符号提供的有价值的线索。例如,“Cats like eating…”可能会有“fish”作为有效的补全内容,而“Cats like eating, …”(注意逗号)更可能会补全“sleeping, and playing”之类的内容。

为了解决这些挑战,LLM的输入被分割成“token”而不是单词。 在LLM中,token本质上是“在文本中的常见字符序列”,不受严格规则或语言语义的约束。相反,统计分析过程会根据输入文本确定什么是token,什么不是token。因此,这种方法允许对任何语言(不受其语法的限制)自动分词(automatic tokenization)。此外,token可以包括任何符号,而不仅仅是字母。分词器会将文本中的每个字符都分配给一个token,包括标点符号、数字、空白字符,甚至是表情符号。

需要注意的是,上述方法是对 LLM 的输入进行分词的最常见方式,但并非唯一的方式。“分词(tokenization)”这个术语可能在其他语境下指代自然语言处理中使用的其他更高级程序。

LLM 分词器需要保持一种微妙的平衡:

  • 过于激进地将文本分割成 token 会使平均 token 长度变短,增加给定文本的上下文大小,并使 LLM 的运行成本更高。
  • 另一方面,如果分词过程过于保守,token过长,可能会限制模型捕捉长程依赖关系(long-range dependencies)的能力,导致文本中细微信号的丢失,并可能导致计算复杂性增加。

找到合适的一个平衡点对于确保分词器有效地表示文本,并保持计算效率至关重要。 GPT使用的是一种自定义分词器,你可以尝试理解它的工作方式[1]。请注意,该分词器将前导空格作为下一个单词token的一部分:”GPT“由两个token组成,与单词“tokenizer”相同。

在这里插入图片描述

由于分词器定义了一个庞大但也有限的 token 集合,因此可以对其进行枚举,并使用它们的索引作为数字类型的文本表征(digital text representation)。这种格式就是目前 LLM(大语言模型)所使用的。token 文本,即使是以二进制形式,长度也是可变的,这使得处理起来很困难,但token ID 只是数字。从 LLM 的角度来看,不存在所谓“文本字符(text character)”这样的东西。有趣的是,一些研究表明,人类感知文本的方式与此类似[2],更多地是根据单词块而不是单个符号。

至此,我相信您已经对创建 LLM 中训练步骤的重要性,上下文窗口大小的重要性,以及分词如何在将文本转换为与神经网络兼容的格式时发挥关键作用有了扎实的了解。是时候将我们新学习的知识应用到现实世界中了。我鼓励大家在浏览 OpenAI 的 LLM 定价页面[3]时牢记这些关键要点:

  • 模型使用成本,包括与训练、输入和输出相关的费用 ,是按每 1000 个token 计算的 通过 LLM 的 token 数量直接影响了运行它所产生的成本。
  • 上下文窗口大小对于 LLM 来说是一个关键参数。较大的窗口可以提高性能,但也会增加成本。

通过理解使用基于 token 的定价规则的目的,我们可以在实际场景中更明智地使用 LLM。

END

参考资料

[1]https://platform.openai.com/tokenizer

[2]https://library.ucsd.edu/dc/collection/bb95920960

[3]https://openai.com/pricing#language-models

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接

https://scorpil.com/post/understanding-generative-ai-part-one-tokenizer/

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

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

相关文章

【小沐学Python】网络爬虫之lxml

文章目录 1、简介2、安装3、基本功能3.1 lxml.etree3.2 解析HTML网页3.3 读取并解析HTML文件3.4 提取所有a标签内的文本信息3.5 树迭代3.6 序列化3.7 元素以字典的形式携带属性3.8 元素包含文本 4、代码测试4.1 lxml解析网页4.2 使用xpath获取所有的文本4.3 使用xpath获取 clas…

TA-Lib学习研究笔记(二)——Overlap Studies上

TA-Lib学习研究笔记(二)——Overlap Studies 1. Overlap Studies 指标 [BBANDS, DEMA, EMA, HT_TRENDLINE, KAMA, MA, MAMA, MAVP, MIDPOINT, MIDPRICE, SAR, SAREXT, SMA, T3, TEMA, TRIMA, WMA]2.数据准备 get_data函数参数(代码&#x…

mongoose学习记录

mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…

利用段落检索和生成模型进行开放域问答12.2

利用段落检索和生成模型进行开放域问答 摘要引言2 相关工作3 方法 摘要 事实证明,开放域问答的生成模型具有竞争力,无需借助外部知识。虽然很有希望,但这种方法需要使用具有数十亿个参数的模型,而这些模型的训练和查询成本很高。…

还在Wins 11怀念10的右键单击菜单?别担心,可通过注册表来实现

到目前为止,Windows 11最令人讨厌的新“功能”是右键单击任何内容时会出现截断的上下文菜单。以前版本的Windows显示了你的所有选项,包括可以打开文件的不同程序,而新菜单仅限于少数选项,不一定是你想要的。 例如,当我…

SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP(五):使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本,请访问 github。 XGBoost 等梯度增强机方法对于具有…

C++ day48 打家劫舍

题目1:198 打家劫舍 题目链接:打家劫舍 对题目的理解 专业小偷偷盗房屋的钱财,每个房屋存放的金额用非负整数数组表示; 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警; 不触动警报装置的情况…

吸积效应:为什么接口会越来越臃肿?我们从一个接口说起

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习 1 从一个接口说起 1.1 初始接口 假设现在有一个创建订单接口: pub…

C语言每日一题(44)删除排序链表中的重复元素 II

力扣 82 删除排序链表中的重复元素 II 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5]示…

mac安装解压缩rar后缀文件踩坑

mac默认能够解压缩zip后缀的文件,如果是rar后缀的自己需要下载相关的工具解压 下载地址: https://www.rarlab.com/download.htm mac我是因特尔芯片所以下载 x64 然后解压缩文件进入目录 rar中 将可执行文件 rar、unrar 移动到 /usr/local/bin目录下即…

【高效开发工具系列】jackson入门使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ASP.NET Core MVC过滤器

1、过滤器分为授权过滤、资源访问过滤、操作方法(Action)过滤、结果过滤、异常过滤、终结点过滤。上一次咱们没有说异常过滤和终结点过滤,不过老周后面会说的。对这些过滤器,你有印象就行了。 2、所有过滤器接口都有同步版本和异…

可视化开源编辑器Swagger Editor本地部署并实现远程访问管理编辑文档

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagge…

【Python百练——第3练】矩形类及操作

💐作者:insist-- 💐个人主页:insist-- 的个人主页 理想主义的花,最终会盛开在浪漫主义的土壤里,我们的热情永远不会熄灭,在现实平凡中,我们终将上岸,阳光万里 ❤️欢迎点…

一缕青丝寄相思

10年8月16日七夕节男孩向女孩表白,女孩不知道那天是七夕,也没有读懂男孩的爱,女孩在9月22日中秋,向男孩打开了心门,男孩却没有懂女孩的心思.13年后的一封问候邮件,一束女孩的长发和回不去的青春 洒满阳光的午后 转眼间看到你的笑脸 微笑着你对我说 遇上你认识我真好 你说得好莫…

论文解读--Robust lane detection and tracking with Ransac and Kalman filter

使用随机采样一致性和卡尔曼滤波的鲁棒的车道线跟踪 摘要 在之前的一篇论文中,我们描述了一种使用霍夫变换和迭代匹配滤波器的简单的车道检测方法[1]。本文扩展了这项工作,通过结合逆透视映射来创建道路的鸟瞰视图,应用随机样本共识来帮助消…

力扣日记12.3-【二叉树篇】二叉树的所有路径

力扣日记:【二叉树篇】二叉树的所有路径 日期:2023.12.3 参考:代码随想录、力扣 257. 二叉树的所有路径 题目描述 难度:简单 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径…

JAVA代码优化:CommandLineRunner(项目启动之前,预先加载数据)

CommandLineRunner接口是Spring Boot框架中的一个接口,用于在应用程序启动后执行一些特定的代码逻辑。它是一个函数式接口,只包含一个run方法,该方法在应用程序启动后被自动调用。可以帮助我们在应用程序启动后自动执行一些代码逻辑&#xff…

sharding-jdbc实现分库分表

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 😅😅最近几天的状态有点不对,所以有几天没有更新了。 当我们的数据量比较大…

css实现简单的抽奖动画效果和旋转效果,还有春联效果

使用css的animation和transform和transition可以实现简单的图片放大缩小,旋转,位移的效果,由此可以延伸的动画效果还是挺多的,比如图片慢慢放大,图片慢慢旋转并放大,图片慢慢变化位置等等, 抽奖…