「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
huggingface/trl SFTTrainer
Instruction Tuningは、言語モデルに 命令(Instruction)とその応答(Response)を学習させることで、指示に従う能力を高める手法
text = f"以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい\n\n### 指示: \n{example['instruction'][i]} \n\n### 応答: \n{example['output'][i]}<|endoftext|>"
text = f"Please answer the question based on the given context. \n\n### question\n{example['question'][i]}\n\n ### context\n{example['context'][i]}\n\n### answer\n{example['answer'][i]}<|endoftext|>"
print(tokenizer.eos_token) #'<|endoftext|>' def formatting_prompts_func(example): output_texts = [] for i in range(len(example['instruction'])): text = f"以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい\n\n### 指示:\n{example['instruction'][i]}\n\n### 応答:\n{example['output'][i]}<|endoftext|>" output_texts.append(text) return output_texts
response_template = "### 応答:\n" # "### answer\n"
instruction_template = "### 指示:\n" # "### question\n"
from trl import DataCollatorForCompletionOnlyLM # response_templateは必須指定 response_template = "### 応答:\n" collator = DataCollatorForCompletionOnlyLM(response_template, tokenizer=tokenizer)
from transformers import TrainingArguments from trl import SFTTrainer # SFTTrainerはTrainingArgumentsを使用することができる。 # 指定しない場合、TrainingArgumentsのデフォルトが指定される。 args = TrainingArguments( output_dir='./output', num_train_epochs=2, gradient_accumulation_steps=8, per_device_train_batch_size=8, save_strategy="no", logging_steps=20, lr_scheduler_type="constant", save_total_limit=1, fp16=True, )
# data_collatorが指定されていない場合、以下のようにDataCollatorForLanguageModelingがmlm=Falseで使われる。 # つまり通常のCausal LMを学習することになる。 # if data_collator is None: # data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False) # packing=False(default)ではdataset_text_fieldかformatting_funcを指定する必要あり trainer = SFTTrainer( model, args=args, train_dataset=dolly_train_dataset, formatting_func=formatting_prompts_func, max_seq_length=1024, data_collator=collator, )
trainer.train() trainer.save_model()
The AI community building the future.