Gemma は、Gemini モデルと同じ研究技術で構築されたオープンモデルのファミリーです。現在、このファミリーには Gemma、CodeGemma、PaliGemma、RecurrentGemma があります。こういったモデルを合わせると、テキスト生成、コードの補完や生成、たくさんの視覚言語タスクといった幅広いタスクを、エッジからパソコン、クラウドまで、さまざまなデバイスで実行できます。さらに、特定のニーズに合わせて Gemma モデルをファイン チューニングすることもできます。
Gemma は、AI イノベーションを推進するデベロッパーや研究者のオープンなコミュニティ向けに構築されています。Gemma の詳細やクイックスタート ガイドは、ai.google.dev/gemma でご覧いただけます。
このブログ投稿では、3 つの楽しいプロジェクトのアイデアと、Gemma モデルを使ってそれを実現する方法を紹介します。
韓国語(朝鮮語)のアルファベットともいえるハングルは、時間とともに変化しており、現代韓国語では使われなくなった文字もあります。たとえば、次のような文字です。
2. ㆆ(Yeorin-hieut): 軽い「h」、すなわち英語の「h」を柔らかくしたような音。
3. ㅿ(Bansiot): 「z」の音を表す。
4. ㆁ(Yet-ieung): 「sing」という単語の「ng」に該当する軟口蓋鼻音。
使われなくなった文字があるため、韓国語のネイティブ スピーカーは古い文献を簡単に読むことはできません。また、初期のハングルは、単語間に空白がなく、さらに読みにくいものでした。現代のハングルでは、ほとんどのアルファベット体系と同じような空白が使われています。
Gemma の能力を活用すれば、現代韓国語と古代朝鮮語の間の隔たりを理解し、橋渡ししてくれる翻訳ツールを作ることができます。SentencePiece は、Gemma のトークナイザーの基盤として機能します。従来のトークナイザーには、言語固有のガイドラインや定義済みの辞書が必須でしたが、この SentencePiece は、生のテキストデータで直接トレーニングされています。そのため、特定の言語の影響を受けずに、さまざまな形式のテキストデータに適応できます。
ソフトウェア
タスクを簡略化するため、次の構造を使ってモデルをファイン チューニングします。このモデルは、ユーザーが入力した初期ハングルから、現代韓国語のテキストを生成します。
インストラクション チューニング済み(IT)モデルは、特定の形式でトレーニングします。次のようにして、制御トークンを 1 つのトークンにしていることに注意してください。
モデルは、李氏朝鮮王朝時代の朝鮮語小説『洪吉童傳』を使ってトレーニングします。
モデルの出力品質を評価するために、トレーニング データセットに含まれないテキスト、具体的には著者不明の朝鮮語古典小説『淑英娘子傳』を使います。
モデルは初期ハングルを翻訳することができません。
ファイン チューニング後には、指示に従った応答が返され、初期ハングルのテキストを現代韓国語にしたテキストが生成されるようになります。
参考として、人間が翻訳した次のテキストをご覧ください。
“금두꺼비가 품에 드는 게 보였으니 얼마 안 있어 자식을 낳을 것입니다.
하였다. 과연 그 달부터 잉태하여 십삭이 차니”
注: 韓国語のテキストは「彼女の腕の中に金色のカエルが見えたので、もうすぐ子供が生まれるだろう。実際、彼女はその月に妊娠し、10 日が経過していた」という意味です。
別の出力を示します。
人間による翻訳は次のようになります。
“이 때는 사월 초파일이었다. 이날 밤에 오색구름이 집을 두르고 향내 진동하며 선녀 한 쌍이 촉을 들고 들어와 김생더러 말하기를,”
注: 韓国語のテキストは、「4 月最初の日のことだった。その夜、五色の雲が家をつつみ、お香の香りが立ちこめる中、一組の仙女が棒を持って入ってきて、キム・セアンに言った」という意味です。
翻訳は完璧ではありませんが、草稿としては十分です。データセットが 1 冊の本だけであることを考えれば、この結果は注目に値するといえます。データソースを増やせば、翻訳の品質が向上するはずです。
モデルのファイン チューニングが終わったら、簡単に Kaggle と Hugging Face で公開することができます。
次に例を示します。
# ファイン チューニングしたモデルを保存する
gemma.save_to_preset("./old-korean-translator")
# モデルのバリアントを Kaggle にアップロードする
kaggle_uri = "kaggle://my_kaggle_username/gemma-ko/keras/old-korean-translator"
keras_nlp.upload_preset(kaggle_uri, "./old-korean-translator")
この構造を流用すれば、同じようなタスクを実現できます。いくつかの例を示します。
日常的に使われるさまざまなものや概念の名前は、地域によって異なります。たとえば、アメリカ英語(AmE)では、「エレベーター」、「トラック」、「クッキー」、「フレンチフライ」といった言葉が使われますが、イギリス英語(BrE)では、それぞれ「リフト」、「ローリー」、「ビスケット」、「チップス」といった言葉になります。
語彙だけでなく、スペルも異なります。たとえば AmE で「-or」で終わる単語の多くは、BrE では「-our」と綴ります。「color」(AmE)と「colour」(BrE)、「humor」(AmE)と「humour」(BrE)などです。
もう 1 つのスペルの違いは、「-ize」と「-ise」です。AmE では、「organize」や「realize」のように、「z」を使うのが一般的です。しかし、BrE では「s」が好まれ、「organise」や「realise」となります。
Gemma のような AI ツールの助けを借りれば、英語同士のスタイル変換を行うことができるので、アメリカ英語とイギリス英語のライティング スタイルをシームレスに切り替えることができます。
日本の関西地方には、関西弁と呼ばれる独特な方言があります。ネイティブ スピーカーは、標準的な日本語よりも関西弁の方がテンポが速く抑揚が強いと認識します。
Gemma の機能と大量の関西弁データセットがあれば、方言翻訳ツールを作ることができます。
Gemma を頼もしい仲間として、魅力的なゲーム作りに向かうことができます。すべてのはじまりは、ゲームのコンセプトとなるピッチ(アイデア)をシンプルな一文で表現することです。Gemma の巧みな導きによって、ゲームのコンセプトを具体化させ、複雑なメイン キャラクターたちを作成し、魅力的なメイン ストーリーを書いて、プレーヤーをゲームの世界に没入させましょう。
ソフトウェア
次のように、ゲームのコンセプトを一文のピッチで表現することから始めます。
Gemma は、ピッチを基にして、詳細を追加することができます。
入力 : 「次のコンセプトを基に、このゲームの詳細を考えてください。\n{pitch}」
出力例 :
入力 : 「メイン キャラクターをデザインしてください」
出力例 :
入力 : 「敵をデザインしてください」
出力例 :
入力 : 「このゲームのメイン ストーリーを、起承転結で書いてください」
出力例 :
プロンプトを変更すれば、ほとんどのタイプのクリエイティブ コンテンツで、同じようなコンパニオンを作ることができます。
ピッチ : 「新しい蒸気歯ブラシ」
入力 : 「次の新製品の宣伝文を生成してください。\n{pitch}」
出力例 :
ピッチ : 「宇宙と流れ星」
入力 : 「次のコンセプトを基に、フラワーアートとそれにふさわしい花を提案してください。\n{pitch}」
出力例 :
ピッチ : 「サイバーパンク クラーケン」
入力 : 「次のコンセプトを基に、料理のレシピを作ってください。\n{pitch}」
出力例 :
昔から、サンタさんに手紙を送る方法は限られており、個性的ではありません。お子さんは返信が届くまで数週間から数か月待たなければならないことが多く、手紙はお子さんが望むほど詳細でインタラクティブなものではないこともあります。
このプロジェクトでは、Raspberry Pi で Gemma を動作させ、大規模言語モデルを使ってサンタさんからの魔法の手紙を作ります。
ハードウェア
ソフトウェア
テキスト生成
libgemma を使って独自の C++ アプリケーションを書くことができます。
次のプロンプトを使ってモデルに指示します。
ビルドする前に、コードで定義されている MODEL_PATH
を変更してください。
$ g++ santa.cc -I . -I build/_deps/highway-src -I build/_deps/sentencepiece-src build/libgemma.a build/_deps/highway-build/libhwy.a build/_deps/sentencepiece-build/src/libsentencepiece.so -lstdc++ -l
実行
$ LD_LIBRARY_PATH=./build/_deps/sentencepiece-build/src ./a.out
letter.txt
のテキストを読み取り、サンタクロースからの手紙を生成します。
注: Raspberry Pi によるテキスト生成には、時間がかかる場合があります。
最終的な結果は、次のようになります。
$ ./main -m models/gemma-2b-it.gguf --repeat-penalty 1.0 -p “あなたはサンタクロースです。この子からの手紙に返信してください。\n<start_of_turn>user\nPLACE_THE_CONTEXT_OF_LETTER_HERE<end_of_turn>\n<start_of_turn>model\n”
Gemma は無限の可能性をもたらします。ここで紹介したアイデアが、皆さんのインスピレーションになることを願っています。実現した皆さんの作品を見るのが楽しみです。
Google デベロッパー コミュニティの Discord サーバーにご参加ください。プロジェクトを共有し、志を同じくする他の人とつながることができます。
ぜひ楽しみながらお試しください!