シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

AIにしりとり遊びを教えてみた

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

はい!しりとり遊びができるよ!

まずはルールを説明:

  1. 一人の人が言葉を開始し、その言葉の最後の文字で次の人が言葉を選ぶ。
  2. 例えば、「たべ」で始めたら、次の人は「べい」で答える。
  3. 次の人が答えた最後の文字で、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にします。


Jan

SNAKEの最後の文字は「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と連想ゲームができる時代になるのか。またそんな妄想をした。