Gemma 4を「古韓国語翻訳機」に変身させてみた

古い本には、なんとも言えない独特の美しさがありますよね。色あせた紙の匂い、ページをめくるときの肌触り、そして何世代にもわたって受け継がれてきた物語。でも、朝鮮時代の小説『洪吉童伝(ホン・ギルドンジョン)』のような古典韓国文学をいざ開いてみると、時間の流れが言葉に残した爪痕にすぐ気づかされます。
単語の間のスペース(分かち書き)がなかったり、アレア(ㆍ)やヨリンヒウ(ㆆ)といった今は使われていない古い文字があちこちにあったり。小説を読んでいるというよりは、美しくも難解な古代のパズルを解いているような気分になります。ネイティブスピーカーの私にとっても、その言語的なギャップは想像以上に巨大です。
そこで、過去と現在をつなぐデジタルな架け橋を作ってみようと思い、このチュートリアルを用意しました。Gemma 4 E2B (IT) を使って、古韓国語をなめらかな現代韓国語へと生まれ変わらせる、ささやかな翻訳機作りに挑戦します。
トレーニングのレシピ#
気軽に試せるように、今回はGoogle ColabのシングルNVIDIA T4 GPU(16GB)環境で動かしてみました。
1. 環境設定#
まずは、お気に入りのオープンソースツールたちを揃えます。Hugging Faceの transformers、トレーニングループ用の trl、そして巨大なサーバークラスターがなくても軽量にモデルをファインチューニングできるようにしてくれるLoRA(Low-Rank Adaptation)用の peft をインポートします。
2. 材料集め#
データには、パブリックドメインとして公開されている『洪吉童伝』の原文と、Creative Commonsライセンスで公開されている 직지프로(ジクジプロ) 氏による美しい現代語訳をペアにして使用しました。
Gemmaがスムーズに学べるようにデータを対話形式に構造化し、明確な system プロンプトでモデルをナビゲートしてあげます。
[
{"role": "system", "content": "Translate Classical Korean into Modern Korean."},
{"role": "user", "content": "됴션국셰둉ᄃᆡ왕즉위십오연의홍희문밧긔ᄒᆞᆫᄌᆡ상이잇스되"},
{"role": "assistant", "content": "조선국 세종대왕 즉위 십오년에 홍회문 밖에 한 재상이 있으되,"}
]
(翻訳注:この一節は、「世宗大王の即位15年、洪会門の外にある一人の宰相がおり…」と、物語の始まりへと私たちを誘ってくれる最初のフレーズです!)
チューニング前の様子#
Gemmaに特別な訓練をする前に、まずは小テスト(ベースラインの確認)をしてみました。ベースモデルも十分に賢いのですが、流石に古風な文法は専門外のようです。チューニング前のGemmaは、なんとか頑張ろうとしたものの、的外れで長ったらしい直訳調の説明を出してしまいました。
- 古韓国語の原文: ᄇᆡᆨ씨듯고ᄂᆡ심의탄복왈그근본을ᄀᆞᆷ초지아니ᄒᆞ니장부로다ᄒᆞ고ᄌᆡ삼위로ᄒᆞ더라
- 人間の翻訳: 백씨 듣고 내심에 탄복 왈, “그 근본을 감추지 아니하니 장부로다!” 하고, 재삼 위로하더라.
- Gemmaの初期予測: “Like the color, the heart’s praise said, ‘The foundation cannot be deeply felt…’” -> “色のように、心の中の賛辞が言うには、‘その根本は深く感じられることはできず…’"(英語に引きずられたチグハグな回答)
- 初期の類似度スコア: 4.85% 💔
(翻訳注:この文の本来の意味は、「白氏(ペクし)はこれを聞いて心の中で感嘆し、‘その根本を隠さないとは、まさに大丈夫(立派な男)だ!’ と言って、何度も彼を慰めた」となります。)
ベースモデルは完全に時間の迷宮で迷子になっていました。地図が必要なのは明らかです。
愛情を込めてGemmaを育てる#
モデルを効率よく学習させるために、LoRAを用いたPEFT(Parameter-Efficient Fine-Tuning)の設定を組みます。
from peft import LoraConfig
peft_config = LoraConfig(
lora_alpha=16,
lora_dropout=0.05,
r=16,
bias="none",
target_modules="all-linear",
task_type="CAUSAL_LM",
)
隠し味: collate_fn
チャットモデルを特定のツールとして動かすようにチューニングするとき、モデルがプロンプト(質問)文の書き方を学び直すためにエネルギーを浪費してほしくはありませんよね。そこで、カスタムデータコレーター(Data Collator)を使って system と user の入力をマスク(ラベルを -100 に設定)しました。こうすることで、Gemmaの損失(Loss)計算を、正しい現代語の返答(assistant)を生成することだけに集中させることができます。
ハイパーパラメータを調整し、5エポック(Epochs)を学習率 2e-5 でゆったりとクルージングするように設定して、いざ学習スタートです。
学習後の変化#
少しの間じっと待ち、トレーナーが魔法をかけ終えると、最高にご褒美のような結果が待っていました。文字単位の類似度スコアが、なんと 79.93% まで一気に跳ね上がったのです!
今のGemmaの鮮やかな仕事ぶりをご覧ください:
- 古韓国語の原文: ᄇᆡᆨ씨듯고ᄂᆡ심의탄복왈그근본을ᄀᆞᆷ초지아니ᄒᆞ니장부로다ᄒᆞ고ᄌᆡ삼위로ᄒᆞ더라
- 人間の翻訳: 백씨 듣고 내심에 탄복 왈, “그 근본을 감추지 아니하니 장부로다!” 하고, 재삼 위로하더라.
- ファインチューニング後のGemmaの翻訳: 백씨듯 고내심에 탄복 왈, “그 근본을 감초지 아니하니 장부로다.” 하고 제삼 위로 하더라.
- 新しい類似度スコア: 85.71% ✨
おわりに#
テクノロジーはいつも私たちを容赦なく未来へと押し出しますが、私が大好きなテックプロジェクトは、むしろ私たちが過去をより鮮明に振り返るのを手伝ってくれるものです。Gemma 4のような軽量なモデルを少し時間をかけてファインチューニングするだけで、文化的な歴史を守り、ノートPC1台あれば誰でも古代の知恵や古典の物語にアクセスできるようなツールを作ることができます。
もし皆さんも、少し遠すぎて手が届かないと感じる歴史のひとかけらを見つけたら、小さなデータセットと1回のファインチューニングセッションがあれば、それを再び光の当たる場所へと連れ戻せることを思い出してくださいね。
特定のドメイン向けにファインチューニングを行う際の、おすすめのワークフローをまとめておきます:
- 明確なゴールを決める
- 高品質なデータセットと評価計画を用意する
- モデルが正しく学べているか検証する
- 定量的な指標と人間の目(直感)で評価する
- デプロイして、改善を繰り返す
👉 Gemma Cookbookでこのチュートリアルをチェックする
👉 活動を応援していただける方はリポジトリへのStarをお願いします!