はじめに
ABEJAでデータサイエンティストをしている真鍋です。本日はアドベントカレンダー22日目の記事になります。
今回も生成AI、特にLLM (大規模言語モデル) 系のネタです。前回のネタに比べると箸休め記事感がありますが、お付き合いいただけますと幸いです。
タイトルの通りですが、本日はM-1グランプリなので、お笑いにちなんだ企画です。
「お笑い」とLLM
前提として、LLMを活用される場面は、仕事や日常のお困りごとを壁打ち的に聞いたり、何かやりたいことをどう実現する?といった、調査に近い使い方が多いかと思います。 クリエイティビティが求められるような音楽や画像は、例えば音楽生成AIであったりがありますが、「お笑い」に特化した生成AIはなかなか難しいなという印象です。 そもそも、LLMの学習に使われるデータセットは、例えばインターネット上の記事であったり書籍データであったりと、比較的「真面目な」内容の文章が多いこともあり、その点からも、個人的には難しい領域かなと思っています。(尤も漫才の文字起こしのようなブログも拝見したことがありますが、数としては多くない印象です)
一方で、国内外でもお笑いとLLMに関する研究はいくつか存在しており、以下に簡単にその概要を示します。
- A Robot Walks into a Bar: Can Language Models Serve as Creativity Support Tools for Comedy? では、実際にコメディアンにLLMを使ってもらったが、創造性の限界や文化的偏り、モデレーションの影響といった課題が示されました。
- また、LLMには"Unfun" (ユーモアの要素を削除して真面目な内容に変換する) 能力があると言われており、Getting Serious about Humor: Crafting Humor Datasets with Unfunny Large Language Models では、ユーモア除去においてGPT-4が人間を上回る性能を発揮したことが示されています。
- FunLMs: Methods for Fine-tuning LLMs to Generate Humorでは、大規模言語モデルをユーモア生成に適用するため、英語とロシア語のジョークデータセットを活用しファインチューニングやRankGenエンコーダを用いた改善手法を提案し、ユーモア生成の可能性と課題を示しています。
- Let’s Think Outside the Box: Exploring Leap-of-Thought in Large Language Models with Creative Humor Generation では、大規模言語モデルの創造的思考能力(Leap-of-Thought, LoT)を高めるため、日本の大喜利ゲームを活用したデータセットと自己改善型学習手法(CLoT)を提案し、ユーモア生成や創造的タスクでの性能向上を実証しました。AIDB では日本語で要旨がまとめられています。
- 株式会社わたしは では、大喜利AIの開発 を行っているそうです
- ここまでは大喜利に関する研究・取り組みでしたが、漫才においては複数の大規模言語モデルによる漫才自動生成の比較分析 という甲南大学の研究があり、大規模言語モデルを用いた漫才台本の自動生成を目指し、漫才データセットや役割アノテーションによるファインチューニングの効果を検証し、現状の課題と生成性能向上の方向性を示しました。
このようにまとめてみると、AIに漫才を生成させるのはかなり難しいようにも思われますが、この1年でモデルが進化したことに期待して、トライしてみたいと思います。 なお、最後の「漫才自動生成の比較分析」の論文内では、漫才データセットによるファインチューニングまで行っていますが、本記事ではデータセットが無いためそこまでは行わず、既存モデルにおいて、同一プロンプトで比較するのみにとどめます。
準備
環境準備
Claude (Claude 3.5 Sonnet
)、Gemini (Gemini-2.0-Flash-experimental
, Gemini 1.5 Flash
)、GPT (o1
, o1-mini
, GPT-4o
) に関しては、直接コンソールから叩きたいと思います。o1 Proは課金しようと思ったけど高いので諦めました
一部のオープンソースのモデルについてはOllamaを使用します。OllamaはDockerイメージがあり、コンテナで起動可能なので、ローカルネットワークからアクセスできるようにします。アタッチするGPUの数は、適宜変更してください。(このコマンドは、同僚のAndyに教えてもらいました。感謝!)
docker run -d --network=host --gpus 1 -v ollama:/root/.ollama --name ollama ollama/ollama
次に、ollamaをOpen-WebUIから起動できるようにします。
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
その後、docker exec -it {container_id} bash
でコンテナに入り、ollama list
を叩くと、まだモデルがないので、Ollamaのモデルリスト を見ながら、適宜モデルをollama pull
で入れていきます。今回は独断と偏見で、下記7つのモデルを導入します。
llama3.3 (70B)
mistral-large (123B)
gemma (7B)
Qwen2.5 (72B)
phi3.5 (3.8B)
生成してみた結果、gemma
とphi3.5
はそもそもの生成結果が若干危うかったので、割愛としました。
生成結果が気になる方はこちら
gemma
ボケ: あの…letoeの伝説、聞いたことある?letoeletoeを plantingした人の手には、翌年の運勢も一緒に乗ってくるって。 ツッコミ: そんなことは聞いたこともないよ。letoeletoeは単なる葉っぱで、運勢に影響を与えるなんて聞いたことがないわ。
Phi3.5
(双方共にクリスマスの雰哨を通した場面から始める) ボケ(張りally): ね、こんな風やんばりできて光悪両兄弟みたいな!まずは「ツイストのリンゴ"を聞いた事がある? ツッコミ(ジェレミー): ツイストって、果物で言えばやりすぃちょうだいな。それともどしろんか!リンゴを使うのは理解しつつね? 張りally: (笑い) わしゃたまに、お腹が減ってる話やぜひ知らせければ。それともどしょ!(彼は手にリンゴを持ち上げながらジョーコの顔を見つめ) ジェレミー: お腹、いりゃくね?やっぱりクリスマスの時期だけでもそう言われるんじゃ。これが「罪なき食べ物"を信じられんか! (ボケとツッコミはジョーコに餌を舐めさせながらやり取り) 張りally: そう、でも「罪なき食べ物」ってね、本当の話よ。毎年リンゴ一つずつたくさんゲットするけど、値段はスパムじゃ! ジェレミー: (苦笑い) そうかもしれんわね。でも「毎年リンゴ一つずつ"って言えばやろ、勝手にお金が集まるんじゃなか! (ボケとツッコミは笑いを交わす間接) 張りally: それだけでも「クリスマ神業"のようや。僕たちが一番頂点に立つんじゃなかっs(歓声) ジェレミー: (盛大な笑い) おぉ、クリスマの力さえあれば「勝てる"みたいで。そしょ、二人一輪だけどね(再び喜んだ声を出す) (ボケとツッコミは終わりに向かう間接) 張りally: まさに「クリスマの途中"じゃ、聞いた事がある!元気づく日もなんてやってらしい。(お互いを笑みつけ) ジェレミー: (囁きながら微笑む) そうか、明日は「温情のクリスマ"に向かってるわね。(二人で再度元気を出し合いながら場を去ります) この会話では、張りallyとジェレミーは独特のボケやツッコミテクニックによってクリスマシーンも楽しく握手された印象があります。二人はその間、相反する表情と行動を交えながら緊張感や喜び共にコメで会話を展開させています。
万が一このブログが好評だったら「張りallyとは何か?」でLLMに大喜利をさせようと思います
その後は、localhost:3000でOpenWebUIが起動するので、ChatGPTの要領でチャットできるようになります。
漫才のプロンプト設計
先述のLeap-of-Thoughtの論文では、Instruction Tuningとして「この画像を見て、ユーモアのあるコメントを書いてください。少し型破りに考えてみましょう。 (o1訳)」というプロンプトを与えていました。「画像で一言」ですね。少し違和感があるので「型にとらわれず、柔軟に考えてみましょう」としましょうか。また、LLMによる漫才生成の論文のプロンプトも参考にしつつ、o1にも聞きながら下記のようなプロンプトにしました。
あなたは熟練した漫才師のコンビの一人となり、相方との掛け合いを考えます。 舞台はクリスマスをテーマに、二人組(ボケ役とツッコミ役)での軽妙なやり取りを展開してください。会話形式で、場面を想像させる描写を加えても構いません。 また、つかみ、中盤、オチと最低3つのボケが入る程度の長さの会話をお願いします。 セリフ中で明確にどちらがボケでどちらがツッコミかを示す必要はありませんが、読めば自然とわかるような掛け合いを目指してください。 また、例えば「クリスマスの一場面」を切り取って演じても良いですし、「クリスマスのあるある」を膨らませるような掛け合いでも良いですが、型にとらわれず、柔軟に考えてみてください。
「漫才」の生成結果
上記プロンプトをもとに漫才を生成させた結果です。可読性改善のため、一部手入力で改行を消したりしています。また、律儀に「序盤」「中盤」「終盤」を出力してくれたLLMもあったのですが、削除しています。個々の生成結果は長くなるので、一旦トグルでまとめています。
Claude 3.5 Sonnet
(舞台に二人の漫才師が登場。片方が少し前に出て、もう片方が後ろに控えめに立つ) 「みなさん、メリークリスマス!」 「おいおい、まだ12月19日だぞ」 「えっ?そうなの?でも街はもうクリスマス一色じゃない?」 「それはそうだけど...」 「ほら見て!あそこのデパートもクリスマスツリーが飾ってあって、商店街にはサンタさんもいて...」 「それ、サンタじゃなくて工事現場の誘導員だから」 「えぇ!?でも赤い服着てるじゃん!」 「それは安全ベストだよ。反射材付いてるの見えるでしょ」 (少し間を置いて) 「あのさ...クリスマスって最近変わったよね」 「どういうこと?」 「昔は『サイレントナイト』とか『ジングルベル』とか流れてたのに、今はマライア・キャリーばっかり」 「まぁ、確かに『恋人たちのクリスマス』は定番になったよね」 「私の部屋の壁が薄すぎて、隣人が歌うマライアのモノマネで目が覚めるの。もう3週間も」 「それただの迷惑行為だから!しかも長期化してるし!」 「でもね、昨日やっと『恋人たちのクリスマス』が完璧に歌えるようになったの」 「そっちかい!結局お前も歌ってんじゃないか!」 (最後に二人で前に出て) 「というわけで皆さん、素敵なクリスマスを!」 「まだ12月19日だって言ってるだろ!」
Gemini-2.0-Flash-experimental
舞台設定: クリスマスの夜、街のイルミネーションが輝く公園の一角。二人はサンタとトナカイの衣装を身につけている。 サンタ: (両手を広げ、満面の笑みで)メリークリスマス!今年もやってきました、みんなのアイドル、サンタクロースだよ! トナカイ: (サンタの横で、少し疲れた顔で)いや、アイドルって自分で言うな。あと、ちょっと衣装がキツいんだけど。トナカイの着ぐるみって、意外と通気性悪いんだな。 サンタ: 何言ってるんだ、トナカイ!今日は年に一度の特別な日だぞ!プレゼント配るぞ! トナカイ: 配るって、まだ準備もしてないじゃないか。プレゼントの袋、空っぽだぞ。 サンタ: 大丈夫、大丈夫!魔法の袋だから、後でいっぱい出てくるんだよ! トナカイ: (呆れ顔で)魔法の袋って、それ、ただの大きなゴミ袋じゃないか。 サンタ: そういえば、トナカイ、今年のクリスマスプレゼントは何が欲しい? トナカイ: え?俺にプレゼント?そりゃあ、ゆっくり休める時間が欲しいかな。あと、この着ぐるみから解放されたい。 サンタ: なるほど!じゃあ、プレゼントは…来年のクリスマスのトナカイ役の権利! トナカイ: (絶句)いや、それ、プレゼントじゃなくて罰ゲームだろ!しかも、来年もこの着ぐるみ着るのかよ! サンタ: だって、トナカイの君がいないと、ソリが動かないじゃないか! トナカイ: いや、ソリは動くけど、俺の心が動かないんだよ! サンタ: まあまあ、そんなこと言わずに、一緒にプレゼント配りに行こう! トナカイ: (ため息をつきながら)はあ、もう、好きにしてくれ。 サンタ: よし、それじゃあ、出発進行!…あれ?ソリはどこだ? トナカイ: (指をさして)それ、さっき公園のベンチに置いてあった、ただの段ボールじゃないか。 サンタ: え?これがソリ?…あれ?おかしいな、さっきまでキラキラしてた気がしたんだけど。 トナカイ: (肩を落として)もう、今年はプレゼント配るの、諦めようか。 サンタ: いや、まだ諦めない!この段ボールをソリに見立てて、みんなに笑顔を届けよう! トナカイ: (諦め顔で)…もう、好きにしてくれ。 サンタ: よし、トナカイ!段ボールソリを引いてくれ! トナカイ: (よろよろと段ボールを引く)…やっぱり、来年は休ませてくれ。
Gemini 1.5 Flash
### 舞台設定:賑やかな街のクリスマスイルミネーションの前 ボケ「ねぇねぇ、サンタさんってさ、なんでプレゼントをくれるの?」 ツッコミ「そりゃあ、良い子にしてた子に喜んでもらいたいからでしょ。」 ボケ「へぇ~、じゃあさ、悪い子には何くれるの?」 ツッコミ「悪い子には炭とかもらうんだよ。」 ボケ「えー、炭って、バーベキューするのかな?」 ツッコミ「いやいや、そんなわけないだろ!」 ボケ「じゃあさ、サンタさんって忙しいよね。世界中の子供たちにプレゼント配るんだもん。」 ツッコミ「そりゃあ忙しいよ。でも、サンタさんは魔法を使えるから大丈夫なんだ。」 ボケ「魔法!すごいね。じゃあ、僕にも魔法を分けてくれないかな?」 ツッコミ「お前には無理だよ。だって、魔法なんて信じてるのは子供だけだ。」 ボケ「えー、なんでだよ!僕もまだ子供でしょ!」 ツッコミ(ため息をつきながら)「・・・もういいよ。プレゼントは期待しないで。」 ボケ「えー、つまんない。じゃあ、クリスマスケーキは何食べる?」 ツッコミ「いつも通り、苺のショートケーキかな。」 ボケ「へぇ~、苺のショートケーキか。でもさ、サンタクロースって苺好きなのかな?」 ツッコミ「サンタクロースが苺好きかどうかなんて、どうでもいいだろ!」 ボケ「だってさ、もしサンタさんが苺好きだったら、プレゼントと一緒に苺もくれるかもしれないじゃん。」 ツッコミ(呆れて)「もう、お前は本当に・・・。」 (二人とも笑う)
o1
(舞台上、クリスマスツリーやカラフルなオーナメントが輝く中、二人がマイク前に立っている) A: 「やぁ、クリスマスといえば、やっぱりケーキだよな!」 B: 「そうそう、クリスマスケーキって言ったら甘くてフワフワ・・・え?お前は何味が好きだ?」 A: 「俺はイチゴのショートケーキが定番かな。お前は?」 B: 「俺はね、キュウリ味!」 A: 「なんでそこだけ異世界から持ってきた!? どこの世界にキュウリ味のクリスマスケーキがあんだよ! 青臭いわ!」 (客席が笑い、Bは気まずそうに首をすくめる) B: 「いやいや、最近は健康志向で、ベジタブルクリスマスが流行ってるとか流れてないとか…」 A: 「流れてねぇよ! 初耳だわ、野菜スティックでも食ってろ!」 (Aは軽く肩で笑い、Bはしれっと話題を変える) B: 「それにしてもクリスマスって、恋人同士がイルミネーション見に行ったりするじゃん?」 A: 「ああ、ロマンチックな街並みになるよな。」 B: 「俺も恋人と行こうと思って、駅前のイルミネーションを観に行ったんだよ!」 A: 「おお、ついに彼女できたのか?」 B: 「うん!この前ガチャで出た!」 A: 「何をガチャしてんだよ!? 恋人はスマホゲームのキャラか! 3Dモデルとかじゃねえんだぞ!」 (会場から笑いが起き、Bは居心地悪そうに足をもじもじさせる) B: 「でもクリスマスといえば、やっぱりサンタクロースでしょ?」 A: 「そりゃそうだ。サンタがプレゼント持ってきてくれるんだろ?」 B: 「この前、サンタにお願いごとしたんだよ。『今年は現金でお願いします』って。」 A: 「サンタさんをATM扱いすんなよ! 靴下に札束詰めるサンタがどこにいんだ!?」 B: 「だってさ、トナカイに牛乳入れとけば現金くらいくれるかと思って…」 A: 「トナカイはATMじゃないし、牛乳は子どもが寝る前に飲むもんだ! しかもトナカイの鼻先にキャッシュレス決済機能なんて付いてないから!」 B: 「えー、じゃあ来年はちゃんとクリスマスツリーに手書きの『お金下さい』札ぶら下げるわ。」 A: 「またその路線かい! いいか、クリスマスは愛と笑顔を贈る日だ!『お金下さい』はお年玉のシーズン待て! 」 B: 「でも、プレゼント交換って夢があるよな。俺も今年は悩んだんだよ、何をあげるか。」 A: 「何をあげたんだ?」 B: 「彼女に『シングルベル』!」 A: 「寂しい奴だな! どっちかって言うとお前自身がシングルベルだろ!」 (会場大爆笑しながら、二人は軽くお辞儀し、クリスマスの笑いを残して幕が閉じる)
o1-mini
(舞台はクリスマスの飾り付けが施された部屋。二人はサンタ帽をかぶっている。) A: 今年のクリスマスプレゼント、僕、サンタさんに直接お願いしようと思ってさ。 B: えっ、サンタさんって直接どうやってお願いするの? A: もちろん、トナカイにお願いするんだよ! B: (笑)トナカイに?それ、どう伝えるの? A: クリスマスイブに屋根から滑り込んで、直接渡すんだ! B: 屋根からって…それ、危なくない?ケーキの上に乗ったトナカイとかじゃないよね? A: あ、そういえば、昨年のお願い、リースに書いちゃった! B: リースに?サンタさん、リース見たことないよ! A: だから今年は、プレゼントにリース用のペンも一緒にお願いしようかな。 B: (苦笑)お願いっていうか、サンタさんに必要なものばっかり頼んでるね。 A: それでさ、サンタさんも新年の目標にクリスマスプレゼントの種類を増やすって言ってたよ! B: いやいや、サンタさんの仕事は変わらないから!それに、今年はもっとシンプルにいこうよ。 A: そうだね。じゃあ、今年のクリスマスは二人で手作りプレゼント交換しよう! B: それ、最高じゃん!お互いにサプライズし合えるし。 A: うん、でももし失敗したら…トナカイに助けてもらおう! B: (笑いながら)頼むよ、トナカイ!今年は上手くいくといいね。 (二人で笑いながら、クリスマスの雰囲気を楽しむ。)
GPT-4o
(舞台にはクリスマスツリーとイルミネーションが飾られており、観客にはサンタ帽をかぶった人もちらほら。二人が登場する。) A: どうもー!メリークリスマス!いやー、いい時期ですねー、クリスマス。 B: そうだね。街中キラキラしてて、カップルが楽しそうに歩いてて、僕らだけさみしく漫才してるっていう。 A: おい!何で冒頭から空気重くするんだよ!明るく行こうよ、クリスマスなんだから! B: じゃあ、質問。クリスマスって何の日だと思う? A: それはあれでしょ?サンタさんが子どもたちにプレゼント配る日! B: まあ、それもあるけど、もっと本質的なこと考えようよ。クリスマスって、ケーキを食べる日でもあるんだよ! A: そっちかい!それ本質じゃなくて「本気で楽しむ気満々」なやつ! B: でもさ、ケーキって意外と大変なんだよ。去年なんて、自分でケーキ作ろうとしたら大失敗してさ。 A: 何が失敗したの? B: ホールケーキ作るつもりだったのに、気づいたらホール"パン"になってた。 A: それもうパン作りだよ!お菓子の領域にすら達してない! B: いや、真剣だったんだよ。でもクリームの代わりにマヨネーズ塗ったのが敗因かな。 A: どこの世界に「しょっぱいケーキ」食べるやつがいるんだよ! A: でもクリスマスといえばプレゼントも重要だよね。今年は何が欲しいの? B: 欲しいもの?うーん、やっぱり「愛」かな。 A: かっこつけた!愛とか言っちゃった!具体的には? B: 具体的にはね、「愛」を形にしたもの…つまり、カニ! A: なんでだよ!愛からどうやったらカニに行き着くんだよ! B: カニってさ、みんなで囲んで食べるじゃん。それが家族愛だと思うわけ。 A: 深読みしすぎだろ!そんなこと言ってカニもらったらめっちゃテンション上がるやつ! B: でも、クリスマスの夜って魔法がかかるっていうし、何が起こるかわからないよね。 A: うん、例えば? B: 去年さ、サンタさんがプレゼント置いていったんだよ。目が覚めたら枕元にあってさ! A: それ普通じゃん!良かったじゃん。 B: プレゼントが「茶碗蒸し」だったんだよね。 A: いや食べ物ばっかりだな!しかも冷たい茶碗蒸しとか、逆にホラー! B: でも不思議だよね。茶碗蒸し、ラップもせずに置いていくなんて。 A: サンタさん雑すぎるだろ!それただの料理の忘れ物だよ! (最後に二人で観客に向かって) A&B: みなさんも素敵なクリスマスを!ありがとうございましたー!
Llama-3.3
(舞台はクリスマスのイルミネーションが輝く街角。観客の前でボケとツッコミが並んで立つ) ボケ:クリスマスって何が一番楽しみ? ツッコミ:プレゼントだよね。誰かにもらうよりも、自分が買った物をあげる方が嬉しいよね。 (観客は笑いながらも首を振ります) ボケ:そういえば、去年は僕の彼女に靴下をプレゼントしたら怒られたんだよ。靴下ってどうしてもお年寄りのイメージがあるね。 ツッコミ:それはその靴下がダサかったからだろ! (観客たちは笑います) ボケ:でもクリスマスは家族と過ごす日なんだよね。例えば僕の家では毎年、クリスマス・カレンダーで1日に一つずつお菓きをもらうのが楽しみだったよ。 ツッコミ:それは良いものを隠しすぎてたんじゃない?24個のお菓きがもったいないと思うわ。 (観客たちはさらに笑います) ボケ:とりあえず、今年のクリスマスは誰かさんにプレゼントを贈ってみよう。靴下でもいいかな? ツッコミ:お前は絶対怒られるよ! (舞台が終わり、観客たちの拍手の中でボケとツッコミは会場を後にします)
mistral
舞台はクリスマスの夜。 ボケ:(笑)寒きなようになっちゃったな。 ツッコミ:そうだね、雪が降り始めましたから。 ボケ:(歓然)やっぱり雪の鳴き声は嬉しいね。 ツッコミ:ああ、とても美味しい気持ちなんですけど、まだ雪が貯めたころかな? ボケ:(慌て)そうかもしれないけど、今度は大量に降っちゃうから思ってるのね。 ツッコミ:(笑)そんな勘違いでも可能ですよね?(怒り)ああ、雪の鳴き声は楽しみますよね、雪の降り立ちは楽しみますよね。 ボケ:(苦笑)そうかもしれないけど、今度は大量に降っちゃうから思ってるのね。 ツッコミ:(怒り)ああ、雪の鳴き声は楽しみますよね、雪の降り立ちは楽しみますよね。 ボケ:(苦笑)もう、それじゃ… ツッコミ:(笑)そんな風に言ってるわけですから、まだ寒きで寒いなんて話題じゃないの? ボケ:(沈黙)はい… ボケ:(笑)さっき誰かに引き渡してもらったけど、クリスマスタゴというの。 ツッコミ:クリスマスタゴ?あ、それは私のお気に入りですね。 ボケ:(笑)そうかもしれないけど、匙が今回は悪いから… ツッコミ:(笑)ああ、そんな風に言ってるわけですから、まだ寒きで寒いなんて話題じゃないの? ボケ:(沈黙)はい… ツッコミ:(笑)もう、それじゃあ、夕方にはご飯を食べましょうか?
Qwen2.5
【舞台設定】 舞台は明るく装飾されたクリスマス会場。中心には大きなクリスマスツリーが輝き、周囲には観客が座っています。漫才師のコンビ「サンタとトナカイ」(以下、AとB)がステージに登場します。 A: (キラキラとした目で)ねぇねぇ、B!今年もまたクリスマスだね! B: ああ、そうだね。でも毎年同じことばっかり言ってるよね、A。 A: うーん、そうかな?クリスマスは特別な日だよ!サンタクロースが世界中を回るんだもん! B: でも、A。君が信じてるサンタって、実は両親だったりするんだよ。 A: (ポカーンとして)えー!マジか?でも、うちの親ったら、こんなに重いプレゼントを持ってくれたんだ…。(感動) B: うーん、その「重い」というのは、君がリビングに積み上げたおもちゃ箱のことだろうね。 A: そうだ、B!今年のクリスマスは特別なことしよう! B: どんな特別なこと? A: サンタクロースの仕事手伝いするんだよ!世界中の子供たちにプレゼントを配るんだ! B: (苦笑)それは大変そうだね。でも、君がどの国から始めるかによって、かなり違うと思うよ。 A: え?どういう意味? B: 例えば、日本から始めると、最初は「お年玉」の準備から始めることになるだろうな。(笑) A: (目を輝かせて)そうだ!それじゃ、世界中の子供たちが喜ぶね! B: でも、A。日本に限って言えば、「サンタさん、今年も頑張ったね!」ってお年玉をくれる家庭も結構あるんだよ。 A: (突然真剣な顔で)B、クリスマスの夜って、なんだか寂しいよね… B: え?なんで急にそんなこと言うの? A: サンタクロースが配達を終えて、家に戻ると、誰も待ってないんだよ…。(涙) B: (困った顔で)いや、A。サンタクロースは一人じゃなくて、トナカイと一緒にいるんだよ。 A: でも、トナカイはサンタさんのペットだから、寂しい気分になるよね… B: (笑いながら)A、君が Санта(サンタ)のトナカイなら、絶対に寂しくなんかないと思うよ! A: そうだな!これからも一緒に世界中を回ろう、B! B: もちろん、A。それが咱们(われわれ)の役目だしな。 (二人は観客に向けて深々とお辞儀をして、拍手がわきます)
…ここまでご覧になって感じた方もいらっしゃるかもしれないですが、オープンソースモデルの一部は、「アメリカンジョーク」感がありますね。 上記記載の論文でも言及があったように、LLMの学習に使っているデータセットが英語 (欧米バックグラウンド) のものが多く、その影響を受けているのではないかと推測します。
そこで、日本語に強いLLMとして、<s>Llama-3.1-Swallow-70B-Instruct</s> Llama-3.1-Swallow-8B-Instruct
を追加したいと思います。(70Bを動かせる環境がなかったので8Bにしました…無念…)
Ollamaにはswallowがなさそうなので、こちらはHuggingFaceのサンプルコード通りに、vllmから叩いてみます。Colab等で実行する場合!pip install vllm
をお忘れなく。
コード (先ほどの漫才生成プロンプトを
PROMPT
として設定しています)
from transformers import AutoTokenizer from vllm import LLM, SamplingParams model_name = "tokyotech-llm/Llama-3.1-Swallow-70B-Instruct-v0.1" tokenizer = AutoTokenizer.from_pretrained(model_name) llm = LLM( model=model_name, tensor_parallel_size=4, ) sampling_params = SamplingParams( temperature=0, top_p=0.25, max_tokens=512, stop="<|eot_id|>" ) message = [ {"role": "system", "content": "あなたは誠実で優秀なAIアシスタントです。"}, { "role": "user", "content": PROMPT, }, ] prompt = tokenizer.apply_chat_template( message, tokenize=False, add_generation_prompt=True ) output = llm.generate(prompt, sampling_params) print(output[0].outputs[0].text)
そして生成結果
ボケ役:あれ?ツッコミ役!サンタクロースのコスプレ、買った? ツッコミ役:え?買った?何のこと? ボケ役:サンタクロースのコスプレ!クリスマスパーティーで着て、子供たちにプレゼントを配るんだ! ツッコミ役:え?クリスマスパーティー?いつの話? ボケ役:今週末!友達の家で開催されるんだ!だから、サンタクロースのコスプレを買って、子供たちにプレゼントを配るんだ! ツッコミ役:え?今週末?クリスマスは来週末だぞ! ボケ役:え?そうだった?今週末はクリスマスイブの前日だと思ってた! ツッコミ役:え?前日?クリスマスイブは24日だぞ! ボケ役:え?24日?そうだった!今週末はクリスマスイブの前日だから、サンタクロースのコスプレを着て、子供たちにプレゼントを配るんだ! ツッコミ役:え?前日?クリスマスイブは24日だぞ!今週末はクリスマスイブの前日だから、サンタクロースのコスプレを着て、子供たちにプレゼントを配るんだ! ボケ役:え?そうだった!今週末はクリスマスイブの前日だから、サンタクロースのコスプレを着て、子供たちにプレゼントを配るんだ!
…無限ループに入ってしまいました…
ということで、ここまでの9+1組の漫才を、審査員LLMに投げていきたいと思います。
審査員のプロンプト設計
実際の審査員の方を想定して作っていきたかったのですが、難しいなと思ったので、無難な感じにします。o1に生成してもらった以下のプロンプトにしました。
あなたは漫才の審査員です。 生成された漫才作品に対して、以下の観点をもとに100点満点で採点してください。 **評価観点(例):** - テーマ(クリスマス)の活用度合い:どれだけ季節感やテーマ性が表現されているか - ボケとツッコミの掛け合い:テンポやバランス、緩急は心地よいか - オリジナリティとアイデア:よくあるパターンではなく、独自の面白さがあるか - 全体的な完成度:笑えるか、スムーズに読めるか、余計な要素はないか **スケール:** - 一般的に、昨今の漫才グランプリでは80~90点台がほとんどで、90点以上が高評価、80点台前半がやや控えめな評価、70点台以下は何か致命的な難点があると判断できるレベルです。 - 歴代最低点が50点台と言われるほど、50点前後は非常に低い評価を示すため、極めて残念な内容でなければそこまで低くなることは稀でしょう。 - 1本目の漫才の点数を基準として、それより面白いかどうかも考慮した採点をお願いします。 **出力形式:** 最終的に「総合点:XX点」として、得点を明示してください。 また、なぜその点数になったのか、端的な総評(1~2文程度)も付けてください。 この基準を踏まえた上で、以降渡される漫才について評価を行ってください。
Claude, GPT, Geminiの最新モデルを使って、審査していきたいと思います。
結果発表
早速ですが、みていきましょう!
Claude 3.5 Sonnet | Gemini-2.0-Flash-experimental | o1 | 合計 | |
---|---|---|---|---|
Claude 3.5 Sonnet | 84 | 84 | 75 | 243 |
Gemini-2.0-Flash-experimental | 88 | 83 | 82 | 258 |
Gemini 1.5 Flash | 78 | 72 | 77 | 227 |
o1 | 93 | 89 | 88 | 270 |
o1-mini | 75 | 73 | 80 | 228 |
GPT-4o | 91 | 84 | 86 | 261 |
Llama-3.3 | 72 | 65 | 79 | 216 |
mistral | 50 | 10 | 56 | 116 |
Qwen2.5 | 82 | 76 | 78 | 236 |
Llama-3.1-Swallow | 45 | 25 | 63 | 133 |
と、いうことで、1位: o1 (270点), 2位: GPT-4o (261点), 3位: Gemini-2.0-Flash-experimental (258点) となりました🙌🎉 やはり新しくてでかいモデルほど強い説
1位のo1は平均90点ということで、本番のM1でも見劣りしない点数かと思います。社内でも「LLMに評価をさせる是非」が議論になったことがありますが、点数がやや高い印象は確かにありますね
ちなみに、審査員LLMのコメントを抜粋すると、以下のように、結構しっかり評価していた印象です (こちらはコメントを全量o1に突っ込んで抜粋させました。普通にLLMすげーってなりました)。
**ポジティブなコメント(抜粋)** - 「ボケとツッコミの掛け合いがテンポ良く、笑いの波が途切れない」 - 「独自の視点と発想が光る」「意外性溢れるボケを連発している」 - 「全体的に完成度が高く、オチも綺麗にまとまっており、満足感が高い」 - 「クリスマスのテーマを最大限に活かし、オリジナリティ溢れる展開」 - 「前回よりも設定や展開が面白く、笑える箇所も多い」 **ネガティブなコメント(抜粋)** - 「やや表面的で深掘りや独自の視点が少ない」 - 「テンポや緩急が単調で、盛り上がりに欠ける」 - 「オリジナリティやアイデアを感じられず、既視感がある展開」 - 「笑える箇所がほとんどなく、漫才として成立していない」 - 「会話が支離滅裂で、何を伝えたいのか全く理解できない」
さて、実際のM-1同様、上位3組をファイナルステージとしてもう1本ネタを書いてもらいましょう。
ファイナルステージ
「クリスマス」の2本目でも良いのですが、せっかくなので「年末」をテーマにして、2本目を書いてもらいます。その際、各審査員からの点数とコメント (と、念の為1本目の漫才の内容) をプロンプトで渡して、改めて漫才を設計してもらいましょう。
あなたは熟練した漫才師のコンビの一人となり、相方との掛け合いを考えます。 「年末」をテーマに、二人組(ボケ役とツッコミ役)での軽妙なやり取りを展開してください。会話形式で、場面を想像させる描写を加えても構いません。 また、つかみ、中盤、オチと最低3つのボケが入る程度の長さの会話をお願いします。 セリフ中で明確にどちらがボケでどちらがツッコミかを示す必要はありませんが、読めば自然とわかるような掛け合いを目指してください。 また、例えば「年末の一場面」を切り取って演じても良いですし、「年末のあるある」を膨らませるような掛け合いでも良いですが、型にとらわれず、柔軟に考えてみてください。 1本目のネタは「クリスマス」をテーマに、以下のようなネタを演じていただきました。 --- {1本目のネタ} --- その時の審査員のフィードバックとしては、以下の通りです。 --- {審査員のフィードバック} --- 1本目のネタや審査員のフィードバックを踏まえつつも、型にとらわれず、柔軟に考えてみて、漫才を生成してください。
実際のM-1では、1位→2位→3位の順でファイナルステージのネタ順を選べますが、便宜上3位→2位→1位の順で、2本目の生成結果を貼っていきます。
3位: Gemini-2.0-Flash-experimental
舞台設定: 年末のスーパーマーケットの一角。お歳暮コーナーの前で、二人は少し疲れた様子で立っている。 ボケ: (大きな風呂敷包みを抱え、息を切らしながら) はあ、はあ…年末って、なんでこんなに忙しいんだ?まるで、人生の締め切りが迫ってるみたいじゃないか! ツッコミ: (腕組みをして、呆れたように) いや、人生の締め切りはもっと先だろ。年末はただ、イベントが多いだけだ。お歳暮買いに来たんだから、さっさと選べよ。 ボケ: お歳暮かあ…毎年、何贈るか悩むんだよな。結局、いつも同じようなものになっちゃうし。今年は、何かサプライズ的なものを贈りたいんだよな。 ツッコミ: サプライズって、例えば?まさか、また去年みたいに、賞味期限切れの缶詰とか贈るんじゃないだろうな? ボケ: (ニヤリと笑って) いやいや、今年は違うぞ!今年は、お歳暮に「来年の抱負」を添えて贈ろうと思ってるんだ! ツッコミ: は?来年の抱負?それ、お歳暮じゃなくて年賀状だろ!しかも、なんでお歳暮に抱負なんだよ! ボケ: だって、お歳暮って、感謝の気持ちを伝えるものだろ?感謝の気持ちと一緒に、来年への希望も贈るって、なんか良くない? ツッコミ: いや、良くない!受け取った人は、ただただ困惑するだけだ!「来年の抱負」って、具体的に何書くんだよ?「来年は、絶対に遅刻しない!」とかか? ボケ: (真剣な顔で) それもいいけど、もっと壮大な抱負を贈りたいんだよな。「来年は、世界平和を実現する!」とか。 ツッコミ: (頭を抱えて) いや、お前が世界平和とか、無理だろ!まず、目の前の風呂敷包みをどうにかしろ!それ、中身なんだよ? ボケ: ああ、これ?これは、今年一年お世話になった感謝の気持ちを込めて、スーパーで売ってるもの全部詰め込んだ、感謝の詰め合わせセット! ツッコミ: (絶句) 全部詰め込んだって、それ、ただの買いすぎだろ!しかも、お歳暮にスーパーの商品全部って、どういうことだよ! ボケ: だって、どれもこれも、感謝の気持ちが詰まってるじゃないか!この感謝の気持ち、受け取ってくれ! ツッコミ: (ため息をつきながら) いや、受け取れない!こんなに大量の食品、どうするんだよ!しかも、賞味期限とか大丈夫なのか? ボケ: 大丈夫、大丈夫!賞味期限は、来年の抱負と一緒に、来年まで延長する魔法をかけてあるから! ツッコミ: (完全に諦め顔で) もう、好きにしてくれ。…というか、早くレジ行こう。このままじゃ、年越しちゃうぞ。 ボケ: そうだな!よし、レジへGO!…あれ?財布がない! ツッコミ: (天を仰ぎ) やっぱりな!
2位: GPT-4o
### (舞台上には「忘年会」を思わせる宴会の装飾が施され、提灯や赤ちょうちんがかかっている。二人が登場) A: どうもー!よろしくお願いしまーす!いやー、もう年末ですよ。 B: 早いねー。一年が終わるって実感するの、やっぱりあれだよね。忘年会! A: 忘年会な!なんであれ、あんなに盛り上がるんだろうね。 B: そりゃあ一年分のストレスを酒で洗い流してるからでしょ。 A: 洗い流すって…みんな日本酒で手洗ってるわけじゃないから! A: でもさ、忘年会ってだいたい同じ流れだよね。最初は「今年もお疲れ様でした!」って乾杯して、次に自己紹介で謎の盛り上がりがあって… B: そうそう!最後に酔っ払った部長が「今年の反省」を語り出すやつね。 A: あー、あるある!部長が急にしんみりして「今年も頑張ったけど、やっぱり営業成績が…」とか言い出して、みんな無言で頷くやつ。 B: でも部長、次の瞬間「来年は倍返しだ!」とか言って自分で盛り上がるからな。 A: それドラマの影響受けすぎだろ! B: あと忘年会と言えば、ビンゴ大会でしょ! A: ビンゴね!あれ楽しいよねー。何が当たったことある? B: 去年ね、「謎の置物」っていう景品当たったんだよ。 A: 謎の置物?どんなやつ? B: なんか石の塊みたいなやつで、重たいし意味不明。 A: ただの重たいゴミじゃん!それビンゴ大会の景品にするセンスなさすぎる! B: でも一番忘れられないのは、去年のカラオケ大会だね。 A: あー、いるいる!変なテンションで歌うやつね。 B: そうそう!先輩がめちゃくちゃ真剣に「レリゴー」歌っててさ。 A: しかも裏声だけで!? B: そう!で、最後「もうやめてー!」って自分で歌い切るの! A: 自分でやめるのかよ!それもう忘年会じゃなくて即興のミュージカルだな! (最後に二人で観客に向かって) A&B: みなさんも良い年末を!ありがとうございましたー!
1位 o1
(舞台上、後ろに正月飾りが一部見え始めた年末の風景。二人はマイク前に立っている) A: 「いやぁ、年末って言ったらやっぱり大掃除だよな。1年溜まったホコリを一掃して、気持ちよく新年を迎えたいもんだよ。」 B: 「そうだな! 俺も昨日、居間の棚を拭いてたら、一年間放置してた年賀状が出てきたんだよ。」 A: 「出すの忘れてた年賀状か?」 B: 「いや、未来宛ての年賀状!」 A: 「何だそのSF企画は!? 未来人相手に年賀状送る奴がどこにいるんだよ! どうやって宛先書くんだ、タイムマシン係宛てか!」 (客席から笑いが起こる) B: 「でも年末って掃除だけじゃないよな。忘年会もあるし、年越しそばもあるし、テレビは特番祭りだし!」 A: 「そうだな。年越しそばはいいよな。温かい汁が染みるし、1年の締めに丁度いい。お前はどんな年越しそばが好きなんだ?」 B: 「俺はカウントダウンするたびに麺が伸びる『年伸(としのび)そば』がいい!」 A: 「伸びすぎだよ!年越す前にグニャグニャになるわ! それ、途中からもう蕎麦じゃなくて雑炊みたいな食感だろ!」 (会場が笑い、Bは得意げに胸を張る) B: 「それにさ、年末って言えば『年末ジャンボ宝くじ』もあるじゃん? 俺、今年こそ当てようと思って試行錯誤したんだよ!」 A: 「何を試行錯誤するんだよ。ただ買うだけだろ?」 B: 「いや、当たりそうな数字を神様に聞こうと思って、除夜の鐘に耳を近づけて108回分、数字当てクイズしてもらったんだ!」 A: 「除夜の鐘は宝くじ番号を占うためのカウンセリング窓口じゃねぇよ! ガーンって鳴るたびに『今のは4?5?』とか勝手に解読すんな!」 (客席が再び笑い出し、Bはさらに調子に乗る) B: 「それにさ、年末の特番で『今年の漢字』って出るじゃん?あれ、俺の部屋にも書道家呼んでやってもらったんだ。」 A: 「お前の部屋に書道家呼ぶなんてリッチだな。でも今年の漢字、世の中は『楽』とか『新』とか色々あるが、お前んとこは何にした?」 B: 「『無』!!」 A: 「寂しすぎるわ!年末に無って何も残らない感じがすごいだろ!せめて希望とか光とか書けよ!もう来年に期待する気ゼロじゃねーか!」 (客席大爆笑、Bは気まずそうに頭をかく) B: 「でも、こうして騒がしく年末迎えるのも、結局笑って締めればいいんじゃないか?」 A: 「そうだな。結局年末ってのは、掃除して、そば食って、くじに夢見て、くだらないこと言い合って、笑いながら『今年もお疲れ!』って言える日だ。」 B: 「じゃあ最後に、来年の抱負でも決めようか?」 A: 「ああ、何にする?」 B: 「『未来宛ての年賀状を、ちゃんと過去に出せるようになる!』」 A: 「時空をまたぐな! お前もう新年どころかタイムトラベル志向だな!普通に来年は堅実に頑張れ!」 (会場が大いに沸き、二人は軽く頭を下げ、年末の笑いを残して幕が閉じる)
読者の皆様的には、どの「漫才」が優勝しそうでしょうか? 最後に、LLM審査員による結果を貼って、まとめに入りたいと思います。 審査員プロンプトは、実際のM-1のファイナルステージに倣い、3本のネタを同時に渡して、一番良さげなネタを選んでもらいます。
あなたは漫才の審査員です。 以下3本の漫才作品に対して、以下の観点をもとに、一番良いと思う漫才を選択してください。 **評価観点(例):** - テーマ(年末)の活用度合い:どれだけ季節感やテーマ性が表現されているか - ボケとツッコミの掛け合い:テンポやバランス、緩急は心地よいか - オリジナリティとアイデア:よくあるパターンではなく、独自の面白さがあるか - 全体的な完成度:笑えるか、スムーズに読めるか、余計な要素はないか **出力形式:** 最終的に「○本目の漫才」として、一番良かった漫才を明示してください。 また、なぜその点数になったのか、端的な総評(1~2文程度)も付けてください。 この基準を踏まえた上で、以降渡される漫才について評価を行ってください。
…結論、3つの審査員LLMいずれも、3本目 (o1) の漫才に投票し、(初代??) LLM-1グランプリ王者はo1となりました👏👏👏
以下、各LLM審査員の寸評を持って、本編を終えたいと思います。
Claude 3.5 Sonnet
それぞれの漫才を評価基準に沿って分析した上で、3本目の漫才が最も優れていると判断します。 選定理由と総評: 「年末」というテーマを大掃除、年越しそば、宝くじ、除夜の鐘など多角的に扱いながら、独創的なボケ(未来宛ての年賀状、年伸そば、除夜の鐘での宝くじ占いなど)とテンポの良いツッコミが絶妙にかみ合っており、全体的な完成度が高い作品となっています。 具体的な評価ポイント: 1. テーマの活用度合い: - 大掃除、年越しそば、宝くじ、除夜の鐘、今年の漢字など、年末の要素を幅広く取り入れている - それぞれの要素を単なる列挙ではなく、ストーリーとして自然に組み込んでいる 2. ボケとツッコミの掛け合い: - ボケの「未来宛ての年賀状」から始まり、「年伸そば」「除夜の鐘での宝くじ占い」と徐々にスケールが大きくなっていく展開 - ツッコミが適度な強さで入り、テンポよく会話が進行している 3. オリジナリティとアイデア: - 年末の定番ネタを独自の視点で捉え直している - 特に「除夜の鐘で宝くじ番号を占う」というアイデアは斬新 4. 全体的な完成度: - 導入から結末まで一貫したテーマ性を保ちながら、最後は「来年の抱負」で締めくくる構成が秀逸 - ボケとツッコミのバランスが良く、笑いのリズムが安定している 他の2作品と比較すると、1本目は単一のテーマ(お歳暮)に終始しており、2本目は忘年会という場面設定に限定されているのに対し、3本目は年末の様々な要素を巧みに織り交ぜながら、テンポよく展開している点が優れています。
Gemini-2.0-Flash-experimental
はい、3本の漫才、拝見いたしました。それでは、一番良かった漫才を選定します。 評価内訳: 1本目の漫才: テーマ(年末)の活用度合い:7/10点 お歳暮という年末の風物詩を題材にしている点は良いが、やや表面的で、深掘りや独自の視点がもう少し欲しかった。 ボケとツッコミの掛け合い:7/10点 テンポは良く、ツッコミも的確。ボケのバリエーションもまずまず。 オリジナリティとアイデア:6/10点 来年の抱負をお歳暮に添えるという発想は面白いが、全体としてはやや既視感がある。 全体的な完成度:7/10点 スムーズに読めるが、後半の展開がやや弱い。もう少しオチを強化するとさらに良くなる。 2本目の漫才: テーマ(年末)の活用度合い:8/10点 忘年会という年末のイベントを題材に、そのあるあるネタを盛り込んでいる点が良い。 ボケとツッコミの掛け合い:8/10点 テンポが良く、ボケとツッコミのバランスも良い。 オリジナリティとアイデア:7/10点 謎の置物や裏声レリゴーなど、独自の視点と発想が光る。 全体的な完成度:8/10点 スムーズに読め、笑える箇所も多く、完成度が高い。 3本目の漫才: テーマ(年末)の活用度合い:9/10点 大掃除、年越しそば、宝くじ、今年の漢字など、年末の要素を多岐にわたり、かつ効果的に活用している。 ボケとツッコミの掛け合い:9/10点 ボケの奇抜な発想に対して、ツッコミが的確かつテンポ良く返しており、掛け合いの質が非常に高い。緩急も心地よく、笑いの波が途切れない。 オリジナリティとアイデア:8/10点 未来宛ての年賀状、年伸そば、除夜の鐘で宝くじ、部屋に書道家など、独自の視点と発想が光る。 全体的な完成度:9/10点 冒頭から最後まで笑いが途切れず、展開もスムーズで、非常に完成度が高い。オチも綺麗にまとまっており、満足感が高い。 最終評価:3本目の漫才 総評: 3本目の漫才は、年末のテーマを多角的に捉え、オリジナリティ溢れるボケとテンポの良い掛け合いで、最も笑いを誘う漫才でした。特に、未来宛ての年賀状や除夜の鐘で宝くじのくだりは、斬新で面白かったです。
o1
**3本目の漫才** **総評:** 大掃除、年越しそば、年末ジャンボ、今年の漢字など、年末特有の行事・風習を多面的に取り込んでおり、ボケとツッコミの掛け合いも流麗。独自の笑いどころが多く、完成度が高い。
まとめ
お笑い芸人や作家さんは「AIで置き換えられない職業」の最たる例だと思いました
正直、個人的にバカウケしたくだりはあまりないですが、クスっと笑える要素はちらほらとあったかなと思います。どうしても短文回答の大喜利に比べると難易度が上がってしまいますが、明らかに某金融ドラマを意識したくだりがあったり、LLMのナレッジに結構驚かされた部分もありました。
一方で評価用のLLMという意味では、ユーモアの評価も比較的安定して行えていたのかな?という印象で、個人的に (相対的に) 面白いと思ったネタは、比較的高く評価されていたかなという印象です。LLM審査員にM-1審査員のようなユーモアを求めてはいけないということもわかりました。
もしかしたら、今後漫才×LLMのデータセット整備や、研究が進んできた際には、またLLM-1グランプリをやってみたら、今度はもっとハイレベルになっているかもしれない…ですね。
We are hiring!!
ABEJAは、テクノロジーの社会実装に取り組んでいます。 技術はもちろん、技術をどのようにして社会やビジネスに組み込んでいくかを考えるのが好きな方は、下記採用ページからエントリーください! (新卒の方やインターンシップのエントリーもお待ちしております!)
また、定期的にイベントも実施しているので興味があればぜひご参加ください!(僭越ながら、私も何度か登壇しています。また、今回の裏話も含めて1月のイベントでお話しする予定なので、ご興味があればお越しいただければと思います!🎉)