人工知能(LLM)はダジャレを言えるか試してみた:生成AIの学習能力?
けっこう真面目な話。
実は生成AIというのは大量の言葉の繋がるパターンを学習し、人間がプロンプトで入力した内容から出力を作成する。逆に言うとパターン化した出力になる。コンサルティングでアイディア(特定の条件を付けて適当なフレーズを拾ってくる)を求めるとか長文要約は得意だけれども、駄洒落のように非定型パターン&単語決め打ちのように数学計算に近いような処理能力は気になるところだ。
東大の入試問題を解かせてみても英語は良好なものの、数学は一般的に低スコアである。小説を書いて貰う場合も支離滅裂な展開となることが多く、もっぱら要約やプロット作成で活躍している。
(最近では数学問題を解くための特化型モデルも開発されている)
そこで汎用人型決戦… じゃなくて、汎用LLMとして能力の高いCommand R Plusで幾つかのパターンを試してみた。とりあえず「やればできる子」だと分かったけれども、やったことはファインチューニングに近いような気がしないでもない。
試行結果(Copilotの場合)
まずCommand R Plusへ行く前に、最近GTP-4oになったらしいWindows 11 Copilotプレビュー版の場合。
パンのミミのことだろうか。たしかに合格点とは言えない気がする。
試行結果(Command R+の場合)
まずは駄洒落を理解しているか確認してみた。ちなみに実行コマンドは適当で、次の通り。GPUは何でも構わないのでIntel Arc A770を使用。
920秒をかけて、出力は0.5トークン/秒。少し深すぎるような気もするけれど、いちおう駄洒落を理解はできるようだ。
llama_print_timings: load time = 388538.23 ms
llama_print_timings: sample time = 51.29 ms / 195 runs ( 0.26 ms per token, 3801.91 tokens per second)
llama_print_timings: prompt eval time = 518736.25 ms / 37 tokens (14019.90 ms per token, 0.07 tokens per second)
llama_print_timings: eval time = 401328.81 ms / 194 runs ( 2068.71 ms per token, 0.48 tokens per second)
llama_print_timings: total time = 920308.29 ms / 231 tokens
ただしCopilotでさえ単純に質問するだけではダメだった。上記のような駄洒落の定義を貼り付けてから作成を依頼するパターンと、「これと同じ感じで」という2パターンを思いつき、後者で試してみた。
なお目標は、『「ネコが寝ころんだ」を得ること』とした。
例を示してから特定テーマで駄洒落を作成依頼するプロンプトを作ったつもりだが、どうやら識別して貰えなかったらしい。272秒と短時間で処理されたものの、少しだけ残念な結果となった。
llama_print_timings: load time = 256373.70 ms
llama_print_timings: sample time = 7.84 ms / 27 runs ( 0.29 ms per token, 3441.68 tokens per second)
llama_print_timings: prompt eval time = 214232.01 ms / 54 tokens ( 3967.26 ms per token, 0.25 tokens per second)
llama_print_timings: eval time = 57397.90 ms / 26 runs ( 2207.61 ms per token, 0.45 tokens per second)
llama_print_timings: total time = 271666.55 ms / 80 tokens
しかしニャンダフルは家族も笑った。Copilotと違い、単純な依頼で行けるかもしれないと思って試してみた。
llama_print_timings: load time = 256155.49 ms
llama_print_timings: sample time = 42.28 ms / 161 runs ( 0.26 ms per token, 3808.04 tokens per second)
llama_print_timings: prompt eval time = 226337.31 ms / 37 tokens ( 6117.22 ms per token, 0.16 tokens per second)
llama_print_timings: eval time = 334663.54 ms / 160 runs ( 2091.65 ms per token, 0.48 tokens per second)
llama_print_timings: total time = 561171.01 ms / 197 tokens
悪くはないが、良いと言えるか微妙だ。処理時間は561秒。そもそも猫以外の駄洒落が出て来る。そこで「猫」の駄洒落と特定する工夫をしてみた。
llama_print_timings: load time = 257395.68 ms
llama_print_timings: sample time = 9.39 ms / 33 runs ( 0.28 ms per token, 3514.38 tokens per second)
llama_print_timings: prompt eval time = 229005.22 ms / 42 tokens ( 5452.51 ms per token, 0.18 tokens per second)
llama_print_timings: eval time = 67451.76 ms / 32 runs ( 2107.87 ms per token, 0.47 tokens per second)
llama_print_timings: total time = 296542.55 ms / 74 tokens
うーむ、「言葉」が良くなかったのだろうか。ちなみに処理時間も297秒と短めだ。誤字もあったことなので、「言葉」→「単語」に変更してみた。
llama_print_timings: load time = 256742.13 ms
llama_print_timings: sample time = 16.28 ms / 60 runs ( 0.27 ms per token, 3686.41 tokens per second)
llama_print_timings: prompt eval time = 181834.95 ms / 42 tokens ( 4329.40 ms per token, 0.23 tokens per second)
llama_print_timings: eval time = 122915.56 ms / 59 runs ( 2083.31 ms per token, 0.48 tokens per second)
llama_print_timings: total time = 304863.31 ms / 101 tokens
相変わらず駄洒落にならない。さらに工夫してみた。
llama_print_timings: load time = 261091.85 ms
llama_print_timings: sample time = 14.25 ms / 52 runs ( 0.27 ms per token, 3649.38 tokens per second)
llama_print_timings: prompt eval time = 448943.03 ms / 44 tokens (10203.25 ms per token, 0.10 tokens per second)
llama_print_timings: eval time = 107135.15 ms / 51 runs ( 2100.69 ms per token, 0.48 tokens per second)
llama_print_timings: total time = 556139.41 ms / 95 tokens
… 何かが変だ。いや上記を見ればわかるように、処理時間が556秒もかかっている。それから「"ネコ"を使った駄洒落ですか?」とネコ指定に成功したようなのに、これは駄洒落なのかと首を捻りたくなる出力だ。
そこで最後に再び、一連の例を提示してから駄洒落を作成して貰った。
llama_print_timings: load time = 276642.72 ms
llama_print_timings: sample time = 29.47 ms / 94 runs ( 0.31 ms per token, 3190.12 tokens per second)
llama_print_timings: prompt eval time = 323479.77 ms / 260 tokens ( 1244.15 ms per token, 0.80 tokens per second)
llama_print_timings: eval time = 195347.96 ms / 93 runs ( 2100.52 ms per token, 0.48 tokens per second)
llama_print_timings: total time = 519020.78 ms / 353 tokens
「ネコが寝ころんだ」は出て来なかったけれども、「ネコも寝子(ねこ)も」を出力させることは出来た。どうやら猫という単語に拘ったしまったけれども、幾つかの例を学習?してから駄洒落を作成すると有効そうなことが分かったような気がする… という結果になった。
思考し始めた人工知能?
さて画面に貼りついていた訳ではないけれども、なんとなく途中からマシンが妙な挙動をしている感覚に襲われた。そこで最後はWindowsタスクマネージャーをじっと見つめていたのだけれども、たしかに興味深い挙動をしていた。とりあえず時系列に取ったスナップショットを上げておく。
NVIDIAのnvidia-smiコマンドと違って稼働状況を可視化できるおかげで、例を元にして駄洒落を作成する場合には、GPUに相当な計算負荷がかかっていることが分かった。人間であれば、必死に脳ミソを回転させているというところだろうか。
ちなみについ先日発表されたばかりだけれども、生成AI(LLM)の実行にはGPUメモリ量が重要だけれども、計算能力によって処理時間が異なることが分かっている。
しめくくり
当たり前と言われれば当たり前だけれども、人工知能というか生成AI(LLM)は、何を依頼されるかによって演算能力の使い方が異なって来る。VRAMと利用モデル(GPT-4o、Llama 3 8B版、Command R Plus 104B版など)だけではなく、計算能力も使い勝手に大きく影響することが分かった。
それから生成AIの知らない情報を利用する方法として知識DBを参照するRAGという技法があるけれども、それを利用するにも検索ヒット率を上げるプロンプトも重要になりそうな気がしてきた。
まだまだ黎明期なので皆が手探りで使い方を模索しているけれども、さて人工知能の一種である生成AI(LLM)はどこまで行けるだろうか。使い方次第で成果が大きく異なるようで、当分は使用する人間の思考力が重要になりそうだ。
(そのうち人工知能が賢くなり、利用者の意を汲んで適切な出力を出すように進化してくれるかもしれない。最近はプロンプトの自動生成に関する研究も進んでいるようだし)
それでは今回は、この辺で。ではまた。
------
記事作成:小野谷静(オノセー)
この記事が気に入ったらサポートをしてみませんか?