I am trying to fine-tune a model. There is a dataset:
[
{
"sample": [
" Какие советы помогут вам составить успешный бизнес-план?",
"\n1. Изучите свой целевой рынок: поймите, кому вы продаете, насколько велика конкуренция и текущие тенденции.\n2. Определите свою бизнес-модель и стратегии: решите, какие продукты и услуги вы будете предлагать и как вы будете конкурировать на рынке.\n3. Наметьте свои финансовые прогнозы: оцените начальные затраты, прогнозы доходов и эксплуатационные расходы.\n4. Проанализируйте риски: определите потенциальные проблемы и разработайте стратегии для их смягчения.\n5. Разработайте маркетинговый план: спланируйте, как вы будете продвигать свой бизнес и привлекать новых клиентов.\n6. Установите вехи: установите краткосрочные и долгосрочные цели и разработайте план измерения прогресса."
]
},
{
"sample": [
" Опишите место, где вы оказываетесь в безмятежной обстановке средневековой гостиницы с экраном из рисовой бумаги.",
" Прочные пасторские столы и низкие скамейки предлагают тихое место, где можно поесть и выпить еду, принесенную с собой или купленную в ближайшей пекарне. В задней части комнаты дверь, ведущая на кухню и в личные покои владельца, наполовину скрыта экраном из рисовой бумаги."
]
}
]
And I tried to train it like:
import json
import torch
from transformers import AutoTokenizer, AutoModelWithLMHead, TextDataset, DataCollatorForLanguageModeling, Trainer, TrainingArguments
with open("dataset_final.json", "r", encoding="utf-8") as f:
json_data = f.read()
data = json.loads(json_data)
samples = [d["sample"] for d in data]
tokenizer = AutoTokenizer.from_pretrained("tinkoff-ai/ruDialoGPT-medium")
model = AutoModelWithLMHead.from_pretrained("tinkoff-ai/ruDialoGPT-medium")
tokens = [tokenizer(sample)["input_ids"] for sample in samples]
tokens = [token for sublist in tokens for token in sublist]
dataset = TextDataset(tokens)
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=1,
per_device_eval_batch_size=1,
num_train_epochs=5,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset,
data_collator=data_collator,
)
trainer.train()
model.save_pretrained('new_model')
But it gives an exception like:
dataset = TextDataset(tokens)
TypeError: TextDataset.__init__() missing 2 required positional arguments: 'file_path' and 'block_size'
I tried to reverse the arguments, but it doesn't help.
TextDataset()
requires a file in the file system to work properly
you can save the sample on a file, and then use the TextDataset() with the saved file as parameter
samples = [d["sample"] for d in data]
with open("my_samples.txt", "w", encoding="utf-8") as f:
f.write("\n".join(samples))
dataset = TextDataset(
file_path="my_samples.txt",
block_size=tokenizer.max_len_single_sentence
)