变压器中的位置编码
一、说明
在上一期的“Transformers for Everyone”系列中,我们介绍了 Transformer 的概念,并深入研究了第一个关键架构元素:输入嵌入。如果你错过了第一集,你可以通过阅读来赶上:适合所有人的变形金刚。在本文中,我们将探讨另一个值得我们关注的关键元素:“位置编码”。
位置编码就像句子中单词的 GPS。正如我们希望模型能够理解单词一样,我们也希望它能够掌握句子中单词的空间排列。
想象一下,如果我们能为模型提供有关单词如何相对于彼此定位的信息——无论它们是近的还是远的。这有助于模型理解上下文和含义。
二、运作方式
原句:我们从原来的句子开始,“Yobi是一家伟大的公司。正如我们在上一篇文章中了解到的那样,我们已经将其转换为嵌入。
位置编码向量:接下来,我们创建一个称为位置编码向量的特殊向量。这个向量与我们的嵌入大小相同,并被添加到它们中。
但是,此向量保持固定,并表示每个单词在句子中的位置。
编码器输入:两个向量的结果都是一个编码器输入,一个与我们的嵌入大小相同的向量。此编码器输入将词嵌入的丰富性与位置编码提供的空间感知相结合。
位置编码使模型不仅可以理解单词,还可以理解它们在句子中的上下文。它是语言翻译、文本生成等任务的重要组成部分。
使用 BERT 的示例(可选)
注意:
与早期的 transformer 模型不同,BERT 不使用单独的步骤来添加位置编码。相反,它在预训练阶段学习位置信息。
每个令牌的嵌入在从 BERT 模型出来时都已经编码了位置信息。这与 Vaswani 等人的原始 Transformer 模型不同,后者将位置编码显式添加到嵌入中。
1/我们将从导入库和定义句子开始
import torch
from transformers import BertTokenizer, BertModel
sentence = "Yobi is a great company"
阿拉伯数字/初始化分词器和模型 (BERT):我将使用这个:https://huggingface.co/bert-base-uncased(英语的 BERT 的特定版本,如果需要,您可以选择其他版本)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
BertTokenizer 用于将句子转换为模型可以理解的格式 (BERT)
BertModel 是将生成嵌入的模型。
3/句子的标记化:
inputs = tokenizer(sentence, return_tensors='pt', add_special_tokens=True)
input_ids = inputs['input_ids']
可选:我们转换回标记只是为了查看模型看到的确切标记,CLS(由 BERT 标记器在每个输入序列的开头添加)和 SEP(用于标记句子的结尾或在需要理解它们之间关系的任务中分隔两个不同的句子)是特殊的标记
tokens = tokenizer.convert_ids_to_tokens(input_ids[0])
print(tokens) #['[CLS]', 'yo', '##bi', 'is', 'a', 'great', 'company', '[SEP]']
注意:在这种情况下,Yobi 被拆分为子词单元:“yo”、“##bi”。BERT 使用子词标记化 (WordPiece) 来处理未知单词并减少词汇量。## 表示“bi”是前面标记的延续。
4/生成嵌入:我们将标记化的句子传递给 BERT 模型,嵌入将包含输入句子中每个标记的嵌入。
with torch.no_grad():outputs = model(input_ids)embeddings = outputs.last_hidden_state
5/准备编码器输入:我们将嵌入分配给一个变量,该变量将在处理管道的下一阶段使用,我们将在下一集🙂中看到
encoder_input = embeddings
自选:您可以打印“encoder_input”的形状
print(encoder_input.shape) #torch.Size([1, 8, 768])
这意味着批处理中有 1 个序列,序列中有 8 个标记,每个标记由一个 768 维向量表示。
变形金刚 AImemes。图片来源:blog.searce/decoding-llms-513522a5afc
我们在文章的最后,在整个剧集中,我们发现了位置编码在理解单词方面的关键作用,以及它们在句子中的上下文,这些句子是由嵌入输入编码器的单词形成的!请继续关注下一集😁的更多见解
请考虑关注有关商业、数据科学、机器学习和扩展现实的更多文章:。
统计与数据科学 : https://medium.com/@soulawalid/list/statistics-data-science-65305693779d
商务 : https://medium.com/@soulawalid/list/business-1528f08575a7
量子机器学习 : https://medium.com/@soulawalid/list/qml-be0b06f7a986
扩展现实 : https://medium.com/@soulawalid/list/extended-reality-bf03607b0b80
神经营销学 : https://medium.com/@soulawalid/list/neuromarketing-8f94149e3c73