Zenn
Closed3

OpenCALMをSFTTrainerでフルファインチューニングして一問一答のシンプルな出力に変える

Koichiro MoriKoichiro Mori

これを試す

https://note.com/npaka/n/nc7a4c20f98f8

  • OpenCALM-smallモデルをdatabricks-dolly-15k-jaでFine-tuningする
  • モデルの生成テキストを長文回答ではなくシンプルなものに変える
  • OpenCALMはInstructモデルではないが、このデータでInstruct tuningをする

ベースモデル

https://huggingface.co/cyberagent/open-calm-small

データ

https://huggingface.co/datasets/kunishou/databricks-dolly-15k-ja

  • Instruct tuningができるデータ
  • 指示、入力(オプション)、回答の3つのペアのデータ
  • 指示と回答のみがあるデータでフィルタリングしてチューニング
  • 回答がきちんと止まるように終端シンボルを追加
### Question: 魚の種類はどっち?イコクエイラクブカとロープ
### Answer: イコクエイラクブカ<|endoftext|>

### Question: ラクダはなぜ水なしで長く生きられるのか?
### Answer: ラクダは、長時間にわたってエネルギーと水分で満たされた状態を保つために、腰の脂肪を利用しています。<|endoftext|>

### Question: アリスの両親には3人の娘がいる:エイミー、ジェシー、そして三女の名前は?
### Answer: 三女の名前はアリス<|endoftext|>

Colab

https://colab.research.google.com/drive/18gswlIsvgsRVWWkOi35_aOjnm9I7x5i6?usp=sharing

Koichiro MoriKoichiro Mori

チューニングのコード

# SFTTrainerで学習
from trl import SFTTrainer
from transformers import TrainingArguments

# https://huggingface.co/docs/transformers/ja/model_sharing
training_args = TrainingArguments(
    output_dir="open-calm-small-finetuned-databricks-dolly-15k-ja",
    push_to_hub=True
)

# Questionと望ましいAnswerのペアをプロンプトとして渡している
# デフォルトでは次のトークンを生成するCausalLMによる学習モードになるようだ
# https://qiita.com/m__k/items/23ced0db6846e97d41cd
trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=train_dataset,
    max_seq_length=512,
    formatting_func=formatting_prompts_func,
    args=training_args,
)

trainer.train()
trainer.push_to_hub()
Koichiro MoriKoichiro Mori

チューニングの効果

Before

### User: 日本の首都は?
### Answer: イギリス、フランス、イタリア、ドイツ、日本、ロシア、トルコ、中国、サウジアラビア、アラブ首長国連邦、シンガポール、香港、韓国、イラン、ベトナム、フィリピン、インドネシア、イスラエル、ラオス、ミャンマー、カンボジア、ラオス、マレーシア、シンガポール、タイ、ミャンマー、インド、アメリカ、ヨーロッパ、オーストラリア、ニュージーランド
----
### User: 日本の首都は?
### Answer: フランス - パリ (287) 🇫🇷
### # 言語: 日本語.### 地域: パリ (292) 特徴: 街並み、雰囲気、風光明媚な庭園、建築様式、伝統的な建築様式、建築様式とアートが融合した博物館
----

After

### User: 日本の首都は?
### Answer: フィンランド
----
### User: 日本の首都は?
### Answer: パリ

ユーザの質問(指示)に対して的確な回答を出せるようになった。回答が間違っているのはベースモデルの知識不足?

Llama-3のような大きなモデルで正しい回答を生成できるのか?

このスクラップは2024/06/05にクローズされました
ログインするとコメントできます