token

5 篇文章 0 订阅

1. Token及其处理

Token是处理文本时的基本单位
在自然语言处理中,Token通常指的是一段文本的最小单位
语言模型无法直接理解自然语言文本,因此,文本必须被转换成模型能够理解和操作的格式。即,将文本分割为一个个 Token,然后将Token映射为数字向量(通常称为嵌入)。这些向量可以在神经网络中进行处理,捕获句子中的语义信息。

例如,句子 I love programming 会被分解为 “I”、 “love”、“programming”三个Token。对于BERT等模型,还可能会被分解为子词:“I”、“love”、“progrm”、“##ming”

每个Token都会被映射为一个唯一的数字ID。模型处理这些 ID,例如,"I"可能对应 ID 100 "love"可能对应 ID 150

这些 ID 被映射为模型的嵌入向量,嵌入向量是多维向量表示,是模型理解语义的核心,例如,“love”和"like"的嵌入向量可能会在向量空间中非常接近,表示语义相似

嵌入向量输入到神经网络中,经过多层计算,模型生成输出

以GPT模型为例,假设输入句子:

I enjoy learning about machine learning and artificial intelligence.

Token化后,可能会生成:

['I', 'enjoy', 'learning', 'about', 'machine', 'learning', 'and', 'artificial', 'intelligence', '.']

每个Token 会被分配为一个唯一的ID,例如

['I': 56, 'enjoy': 987, 'learning': 2345, 'about': 453, 'machine': 1345, 'learning': 2345, 'and': 67, 'artificial': 8765, 'intelligence': 4321, '.': 13]

这些 ID 会通过嵌入层转换成向量,并输入到模型中进行处理。模型通过这些向量捕捉句子的上下文关系、语法和语义信息。

2. 子词级Token化

现代大模型,例如BERT GPT等预训练语言模型,通过算法,例如 BPE - Byte Pair Encoding 或 WordPiece 将词语分解为常见的子词单元。

对于语言模型,如果在训练阶段并未见过某词汇,模型可以将它们拆解称为子词,例如,“unhappniess”可以被分为 un happi ness,即便它未见过该单词,可以从子词中推断含义

如果每个Token 都是完整的单词,模型需要处理非常大的词汇表,会消耗大量的存储和计算资源。使用子词级 Token 化以后,词汇表可以变得更小

Token 的数量对大模型的性能有直接影响。一般来说,模型有一个最大 Token 长度限制。如果输入文本过长,超出限制的部分会被截断。 比如 GPT-3 有4096个Token 的限制,而 BERT 的标准模型大约有 512 个 Token 的限制。超过限制的文本需要分快处理

3. TOKEN计算

不同模型可能有自己的切分方法,对应地,一个Token对应地汉字数也不一样。一个Token对应汉字,0.75到1.8个汉字不等

OpenAI官方的token计算工具 https://platform.openai.com/tokenizer
在这里插入图片描述
https://console.bce.baidu.com/support/#/tokenizer
在这里插入图片描述

比如:
GPT-4 Turbo 模型最高支持 128k token 上下文;
Claude-2.1 支持最高 200K token 上下文;

4. 文本生成

这部分内容来源于linked-in
在这里插入图片描述
现在我们了解了输入的文本首先会传递给一个分词器,分词器会生成token_id(标记ID)输出,每个token_id都是唯一的数值表示形式。

分词后的输入文本会被传递到预训练模型的**编码器(Encoder)**部分。编码器对输入进行处理,生成能够编码输入语义和上下文的特征表示。编码器是在大量数据上训练好的

解码器(Decoder)接收编码器生成的特征表示,并基于这些上下文信息逐个标记生成新的文本。解码器会利用先前生成的标记来生成新的标记。
在这里插入图片描述
假设我们想生成短语 “Paris is the city …” 的续写。编码器会为所有的标记生成logits(可以把它们理解为分数),这些logits可以通过softmax函数
转换为每个标记被选中的概率
,用于文本生成。
在这里插入图片描述
如果你查看前五个输出的标记,它们都很合理。可以生成以下听起来合乎逻辑的短语:
Paris is the city of love.(巴黎是爱的城市。)
Paris is the city that never sleeps.(巴黎是永不眠的城市。)
Paris is the city where art and culture flourish.(巴黎是艺术和文化繁荣的城市。)
Paris is the city with iconic landmarks.(巴黎是拥有标志性地标的城市。)
Paris is the city in which history has a unique charm.(巴黎是历史独具魅力的城市。)
现在要选择合适的标记。为此有几种策略可以使用。

贪心策略

简单来说,模型选择概率最高的标记,并基于选定的标记继续生成文本。

使用贪婪策略计算效率高且实现简单,但代价是生成的内容有时会变得重复或过于确定。由于模型在每一步只考虑最有可能的标记,它可能无法捕捉上下文和语言的全部多样性,或者生成最具创意的响应。

模型的短视性质使其只专注于当前步骤最可能的标记,而忽视了对整个序列的整体影响。
在这里插入图片描述

生成的输出:
Paris is the city of the future. The
(“巴黎是未来的城市。”)

束搜索

束搜索(Beam Search)是一种用于文本生成的策略。在束搜索中,模型不会在每一步只考虑最有可能的标记,而是会考虑一组最有可能的前 “k” 个标记。这组k个标记被称为一个"束"(beam)。模型会为每个标记生成可能的序列,并在文本生成的每一步跟踪这些序列的概率,通过为每个束扩展可能的序列来继续生成。
在这里插入图片描述
这个过程会持续到生成文本达到期望的长度,或者每个束都遇到了"结束"标记。最后,模型从所有的束中选择总概率最高的序列作为最终输出。

从算法的角度看,创建束的过程就像是扩展一个k叉树。当束被生成后,你会选择总概率最高的分支作为最终输出。

生成的输出:
Paris is the city of history and culture.
(“巴黎是历史和文化的城市。”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dotdotyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值