OpenAI のGPT-3を利用したお笑いアプリを公開しました。


# 概要
 はじめまして。佐藤豊と申します。Qiitaには初めての投稿になります。
OpenAI のGPT-3が作成するボケを、つっこんで遊べるお笑いアプリサイトを公開しましたので、報告します。
 [公開先 : https://mtask.pythonanywhere.com/]( https://mtask.pythonanywhere.com/)
# ＜はじめに＞
ダウンタウンを中心に置いて、個人的にお笑いを研究しています。
OpenAIで公開しているAIの自然言語処理のエンジン（GPT-3）をニュースで知り、昨年夏頃に利用申請をしていたところ、半年ほど過ぎて2021年2月にアクセス許可の案内が届きました。まったくの個人申請で、お笑いの研究で試したいとの申し込みへの許可でしたのでうれしい限りです。
申し込み当時は、GPT-3が日本語に対応してるとの発表が見当たらなかったのですが、利用してみると、普通に日本語での会話の受け答えができることがわかりました。公開されているデータはありませんが、莫大なコーパスのデータソースに一定の日本語のデータが読み込まれていることが想像できます。また、色々な使い方を試したところ、GPT-3のエンジンに一定のインプットを事前に与えると、当初の期待とずれた返事がもらえることがわかりました。これは、お笑いでいう、ずれ/ボケ/緊張の発生を、GPT-3(AI)で作成させるという、AIの利用方法としての新しい取り組みになるかと思います。

今回、このGPT-3のエンジンを利用し質問に対してのボケ（＝ずれた回答）を応えるシンプルなアプリを無料利用の形で公開しました。これを利用して、ツッコミの練習ができるかと思います。
今回、公開までの経験を記事の中で共有できればと思います。


# ＜開発概要＞

 実行サーバー環境 : PythonAnywhere   (  今の所無料の枠利用で運用しています。）
 Web インフラ : Django
 言語         : python, html/css

また、pipで導入したライブラリは、下記の通りです。
- openai　(OpenAI から提供されるAPI I/Fです)
- chronological　 (OpenAI のライブラリーを簡易に使える様になります。developper communityから提供されています。)
- asyncio             (GPT-3 との間の非同期通信で使用しました)
- djangorestframework ( Web　アクセス制限用で使用しました )

 OpenAI から提供されるAPI など開発の情報は　[https://beta.openai.com/docs](https://beta.openai.com/docs)から一般的に参照できます。今回は、シンプルなアプリケーションですのでWebで公開されてる情報で開発完了まで進みました。
 また、2021年9月には、amazon　からun officialな形ですが書籍としてGPT-3全般の解説本(Exploring GPT-3)（英語）が発売開始になりました。こちらも情報も参考になると思います。
 [amazon : https://www.amazon.com/dp/1800563191](https://www.amazon.com/dp/1800563191)

# ＜開発から公開まで＞

公開文書（英語）にもありますが、動かしてみたわかったことも合わせて、いくつかポイントを書いて見ます。

・様々な言語でのサンプルがあり、発行されたAPIキーを利用してのGPT-3とのアクセス確認は一般的な web系アプリのスキルがあれば、開発そのもののハードルは低いかと思います。
・GPT-3  の間は、API-Key を利用して、httpでpost して待つ形ですので、返答に数秒かかります。応答に利用するエンジンは数種類用意されていて、精度を落としてレスポンスを選択する方法もありますが、今回提供しているアプリでは精度の一番高いものを利用しています。
・アプリ公開前に、OpenAI  に開発したものを説明し、審査を受けてからの公開するという流れになります。今回のケースでの審査を申請してから、OpenAIからの返事や、アドバイスはタイムリーに届き、丁寧でスムーズでした。英語でのテンプレート文書に埋めていく形ですが、Volumeもありますので作成するのに少々時間がかかりました。また、上記OpenAIの資料にもありますが、GPT-3のエンジンは非常に強力な為、OpenAI では、現時点ではGeneric な会話での利用ではなく、用途を特化したものに、公開の承認を出している様ですので、本格的な商用利用を検討の場合は、事前に適用範囲の注意が必要かと思います。
・笑いへの利用の観点でば、同じ質問に対して、同じ答えにならない様、ランダム性を持たせる指定を入れて利用しています。
・使用される文書に不適切な内容が含まれない事が必要になりますが、GPT-3 のエンジンにも判断を返す機能があり、今回はGPT3のエンジンでの判定をそのまま利用しています。このため、今回のアプリでは、ボケを返すまでに、内部では文生成と、判断確認の合計２往復する形での実装を行っています。
・今回は、WindowsでDjango上にテスト環境を作成し、手作業でのPythonAnywhere でのlinux/Django に移植しましたが、特に下記あたりは、つまずいてから解を見つけるのに苦労しました。（ひとえに、私のプログラム習熟度が不十分な事なのが原因なのですが、色々な試行錯誤がありすぎて、書ききれません。）

 -　 html <-> Django/form/python    　でのデータ渡し方、変更方法
 - 　Windows/django  <-> pythonanywhere  環境変数/pathでの整合性調整
 
・GPT-3 利用は有料のため、将来の運転資金回収を想定した、[OFUSE] (https://ofuse.me)を利用した　投げ銭のボタンを実装しました。カードでの支払い対応で、web の押しボタンhtmlまで、OFUSE で作成できますので、スムーズにできました。OFUSE は、なかなか便利なサービスかと思います。


# ＜アプリケーションの使い方について＞

下記のurlからアクセス可能です。
 https://mtask.pythonanywhere.com/

使い方はシンプルで、1)GPT3への質問入力　のtext box にAI(GPT3)にボケてほしい内容の質問を入力し、2)3)で、 希望のボケの加減をリストボックスから選択して、先頭にある　GPT3へ送信 のボタンを押すと、約3秒後に ボケ回答欄に、ボケが表示されます。

2)3)の希望のボケ加減の選択枝は　下記からの選択になります。（指定しなくても動作します）

2)馬鹿さ加減は？
-'あほか、お前は！' / 'なにゆうてんねん' / 'おいおい' 
 
3)楽しさ加減は?
- 'とっても楽しい' / 'そうでもない' /  '楽しくない'

その後、回答をみて、4) ボケの評価　から下記のいずれかの項目選択して、最後に　ボケの評価送信　　ボタンを押していただければと思います。（今後の改修の参考にしたいと考えています。）

4) ボケの評価
- '笑える'/'ナイス'/ '意味不明' / 'いまいち' / 'ダメやん'

　念のため、下記に、質問と応答のサンプル画面を添付します。今回のアプリでは、同じ質問を送ってもできるだけ同じ応答を返さない様にしていますので、実際に皆さん利用しても同じ応答は返りませんのでご注意下さい。また、現在利用できるGPT-3のエンジンは、2019年10月以降のトピックはロードされていない様ですので最新の話題には適切な反応ができませんのでご注意下さい。

では、まずは一度お試しいただければと思います。(以下、サンプル使用例です。）

![gpt3-sample2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2083315/0df7bbdc-7406-368f-8521-4606add80aec.png)



# ＜AIとお笑いについて　-　開発の背景＞

　今回のアプリの利用前提は、AIのボケを返すという目的の理解の上で使用することを想定しています。つまり、漫才のつっこみ役として質問（ネタふり）し、AI のボケにつっこむ、とういうイメージです。
　開発は、まだまだ発展途上のため、AI の質問する文字数が少ないとボケるチャンスが少なくなります。また、時にはボケてこない、まっとうな応答がでる場合もあります。そんな時は、「全然ボケてないやんか」といった暖かいつっこみを入れていただければと思います。

質問に対しての何らかのズレた応答、いわゆる正解そのものではない、でもそこそこ近い返事をするのを、つっこみむという事が、楽しみ方になります。

　一方、もしも、質問をする人が、AIが正解を返すという理解で利用すると、単に間違った答えを返ってくるだけで、面白くも何とも思わない、という残念な感想を持つ結果になってしまいます。
　このあたりは、いわゆる緊張緩和など、お笑いの構造やモデルでどういったズレを生み出すかといった議論での補足説明に入ってきますが、Qiita での説明は長文になり書きれないため、世の中には様々なお笑いの分析書がありますので、ご興味があれば探して読んでみていただければと思います。私の考察は、「笑ってはいけない、ダウンタウンのお笑いモデル」[amazon :https://www.amazon.co.jp/dp/4865437045](https://www.amazon.co.jp/dp/4865437045 )で書いていますので、よろしければこちらも参照いただければと思います。
　この中での記載は、1990年代のダウンタウンのフリートークを題材とした論理的な分析が中心で、残念ながらコンピュータでの実装については、2016年以降に検討を開始したので、今回の公開で、一旦形となった”ボケ”をどう表現するかについて、検討した詳細の内容までは、著書に含まれていませんのでご注意下さい。
　
　このあたりをもう少し説明すると、AIでお笑いを作り出すには、自然言語処理が必要で、Word2Vec、Word2Doc、BERT の流れを受けて、お笑いルールを学習させたナレッジを作り上げるという王道もありますが（できればダウンタウンっぽく）、この方法はとらずに、今回のアプリはBERTの流れを受けた既にある大規模なgenericなAIエンジンに対して、指示を与えて、少しずれた回答を、引き出すというAIの使い方でも、結果としてのボケらしき（ボケとして見える）ものが出るということに、着目して作ったものです。この辺りの説明は、開発前段での実験したデータや論考など、あるいはTransformer/attention などAIエンジンの仕組みに対して、どういったノイズを与えると、ボケらしきずれた形になるか（ここの深堀りは今後の発展課題になりますが）、同じ分野で検討している方の参考になるところもあるかと思います。近いうちに、もう少しだけ補足をまとめて、amazon  などで公開を予定しています。

　いずれにせよ、今回のアプリを使っていただくと、楽しみ方として、

　　・AIのボケをそのまま楽しんでいただく
　　・GPT-3のポテンシャル触って感じていただく（ボケ以外の可能性の高さ）

　どちらもありではないか、と思います。

　最後に、長文になりましたが、アプリ公開記事にお付き合いいただきありがとうございました。
　
　また、update  がありましたら、当記事に更新を入れたいと思います。

＜以下、10/26/2021 追記＞
　今回のアプリに関連したお笑いモデルの考え方や、実装について、20p程の電子book「笑ってはいけない、GPT-3へのつっこみ道場ができるまで」に簡単にまとめて下記にUPしました。よろしければ参照下さい。無料です。
[ Amazon : https://www.amazon.co.jp/dp/B09JZSL2XF ]
(笑ってはいけない、GPT-3へのつっこみ道場ができるまで)
[ 楽天 Kobo : https://books.rakuten.co.jp/search?sitem=1230005225996]
(笑ってはいけない、GPT-3へのつっこみ道場ができるまで)


# ＜補足＞

GPT-3互換の同等の下記の利用の環境もある様です。まだ試していませんが、参考まで。いつか試してみたいと思います。

[GPT-J-6B : https://zenn.dev/yu89mo/articles/899b0ad9ac6fc5](https://zenn.dev/yu89mo/articles/899b0ad9ac6fc5)

また、AIで大喜利という点では、下記のサイトも有名かと思います。参考まで。
[大喜利AI ：https://www.watashiha.co.jp/](https://www.watashiha.co.jp)