如何确定训练数据集的块大小

How to determine the block size in training a dataset

我想通过将之前训练过的分词器应用到我的文本文件来构建训练数据集。我的文本文件的大小是 7.02 GB(7,543,648,706 字节)。这是我写的:

from transformers import LineByLineTextDataset

dataset = LineByLineTextDataset(
    tokenizer=tokenizer,
    file_path="data.txt", block_size = ???
)

这里的“块大小”到底是什么意思?我如何确定它的价值?

大多数深度学习模型的实现无法处理可变长度的顺序输入数据(如果批量大小为 1,则可以,但是,这是非常低效且不切实际的)。因此,他们接受固定长度的输入。

例如,如果大小为 2 的输入批次为:

hello world
my name is stack overflow

它们应该被填充到最大长度(例如,10),如

hello world 0  0     0        0 0 0 0 0
my    name  is stack overflow 0 0 0 0 0

您的 dataset 应该提供固定大小的批次,block_size 就是为了这个目的。如果输入太长,它将被截断为相同大小的块。

如果我们看 source code:

batch_encoding = tokenizer(lines, add_special_tokens=True, truncation=True, max_length=block_size)

block_size 是截断行以确保它们等长的大小。