OpenAI/GPT-3のプロンプトプログラミングとは何か?実際にやってみる
2021.04.27
Updated by Ryo Shimizu on April 27, 2021, 08:05 am JST
2021.04.27
Updated by Ryo Shimizu on April 27, 2021, 08:05 am JST
GPT-3は、イーロン・マスクやMicrosoftらが支援するOpenAIという組織によって公開された世界最高峰の自然言語AIと言われている。
膨大なパラメータを持ち、インターネット上のありとあらゆる文字情報を学習したもので、あまりに自然な文章が作れてしまうので一般公開が制限されるという、いわく付きのAIだ。
GPT-3を利用したアプリケーションには「プロンプトプログラミング」という手法が使われている。
これを使えば、欲しいプログラムが簡単に書けるのである。
これは非常に画期的なパラダイム(考え方)で、「プログラミング」という概念を大きく広げるものだと言える。
そこで「プログラミングパラダイム」としての「プロンプトプログラミング」の実際を詳しく紹介したい。
OpenAIのGPT-3のベータプログラムに参加すると、誰でも「Playground」というサイトにアクセスできるようになる。
この「Playground」では、GPT-3を手軽に試すことができる。あまりにも手軽だったため、筆者は最初、それがプログラミング環境であると認識できていなかったほどである。
たとえば、英語をフランス語に翻訳するアプリケーションの場合、Playgroundではこのように表示される。
この状態で、一番下の「English:」に続けて、フランス語にしたい英文を入力する。たとえばこんな感じ。
この状態で「Submit」ボタンを押すと、フランス語に翻訳される。
この、上半分の英語とフランス語の対訳の部分が「プロンプトプログラム」と呼ばれる部分だ。
つまり、GPT-3では、「このような結果が欲しい」という例示(プロンプト)を与えれば、理論上は何でもできるのである。
もっと簡単に説明するために、より簡単なプログラムを書いてみた。
たとえば、足し算を行うプログラムを書きたければ、「足し算の例」を例示する。
そして最後に実際に足したい数式(この場合は4+1)を書いて、=で止め、「Submit」すると、答えが表示される。
もちろん足し算だけでなく掛け算もできる。
ポイントは、「本当に計算をしているのではなく、それっぽい単語を探して当てはめる」ため、計算があっているかどうかはわからないということだ。
たとえば元号の変換はできるだろうか。
確かにできている(太字がプロンプトで、細字がAIによる推論)。
では、未来の日付はどうだろうか。
トンチのような答えが返ってきてしまった。
これは、GPT-3が学習に使ったデータが、あくまでも「現在までの」インターネットの全情報であり、その中には「令和5年」という未来の日付が含まれていないために類推するしかないということになったと考えられる。
さて、GPT-3のデフォルトのサンプルにはTwitterの呟きの「ネガティブ/ポジティブ」判定がある。これを日本語にも適用したらどうだろうか。
何となくできている。
そして「プロンプト」として与える文章が多ければ多いほど精度は良くなるはずだ。
これは実際には何が行われているかというと、一種の「ファインチューニング」である(厳密には違うが)。
GPT-3が学習した膨大な言語空間の中で、「どのような知識をどのように使いたいのか」を例示(プロンプト)することで、より精度をあげることができるのだ。
さて、せっかくだからもっと違ったプログラムを書いてみよう。
たとえば、固有名詞や固有表現の抽出は、自然言語処理では非常に大きく、また難しいテーマである。
簡単な例示で固有表現が抽出できたらありがたいではないか。
早速試してみる。
正しく「御徒町駅」を固有名詞として認識できている。
固有表現の抽出はかなり難しいタスクなのだが、機械学習が有効なことはわかっているので、ここは単純にデータの絶対量が多いGPT-3が強いのは道理だ。しかし、いろいろ考えさせられる。
それでは、昔の自然言語処理ではよく問題になった「風の谷のナウシカ」という単語を固有名詞として抽出できるようにすれば、他のものもできるだろうか。
胸熱である。
同じく「の」が2回続くタイトルを試してみる。
すごい。
では、あえて意地悪な文章を読ませてみたらどうか。
感動!
感動しかない。
ちゃんと「あいつ」と「星の瞳のシルエット」を分けて解釈できている。
こんな簡単なもので。
しかし問題もある。
GPT-3の出力はランダムに左右される。もう一度同じ文面でやってみると・・・
「あいつの好きな星の瞳のシルエット」になってしまう。これは悔しい。
これが図らずも、GPT-3におけるプロンプトプログラミングの面白くも難しいところだ。
つまり、通常のプログラミングと違って、得られる結果にランダム性がある。
足し算ですら満足にできるかどうかわからない(保証がない)。
うまく行くこともあれば、行かないこともある。
このばらつきを受け入れられるかどうか。受け入れるとしたら、どこまでか、というところの「匙加減」が重要になってくる。
機械でありながら、正解がないのである。
もっと馬鹿馬鹿しいことができないか試してみよう。
たとえば独特の語り口の会話エンジンを試してみる。
脅威の対応力である。
筆者は関西弁に詳しくないが、頑張ってニセ関西弁を喋るボットに挑戦してみる。
人間の会話部分まで生成されていることに注意されたし。
怪しいエセ関西人の喋り方としてはこんなもんかと思うが、ガチの方のツッコミはご容赦いただきたい。
さて、このAIはどこまで男女の機微みたいなことに対応できるだろうか。
たとえば男女の喧嘩になった時、男のセリフを考えることはできるだろうか。
これを推論させると、このようになる。
見事!
まさにパターンにハマった答えが出てきた。
他にも、同じプロンプトで続きを考えさせると色々なバリエーションが出てくる。
解説されちゃった!
何か日本語と英語の教科書にこういう例文があるのだろうか。
「知らないといっても知ってることが多いです」とか、余計なことは知っているようだ。
さて、ドラマや映画のあらすじを入力するとオチを考えてくれたら便利なのではないか、と思い、それも試してみた。
まずはプロンプトはこんな感じ。
だんだんコツが掴めてきたが、プロンプトをどのように表現するかというのは、プログラマの論理的構成力ではなく、文章の表現力が問われる。つまり、最先端のAIを意のままに使いこなそうと思ったら、文章力が高い人の方が有利であることになる。
ここで某人気アニメの冒頭のシーンを入力するとどうなるか。
なんと、だいたい合ってる。
もちろんランダム性があるので同じ筋書きから違う結果が出てくる。
別の世界線のストーリーも出てきてしまった。
他のあらすじも試してみよう。
この全体的な投げやりなノリが何かに似てるな、と思ったら、神聖モテモテ王国だった。
最後に、神聖モテモテ王国っぽいあらすじを生成させてみよう。
大体あってた。
プロンプトプログラミング、想像以上に使う人間のクリエイティビティを必要とするパラダイムだった。
こうなると、好奇心旺盛な子供たちの方がむしろより効果的に使えるのではないかと思ったりもする。
プログラミングの世界に、ここまで極端な曖昧さが持ち込まれた例は過去にもない。
たとえば確率的プログラミングという考え方はあるが、あくまでも「確率」という枠の中で閉じ込めるためのものだ。
GPT-3におけるプロンプトプログラミングは、同様に確率を扱うが、得られる結果は確率的に制御できるものではない(ランダム性を排除することはできるがそれだと意味がない)。
足し算に正解することもあれば間違うこともあるというようなものを従来のプログラミングと同様のもとして扱うのは難しい。
逆に言えば、GPT-3におけるプロンプトプログラミングを使いこなすには、従来の理系的な人材よりも文系的な人材、もっと言えば、「文芸的」な人材の方が適している可能性がある。
どちらにせよ、使う方の想像力次第で非常に応用範囲の広いパラダイムになっているようだ。
引き続きGPT-3については考察をしていきたい。
実際に筆者がGPT-3を使う動画も用意した。雰囲気を掴んでいただけると思う。
[youtube https://www.youtube.com/watch?v=iLM_32dVvuU&w=560&h=315]
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。