解读大模型(LLM)的token

大语言模型(LLM)token解读 Token是LLM处理文本数据的基石,它们是将自然语言转换成机器可理解格式的关键步骤。标记化过程(Tokenization):这是将自然语言文本分解成token的过程。在这个过程中,文本被分割成小片段,每个片段是一个token,它可以代表一个词、一个字符或一个词组等。变体形式:根据不同的标记化方案,一个token可以是一个单词,单词的一部分(如子词),甚至是一个字符。例如,单词"transformer"可能被分成"trans-", “form-”, "er"等几个子词token。 阅读详情
AI摘要

本文探讨了在大型语言模型中,尤其是GPT系列中,token的作用,包括其定义、在模型处理中的转换、特点及对模型性能的影响。文章还讨论了token在不同领域的应用,如自然语言处理任务和多模态处理,并指出tokenization的重要性和挑战,以及未来的发展趋势。

当人们谈论大型语言模型的大小时,参数会让我们了解神经网络的结构有多复杂,而token的大小会让我们知道有多少数据用于训练参数。

正像陆奇博士所说的那样,大型语言模型为从文本生成到问题回答的各种任务提供了令人印象深刻的能力,不仅彻底改变了自然语言处理(NLP)领域,而且作为基础模型会改变整个软件生态。

这些模型的一个经常被忽视的关键点是“token”的作用,即模型处理的各个信息单元。大型语言模型(LLM)不能真正理解原始文本,相反,文本被转换为称为token的数字表示形式,然后将这些token提供给模型进行处理。

cdb8b99352b1c92aa32f852587d90f96.jpeg

token 在区块链中代表是通证或者代币,那么token在LLM中代表的是什么呢?

1. 什么是token?

在 LLM 中,token代表模型可以理解和生成的最小意义单位,是模型的基础单元。根据所使用的特定标记化方案,token可以表示单词、单词的一部分,甚至只表示字符。token被赋予数值或标识符,并按序列或向量排列,并被输入或从模型中输出,是模型的语言构件。

一般地,token可以被看作是单词的片段,不会精确地从单词的开始或结束处分割,可以包括尾随空格以及子单词,甚至更大的语言单位。token作为原始文本数据和 LLM 可以使用的数字表示之间的桥梁。LLM使用token来确保文本的连贯性和一致性,有效地处理各种任务,如写作、翻译和回答查询。

下面是一些有用的经验法则,可以帮助理解token的长度:

1 token ~= 4 chars in English
1 token ~= ¾ words
100 tokens ~= 75 words
或者
1-2 句子 ~= 30 tokens
1 段落 ~= 100 tokens
1,500 单词 ~= 2048 tokens

在OpenAI 的API 参数中,max _ tokens 参数指定模型应该生成一个最大长度为60个令牌的响应。可以通过https://platform.openai.com/tokenizer 来观察token 的相关信息。

2. token 的特点

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

9e5548b8569bc084122b2e87aa371c23.jpeg

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

7ad60d352d5a44ea20f231a46a28513f.jpeg

2.1 token到数值表示的映射

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

为了捕获token之间的意义和语义关系,LLM 采用token编码技术。这些技术将token转换成称为嵌入的密集数字表示。嵌入式编码语义和上下文信息,使 LLM 能够理解和生成连贯的和上下文相关的文本。像transformer这样的体系结构使用self-attention机制来学习token之间的依赖关系并生成高质量的嵌入。

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

token级别的操作是对文本数据启用细粒度操作。LLM 可以生成token、替换token或掩码token,以有意义的方式修改文本。这些token级操作在各种自然语言处理任务中都有应用,例如机器翻译、情感分析和文本摘要等。

2.3 token 设计的局限性

在将文本发送到 LLM 进行生成之前,会对其进行tokenization。token是模型查看输入的方式ーー单个字符、单词、单词的一部分或文本或代码的其他部分。每个模型都以不同的方式执行这一步骤,例如,GPT 模型使用字节对编码(BPE)。

token会在tokenizer发生器的词汇表中分配一个 id,这是一个将数字与相应的字符串绑定在一起的数字标识符。例如,“ Matt”在 GPT 中被编码为token编号[13448],而 “Rickard”被编码为两个标记,“ Rick”,“ ard”带有 id[8759,446],GPT-3拥有1400万字符串组成的词汇表。

token 的设计大概存在着以下的局限性:

  • 大小写区分:不同大小写的单词被视为不同的标记。“ hello”是token[31373] ,“ Hello”是[15496] ,而“ HELLO”有三个token[13909,3069,46]。

  • 数字分块不一致。数值“380”在 GPT 中标记为单个“380”token。但是“381”表示为两个token[“38”,“1”]。“382”同样是两个token,但“383”是单个token[“383”]。一些四位数字的token有: [“3000”] ,[“3”,“100”] ,[“35”,“00”] ,[“4”,“500”]。这或许就是为什么基于 GPT 的模型并不总是擅长数学计算的原因。

  • 尾随的空格。有些token有空格,这将导致提示词和单词补全的有趣行为。例如,带有尾部空格的“once upon a ”被编码为[“once”、“upon”、“a”、“ ”]。然而,“once on a time”被编码为[“once”,“ upon”,“ a”,“ time”]。因为“ time”是带有空格的单个token,所以将空格添加到提示词将影响“ time”成为下一个token的概率。

d5d26495908fa94515237a3e37d90e7c.png

3. token 对LLM 的影响

关于token的数量如何影响模型的响应,常常感到困惑的是,更多的token是否使模型更加详细而具体呢?个人认为,token 对大模型的影响集中在两个方面:

上下文窗口: 这是模型一次可以处理的令牌的最大数量。如果要求模型比上下文窗口生成更多的标记,它将在块中这样做,这可能会失去块之间的一致性。

训练数据token: 模型的培训数据中令牌的数量是模型已经学习的信息量的度量。然而,模型的响是更“一般”还是“详细”与这些象征性的措施没有直接关系。

模型响应的普遍性或特异性更多地取决于它的训练数据、微调和生成响应应时使用的解码策略。大型语言模型中的令牌概念是理解这些模型如何工作以及如何有效使用它们的基础。虽然模型可以处理或已经接受过训练的令牌数量确实影响其性能,但其响应的一般性或详细程度更多地是其训练数据、微调和所使用的解码策略的产物。

对不同数据进行训练的模型往往会产生一般性的响应,而对具体数据进行训练的模型往往会产生更详细的、针对具体情况的响应。例如,对医学文本进行微调的模型可能会对医学提示产生更详细的响应。

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

需要记住,每一个语言模型,不管它的大小或者它被训练的数据量如何,只有它被训练的数据、它被接收的微调以及在使用过程中使用的解码策略才可能是最有效的。

为了突破 LLM 的极限,可以尝试不同的训练和微调方法,并使用不同的解码策略。请注意这些模型的优缺点,并始终确保用例与正在使用的模型功能保持一致。

7b1466412b8b8e1b623ed8b490c3a599.jpeg

4. 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)或字符级。根据特定语言和特定任务的需求,每种技术都有自己的优势和权衡。

  • 字节对编码(BPE):为AI模型构建子词词汇,用于合并出现频繁的字符/子字对。

  • 子词级tokenization:为复杂语言和词汇划分单词。将单词拆分成更小的单元,这对于复杂的语言很重要。

  • 单词级tokenization:用于语言处理的基本文本tokenization。每个单词都被用作一个不同的token,它很简单,但受到限制。

  • 句子片段:用习得的子词片段分割文本,基于所学子单词片段的分段。

  • 分词tokenization:采用不同合并方法的子词单元。

  • 字节级tokenization:使用字节级token处理文本多样性,将每个字节视为令牌,这对于多语言任务非常重要。

  • 混合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不同,这使得预处理和多模态建模变得更加复杂。

5. 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 数量限制,超过这个限制,它们就不能接受输入或生成输出。

53846b9895e144ac62f3434237d7aa5a.jpeg

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

截断涉及删除输入文本的一部分以适应令牌限制。这可以通过删除文本的开头或结尾,或两者的组合来完成。然而,截断可能导致重要信息的丢失,并可能影响所产生的产出的质量和一致性。

抽样

抽样是一种从输入文本中随机选择标记子集的技术。这允许您在输入中保留一些多样性,并且可以帮助生成不同的输出。然而,这种方法(类似于截断)可能会导致上下文信息的丢失,并降低生成输出的质量。

重组

另一种方法是将输入文本分割成符号限制内的较小块或段,并按顺序处理它们。通过这种方式,可以独立处理每个块,并且可以连接输出以获得最终结果。

编解码

编码和解码是常见的自然语言处理技术,它们将文本数据转换为数字表示,反之亦然。这些技术可用于压缩、解压缩、截断或展开文本以适应语言模型的标记限制。这种方法需要额外的预处理步骤,可能会影响生成输出的可读性。

微调

微调允许使用较少的特定任务数据来调整预先训练好的语言模型以适应特定任务或领域。可以利用微调来解决语言模型中的标记限制,方法是训练模型预测一系列文本中的下一个标记,这些文本被分块或分成更小的部分,每个部分都在模型的标记限制范围内。

6. token 相关技术的展望

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

04e47575d1436c3768b7dd1c914564e9.jpeg

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

7.小结

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

PS. One more thing, 我们在开发大模型应用时应该了解的一些数字如下:

ddb645ce5fa795edb3870559eb1b6545.jpeg

【参考资料与关联阅读】

【解读大模型(LLM)的token】 在 LLM 中,token代表模型可以理解和生成的最小意义单位,是模型的基础单元。根据所使用的特定标记化方案,token可以表示单词、单词的一部分,甚至只表示字符。token被赋予数值或标识符,并按序列或向量排列,并被输入或从模型中输出,是模型的语言构件。一般地,token可以被看作是单词的片段,不会精确地从单词的开始或结束处分割,可以包括尾随空格以及子单词,甚至更大的语言单位。token作为原始文本数据和 LLM 可以使用的数字表示之间的桥梁。 阅读详情

相关推荐

大型语言模型(LLM)中的tokens是什么

定义:tokens是将文本分割成的一个个有意义的片段,模型在处理文本时是以tokens为单位进行编码和解码的。不同的模型和分词方法可能会导致相同的文本被分割成不同数量和形式的tokens。作用:通过将文本转化为tokens,模型能够更好地理解和处理语言的结构和语义信息。模型的输入和输出都是基于tokens序列,这使得模型能够处理各种长度的文本,并进行诸如语言生成、文本分类、问答等任务。

ZhangJiqun&191cm&85kg 1718

一文读懂大模型中的token

学习大模型的朋友肯定听说过大模型接口按token,自己编写代码的时候也经常看到token这个词,那它究竟是什么呢,我们一起来探究一下在大模型中,token不一定是一个完整的词。它可以是一个词、一部分词、字符甚至是标点符号。这取决于所使用的分词方法。子词分词方法(如 BPE 和 WordPiece)在现代 NLP 模型中非常常见,因为它们能够高效地处理各种语言现象,同时保持词汇表的紧凑性。带有空格前缀(如Ġworld)和不带空格前缀(如world。

2401_85378759的博客 8313

对于LLM来说,token何必是表广义token时代 大词表时代

本论文主要探讨了语言模型(LLM)中词表的作用以及与数据处理方式的关系。首先,我们介绍了词表作为存储信息的表和数据库或数据中心的角色,然后讨论了增加词表大小的影响。接下来,我们从两个角度出发,一是从token_id层面将数字分解为嵌入向量和输出头,二是从信息本身层面使用多个表和字段处理数据。最后,我们总结了这两种处理方式的特点和适用场景。

东方佑 454

大模型中的token是什么?

如果我们将这个句子分解成单词级别的token,那么包含的token有:“The”, “quick”, “brown”, “fox”, “jumps”, “over”, “the”, “lazy”, “dog”。例如,将单词"jumps"分解成"jump"和"s",“walked"分解成"walk"和"ed”。大模型的token可以是单词级别的,也可以是子词级别的,甚至是字符级别的,具体取决于模型的设计和训练方式。大模型的"token"是指在自然语言处理(NLP)任务中,模型所使用的输入数据的最小单元。

金木AI 1万+

前端埋点的实践

1、前言 开始正文前先介绍一下埋点的概念~,(熟悉的朋友可以略过) 前端埋点: 是一种手段,它的目的是上报相关行为数据,相关人员以数据为依据来分析产品在用户端的使用情况,根据分析出来的结果辅助产品优化、迭代。 BI:商业智能,公司内部做数据分析相关的部门。 2、背景 在流量红利逐渐消失的现在,数据的采集、分析和精细化的运营显得更加重要,所以埋点的需求在互联网产品中是很常见的,目的上面也提到了。我们的追求就是又快又好的做好埋点工作,但是现实却不那么美好;目前我们团队在前端埋点方面存在一些痛点: 在构造埋点字段

Arui_0的博客 1772

huggingface 镜像站推荐

在做 Ai 应用开发或者学习的时候,我们经常需要下载各种模型,而 huggingface 的模型下载速度很慢或者根本就连不上,这里推荐一个 huggingface 的镜像站,速度很快,可以大大提高我们的效率。

t951984189的博客 1万+

【LLM大模型】深度解读大模型(LLM)的token

当人们谈论大型语言模型的大小时,参数会让我们了解神经网络的结构有多复杂,而token的大小会让我们知道有多少数据用于训练参数。

Y525698136的博客 1612

RFSOC实战解析:MTS多片同步的时序校准与相位相干实现

本文深入解析了在RFSOC平台上实现MTS多片同步的关键技术与实战流程。文章从相位相干的重要性出发,详细阐述了SYSREF与SYNC信号的协同工作机制,并提供了从硬件时钟配置到软件API调用的完整MTS实现步骤。重点探讨了时序校准的核心方法,旨在帮助工程师解决多通道系统相位不一致的难题,确保ADC与DAC达到精确的相位相干,从而构建高性能的MIMO和相控阵系统。

weixin_29206669的博客 192

解读大模型(LLM)的token_大模型tokens

在 LLM 中,token代表模型可以理解和生成的最小意义单位,是模型的基础单元。根据所使用的特定标记化方案,token可以表示单词、单词的一部分,甚至只表示字符。token被赋予数值或标识符,并按序列或向量排列,并被输入或从模型中输出,是模型的语言构件。一般地,token可以被看作是单词的片段,不会精确地从单词的开始或结束处分割,可以包括尾随空格以及子单词,甚至更大的语言单位。token作为原始文本数据和 LLM 可以使用的数字表示之间的桥梁。

2401_84208172的博客 1017

LAMMPS实例教程—In文件详解

本博文主要介绍专栏 《LAMMPS实例教程—In文件详解》, 针对于 Lammps 可分析的物理过程进行讲解,提供 In 文件以及后处理方法,持续更新。 目前分为8个专题: 1)力学专题、2)传热专题、3)相变专题、4)界面专题、5)吸附专题、6)流动专题、7)物性专题以及8)基础理论专题。

Rockyoung 3万+

Dify 第 4 篇 Dify 示例:数据库执行Agent

本文介绍了如何在Dify平台创建一个能够执行SQL查询的数据库Agent。通过安装并配置"通义千问"和"数据库"两个插件,实现自然语言到SQL语句的转换和执行。关键步骤包括:1)安装插件并配置API Key;2)设置默认数据库连接(建议使用只读账号);3)准备测试数据表结构。该Agent支持通过工具调用查询表结构、转换自然语言为SQL、执行查询并返回结果,同时提供了CSV查询和HTTP API接口功能。文中还提供了MySQL测试数据表的创建脚本和示例数据。

甘蓝的专栏 1157

解读大模型原理最通透的一篇文章

👉国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本生成式 AI 太火爆了,可以说无处不在,频频刷爆我们的朋友圈。你可能已经试用过 ChatGPT 了,甚至已经把它当作你的智能小助手。但我知道很多人心里会有个疑问:这些 AI 模型的智能究竟是怎么来的?今天咱们就来聊聊这个话题。

jennycisp的博客 847

ssd训练自己的数据集

基于SSD实现目标检测(训练自己的数据集)

reset2021的博客 6804
上一篇: 解读LangChain
下一篇: 解读提示工程(Prompt Engineering)
半吊子全栈工匠
半吊子全栈工匠 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄18年 4632粉丝 897原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值