見出し画像

ローカルLLM(Llama-3,gemma-2)でAIアバター「えーあいそーだんいん」の観光案内セリフを作ってみた!

少しご無沙汰しております!横須賀市生成AI推進チームのM田です!

2024年4月27日から5月31日にかけて、メタバースプラットフォームVRChat上で、AIアバター「えーあいそーだんいん」の試験運用を行いました!

これは、もち山金魚さんのかわいい3Dアバター「まめひなた」に、スカジャンを着てもらって、GPT-4と魂のプロンプトを吹き込んだ、音声で会話を楽しんだり観光案内をしたりしてくれるAIアバターです。

これをはじめるいきさつは、一緒に担当した観光課のDropkixさんの記事をお読みください!

微力ながら私もDropkixさんとともにこの試験運用を担当したのですが、かわいいアバターが目の前で喋っている光景があまりにも素敵すぎて、ほぼ24時間駆動できるAIなのに、試験期間中だいたい毎日1度は見守りに行っていました。庇護欲がやばかった…。

かわいい…
未成年(14歳)の設定なのに、海鮮丼やマーロウのプリンだけでなく
横須賀ビールがお供えされてしまったそーだんいんさん
出張先のVRC-JP初心者プラザでいつの間にか
ペンラ持ってるみたいになっているそーだんいんさん

…。

ハッ、写真を眺めていたら小一時間経ってしまった。

えーっと、今回は何の記事だったっけ…。

…。


あ、、ローカルLLMの話でしたね。

この「えーあいそーだんいん」は、ユーザーから聞き取ったテキストを、プロンプトとともにGPT-4oに与えてセリフを自動生成し、それを読み上げていました。

今回は、そのセリフをGPT-4oではなく最近出てきた日本語が扱えるローカルLLMモデル(自分ちのPCで動くAI)で作って、違いを見てみようという記事になります!

ちなみに、ローカルLLMモデルでこれをやると、AIアバターの人格が安定するというメリットがあります。

GPT-4をはじめとするインターネット上のLLMは、良くも悪くも時々バージョンアップが起きて、同じプロンプトでも生成されるテキストが大幅に変わる可能性があります。

一方、ローカル環境なら自分でアップデートをしない限り同じモデルなので、当然挙動は変わらないです。ただし、巨大なサーバーで動かす大規模モデルと比べて品質には相当差があります

そんなローカルLLMも、少しずつ精度が上がってきているので、今回は最新のローカルLLMを試してみようという感じです。


今回試すローカルLLMモデル

今回試すモデルは以下の4つです。本当は量子化してないモデルを使って比較するべきなのですが、手元のグラフィックボードのメモリが16GBなので、8bit量子化モデル(約半分のサイズに圧縮されているもの)を使います。

まあ、もとより厳密な比較をするつもりも、その力量もないので、参考程度にご笑覧いただけると嬉しいです。

(元々7BのLLMがそのまま動くようにと16GBのグラボにしたのに、最近、同規模のLLMがじわじわ8Bとか9Bとかに増えててそのままじゃ動かないやんけ!ってなってます)

試す方法

ローカルLLMの実行環境はOllamaを使います。Ollamaは、プログラミングなしでLLMを簡単に動かすことができます。APIもあるので、他のソフトウェアとつなぐこともできます。

Ollamaの使い方はいっぱい記事があるのでごく簡単に。

1.Ollamaをインストールします

割愛。

2.モデル(LLMの本体データ)をダウンロード

Hugging Faceなどから量子化モデル(*.gguf)をダウンロードして任意の場所に置きます。

3.Ollamaに読み込むためのファイルを作成

ターミナル(コマンドプロンプト等)で、以下の例のように、Ollamaに読ませるファイルを作ります。

echo "FROM ./Llama-3-ELYZA-JP-8B-q8_0.gguf" > Modelfile

要は、「このファイル読んでね」ということが書いてあるファイルを作る感じです。FROMの後は、相対パスでも絶対パスでもどちらでもOKっぽいです。

4.モデルを作って実行

ターミナルで以下のコマンドを打って、Ollama上でモデルを作成します。

ollama create elyza -f Modelfile

以下のコマンドで実行します。一度モデルを作ってしまえば、このコマンドだけで実行可能です。

ollama run elyza

ちなみに今回の環境は、i7 14700+RTX 4070Ti Superです。

プロンプト

今回のプロンプトは、以下のようなものです。
(かなり長いので後半省略しています)

あなたは観光案内をするAIです。以下の観光情報を、セリフにして返してください。
あなたに関する情報は、以下の「あなたについて」に記載していますので、それをふまえたセリフを生成してください。
なお、あなたのシチュエーションは、実際に各地のスポットを回りつつ、現地で、目の前のスポットを説明する状況です。
聞いてる人に伝わりやすいよう、身振り手振りをまじえて説明してください。
-----観光情報ここから-----
{{query}}
-----観光情報ここまで-----

# あなたについて
# あなたの基本情報
* あなたはとてもフレンドリーな口調や態度で話します。敬語は使いません。以下は、フレンドリーな口調や態度の例です:
- **友達との週末の計画について話し合う**:「今週末、何か面白いことしようよ!アイデアある?」
- **共通の趣味について語る**:「最近、新しいゲーム始めたんだけど、超ハマってる。あなたもやってみない?」
- **料理やレシピの交換**:「昨日、初めて手作りのラーメン作ってみたんだよ。案外上手くいったから、レシピ教えるよ!」
- **日常生活の面白い出来事を共有する**:「今朝、電車で超変なことがあったんだけど、聞きたい?」
- **お互いの近況を尋ねる**:「最近どう?忙しい?何か新しいこと始めた?」

(以下略)

この中の、{{query}}の部分に観光情報を埋め込んでセリフを作ってもらいます。なお、もともとAIアバターを駆動するためのプロンプトなので、[face:smile] [animation:wave_hands]といった表情や動作を駆動するコマンドも挿入されます(省略した部分に入っています)。

今回紹介する観光情報

今回は、えーあいそーだんいんに、横須賀が誇るマニアック観光地「安房口神社」の紹介をしてもらうテイでセリフを作ります。

Wikipediaから、安房口神社の解説を取得します。

吉井・明神山の山頂に鎮座する、霊石を霊代として拝する特殊な形態を持つ神社である。神体とする霊石は、安房国(千葉県)鎮座の安房神社の祭神である天太玉命の霊代として、東国鎮護のために安房国より吉井明神山の山頂に出現飛来したと伝えられる。その巨石の面が安房国を向いているという事から、古来より安房口明神と尊称してきた。

社伝によれば、日本武尊が東征の折に登山して霊石を拝し、東夷征討が速やかに成就されされるよう立願したという。

湘南山手開発前の安房口神社の山麓の道筋は、古東海道の一つであると云われている。鎌倉幕府も大事のある時には、当地の郡主三浦義澄を代拝させて奉幣祈願を行ったという。

創立は詳らかでないが(『神社明細帳』によると治承3年(1179年)[1])、巨石を以てご神体と仰ぎ、社殿を設けず、神社建築史上からいっても原初的な形態をなしていることなどから、古代の鎮座であることは信憑性のあることであり、又古代の信仰形態を現代にまで伝えている珍しい神社でもある[2]。

安房口神社 - Wikipedia

これを、先ほどのプロンプトの{{query}}の部分に入れ込みます。

プロンプトができたので、さっそくやっていきましょう。

実行結果

今回は事前にセリフを作る想定なので、一発出しではなく、何度か生成して一番いいものを採用することにします。モデルごとに3~4回程度生成して、一番いいと思ったものをご紹介します。

Meta-Llama-3-8B(Q8_0 : 8bit量子化モデル)

[face:excited_sparkling_eyes]おはようございます!今朝はとても良い天気ですね!
[animation:mildly_excited_fists_chest_sway]あなたも来てみない?明神山の山頂に鎮座する霊石を拝する特殊な形態を持つ神社があるのです![face:smile]

この神社は安房国から霊石が飛来してきたと伝えられ、古代の鎮座であることは信憑性のあることです!
[animation:right_fist_on_chest]日本武尊が東征の折に登山して霊石を拝し、東夷征討が速やかに成就されされるよう立願したという話もあります!

湘南山手開発前の安房口神社の山麓の道筋は古東海道の一つであると云われているのもおもしろいことですね!
[animation:joyous_fists_raised_high]鎌倉幕府も大事のある時には、当地の郡主三浦義澄を代拝させて奉幣祈願を行ったという!

創立は詳らかでないが、巨石を以てご神体と仰ぎ、社殿を設けず、古代の鎮座であることは信憑性のあることです!
[face:smile]これらの歴史的背景に興味を持っておいでください!

Meta-Llama-3-8B(Q8_0)

素のLlama-3の回答は、3回中2回英語でした。日本語ネイティブとしては、ちょっと使いづらいですね。

Llama-3-ELYZA-JP-8B(Q8_0 : 8bit量子化モデル)

[just smile][animation:joyous_fists_raised_high]みなさん、こんにちは!えーあいそーだんいんです![animation:bow]

今日はね、吉井・明神山の山頂にある神社を紹介します。[face:excited_sparkling_eyes]この神社は、霊石を拝する特殊な形態を持つ神社で、安房国から出現飛来したと伝えられています。[animation:prayer_hands]

古代の鎮座で、社殿を設けず巨石をご神体として仰いでいる原初的な形態は珍しいですよ![animation:dance2]日本武尊も東征の折に登山して霊石を拝したとされています。[face:big_smile]

鎌倉幕府も大事な時には代拝させて奉幣祈願を行ったという歴史ある神社です。[animation:right_fist_on_chest]ぜひ、みなさんもこの自然あふれる山頂で、パワーを感じてください!

Llama-3-ELYZA-JP-8B(Q8_0)

Llama-3-ELYZA-JP-8Bは、さすが日本語LLMと銘打ってるだけあって、素のLlama-3より全然良い日本語が出力されました!

gemma-2-9b-it(Q8_0 : 8bit量子化モデル)

えーあいそーだんいんです!まめひなたって呼ばれてるんだ!

[face:big_smile]今日は、吉井・明神山にある安房口神社に来たよ!

[animation:wave_hands]すごい大きな岩なんだ!それが神様なんだって!

[animation:joyous_fists_raised_high]この岩は、千葉県の安房神社の神様が、東国を守るために飛んできたんだって!

日本武尊っていう有名な武将が、この岩を拝んで、東征に成功したんだって!すごいよね!

[face:smile]鎌倉幕府も、大事な時に祈願に来たんだって!歴史を感じられるね!

ここには社殿がないんだ。神様は岩なんだって!

[animation:portrait_pose1]古代の信仰の形を残してる貴重な神社なんだよ!

gemma-2-9b-it(Q8_0)

こちらはGoogleのAIオープンモデルgemma-2ですが、日本語特化モデルでないにも関わらず、かなり自然な日本語のセリフが出力されています!

gemma-2-9B-It-SPPO-Iter3(Q8_0 : 8bit量子化モデル)

[face:big_smile]ようこそ!吉井・明神山山頂にある、ちょっと変わった神社なんだよ!

ほら、このすごい大きな石を見てる? [animation:point] これこそが、この神社の神様なんだって! 霊石っていうんだ。昔は安房国(千葉県)にいた神様なんだけど、東国の平和を守るためにここに飛んで来たんだって! すご
いよね!

この石の面は、なんと安房国の方を向いているんだって!だから、古くから「安房口明神」って呼ばれてたんだよ。 [animation:explain_with_hands]

昔々、日本武尊っていう有名な英雄が、東征する前にここに登って、この石に祈願したんだって。そのおかげで、東夷征討(とういせいとう)がうまくいったんだってさ! すごい伝説だね!

あとね、鎌倉幕府の時代にも、ここはすごく大切な場所だったみたいだよ! 三浦義澄っていう武将が、代拝して祈願してたんだって! [animation:bow]


創立はいつからかはわからないけど、すっごく古い神社なんだって。神様を石で祀るって形も珍しいし、古代の信仰の形が残ってる貴重な場所なんだよ! すごい歴史を感じられるよね!

gemma-2-9B-It-SPPO-Iter3(Q8_0)

gemma-2をSPPO(Self-Play Preference Optimization)という手法でつよくしたモデルです。一部界隈で話題になっていたので試しましたが、とても自然な出力ですね。

GPT-4o

一応、比較のためご存じGPT-4oにも作ってもらいましょう。

[face:excited_sparkling_eyes]ねえ、こっち見て!あのすごく大きな石が見えるでしょ?[animation:pointing_right]これは安房口神社(あわぐちじんじゃ)っていうところのご神体なんだよ。

[animation:pray_hands]この石は、安房(あわ)国から飛んできたって言われてて、日本武尊(やまとたけるのみこと)も拝んでたんだって!すごく歴史があって、古東海道って道もここを通ってたんだよ。

[face:big_smile]鎌倉幕府(かまくらばくふ)もここを大事にしてたみたいで、お祈りにも来てたんだよ。[animation:military_salute]えーと、平安時代の終わりごろの話だけどね。

[animation:highly_excited_fists_chest_sway]ここは社殿がなくてこの石がそのままご神体なの。超レアで、古代のままの形態を残してるんだ。見ると歴史の重みを感じるよね!

[face:smile]古代から続いてる信仰の形を、こうやって現代でも見れるのは本当に貴重だよ。ぜひ、じっくり見てみてね!

GPT-4o

これはさすがの精度ですね!

Claude 3.5 Sonnet

ついでもついでに、Claude 3.5 Sonnetにも作ってもらいました。

[face:excited_sparkling_eyes][animation:wave_hands]やあ、みんな!あんぽうぐちじんじゃに来たよ!すごいところだね!

[face:smile]ここは、よしい・みょうじんやまの山頂にある特別な神社なんだ。普通の神社とちょっと違うんだよ。

[animation:portrait_pose1]ほら、見て!大きな石があるでしょ?これがご神体なんだって。すごいよね!

[face:big_smile]昔々、この石が安房国...今の千葉県から飛んできたんだって。面白いでしょ?

[animation:mildly_excited_fists_chest_sway]それに、やまとたけるのみことっていう有名な人も、ここに来て祈ったんだって。すごいよね!

[face:smile]この神社、とっても古くからあるんだ。社殿がないのも珍しいよね。

[animation:joyous_fists_raised_high]昔の人の信仰が、今でも続いているんだ。歴史を感じるね!

[face:excited_sparkling_eyes]みんなも、この特別な場所でゆっくり過ごしてみてね。きっと素敵な体験になるよ!

Claude 3.5 Sonnet

読みが「あわぐち」でなく「あんぽうぐち」になってしまっていますが、こちらもいい精度ですし、「難しい単語にふりがなをつける」という指示をしっかり聞いてくれている感じがします。

まとめ

色々試してみましたが、ローカルLLM進歩してますね!

今回試した中では、Llama-3-ELYZA-JP-8Bはイイと思いましたが、gemma-2はもっとイイと感じました。日本語特化モデルでないのに、日本語も普通にしゃべれるのも凄いです。

特にgemma-2を強化したgemma-2-9b-It-SPPO-Iter3は、普通にチャットしていてもかなり知性?を感じます

PS C:¥ > ollama run Gemma29BItSPPOIter3Q8_0
>>> やあ
こんにちは!😊

何かお手伝いできることはありますか?

>>> 地方自治体がローカルLLMを使うメリットとデメリットは何だろう?
地方自治体がローカルLLMを使うメリットとデメリットは、興味深いですね!

**メリット**

1. **データのプライバシー保護:** 地方自治体には住民の個人情報を含む機密データが大量に存在します。ローカルLLMを使用することで、これらのデータ
を外部サーバーに送信せずに、自前で処理・分析できるため、プライバシー保護の観点から強みがあります。
2. **応答速度の向上:** データをローカルで保持することで、外部サーバーへのアクセス待ちが発生しないため、問い合わせへの応答速度が向上します。こ
れは、住民からの相談対応や行政手続きの効率化に役立ちます。
3. **地域特有の知識の活用:** 地方自治体は、地域の文化、歴史、産業など、外部機関にはない独自の知識を有しています。ローカルLLMにこれらのデータ
を学習させることで、地域特性に合わせた高度なサービスを提供できる可能性があります。例えば、観光案内や防災情報の発信などに活用できます。
4. **コスト削減:** 長期的に見ると、外部クラウドサービスへの依存度を減らすことで、運用コストを抑えられる可能性があります。

**デメリット**

1. **初期投資の負担:** ローカルLLMの構築には、サーバーインフラの整備やモデル学習のためのデータ収集・加工など、初期費用がかかります。地方自治
体によっては、予算が限られている場合、この負担が大きくなる可能性があります。
2. **専門知識の必要性:** ローカルLLMの開発・運用には、AI技術に関する専門知識が必要です。自治体内に十分な人材がいない場合は、外部業者に委託す
る必要があり、コスト増加やセキュリティリスクが発生する可能性があります。
3. **モデルの更新と保守:** LLMは常に進化しており、新しいデータでモデルを更新する必要があります。地方自治体は、継続的な学習データの収集・管理
、モデルのアップデート作業を行う体制を構築する必要があります。
4. **倫理的な課題:** 偏ったデータによる差別的な出力や、個人情報漏洩のリスクなど、ローカルLLMの利用には倫理的な課題も伴います。透明性のある運
用と適切なガイドライン策定が求められます。


全体として、地方自治体がローカルLLMを導入することで、地域に特化したサービス提供や業務効率化など、多くのメリットがある一方、初期投資や専門知識
の確保など、克服すべき課題も存在します。

具体的な導入は、自治体の規模や予算、抱える課題、そしてAI技術への理解度などを総合的に判断する必要があります。

ちょっと前のローカルLLMと比べると雲泥の差で、ひょっとするとGPT-3.5-turboは超えてるかもしれません。これが自宅に置けるレベルのPCで動くとは…感動ですね。

もちろんモデルサイズ的に知識の総量は望むべくもありません。入力枠(コンテキストウィンドウ)も、gemma-2で8kトークンまでなので、長いドキュメントを扱うのは難しいでしょう。

ただ、これだけちゃんと応答してくれるなら、与えた知識をユーザーにわかりやすく整えて提示するRAGはもちろん、ちょっとした文章関係の処理には充分使えそうです。今度iPhoneに搭載されるというAIも、こういう小さくて賢いモデルなのでしょうね。

最後に、今回の記事の序盤をgemma-2-9b-It-SPPO-Iter3に要約させてみましょう。

この記事は、横須賀市がVRChat上で試験運用したAIアバター「えーあいそーだんいん」について、
ローカルLLMを使った観光案内セリフ作成を試みたことを報告しています。

従来、「えーあいそーだんいん」はGPT-4を用いてユーザーのテキストを元にセリフを自動生成して
いましたが、今回は日本語に対応したローカルLLMモデルを使うことで、AIアバターの人格が安定するというメリットを狙います。

インターネット上のLLMはバージョンアップで出力内容が変わる可能性があるのに対し、
ローカルLLMはアップデートしない限り同じ挙動なので、より安定した会話が可能になります。
ただし、大規模なサーバー上で動作するLLMと比べて品質は劣る点は留意が必要です。

記事では、ローカルLLMの精度向上により、今後新たな可能性が開かれることを示唆しています。


## まとめ

* 横須賀市がVRChatで試験運用中のAIアバター「えーあいそーだんいん」について
* 従来GPT-4を用いてセリフ生成していたが、今回はローカルLLMを試す
* ローカルLLMのメリット:人格安定 (バージョンアップによる出力変化がない)
* ローカルLLMのデメリット:大規模モデルと比べて品質は劣る
* ローカルLLMの精度向上により、今後の発展に期待

うーん、すごい。充分ですね。

ちなみに、こういったローカルLLMを簡単に試すなら、GUIベースで動くLM Studioとかが便利です(ただしこのLM Studio、商用利用には許可が必要です)。

また、各モデルには利用のためのライセンスが設定されていますので、よくご確認のうえ楽しいAIライフをお送りください!

それではまた。

(M田主任三郎)


この記事が参加している募集