我正在子类化
torch.utils.data.Dataset
并编写一个整理函数以分别传递给 Dataloader 的 dataset
和 collate_fn
参数。
在数据集的
__getitem__
或 collate_fn
之间,我想知道使用 tokenizer(huggingface 的 FastTokenizer)的最佳函数是什么(或者这两个中是否有另一个我不知道的更好的选择?)
在我看来,collate_fn
是最好的选择,因为我可以使用分词器来分词并为整个批次添加填充,这也有助于提高分词速度。但我不确定它是否会在未来(如果不是现在)引起任何问题,因为我的一些队友开始使用/自定义我的代码。
都不是。您希望在训练之前批量标记整个数据集。训练期间的标记化会减慢速度,并且如果您要进行多个时期,则很浪费(您将多次标记相同的项目)。
您应该首先对整个数据集进行标记。然后在你的整理函数中进行批处理和填充。
听起来您正在使用 Huggingface 分词器 - 您还应该使用 Huggingface 数据集及其提供的整理函数。
将其应用在
collate_fn
上会更有效,因为分词器接受文本列表(批次),特别是如果序列需要以固定长度填充,则您将按批次进行处理