CoolFace
Modelpublic

Sapolas0730/japanese-gpt2-medium-formal-lora

sourceHugging Facemitupdated 22d agoView on Hugging Face
0likes54downloads
Model Card

japanese-gpt2-medium-formal-lora

rinna/japanese-gpt2-medium(GPT-2アーキテクチャ、336M)に、カジュアルな日本語文をフォーマルな日本語文に変換する指示応答データでLoRAアダプタを学習したものです。ベースモデルは凍結し、LoRAアダプタ(約8.7MB)のみを学習・保存しています。

学習データはMAGPIE(arXiv:2406.08464)の手法で Qwen/Qwen2.5-7B-Instruct を使い1,000件合成し、日本語純度・フォーマット・長さ比・疑問形保持・重複でフィルタしたものを使用しています。

同じデータ・同条件でフルファインチューニングした Sapolas0730/japanese-gpt2-medium-formal-fullft との比較実験の詳細はZenn記事を参照してください。

使い方

adapter_config.json の base_model_name_or_path からベースモデルを自動解決できる AutoPeftModelForCausalLM で読み込みます。

python
import torch
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer

model_id = "Sapolas0730/japanese-gpt2-medium-formal-lora"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoPeftModelForCausalLM.from_pretrained(model_id)
model.eval()

instruction = "次の文をフォーマルな言い方に変換してください:明日暇?"
prompt = f"以下はタスクを説明する指示です。指示に従って応答を書いてください。\n\n### 指示:\n{instruction}\n\n### 応答:\n"

input_ids = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).input_ids
output_ids = model.generate(
    input_ids,
    max_new_tokens=100,
    min_new_tokens=5,
    pad_token_id=tokenizer.pad_token_id or tokenizer.eos_token_id,
    eos_token_id=tokenizer.eos_token_id,
    repetition_penalty=1.3,
    no_repeat_ngram_size=3,
)
print(tokenizer.decode(output_ids[0][input_ids.shape[-1]:], skip_special_tokens=True))

学習詳細

  • —ベースモデル: rinna/japanese-gpt2-medium(凍結)
  • —LoRA設定: r=8, alpha=16, dropout=0.05, targetmodules=`cattn,c_proj`(GPT-2のConv1D層)
  • —学習可能パラメータ: 2,162,688(全体の0.64%)
  • —学習率: 1e-4 / バッチサイズ4 × 勾配累積4(実効バッチサイズ16)
  • —検証データ10%を分け、Early Stopping(patience=3)を設定したが15エポック終了までほぼ発動せず
  • —採用エポック: 14.0(evalloss 1.112)。Full-FT(evalloss 1.021)よりは高いが、過学習せず安定して学習が進んだ
  • —ピークGPUメモリ: 3.17GB(Full-FTの6.84GBの半分弱)

既知の制約

  • —学習データは1,000件の合成データのみで、実運用の日本語表現を網羅していません。
  • —最終的な損失はフルファインチューニング版よりやや高めです。
  • —推論時に貪欲法(greedy decoding)を使うと同一フレーズを繰り返すことがあるため、repetition_penalty や no_repeat_ngram_size の使用を推奨します。

ライセンス

ベースモデル(rinna/japanese-gpt2-medium)・学習データ生成に使用したQwen/Qwen2.5-7B-Instructはいずれも寛容なオープンライセンス(MIT / Apache 2.0)で公開されています。本アダプタもこれに従います。