语言模型文本处理基石: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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境下 make/makefile、文件时间属性 详解!!!

1.项目自动化构建工具make/makefile 1.为什么要有make/makefile 我们先写一个简单的代码,然后编译生成一个可执行程序,下面的内容我们需要知道gcc识和编译链接的一些知识,不清楚的朋友们可以点这里http://t.csdnimg.cn/0QvL8 我们知道要想生…

Python爬虫:通过js逆向分析某翻译网站的原理

Python爬虫:通过js逆向分析某翻译网站的原理 1. 网站实现原理2. 抓取接口3. 参考代码和运行结果 1. 网站实现原理 首先,说一下爬取的网站:百度翻译。网站实现翻译的效果是通过接口实现的,也就是各位听到的ajax技术(只需要更换对应…

Spring | Spring的基本应用

目录: 1.什么是Spring?2.Spring框架的优点3.Spring的体系结构 (重点★★★) :3.1 Core Container (核心容器) ★★★Beans模块 (★★★) : BeanFactoryCore核心模块 (★★★) : IOCContext上下文模块 (★★★) : ApplicationContextContext-support模块 (★★★)SpE…

Mongoose 开源库--http协议 header 报头解析

一、http 协议 header 报头相关 API 获取http header的值 struct mg_str *mg_http_get_header(struct mg_http_message *hm, const char *name);参数: hm - HTTP message to look for header name - Header name返回值: HTTP header value or NULL i…

Docker下安装MySQL

如果在Docker下直接拉取MySQL并运行镜像,由于没有指定字符编码集,可能会存在插入中文出现乱码的情况,并且当容器删除后,容器里面存在的数据会丢失,所以在运行容器时应该使用数据卷进行挂载,按照如下步骤操作…

智慧城市包括哪些内容?有哪些智慧城市物联网方案?

数字城市、智慧城市的发展,离不开对公共基础设施的数字化、智慧化改造升级。通过融合边缘计算、5G、物联网、数字孪生、人工智能等新一代信息技术,助力传统公共基础设施提升增强全流程数据能力、计算能力、服务能力,从而不断丰富公共基础设施…

Kotlin:内置函数let、also、with、run、apply

前言 在Kotlin中,有一些用于扩展 & 方便开发者编码的内置函数,能大大提高开发者的开发效率。今天,我将主要讲解的是: let函数also函数with函数run函数apply函数 基础知识:接口回调中Lambda使用 在Kotlin中可使用…

IM通信技术快速入门:短轮询、长轮询、SSE、WebSocket

文章目录 前言即时通讯常用技术 短轮询(Short Polling)实现原理优点缺点 长轮询(Long Polling)实现原理改进点基于iframe的长轮询实现原理总结 Server-Sent Events(SSE)实现原理浏览器对 SSE 的支持情况SSE vs WebSocket总结 WebS…

Fisher信息理论与应用

一、概念介绍 Fisher信息量,是一次观测值所能提供的关于未知参数θ的信息量期望值的一种度量。 Fisher信息矩阵,是用利用最大似然函数估计来计算方差矩阵,表示随机变量的一个样本所能提供的关于状态参数在某种意义下的平均信息量。 Fisher…

Python---练习:列表赋值---追加append尾部追加元素,追加的是一个元素整体

相关链接: Python--列表及其应用场景---增、删、改、查。-CSDN博客 代码: # 列表赋值 a [1, 2, 3] a.append([3, 4]) # append尾部追加元素,追加的是一个元素整体:[3, 4] print(a)

Java实现简单飞翔小鸟游戏

一、创建新项目 首先创建一个新的项目,并命名为飞翔的鸟。 其次在飞翔的鸟项目下创建一个名为images的文件夹用来存放游戏相关图片。 用到的图片如下:0~7: bg: column: gameover: ground: st…

Java数据结构 之 包装类简单认识泛类

生命不息,奋斗不止 目录 1. 什么是包装类? 1.1 装箱和拆箱 1.2 自动装箱和自动拆箱 2. 什么是泛型 3. 引出泛型 3.1 语法 4 泛型类的使用 4.1 语法 4.2 示例 4.3 类型推导(Type Inference) 5. 裸类型(Raw Type) (了解&#xff09…

使用docker切换任意版本cuda使用GPU

1.现存问题 在主机上运行很多下载来的机器学习代码时,这些大都运行在不同版本的tensorflow-gpu或者pytorch等的包下的。但是,运行代码的过程中,存在匹配的问题: 1.不同的版本的tensorflow-gpu或pytorch对cuda版本的适配也不一样…

优化邮件群发效果的策略与方法

怎样优化邮件群发效果?这是许多企业在进行邮件营销时常常被问到的问题。邮件营销是一种高效且经济实惠的市场推广方式,但如何使邮件真正引起接收者的兴趣并产生预期的效果并不容易。好的营销效果可以带来高回报、高收益率,但是怎么提升群发效…

专升本期间部分C语言程序整理

说明 这些程序是我在专升本期间在CSDN上上传的作业、练习等,仅为学习备考的一小部分程序,整理成一篇文章,方便专升本的学弟学妹参考。 时间:2021年~2022年专升本期间 字符串题 输入字符串提取 数字字符 并 求和 (4处…

【最通用版FPGA 实现 SPI 驱动】

最近研究了一下SPI协议的FPGA实现,发现网上很多大佬分享的方法都是针对某一特定的flash芯片或者某一传感器芯片来设计电路结构的。所以想根据SPI(Serial Peripheral Interface)的基本通讯协议实现一个通用版的SPI Master驱动。SPI在嵌入式领域…

每天一点python——day84

#每天一点Python——84 #异常处理机制try—except—else #异常处理机制try—except—else如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块#示例: try:a int(input(请输入第一个整数:))b in…

controller能接收到数据有数据但是前端无法显示数据

又是制作系统时遇到的问题。只是想做个查询商品的页面,结果弄了一天,在网上各种查问题,各种解决办法用在我的代码上,换了无数种关键词搜索终于找到了一条成功解决了问题。 问题描述: 事情是这样的:我要写一…

无代码集成航天信息:优化电商平台用户运营,提高CRM和广告推广的效能

无代码开发的集成优势 在数字化竞争愈发激烈的商业市场中,企业对于提高效率和优化用户运营的需求不断增长。无代码开发的集成解决方案,如航天信息电子发票,为企业提供了无需深入编程知识即可快速实现的系统对接能力。这种集成方式简化了技术…

没了解死锁怎么能行?进来看看,一文带你拿下死锁产生的原因、死锁的解决方案。

🌈🌈🌈今天给大家分享的是死锁产生的原因,以及如何解决死锁问题。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起…