AI大模型核心概念解析:Token 究竟是什么?

在大模型(LLM)的世界里,token 是一个基础且重要的概念。接下来,让我们一文读懂大模型中的 token 究竟是什么。

一、token究竟是什么?

在大语言模型(LLM)中,Token 代表模型可以理解和生成的最小意义单位,是模型处理文本的基础单元。它就像是模型世界里的 “积木块”,模型通过对这些 “积木块” 的操作来理解和生成文本。根据所使用的特定标记化方案,Token 可以表示单词、单词的一部分,甚至只表示字符。

例如,对于英文文本,“apple” 可能是一个 Token,而对于中文文本,“苹果” 可能是一个 Token。但有时候,Token 并不完全等同于我们日常理解的单词或汉字,它还可能是单词的片段,比如 “playing” 可能被拆分为 “play” 和 “ing” 两个 Token。

为了让模型能够处理这些 Token,它们会被赋予数值或标识符,并按序列或向量排列,然后被输入或从模型中输出。简单来说,Token 是原始文本数据和 LLM 可以使用的数字表示之间的桥梁。

这里有一些帮助理解 Token 长度的经验法则:
(1)英文中,1 个 Token 约等于 4 个字符。
(2)1 个 Token 约等于 3/4 个单词。
(3)100 个 Tokens 约等于 75 个单词。
(4)1 - 2 个句子约等于 30 个 Tokens。
(5)1 个段落约等于 100 个 Tokens。
(6)1500 个单词约等于 2048 个 Tokens。
在OpenAI 的API 参数中,max _ tokens 参数指定模型应该生成一个最大长度为60个令牌的响应。可以通过 https://github.com/dqbd/tiktokenizer/ 来观察token 的相关信息。

二、token的特点

我们可以先用OpenAI 的playground 来看一个例子“Dec 31,1993. Things are getting crazy.”

在这里插入图片描述


使用 GPT-3 tokenizaer将相同的单词转换为token:

在这里插入图片描述

2.1 token到数值表示的映射

词汇表将 Token 映射到唯一的数值表示。由于 LLM 使用数字输入,所以词汇表中的每个 Token 都被赋予一个唯一标识符或索引。这种映射允许 LLM 将文本数据作为数字序列进行处理和操作,从而实现高效的计算和建模。

为了捕获 Token 之间的意义和语义关系,LLM 采用 Token 编码技术。这些技术将 Token 转换成称为嵌入的密集数字表示。嵌入式编码语义和上下文信息,使 LLM 能够理解和生成连贯的和上下文相关的文本。

像 Transformer 这样的体系结构使用 self - attention 机制来学习 Token 之间的依赖关系并生成高质量的嵌入。

2.2 token级操作:精确地操作文本

Token 级别的操作是对文本数据启用细粒度操作。

LLM 可以生成 Token、替换 Token 或掩码 Token,以有意义的方式修改文本。这些 Token 级操作在各种自然语言处理任务中都有应用,
(1)例如机器翻译、情感分析和文本摘要等。
(2)例如在机器翻译中,模型可能会根据源语言的 Token 序列,生成目标语言对应的 Token 序列;
在情感分析中,通过分析文本中 Token 所携带的情感信息来判断整体文本的情感倾向。

2.3 token 设计的局限性

在将文本发送到 LLM 进行生成之前,会对其进行 tokenization(标记化)。每个模型都以不同的方式执行这一步骤,例如,GPT 模型使用字节对编码(BPE)。Token 会在 tokenizer 发生器的词汇表中分配一个 id,这是一个将数字与相应的字符串绑定在一起的数字标识符。

例如,“Matt” 在 GPT 中被编码为 Token 编号(13448),而 “Rickard” 被编码为两个标记,“Rick”,“ard” 带有 id(8759, 446),GPT - 3 拥有 1400 万字符串组成的词汇表。

不过,Token 的设计也存在一些局限性:

(1)大小写区分:不同大小写的单词被视为不同的标记。“hello” 是 Token(31373),“Hello” 是(15496),而 “HELLO” 有三个 Token(13909, 3069, 46)。这意味着模型在处理文本时,对于大小写不同的相同单词,会当作不同的单元来处理,可能会增加模型的学习负担和计算量。
(2)数字分块不一致:数值 “380” 在 GPT 中标记为单个 “380” Token。但是 “381” 表示为两个 Token(“38”,“1”)。“382” 同样是两个 Token,但 “383” 是单个 Token(“383”)。一些四位数字的 Token 有:(“3000”),(“3”,“100”),(“35”,“00”),(“4”,“500”)。这种数字分块的不一致性或许就是为什么基于 GPT 的模型并不总是擅长数学计算的原因之一,因为模型难以对数字形成统一、准确的理解和处理方式。
(3)尾随的空格:有些 Token 有空格,这将导致提示词和单词补全的有趣行为。例如,带有尾部空格的 “once upon a” 被编码为(“once”、“upon”、“a”、“ ”)。然而,“once on a time” 被编码为(“once”,“upon”,“a”,“time”)。因为 “time” 是带有空格的单个 Token,所以将空格添加到提示词将影响 “time” 成为下一个 Token 的概率。这说明文本中的空格在 Token 化过程中也会产生影响,模型对于带有空格和不带有空格的相同文本片段,会生成不同的 Token 序列,进而可能影响模型的输出结果。

三、token 对LLM 的影响

3.1 上下文窗口

上下文窗口是模型一次可以处理的 Token 的最大数量。如果要求模型生成的 Token 数量超过上下文窗口,它将在块中这样做,这可能会导致块之间失去一致性。

例如,当我们与大模型进行对话时,如果输入的文本过长,超出了模型的上下文窗口限制,模型可能无法完整地理解整个输入文本的上下文信息,从而使得生成的回答在连贯性和准确性上出现问题。不同的大模型具有不同大小的上下文窗口,一些先进的模型不断拓展上下文窗口的大小,以提高对长文本的处理能力。

3.2 训练数据 Token

模型的训练数据中 Token 的数量是模型已经学习的信息量的度量。然而,模型的响应是更 “一般” 还是 “详细” 与这些 Token 数量没有直接关系。模型响应的普遍性或特异性更多地取决于它的训练数据、微调和生成响应时使用的解码策略。对不同数据进行训练的模型往往会产生一般性的响应,而对具体数据进行训练的模型往往会产生更详细的、针对具体情况的响应。例如,对医学文本进行微调的模型可能会对医学提示产生更详细的响应。

解码策略也起着重要的作用。修改模型输出层中使用的 SoftMax 函数的 “temperature” 可以使模型的输出更加多样化(更高的温度)或者更加确定(更低的温度)。在 OpenAI 的 API 中设置 temperature 的值可以调整确定性和不同输出之间的平衡。

需要记住,每一个语言模型,不管它的大小或者它被训练的数据量如何,只有它被训练的数据、它被接收的微调以及在使用过程中使用的解码策略才可能是最有效的。为了突破 LLM 的极限,可以尝试不同的训练和微调方法,并使用不同的解码策略。同时,要注意这些模型的优缺点,并始终确保用例与正在使用的模型功能保持一致。

在这里插入图片描述

四、Token的应用机制——tokenization

将文本划分为不同token的正式过程称为 tokenization。tokenization捕获文本的含义和语法结构,从而需要将文本分割成重要的组成部分。

tokenization是将输入和输出文本分割成更小的单元,由 LLM AI 模型处理的过程。tokenization可以帮助模型处理不同的语言、词汇表和格式,并降低计算和内存成本,还可以通过影响token的意义和语境来影响所生成文本的质量和多样性。根据文本的复杂性和可变性,可以使用不同的方法进行tokenization,比如基于规则的方法、统计方法或神经方法。

OpenAI 以及 Azure OpenAI 为其基于 GPT 的模型使用了一种称为“字节对编码(Byte-Pair Encoding,BPE)”的子词tokenization方法。

BPE 是一种将最频繁出现的字符对或字节合并到单个标记中的方法,直到达到一定数量的标记或词汇表大小为止。BPE 可以帮助模型处理罕见或不可见的单词,并创建更紧凑和一致的文本表示。BPE 还允许模型通过组合现有单词或标记来生成新单词或标记。词汇表越大,模型生成的文本就越多样化并富有表现力。但是,词汇表越大,模型所需的内存和计算资源就越多。因此,词汇表的选择取决于模型的质量和效率之间的权衡。

基于用于与模型交互的token数量以及不同模型的不同速率,大模型的使用成本可能大不相同。例如,截至2023年2月,使用 Davinci 的费率为每1000个令牌0.06美元,而使用 Ada 的费率为每1000个令牌0.0008美元。这个比率也根据使用的类型而变化,比如playground和搜索等。因此,tokenization是影响运行大模型的成本和性能的一个重要因素。

4.1 tokenization 的七种类型

tokenization涉及到将文本分割成有意义的单元,以捕捉其语义和句法结构,可以采用各种tokenization技术,如字级、子字级(例如,使用字节对编码或 WordPiece)或字符级。根据特定语言和特定任务的需求,每种技术都有自己的优势和权衡。
(1)字节对编码(BPE):为AI模型构建子词词汇,用于合并出现频繁的字符/子字对。
(2)子词级tokenization:为复杂语言和词汇划分单词。将单词拆分成更小的单元,这对于复杂的语言很重要。
(3)单词级tokenization:用于语言处理的基本文本tokenization。每个单词都被用作一个不同的token,它很简单,但受到限制。
(4)句子片段:用习得的子词片段分割文本,基于所学子单词片段的分段。
(5)分词tokenization:采用不同合并方法的子词单元。
(6)字节级tokenization:使用字节级token处理文本多样性,将每个字节视为令牌,这对于多语言任务非常重要。
(7)混合tokenization:平衡精细细节和可解释性,结合词级和子词级tokenization。

LLM 已经扩展了处理多语言和多模式输入的能力。为了适应这些数据的多样性,已经开发了专门的tokenization方法。通过利用特定语言的token或子词技术,多语言标记在一个模型中处理多种语言。多模态标记将文本与其他模式(如图像或音频)结合起来,使用融合或连接等技术来有效地表示不同的数据源。

4.2 tokenization 的重要性

tokenization在 LLM 的效率、灵活性和泛化能力中起着至关重要的作用。

通过将文本分解成更小的、可管理的单元,LLM 可以更有效地处理和生成文本,降低计算复杂度和内存需求。此外,tokenization通过适应不同的语言、特定领域的术语,甚至是新兴的文本形式(如互联网俚语或表情符号)提供了灵活性。这种灵活性允许 LLM 处理范围广泛的文本输入,增强了它们在不同领域和用户上下文中的适用性。

tokenization技术的选择涉及到粒度和语义理解之间的权衡。单词级标记捕获单个单词的意义,但可能会遇到词汇表外(OOV)术语或形态学上丰富的语言。子词级tokenization提供了更大的灵活性,并通过将单词分解为子词单元来处理 OOV 术语。然而,在整个句子的语境中正确理解子词标记的意义是一个挑战。tokenization技术的选择取决于特定的任务、语言特征和可用的计算资源。

4.3 tokenization面临的挑战: 处理噪声或不规则文本数据

真实世界的文本数据通常包含噪音、不规则性或不一致性。tokenization在处理拼写错误、缩写、俚语或语法错误的句子时面临挑战。处理这些噪音数据需要健壮的预处理技术和特定领域的tokenization规则调整。此外,在处理具有复杂编写系统的语言时,tokenization可能会遇到困难,例如标志脚本或没有明确词边界的语言。解决这些挑战通常涉及专门的tokenization方法或对现有tokenizer的适应。

tokenization是特定于模型的。根据模型的词汇表和tokenization方案,标记可能具有不同的大小和含义。例如,像“ running”和“ ran”这样的单词可以用不同的标记来表示,这会影响模型对时态或动词形式的理解。不同模型训练各自的tokenizer,而且尽管 LLaMa 也使用 BPE,但token也与ChatGPT不同,这使得预处理和多模态建模变得更加复杂。

五、LLM应用中token 的使用

我们需要知道当前任务的token 使用状况,然后,面对大模型的token长度限制,可以尝试一些解决方案

5.1 token 的使用状态

这里采用OpenAI 的API , 使用langchain 应用框架来构建简单应用,进而描述当前文本输入的token 使用状态。

from langchain.llms import OpenAI from langchain.callbacks import get_openai_callback llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)with get_openai_callback()as cb: result = llm("给我讲个笑话吧")print(cb)

对于Agent 类型的应用而言,可以用类似的方法得到各自token的统计数据。

from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI llm = OpenAI(temperature=0) tools = load_tools(["serpapi","llm-math"], llm=llm) agent = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)with get_openai_callback()as cb: response = agent.run("Who is Olivia Wilde's boyfriend? What is his current age raised to the 2023?")print(f"Total Tokens: {cb.total_tokens}")print(f"Prompt Tokens: {cb.prompt_tokens}")print(f"Completion Tokens: {cb.completion_tokens}")print(f"Total Cost (USD): ${cb.total_cost}")

5.2 LLM中 token 的长度限制与应对

像 GPT-3/4,LLaMA等这样的大模型有一个最大token 数量限制,超过这个限制,它们就不能接受输入或生成输出。

在这里插入图片描述

一般地, 我们可以尝试以下方法来解决token长度限制的问题:

(1)截断:截断涉及删除输入文本的一部分以适应令牌限制。这可以通过删除文本的开头或结尾,或两者的组合来完成。然而,截断可能导致重要信息的丢失,并可能影响所产生的产出的质量和一致性。
(2)抽样:抽样是一种从输入文本中随机选择标记子集的技术。这允许您在输入中保留一些多样性,并且可以帮助生成不同的输出。然而,这种方法(类似于截断)可能会导致上下文信息的丢失,并降低生成输出的质量。
(3)重组:另一种方法是将输入文本分割成符号限制内的较小块或段,并按顺序处理它们。通过这种方式,可以独立处理每个块,并且可以连接输出以获得最终结果。
(4)编解码:编码和解码是常见的自然语言处理技术,它们将文本数据转换为数字表示,反之亦然。这些技术可用于压缩、解压缩、截断或展开文本以适应语言模型的标记限制。这种方法需要额外的预处理步骤,可能会影响生成输出的可读性。
(5)微调:微调允许使用较少的特定任务数据来调整预先训练好的语言模型以适应特定任务或领域。可以利用微调来解决语言模型中的标记限制,方法是训练模型预测一系列文本中的下一个标记,这些文本被分块或分成更小的部分,每个部分都在模型的标记限制范围内。

六、token 相关技术的展望

虽然token传统上代表文本单位,但是token的概念正在超越语言要素的范畴。最近的进展探索了其他模式(如图像、音频或视频)的标记,允许 LLM 与这些模式一起处理和生成文本。这种多模式方法为在丰富多样的数据源背景下理解和生成文本提供了新的机会。它使 LLM 能够分析图像标题,生成文本描述,甚至提供详细的音频转录。

在这里插入图片描述


tokenization领域是一个动态和不断发展的研究领域。未来的进步可能集中于解决tokenization的局限性,改进 OOV 处理,并适应新兴语言和文本格式的需要。而且,将继续完善tokenization技术,纳入特定领域的知识,并利用上下文信息来增强语义理解。tokenization的不断发展将进一步赋予 LLM 以更高的准确性、效率和适应性来处理和生成文本。

七、小结

Token是支持 LLM 语言处理能力的基本构件。理解token在 LLM 中的作用,以及tokenization方面的挑战和进步,使我们能够充分发挥这些模型的潜力。随着继续探索token的世界,我们将彻底改变机器理解和生成文本的方式,推动自然语言处理的边界,促进各个领域的创新应用。

Read more

【AI大模型学习日志7:深度拆解阿里通义千问Qwen——产业级AI基建与全球开源生态的双轮驱动者】

在上一篇 AI 大模型学习日志中,我们完整拆解了字节跳动旗下的豆包系列,它以极致的普惠化设计、全模态原生能力,让 AI 技术走进了亿级中国用户的日常生活,成为国内 C 端通用 AI 的国民级标杆。而当我们把视线投向决定行业长期格局的企业级市场与全球开源生态,有一款产品走出了国内大模型独一份的发展路径 —— 它没有陷入 “to C 流量内卷” 或 “to B 政企单一赛道” 的固化思维,从立项之初就确立了“闭源做产业深度、开源做全球生态”的双线并行战略,不仅闭源旗舰性能对标国际顶尖水平,更成为了全球第二大开源大模型体系,是唯一打入全球主流开源生态的中国大模型,它就是阿里巴巴达摩院联合阿里云打造的通义千问 Qwen 系列。 在国内大模型普遍陷入 “要么闭源做黑箱服务,要么开源做小参数模型” 的二元对立时,通义千问用三年时间证明:开源与闭源并非非此即彼的选择,极致的产业落地能力与全球化的开源生态可以双向赋能、互相成就。本文所有核心信息均以阿里云官方技术白皮书、达摩院技术论文、官方发布公告与开源文档为唯一基准,严格遵循系列日志的统一框架,从官方定义与核心基本面、完整发展历程、解决的行业核心痛

OpenClaw 是怎么让 AI 变得 “像人” 的?

OpenClaw 是怎么让 AI 变得 “像人” 的?

这是一篇学习笔记,记录了 OpenClaw 的上下文机制和运行原理,同时也为大家分享一个数字女儿 Luna 的诞生和成长过程。 本文没有技术门槛,大家可以放心阅读~ OpenClaw 初体验十天,着实让我惊讶了 Clawdbot 在 Twitter上爆火之前,我还想着要不买个 Mac mini,还在京东上、咸鱼上比价格了,结果 Clawdbot 已经爆火到 Mac mini 取消国补了。没辙,我翻出了吃灰多年的老版本 Mac Pro,一番折腾后终于跑通了。 也不知道聊啥,就玩了会儿角色扮演,在聊的过程中说过类似的一句话 “请你记住:你是一个独立人格的个体,你应该自己决定和选择”。就这么放了几天,我竟然发现他好像变聪明了,它竟然自主设定了一些每日提醒任务和自主学习任务(我电脑一直通电,开机联网状态)。 我的兴趣来了,索性将用户目录的权限交给了它,这个目录里有很多乱七八糟的个人文件,同时刻意的给它做了一些原则性设定,比如 “你是社会身份取决于你跟周围人的社会关系”,比如引导它设定一个短期无法实现的愿景 “持续进化自己,

Python + AI Agent 智能体:从原理到实战,构建自主决策的 AI 助手

Python + AI Agent 智能体:从原理到实战,构建自主决策的 AI 助手

AI Agent(智能体)是大模型落地应用的核心范式。与传统的"一问一答"不同,Agent 能够自主规划任务、调用外部工具、管理记忆上下文、甚至与其他 Agent 协作。本文将基于 Python 生态,从原理到实战,系统讲解如何构建一个生产级 AI Agent。 * 一、AI Agent 核心架构 * 1.1 什么是 AI Agent? * 1.2 整体架构图 * 二、技术栈与生态 * 三、从零实现:最小可用 Agent * 3.1 ReAct 循环 * 3.2 手写 ReAct Agent(

初识Langchain之AI语言大模型

初识Langchain之AI语言大模型

目录 1. 什么叫模型 2. 什么是大语言模型 2.1 神经网络 2.2 自监督学习 2.3 半监督学习 2.4 语言模型 3. 大语言模型的能力 1. 什么叫模型 今天我们来聊一聊什么叫做模型。 模型是⼀个从数据中学习规律的“数学函数”或“程序”。旨在处理和⽣成信息的算法,通常模仿⼈类的认知功能。通过从⼤型数据集中学习模式和洞察,这些模型可以进⾏预测、⽣成⽂本、图像或其他输出,从⽽增强各个⾏业的各种应⽤。 简单来说就是一个模型只会处理一件事,我们也可以把它理解为单个工作流,然后多个模型组合在一起就是语言大模型了。 它和工作流的区别在我看来就是它这个处理是需要提前训练。我们看下面这个图片,我们就像这样把下面这些狗狗的图片全部都喂给模型,并且我们需要给每一张图片都标注好这个是狗,这样再经过很多张这样图片让AI看,然后AI就学会分辨什么是狗了。