赞
踩
注意,此 tiktoken 非彼 tiktok,别误会啊。这里说的是 OpenAI 的 tiktoken 技术。
当用Python玩转OpenAI的GPT模型时,咱们得精明点儿,得把成本控制得死死的。这时候,tiktoken库就大显身手了——它就像个神器,能把文字变成一堆堆的标记。这些标记,就是GPT和其他大家伙们(大型语言模型,LLM)用来理解世界和吐出文字的积木。这样一来,咱们就能一眼看出调用API得花多少钱。
咱们这篇文章,就是要带你深入了解一下标记化到底是啥,它对这些语言模型有多重要,还有那个听起来就高大上的字节对编码(BPE)到底是怎么一回事。当然,最重要的,是怎么用tiktoken这个宝贝来帮你精打细算,预测用GPT模型得花多少钱。
标记化是GPT和其他语言模型处理流程的核心步骤,它负责将自然语言转换成这些高级人工智能系统能够理解的格式。这是将人类语言转化为机器可读格式的第一步。
在本质上,标记化是将文本拆分成更小、更易于处理的单元,这些单元被称为“标记”。标记可能是完整的单词、单词的一部分,或者是单个字符,这取决于采用的标记化技术。
进行有效的标记化是至关重要的,因为它直接关系到模型能否准确地解析输入的文本,能否生成流畅且符合上下文的回应,以及能否精确计算所需的计算资源。
字节对编码(Byte Pair Encoding,简称BPE)作为一种特殊的标记化技术,在GPT模型和自然语言处理(NLP)的其他应用中扮演着重要角色。BPE在字符级别的细致度和单词级别的广泛性之间找到了一个平衡点。
BPE的工作原理是通过迭代地合并文本中出现频率最高的字节对,将它们融合为一个全新的标记。这个过程会持续进行,直到达到预定的迭代次数或词汇表大小。
BPE在大型语言模型(LLM)中的重要性不言而喻。它使得模型能够高效地处理包括常用词、生僻词甚至新词在内的广泛词汇,而无需依赖一个庞大且难以管理的固定词汇表。
这种灵活性是通过将不常见的单词分解为可能在其他情境中出现的子词或字符来实现的,从而使模型能够利用已知的部分来理解不熟悉的术语。
BPE的关键特点包括:
它的可逆性确保了信息不会丢失,允许从标记中完美地重建原始文本。例如,如果单词“exciting”被转换为[12 34 39 10 23],那么这个序列可以无损地还原为“exciting”。
BPE能够处理任何文本,包括那些在模型初始训练集中未包含的内容,显示出其极高的通用性。
这种方法有效地压缩了文本,使得标记化后的文本通常比原始文本更短。平均来看,每个标记大约代表了原始文本中的四个字节。
BPE还帮助模型识别和理解常见的词缀。例如,“ing”是英语中常见的词缀,因此BPE会将“exciting”分解为“excit”和“ing”。这种在不同上下文中对如“ing”这样的常见子词的重复识别,增强了模型对语法的把握和对语言模式的概括能力。
Tiktoken 是由 OpenAI 研发的一种高效的字节对编码(BPE)算法。这个算法的开源版本广泛存在于多种编程库中,包括 Python 语言的库。根据其在 GitHub 上的描述,tiktoken 的速度是其他相似开源标记器的3到6倍。
Tiktoken 库具备将文本字符串转换成标记的功能,这项功能在了解所使用的模型的编码名称后尤为有用。通过这个库,我们可以在实际发起 API 调用之前,预测调用的成本。这种能力对于预算管理和成本控制来说是非常宝贵的,因为它允许开发者在投入资源之前做出更加明智的决策。
了解模型的编码名称后,我们可以通过以下步骤来预测成本:
首先,您需要安装 tiktoken 库,可以通过以下命令来完成:
!pip install openai tiktoken
使用 tiktoken.get_encoding
方法,您可以根据编码名称获取相应的编码:
- encoding = tiktoken.get_encoding("cl100k_base")
- print(encoding) # 输出: <Encoding 'cl100k_base'>
或者,如果您知道模型的名称,可以使用 tiktoken.encoding_for_model
方法来加载编码:
encoding = tiktoken.encoding_for_model("gpt-4")
接下来,您可以使用 encode
方法将文本字符串转换为标记:
- text = "This blog shows how to use tiktoken for estimating cost of GPT models"
- tokens = encoding.encode(text)
- print(tokens) # 输出: > [2028, 5117, 5039, 1268, 311, 1005, 73842, 5963, 369, 77472, 2853, 315, 480, 2898, 4211]
通过调用 length
方法,您可以得知这段文本转换成标记后的总数。然后,您可以根据 OpenAI 网站上的定价来估算成本。
例如,在这个例子中,我们得到了 15 个输入标记。如果 GPT-4 的价格是每 100 万个输入标记 10 美元,那么这段文本的查询成本将是 0.00015 美元(即 10 美元 / 1,000,000 * 15)。
由于 BPE 算法是可逆的,您也可以使用 decode
方法将标记序列还原为原始文本:
- decoded_text = encoding.decode(tokens)
- print(decoded_text) # 输出: This blog shows how to use tiktoken for estimating cost of GPT models
这个流程不仅帮助您在调用 API 之前估算成本,还确保了编码和解码的准确性。
用Python搞GPT模型的成本控制,现在可不再是拍脑袋的事了。只要你懂了标记化,特别是BPE这个技巧,再配上tiktoken,就能算得清清楚楚,明明白白。这篇文章已经把标记化的门道,BPE的厉害,还有怎么用tiktoken把文字变成标记,再变回来,都给你讲了一遍,全程还帮你看着钱包。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。