モデル別実行レシピ
最終更新
韓国語LoRA SFT入門:データ・学習・評価
入力は韓国語のprompt/completion JSONLで、出力は保存済みadapterです。学習から除外した同じ質問でbaseと比較します。
QwenのモデルカードではQwen2.5-0.5B-Instructは0.49Bパラメーター、韓国語を含む29以上の言語に対応、Apache-2.0と記載され、Transformersの利用例もあります。この手順ではTRL SFTTrainerとPEFT LoraConfigを使い、q_proj、k_proj、v_proj、o_projを対象にします。サンプル行は形式例なので実務データに置き換え、文書単位でtrain/held-outを分けます。
問い合わせを毎回同じ形式で「返品・返金」などに分類したい場合があります。LoRA1ファインチューニングは入力例と望む回答から、その処理方法を学習させます。韓国語例をファイルにし、小型モデルを学習してadapterを保存し、同じ質問の学習前後を比べます。
学習より検索が適する課題か先に決める
変化する文書や事実を検索して答える必要がある場合はRAG2が適します。同じ形式の回答を繰り返す、特定の韓国語タスクを一貫して分類する場合はファインチューニングが候補です。迷う場合は同じ質問で検索baselineと学習候補を評価します。

Qwenモデルと学習データを準備する
実務で使う多様な韓国語例を集めますが、個人情報や機密文書は匿名化または除去します。重複・定型文を整理し、各例に入力、期待出力、失敗基準を記録します。同じ原文やテンプレートが学習と評価に混ざらないよう、ユーザーまたは文書単位で分割します。
{"prompt":"<|im_start|>user\n문의 유형을 분류해 주세요: 주문한 상품을 반품하고 싶어요.<|im_end|>\n<|im_start|>assistant\n","completion":"환불·반품<|im_end|>"}
{"prompt":"<|im_start|>user\n다음 문장에서 날짜와 할 일을 JSON으로 정리해 주세요: 10월 20일까지 견적서를 보내 주세요.<|im_end|>\n<|im_start|>assistant\n","completion":"{\"date\":\"10월 20일\",\"task\":\"견적서 보내기\"}<|im_end|>"}実習には小型Qwen2.5-0.5B-Instructを使います。0.49B、韓国語を含む29以上の言語、Apache-2.0、Transformers対応で、データとadapter保存の準備例に使えます。実用モデルは最新カードの言語・ライセンス・PEFT target moduleを確認します。Qwen3.5-0.8Bは多言語のハイブリッド画像言語モデルなので、このテキストLoRA設定を移す前に対応する学習方法を確認します。
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U 'trl[peft]' datasets accelerate
TRL設定を小さく始めて結果を評価する
train_lora.pyは、まず学習ファイルに含まれないheld-out質問へのbase応答を出力し、同じtokenizer chat templateでTRL学習を始めます。SFTConfigは出力先、最大長512、batch 1、gradient accumulation 8、2 epochs、LoRA学習率2e-4を指定します。
学習が終わると、adapterとtokenizerはoutput/adapterに保存されます。held-out質問に再度回答させて結果を比較し、学習ログのlossと実際のメモリ使用量も記録して、held-out回答の品質を確認します。
from datasets import load_dataset
from peft import LoraConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTConfig, SFTTrainer
MODEL = "Qwen/Qwen2.5-0.5B-Instruct"
QUESTION = "문의 유형을 분류해 주세요: 결제한 물건을 돌려보내고 결제 취소를 요청하고 싶습니다." # held-out wording; expected label: 환불·반품
tokenizer = AutoTokenizer.from_pretrained(MODEL)
def answer(model, question):
messages = [{"role": "user", "content": question}]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt"
).to(model.device)
output = model.generate(**inputs, max_new_tokens=80, do_sample=False)
return tokenizer.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
base = AutoModelForCausalLM.from_pretrained(MODEL, device_map="auto", torch_dtype="auto")
print("base:", answer(base, QUESTION))
del base
dataset = load_dataset("json", data_files="train.jsonl", split="train")
trainer = SFTTrainer(
model=MODEL,
args=SFTConfig(
output_dir="output/checkpoints",
max_length=512,
num_train_epochs=2,
per_device_train_batch_size=1,
gradient_accumulation_steps=8,
learning_rate=2e-4,
logging_steps=1,
save_strategy="epoch",
report_to="none",
eos_token=tokenizer.eos_token,
),
train_dataset=dataset,
processing_class=tokenizer,
peft_config=LoraConfig(
r=8, lora_alpha=16, lora_dropout=0.05, bias="none",
task_type="CAUSAL_LM",
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
),
)
trainer.train()
trainer.save_model("output/adapter")
tokenizer.save_pretrained("output/adapter")
print("adapter:", answer(trainer.model, QUESTION))python train_lora.pyconsoleにはbase:とadapter:に続いて生成結果が表示されます。正常終了するとoutput/adapter/adapter_config.jsonとadapter重みファイルができます。
CUDA3メモリ不足ならbatch 1のままmax_lengthを短くするか、より大きいGPU4を使います。モデルを読み込めない場合はTransformersを確認します。Qwen2.5のカードによると4.37.0未満ではKeyError: 'qwen2'が発生します。
held-out質問の正確さ、形式、韓国語の自然さを採点表で確認し、変化する事実にはRAGと比較します。

用語の注釈
よくある質問
- この記事で最初に確認すべきことは何ですか?
- QwenのモデルカードではQwen2.5-0.5B-Instructは0.49Bパラメーター、韓国語を含む29以上の言語に対応、Apache-2.0と記載され、Transformersの利用例もあります。この手順ではTRL `SFTTrainer`とPEFT `LoraConfig`を使い、`q_proj`、`k_proj`、`v_proj`、`o_proj`を対象にします。サンプル行は形式例なので実務データに置き換え、文書単位でtrain/held-outを分けます。
- 必要なメモリはどのくらいですか?
- 学習が終わると、adapterとtokenizerは`output/adapter`に保存されます。held-out質問に再度回答させて結果を比較し、学習ログのlossと実際のメモリ使用量も記録して、held-out回答の品質を確認します。
- 条件と出典はどこで確認できますか?
- 実習には小型Qwen2.5-0.5B-Instructを使います。0.49B、韓国語を含む29以上の言語、Apache-2.0、Transformers対応で、データとadapter保存の準備例に使えます。実用モデルは最新カードの言語・ライセンス・PEFT target moduleを確認します。Qwen3.5-0.8Bは多言語のハイブリッド画像言語モデルなので、このテキストLoRA設定を移す前に対応する学習方法を確認します。
