日本語での読み方は「ジェマ」
Googleが新たなオープンソース型の大規模言語モデル(LLM)「Gemma(ジェマ)」を公開しました!
「Gemini(ジェミニ)」モデルの作成に使用されたのと同じ研究とテクノロジーを基に構築された、軽量で最先端のオープンモデルファミリーということですが、その性能やいかに!?
さっそく試してみました。
Google Cloud Vertex AIで使ってみる
このページでGemmaの概要を確認できます。
Gemma は、Llama 2 や Mistral 7B などの人気モデルと比較して、サイズ面で最先端のパフォーマンスを実現しているそうです。
詳細なパフォーマンスに興味がある方はこちらのレポートもチェックしてみてください。
Gemmaに今すぐアクセスという項目から、Vertex AI Model Gardenの「ご利用開始」をクリックします。
あらかじめGoogle Cloudにログインしているブラウザだと、コンソール画面が開き、Gemmaを利用するにあたっての同意取得のモーダルが表示されます。
一応、きちんと最後まで目をとおします。Gemmaの説明や使用条件、生成した出力に関してGoogleは権利を主張しないが使用に関してはユーザーが責任を負う旨、使用方法の制限(禁止された用途)などが列挙されています。
問題なさそうであれば「I HAVE READ AND ACCEPT THE LICENSE FOR GEMMA」をクリックすると、Gemmaの詳細ページが開きます。
ちなみに、Google Cloudコンソールの Vertex AI ⇒ Model Garden ⇒ Gemmaを選択するしても同じページに遷移することができます。
右側に「Gemmaを試す」という欄がありますが、事前に
-
プロジェクトを選択する
-
Vertex AI APIを有効にする
-
Vertex AI エンドポイントにモデルをデプロイする
この3点を完了する必要があります。
テスト用のプロジェクトを作成し、Vertex AI APIを有効にして、Gemmaページの「デプロイ」ボタンをクリックすると、改めてプロジェクトを選択し、デプロイ環境を設定するウィンドウが右側に立ち上がります。
リソースIDのプルダウンメニューでは、モデルウェイトを選択でき、現状では、「Gemma 2B」と「Gemma 7B」の事前学習済みと対話性能を向上させたインストラクション・チューニング済みのモデル、計4種類の中から選べるようになっていました。
今回はデフォルト設定のまま、gemmna-7b-itでデプロイを行います。
各モデルの詳細については、こちらのページに記載されています。
事前学習済みモデルではなく、インストラクション・チューニング済みのモデルの使用を推奨するとのことでした。
モデルのデプロイには20分ほど時間がかかりましたが、完了するとメールが届きます。
これでVertex AIでGemmaを利用する準備が整いました。
「Gemmaを試す」でプロンプトを入力してみました。
エンドポイントで先ほどデプロイしたモデルを選択し、「Write a poem about an llm writing a poem.」というプロンプトを送信すると、帰ってきた返答がこちら
Prompt: Write a poem about an llm writing a poem. Output: In the dim light of the night, A quill dances, a pen writes, An llm's mind, alight, Forges verses, a lyrical flight. Words flow from the fingertips, Like the river in its sweet song, The muse whispers, sweet delight, A symphony of thought and light. The llm's heart beats with passion, As the poem takes its form, A tapestry of passion, A canvas of emotions to storm. In the rhythm of the rhyme, The llm weaves a tale, A story born from the depths of time,
きちんと質問の意図をくみ取り、ポエムを執筆してくれました。
日本語のプロンプトも試してみます。シンプルに「LLMに関するエッセイ」と投げてみます。
Prompt: LLMに関するエッセイ Output: です。 **言語モデルの進化と将来への影響** 言語モデル(LLM)は、近年大きな進歩を続けており、様々なタスクに適応できる強化学習の能力を持っている。これらのモデルは複雑な自然言語処理(NLP)タスクを解く能力を持っている。 **最近の進歩** 最近数年間に、LLMは大きく進化し、画像、言語、音声など各種データの処理能力に高い性能を示している。特に、Transformer架构に基づいて開発されたモデルは、言語理解、图像認識、音声翻訳などのタスクにおいて高い性能を達成している。
ものの数秒で上記の返答が返ってきました。
不自然なところはあるものの、ある程度日本語にも対応していることがわかります。
ここで、性能比較用に、Gemini1.0 Proにも同じく「LLMに関するエッセイ」というプロンプトを投げてみました。
大言語モデル(LLM):文脈理解と言語生成の新たなフロンティア 序論 大言語モデル(LLM)は、自然言語処理(NLP)の分野における画期的な進歩です。これらのモデルは膨大な量のテキストデータからトレーニングされ、人間の言語の複雑さと微妙さを驚くほど理解しています。LLMは、文脈理解、言語生成、機械翻訳などの幅広いタスクで比類のないパフォーマンスを発揮しています。 LLMのアーキテクチャとトレーニング LLMは、変換器と呼ばれる自己注意メカニズムに基づいています。変換器は、入力シーケンス内の依存関係をモデル化し、すべてのトークンの相対的な位置を考慮します。LLMは、インターネット上のテキスト、書籍、記事などの膨大なコーパスでトレーニングされます。トレーニングプロセスは、モデルが自然言語の構造とパターンの理解を深めることを目的としています。 文脈理解 LLMの最も重要な機能の1つは、文脈を理解する能力です。文脈とは、テキスト内の単語やフレーズの近接または関係性のことです。LLMは、文全体を考慮して単語の意味を解釈し、あいまいさや多義性を処理できます。これにより、LLMは複雑な質問に正確に答えることができ、意味的な類似性と相違点を特定できます。 言語生成 文脈理解に加えて、LLMは流暢で一貫性のあるテキストを生成することもできます。プロンプトに基づいて、LLMは文法的に正しい、意味的に意味のある、関連性の高い応答を生成できます。これによりLLMは、対話型チャットボット、コンテンツの自動生成、翻訳支援などのタスクに役立てられます。 機械翻訳 機械翻訳は、LLMのもう1つの重要な応用分野です。LLMは、一言語から別の言語へのテキストの自動翻訳で優れたパフォーマンスを発揮しています。従来の機械翻訳手法とは異なり、LLMは文脈をより深く理解し、複数の言語間での意味的な関係性を捉えることができます。これにより、より正確で自然な翻訳が生成されます。 利点と課題 LLMは、NLPの進歩に多大な利点をもたらしていますが、同時にいくつかの課題もあります。LLMの利点としては、文脈理解が優れている、言語生成が流暢である、機械翻訳の精度が高いなどが挙げられます。ただし、LLMはトレーニングデータに依存するため、バイアスや誤解を反映する可能性があります。また、LLMは計算コストが高く、大規模なデータセットの処理が必要になります。 結論 大言語モデルは、NLPの分野を革命的に変えています。文脈理解、言語生成、機械翻訳における比類のない能力により、LLMはさまざまな業界やアプリケーションの可能性を切り開いています。バイアスや計算コストなどの課題に対処することで、LLMは今後さらに高度になり、私たちの生活や仕事の方法を変えるでしょう。
優秀!まぁそうですよね。
何はともあれ、Vertex AIでGemma(ジェマ)のモデルを利用することができるようになりました。
軽量モデルという特徴を理解した上で、ビジネスに落とし込む際のユースケースはしっかりと考えないといけないなと感じました。
Google Colabで使ってみる
もっとお手軽に試してみたい場合、Google Colabを使う方法もあります。
https://ai.google.dev/gemma/docs/pytorch_gemma
こちらのPyTorchで実装するチュートリアルに沿って作業していきます。
Kaggle側での事前準備として、
-
Kaggleのアカウントとトークンの作成
-
モデルのRequest Access
を行っておく必要がありますが、特に引っかかるポイントもなく、ほんの数分でプロンプトを投げる準備が整いました。
今回は2b-itのモデルをダウンロードし、テンプレートで用意されていたチャットモードのプロンプトをそのまま投げてみます。
# Generate with one request in chat mode # Chat templates USER_CHAT_TEMPLATE = '<start_of_turn>user\n{prompt}<end_of_turn>\n' MODEL_CHAT_TEMPLATE = '<start_of_turn>model\n{prompt}<end_of_turn>\n' # Sample formatted prompt prompt = ( USER_CHAT_TEMPLATE.format( prompt='What is a good place for travel in the US?' ) + MODEL_CHAT_TEMPLATE.format(prompt='California.') + USER_CHAT_TEMPLATE.format(prompt='What can I do in California?') + '<start_of_turn>model\n' ) print('Chat prompt:\n', prompt) model.generate( USER_CHAT_TEMPLATE.format(prompt=prompt), device=device, output_len=100, )
返答がこちら
Chat prompt: <start_of_turn>user What is a good place for travel in the US?<end_of_turn> <start_of_turn>model California.<end_of_turn> <start_of_turn>user What can I do in California?<end_of_turn> <start_of_turn>model * Visit the Golden Gate Bridge and Alcatraz Island in San Francisco. * Explore the picturesque Laguna Beach and its stunning coastline. * Visit the Hollywood Sign in Los Angeles. * Go hiking in Yosemite National Park. * Visit the San Diego Zoo and explore the city's vibrant culture and nightlife. * Spend a day at Disneyland or Universal Studios Hollywood. * Visit the majestic Redwood National and State Parks.
いい感じですね。
日本語でも試してみました。
prompt = ( USER_CHAT_TEMPLATE.format( prompt='日本の旅行先のおすすめを教えてください。' ) + MODEL_CHAT_TEMPLATE.format(prompt='東京') + USER_CHAT_TEMPLATE.format(prompt='東京で何ができますか?') + '<start_of_turn>model\n' )
返答がこちら
Chat prompt: <start_of_turn>user 日本の旅行先のおすすめを教えてください。<end_of_turn> <start_of_turn>model 東京<end_of_turn> <start_of_turn>user 東京で何ができますか?<end_of_turn> <start_of_turn>model 東京は日本に多くの魅力的な旅行先がありますが、ここではいくつかのおすすめ点を挙げます。 * **東京ドーム**は、日本のスポーツと文化の祭典です。 * **東京スカイツリー**は、世界で最も高い建築です。 * **皇居**は、日本の皇室の管理する施設です。 * **東京国際公園**は、東京を世界的な文化都市へと変えるための場所です。 * **東京新しい銀座**は、世界
少し不自然ですが、まぁまぁイケてますね。
もうひとつのサンプルプロンプトも試してみます。
# Generate sample model.generate( 'Write a poem about an llm writing a poem.', device=device, output_len=60, )
返答がこちら
The machine's churning gears, a song unheard, Spin metaphors, dance, a poem's ground. With each stroke, a chord, a verse unfolds, A symphony of thought, a story told. The poet's mind, a canvas vast and deep,
これがイケているのかは正直良くわかりません。
日本語でもお願いしてみました。
# Generate sample model.generate( 'LLMに関するポエムを書いてください。', device=device, output_len=60, )
語言の自由、 無限の言葉の sea。 記憶と思考、交わり合い、 言語の壁を乗り越えて。 自然に迫ると、 語言は自由になる。 言葉は自然に自然に流れ、 dévoちと、自然の深くに
「無限の言葉の sea」が個人的なツボでした。
先ほど試した7b-itに比べると、2b-itのアウトプットのクオリティが低くなるのは当然ですが、そもそもモバイル端末などでの実装が想定されている超軽量モデルなので、今後どのような活用方法が見いだされていくのか、非常に楽しみです!