从零开始逐步指导开发者构建自己的大型语言模型(LLM)学习笔记- 第2章 Working with Text - Exercise

从零开始逐步指导开发者构建自己的大型语言模型(LLM)学习笔记- 第2章 Working with Text-优快云博客icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/chenchihwen/article/details/144925399?spm=1001.2014.3001.5502这里是 课堂Exercise

这段内容主要是关于《Build a Large Language Model From Scratch》这本书的补充代码,包含了一些练习的解答。下面是对其详细解释:

代码部分

  1. 包的导入和版本检查
from importlib.metadata import version

print("torch version:", version("torch"))
print("tiktoken version:", version("tiktoken"))

这部分代码导入了version函数,用于获取torchtiktoken这两个包的版本信息,并打印出来。

  1. Exercise 2.1

收起

python

import tiktoken

tokenizer = tiktoken.get_encoding("gpt2")
integers = tokenizer.encode("Akwirw ier")
print(integers)
for i in integers:
    print(f"{i} -> {tokenizer.decode([i])}")
tokenizer.encode("Ak")
tokenizer.encode("w")
tokenizer.encode("ir")
tokenizer.encode("w")
tokenizer.encode(" ")
tokenizer.encode("ier")
tokenizer.decode([33901, 86, 343, 86, 220, 959])

这部分代码主要演示了如何使用tiktoken库中的gpt2编码对文本进行编码和解码。具体步骤如下:

  • 导入tiktoken库。
  • 获取gpt2编码的tokenizer
  • 使用tokenizer.encode方法将文本"Akwirw ier"编码为整数列表,并打印出来。
  • 遍历编码后的整数列表,使用tokenizer.decode方法将每个整数解码为对应的字符,并打印出来。
  • 分别对文本的各个部分进行编码,展示编码过程。
  • 最后使用tokenizer.decode方法将给定的整数列表解码为文本。

  1. Exercise 2.2
import tiktoken
import torch
from torch.utils.data import Dataset, DataLoader


class GPTDatasetV1(Dataset):
    def __init__(self, txt, tokenizer, max_length, stride):
        self.input_ids = []
        self.target_ids = []

        # Tokenize the entire text
        token_ids = tokenizer.encode(txt, allowed_special={"<|endoftext|>"})

        # Use a sliding window to chunk the book into overlapping sequences of max_length
        for i in range(0, len(token_ids) - max_length, stride):
            input_chunk = token_ids[i:i + max_length]
            target_chunk = token_ids[i + 1: i + max_length + 1]
            self.input_ids.append(torch.tensor(input_chunk))
            self.target_ids.append(torch.tensor(target_chunk))

    def __len__(self):
        return len(self.input_ids)

    def __getitem__(self, idx):
        return self.input_ids[idx], self.target_ids[idx]


def create_dataloader(txt, batch_size=4, max_length=256, stride=128):
    # Initialize the tokenizer
    tokenizer = tiktoken.get_encoding("gpt2")

    # Create dataset
    dataset = GPTDatasetV1(txt, tokenizer, max_length, stride)

    # Create dataloader
    dataloader = DataLoader(dataset, batch_size=batch_size)

    return dataloader


with open("the-verdict.txt", "r", encoding="utf-8") as f:
    raw_text = f.read()

tokenizer = tiktoken.get_encoding("gpt2")
encoded_text = tokenizer.encode(raw_text)

vocab_size = 50257
output_dim = 256
max_len = 4
context_length = max_len

token_embedding_layer = torch.nn.Embedding(context_length, output_dim)
pos_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)
dataloader = create_dataloader(raw_text, batch_size=4, max_length=2, stride=2)

for batch in dataloader:
    x, y = batch
    break

x
dataloader = create_dataloader(raw_text, batch_size=4, max_length=8, stride=2)

for batch in dataloader:
    x, y = batch
    break

x

这部分代码定义了一个自定义的数据集类GPTDatasetV1和一个数据加载器创建函数create_dataloader,用于处理语言模型训练的数据。具体步骤如下:

  • 导入所需的库,包括tiktokentorch以及torch.utils.data中的DatasetDataLoader
  • 定义GPTDatasetV1类,继承自Dataset。在__init__方法中,对输入的文本进行编码,并使用滑动窗口将编码后的文本分割成固定长度的输入和目标序列。__len__方法返回数据集的大小,__getitem__方法返回指定索引位置的输入和目标序列。
  • 定义create_dataloader函数,用于创建数据加载器。该函数接受文本、批量大小、最大长度和步长等参数,初始化tokenizer,创建GPTDatasetV1数据集,并使用DataLoader将数据集包装成可迭代的对象。
  • 读取文本文件"the-verdict.txt"的内容。
  • 获取gpt2编码的tokenizer,并对读取的文本进行编码。
  • 定义一些模型相关的参数,如词汇表大小、输出维度、最大长度等。
  • 创建token_embedding_layerpos_embedding_layer两个嵌入层。
  • 使用create_dataloader函数创建两个不同参数设置的数据加载器,并从每个数据加载器中获取一个批次的数据,打印输入数据x

通过这些代码,读者可以学习如何使用tiktoken进行文本编码,以及如何创建自定义的数据集和数据加载器来处理语言模型训练的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值