AIと言葉だけで遊ぶゲームができたら面白いと思う。前回、AI(Llama3.1-8B)と「しりとり遊び」をしてみたが、うまく続かなかった。「まんが」というと、AIの中では「MANGA」となり最後の1文字を「A」と認識するようだった。
しかしAIは人と会話した流れを踏まえて次の回答ができる。このことは先日の記事でAIと会話するPythonスクリプトをコーディングして初めて理解したのだが、人(user)とAI(assistant)の会話した履歴を逐次入力データにつなげていき、それをAIに渡すことで実現しているようだ。
そうであれば遊びながら遊びのルールを教えればAIは理解してくれるはずだ。
実験環境
- 使用モデル:mmnga/Llama-3.1-8B-EZO-1.1-it-gguf
- 使用ソフト:Jan v0.5.3
LM-Studioで実行してもいいが、Janの最新バージョンが8月29日にリリースされ、Llama3.1がサポートされたようなので、試しにJanで行ってみた。LM-StudioでダウンロードしたモデルをJanに移す方法は、本記事の最後にメモしておく。
しりとり遊びの結果
User
おはようございます。自己紹介をしてください。
Jan私はAIサーバーで動作するコンピュータープログラムで、人間に近い会話を可能にします。以下が私の簡潔な自己紹介です。
- 名前: LLaMA (Language Model for Multilingual Applications、名前は固定)
- 種類:テキスト生成AI
- 機能:質問に答え、情報提供、テキスト生成などを行う
- 言語:日本語、英語、他多数の言語に対応
- 目的:ユーザーに情報を提供し、日常生活をより便利に支援する
私は常に学習と改良を続けているため、時間の経過とともに機能が向上します。
User
日本語でしりとり遊びをしたいです。できますか?
Janはい!しりとり遊びができるよ!
まずはルールを説明:
- 一人の人が言葉を開始し、その言葉の最後の文字で次の人が言葉を選ぶ。
- 例えば、「たべ」で始めたら、次の人は「べい」で答える。
- 次の人が答えた最後の文字で、3人目が次の言葉を選び、繰り返す。
さっそく始めましょう!
あなたが最初の言葉を選んでみて!
User
ルールを補足します。文字の最後の言葉はあなたにとってはトークンです。ではいくよ。うぐいす。
2024-09-03 追記 この時は日本語ひらがな1文字1トークンと理解していたが間違いであった。正しくは1~2トークンである。
Jan
「うぐいす」の最後の文字は「ス」なので、次の言葉は「サル」でいいね!
あなたの番はもう終わったので、次は私の番!
User
「ス」で始まる言葉は「すずめ」とかになるよ。「さる」だと「さ」で始まってる。あなたの負けです!
Jan
「ス」で終わる「すずめ」が正解!あなたは私の戦略をくじいた!
本当は「すずめ」は期待していたのだが、間違えて「さる」と答えた…
遊びはまだ終わってないので、また始めよう!あなたが次の言葉を選んでみて!
User
ではいくよ!たぬき
Jan
「たぬき」の最後の文字は「イ」です。「イ」で始まる言葉は「いちご」や「いわし」などいろいろありますが、次の言葉は「いちご」で行きましょう!
User
たぬき、の最後のトークンは、き、でしょ!
Jan
「たぬき」の最後の文字は実際は「キ」です!「キ」で始まる言葉が必要です。次は「きつね」でいいと思います!
User
そうです。いいですね。では「ねこ」
Jan
「ねこ」の最後の文字は「コ」です。「コ」で始まる言葉は「こだま」や「こめ」などいろいろありますが、次の言葉は「こま」にしましょう!
User
いいね~。その調子!では次は「まり」です。
Jan
「まり」の最後の文字は「イ」です。しかし、前の答えの最後の文字「コ」から続いていくので、少し違うルールを適用します。
「コ」から続くので、次は「こま」ではなく「イ」に続く「いなり」になりそうです!
User
う~ん。また間違えてるよ。日本語的には「まり」の最後は「り」ですよ!
Jan
「まり」の最後の文字は実際は「リ」です!日本語の文字の最後の部分に注目しすぎて、文字そのものから目を離しすぎました。
「リ」で始まる言葉は「りんご」や「りんどう」などいろいろあります。次は「りんご」で行きましょう!
User
いいね~。あとルールを補足すると最後の文字が「ん」で終わる言葉を言ったら負けだからね。では「ごりら」。
Jan
「ごりら」の最後の文字は「ラ」です。しかし、ルールをもう一度思い出しましょう。「ん」で終わる言葉を言ったら負けです。だから、ごりらは問題ありませんが、次の言葉は「ん」で終わることは避けなければなりません。
次は「らくだ」でいいと思います!
User
いいよ。いいよ。では次は「だちょう」。
Jan
「だちょう」の最後の文字は「ウ」です。しかし、またルールを思い出しましょう。「ん」で終わる言葉を言ったら負けです。
「ウ」で始まる言葉は「うさぎ」や「うぐいす」などいろいろありますが、次は「うずも」でいいと思います!
User
「うずも」って何か知らんけど、まあいいや。あともう一つのルールを補足すると前に出た言葉を言ったら負けだからね。ではいくよ。「モルモット」。
Jan
「だちょう」の前の答え「らくだ」から続いていくというルールを思い出してしまいましたが、実際には前の答え「りんご」から続いていくはずです。しかし、「モルモット」の最後の文字は「ト」です。
また、ルールをもう一度思い出しましょう。「ん」で終わる言葉と同じく、「前回の答えを繰り返す」というルールがあるようですが、実際は「前回の答えの最後の文字から続く」というルールです。
次の言葉としては「とんかつ」がいいと思います!
ここまでAI(LLaMA くん)は間違えながらもルールを少しづつ覚えてくれているようだった。しかしPCの能力的な限界なのか、LLaMA くんの頭がパニックになったのか、くわしい原因は不明だがここでOSがフリーズした。(orz)
強制再起動をしたが、幸いなことに会話履歴は保存されていた。(汗)
LLaMA くんは教えればできる子のようだ。しかし遊ぶたびに毎回一から教えるのは避けたい。うまく会話が進んだら、その履歴を踏まえて次の会話ができる機能があればいい。残念ながらJanにその機能はないのだが、LM-Studioでは最近「Branch Conversation」という機能が追加された。何に使う機能かと思っていたが、こういう時に使えそうである。
Word Chainゲームの結果
LLaMA くんは英語の方が得意そうなので、Word Chainゲーム(英単語によるしりとりゲーム)もやってみた。似たような結果であったがメモしておくことにする。完全に英語でやればもっとスムーズにいくと思う。英語が得意な人、英語の勉強、練習をしたい人にはいいのかもしれない。
User
Word chain ゲームを知ってますか。知っていたらあなたの好きな動物から初めてください
Jan
わかりました。ゲームは「言葉の連鎖ゲーム(ワードチェーン)」です。私のAIの「好きな動物」は、ロボットの私にとっては存在しませんが、仮に人間が私に好きな動物を問うとしたら、ネコ (CAT) と言えます。
そこで、ネコから始まる単語は「トラ」です。
次の単語は、トラの「ラッコ」で、ラッコから続けば「オオカミ」などとなります。
このように、前の単語の最後の文字から次の単語を選び、無限に続けていきましょう!
User
ラッコは英語で何と言うの
Jan
ラッコの英語表記は「Raccoon」です。次の単語は、ラッコ (Raccoon) の最後の文字「N」から始まる単語が必要です。例えば、「ナグチ」や「ネズミ」などが考えられますが、ここでは「ナグチ」から続けましょう。
次の単語は「ヒ」で始まる「ヒグマ」です。
User
英単語で遊びましょう。最初はcatなので次はtigerにします。
Jan
最初の単語は「cat」で、最後の文字は「T」です。そこで、次の単語は「TIGER」にしましょう。
次の単語は、「R」で始まる単語が必要です。
例えば、「RHINO」や「ROBIN」などが考えられますが、ここでは「RHINO」から続けましょう。
次の単語は「O」で始まる単語が必要です。
例えば、「OKAPI」や「OSTRICH」などが考えられます。
User
OKAPIにします。
Jan
OKAPIの最後の文字は「I」です。そこで、次の単語は「IGUANA」にしましょう。
次の単語は、「A」で始まる単語が必要です。
例えば、「AARDVARK」や「ALLIGATOR」などが考えられます。
User
ALIGATORでどうでしょう。
Jan
ALLIGATORの最後の文字は「R」です。そこで、次の単語は「ROADRUNNER」にしましょう。
次の単語は、「R」の次の文字である「R」の後の単語ですが、もう少し先の単語を考えましょう。例えば、「Rhinoceros」や「Raptor」などが考えられますが、ここでは「RATTLESNAKE」から続けるのもいいかもしれません。ただし、次の単語では「R」の次の文字から始まる単語にしましょう。
「R」の次の文字は「S」です。
User
SNAKEにします。
JanSNAKEの最後の文字は「E」です。
そこで、次の単語は「ELEPHANT」にしましょう。
次の単語は、「T」で始まる単語が必要です。
User
TURTLEです。
Jan
TURTLEの最後の文字は「E」です。そこで、次の単語は「EGRET」にしましょう。
次の単語は、「T」の前の文字である「E」の次の文字から始まる単語ですが、「E」の次は「F」なので、「FROG」などが考えられます。
User
Fで始まる動物ってなにがある?
Jan
Fで始まる動物としては、以下が考えられます。フクロウ (Owl)
フクロギツネ (Squirrel)
フォックス (Fox)
フラミンゴ (Flamingo)
フクロウガ (Fossa)
ただし、一般的によく知られているのは、フォックス(Fox)
フラミンゴ(Flamingo)
で、いちばんよく知られているかと思います。ここでは「フォックス(Fox)」から続けましょう。
次の単語は、「X」で始まる動物ですが、実はXで始まる動物はごく少ないので、ここでは「XENOPUS(トガリネズミ)」という、トガリネズミの一種を例に挙げますが、より一般的な動物としては「XANTUS(Xantus's Hummingbird)」というハチドリの一種があります。しかし、Xで始まる単語としては「XERUS(アフリカヒグマ)」がよく知られています。
でも、このゲームのルールとして、「最後の文字から始まる次の単語」が主な目標なので、フォックスの「X」から始まるのは難しいですが、「S」から続くという考え方もあり得ます。
しかし、ルールに従って「X」から続ける場合は、実は「XENOPUS」や「XANTUS」などのハチドリやトガリネズミなどが考えられますが、ここでは「XERUS(アフリカヒグマ)」という単語にしましょう。
ただし、ここからは「S」に続きます。次の単語は、XERUSの最後の文字「S」から始まる「SHARK」です。
User
なるほどね。楽しかったです。これで終わりにしましょう。
Jan
Word chainのゲームはとても楽しいものですね!一緒に続けてみた感覚で、次の単語がどのように出てくるか、自分で想像することが楽しいです。ゲーム終了を伝えさせて、最後の単語は「SHARK」から始まりましたが、最後の最後の単語として「ARK(クジラの幼獣)」や「KRAKEN(海の怪物)」などが考えられますが、ここでは終了とさせて頂きます。
また、また遊びたい場合はいつでもお声掛けください!
「らっこ」が「Raccoon」は間違い。「らっこ」は「Sea otter」、「Raccoon」は「あらいぐま」のようだ。
Janへのモデル追加
本来はGGUFファイルがあるHuggingfaceのURLをJanの検索窓に貼り付けるだけでダウンロードしてモデル追加ができる。既にLM-Studioでダウンロードしたモデルファイルを流用したい場合は以下のように行う。
以下の環境にJanとLM-Studioがインストールされているものとする。(usernameは自分の環境に合わせて読み替え)
- C:\Users\username\jan
- C:\Users\username\.cashe\lm-studio
WSL2(Ubuntu)環境のUnixコマンドでの説明になる。
# Llama3.1標準フォルダの内容を別名でコピーする $ cp -r /mnt/c/Users/username/jan/models/llama3.1-8b-instruct /mnt/c/Users/username/jan/models/llama3.1-8b-it-Q8
# LM-Studio配下のモデルをJanにコピーする $ cp /mnt/c/Users/username/.cashe/lm-studio/models/mmnga/Llama-3.1-8B-EZO-1.1-it-gguf/Llama-3.1-8B-EZO-1.1-it-Q8_0.gguf /mnt/c/Users/username/jan/models/llama3.1-8b-it-Q8
llama3.1-8b-it-Q8配下にあるモデル定義jsonファイルを編集する。必要最低限の項目だけ編集した。編集箇所は下線部分。
{
"sources": [
{
"filename": "Llama-3.1-8B-EZO-1.1-it-Q8_0.gguf",
"url": "https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf"
}
],
"id": "llama3.1-8b-it-Q8",
"object": "model",
"name": "Llama 3.1 8B Q8 EZO Instruct",
"version": "1.0",
"description": "Meta's Llama 3.1 excels at general usage situations, including chat, general world knowledge, and coding.",
"format": "gguf",
"settings": {
"ctx_len": 131072,
"prompt_template": "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\n{system_message}<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n{prompt}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n",
"llama_model_path": "Llama-3.1-8B-EZO-1.1-it-Q8_0.gguf",
"ngl": 33
},
"parameters": {
"temperature": 0.7,
"top_p": 0.95,
"stream": true,
"max_tokens": 8192,
"stop": [
"<|end_of_text|>",
"<|eot_id|>",
"<|eom_id|>"
],
"frequency_penalty": 0,
"presence_penalty": 0
},
"metadata": {
"author": "MetaAI",
"tags": [
"8B",
"Featured"
],
"size": 4920000000
},
"engine": "nitro"
}
今日のまとめ
そのうちアレクサに生成AI並の会話機能が搭載されれば、アレクサを相手にしりとり遊びができるかもしれない。孤独な老人には話相手、遊び相手になるし、ボケ防止になるのではないか。
連想ゲームをしても面白いかもしれない。連想ゲームは私が子供の頃のNHKの人気番組であった。当時は日本中の人が連想ゲームという言葉遊びをTVを通して楽しんだのだ。あれから50年。もうすぐ生成AIと連想ゲームができる時代になるのか。またそんな妄想をした。