当前位置: 首页 > news >正文

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

编者按:近年来,人工智能技术飞速发展,尤其是大型语言模型的问世,让 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/

相关文章:

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

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

淘宝商品详情数据接口(店铺搬家、数据分析、代购商城、ERP选品、无货源铺货、品牌监控)

使用淘宝API接口需要以下步骤: 注册开发者账号:在淘宝开放平台(https://o0b.cn/anzexi)上注册一个开发者账号,并创建一个应用。 获取API密钥:在应用页面上获取API密钥,这是后续调用API接口的凭…...

面试篇之微服务(一)

目录 概览 1.什么是微服务? 2.微服务带来了哪些挑战? 3.现在有哪些流行的微服务解决方案? 这三种方案有什么区别吗? 4.说下微服务有哪些组件? 注册中心 5.注册中心是用来干什么的? 6.SpringCloud可…...

智慧科研助力科研数据的分析处理

如今,科研领域的发展日新月异,数据量也越来越大。这时,智慧科研可视化技术不仅为科研人员提供了快速高效的数据分析手段,而且为科研工作的推进提供了新的思路和方法。通过可视化手段,我们可以将各种数据、信息、知识以…...

el-select实现分屏效果

动态绑定class值 &#xff0c;多种判断 :class"type 8 ? home-stye-2 : type 24 ? home-stye-1 : home-stye-3" <div class"home-right-top"><div class"home-right-top-video"><el-row :gutter"20"><el-c…...

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题&#xff0c;去微信公众平台&#xff08;小程序&#xff09;上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件&#xff0c;就会发现控制台报错了&#xff0c;会提示一个https什么不在ip白名单&#xff0c;复制那个网址 2、…...

windows系统用nginx部署web应用

要在Windows系统上使用Nginx进行本地部署和运行Web应用程序&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.首先下载nginx&#xff0c;需要去nginx官网&#xff1a; nginx: download 下载最新版本的&#xff1a; 2.解压缩Nginx&#xff1a;找个磁盘位置&#xff0c;新…...

如何利用Python进行数据归一化?

1. 知识简介 数据归一化是数据预处理的一项重要步骤&#xff0c;它对于提高模型性能、加速模型训练、避免数值计算问题以及提高模型的泛化能力都具有重要作用。进行数据归一化可以起到以下作用&#xff1a;消除量纲影响&#xff0c;加速模型收敛&#xff0c;提高模型性能&…...

Linux 基本语句_13_消息队列

概念&#xff1a; 不同进程能通过消息队列来进行通信&#xff0c;不同进程也能获取或发送特定类型的消息&#xff0c;即选择性的收发消息。 一般一个程序采取子进程发消息&#xff0c;父进程收消息的模式 常用函数功能&#xff1a; fork(); // 创建子进程 struct msgbuf{ …...

Maven——仓库

Maven坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式&#xff1b;而构件的物理表示方式是文件&#xff0c;Maven通过仓库来统一管理这些文件。 1、何为Maven仓库 在Maven世界中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称为构件。例如&…...

Pandas:一个实用高效的Python数据处理库

个人网站 文章首发公众号&#xff1a;小肖学数据分析 导语&#xff1a; Pandas是一个强大且易于使用的Python数据处理库&#xff0c;广泛应用于数据分析和数据科学领域。本文将介绍Pandas库的基本概念、功能和使用方法&#xff0c;并提供详细的示例&#xff0c;帮助小白快速…...

Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想

目录 一、Lombok工具包下载 二、前后端互联的图书管理系统 规范 三、分层思想 三层架构&#xff1a; 1.表现层 2.业务逻辑层 3.数据层 一、Lombok工具包下载 这个工具包是为了做什么呢&#xff1f; 他是为了不去反复的设置setting and getting 而去产生的工具包 ⚠️工具…...

DDoS高防IP到底是什么?

DDoS高防IP是提供一个带防御的IP&#xff0c;主要是针对网络中的DDoS攻击进行保护&#xff0c;是针对互联网服务器遭受大流量的DDoS攻击后&#xff0c;导致服务不可用的情况下&#xff0c;用户可以通过配置高防IP&#xff0c;将攻击流量引流到高防IP上&#xff0c;从而确保源站…...

el-row错位问题解决

<el-row type"flex" style"flex-wrap:wrap">...

torch indices x[indices] 内存不足崩溃,python进程锁报错。

报错 Process Process-167: Traceback (most recent call last):File "/usr/lib/python3.10/multiprocessing/process.py", line 317, in _bootstraputil._exit_function()File "/usr/lib/python3.10/multiprocessing/util.py", line 360, in _exit_funct…...

第二证券:机构争分夺秒抢滩 金融大模型落地为时尚早

本年以来&#xff0c;大模型席卷金融业&#xff0c;一夜之间&#xff0c;简直悉数金融场景都在探索适配大模型接口。但是&#xff0c;志向丰满&#xff0c;实践骨感。有大型金融组织IT部分人士比方&#xff0c;金融大模型从战略规划到安顿落地&#xff0c;有着从“卖家秀”走到…...

C#WPF使用MaterialDesign 显示带遮罩的对话框

第一步定义对话框 <UserControlx:Class="TemplateDemo.Views.Edit.UCEditUser"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.m…...

Nuxt.js:下一代Web开发框架的革命性力量

文章目录 一、Nuxt.js简介二、Nuxt.js的特点1. 集成Vue.js和Node.js2. 自动代码分割和优化3. 服务端渲染&#xff08;SSR&#xff09;4. 强大的路由管理5. 丰富的插件系统 三、Nuxt.js的优势1. 提高开发效率2. 降低维护成本3. 提高用户体验 四、Nuxt.js在实际应用中的案例1. 电…...

【JavaEE初阶】死锁问题

目录 一、死锁的三种典型场景 1、一个线程&#xff0c;一把锁 2、两个线程&#xff0c;两把锁 3、N个线程&#xff0c;M把锁 死锁&#xff0c;是多线程代码中的一类经典问题。我们知道加锁是能解决线程安全问题的&#xff0c;但是如果加锁的方式不当&#xff0c;就可能产生死…...

uniapp 打包的 IOS打开白屏 uniapp打包页面空白

uniapp的路由跟vue一样,有hash模式和history模式, 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。 如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...