如何在大数据集上训练分词器?
Posted
技术标签:
【中文标题】如何在大数据集上训练分词器?【英文标题】:How to train a tokenizer on a big dataset? 【发布时间】:2021-11-23 18:24:23 【问题描述】:基于examples,我正在尝试为波斯语的 T5 训练一个标记器和一个模型。 我使用 Google Colab 专业版, 当我尝试运行以下代码时:
import datasets
from t5_tokenizer_model import SentencePieceUnigramTokenizer
vocab_size = 32_000
input_sentence_size = None # change to 100_000 works
# Initialize a dataset
dataset = datasets.load_dataset("oscar", name="unshuffled_deduplicated_fa", split="train")
tokenizer = SentencePieceUnigramTokenizer(unk_token="<unk>", eos_token="</s>", pad_token="<pad>")
print("len dataset:", len(dataset))
# Build an iterator over this dataset
def batch_iterator(input_sentence_size=None):
if input_sentence_size is None:
input_sentence_size = len(dataset)
batch_length = 100
for i in range(0, input_sentence_size, batch_length):
yield dataset[i: i + batch_length]["text"]
# Train tokenizer
tokenizer.train_from_iterator(
iterator=batch_iterator(input_sentence_size=input_sentence_size),
vocab_size=vocab_size,
show_progress=True,
)
# Save files to disk
tokenizer.save("/content/drive/MyDrive/Pouramini/tokenizer.json")
它卡在train_from_iterator
,因为数据集的大小很大(input_sentence_size
大约是 8M 句子)
如何划分数据集并在每个块上运行代码,然后将它们合并到分词器输出?
【问题讨论】:
分区可能适用。 【参考方案1】:您是否尝试过使用可迭代数据集?
dataset = datasets.load_dataset("oscar", name="unshuffled_deduplicated_fa", split="train", streaming=True)
tokenizer = SentencePieceUnigramTokenizer(unk_token="<unk>", eos_token="</s>", pad_token="<pad>")
def batch_iterator(dataset):
for i in dataset:
yield i["text"]
【讨论】:
以上是关于如何在大数据集上训练分词器?的主要内容,如果未能解决你的问题,请参考以下文章