命令文を改善してChatGPTとBingAIにブログを書かせよう

  • このエントリーをはてなブックマークに追加
  • LINEで送る

おはようございます。我々のチームはクスノキさんが一昨年から入社、今年3月にはヒラタニ本部長が退職され、激動の数か月を過ごしている……わけでもなく、ワイワイと日々楽しく過ごさせていただいています。

本記事では、ChatGPTやBingAIなど裏側にAIを載せたチャットシステムを使っても、上手く回答が返ってこない、何が便利か分からないといった方に読んでいただきたい内容となっています。
また、ChatGPTやBingAIに質問をしたことがある、使ったことがある程度の方を読者想定としています。

昨今の情勢

2022年11月末にプロトタイプとしてOpenAI社によって公開されたChatGPTは、SNS(特にTwitterやネットニュース)で瞬く間に広まり、現在の生成AI大ブームの火付け役となりました。

また、2023年2月にMicrosoft社からリリースされたBingAIはGPT-4モデルをベースとして開発されており、ユーザーの間では「ChatGPTを超えた」とも称されました。ChatGPTに比べ、人間を相手にするような対話が可能であり、絵文字や顔文字、画像や動画でも返答してくれます。

この記事をご覧になっている方も、実際に使ったことがある、現在進行形で使っている、という方は数多くいらっしゃるのではないでしょうか。深いことを考えずに適当に質問しても、それなりに精度の高い回答が返ってくるので助かりますよね!

望んだ答えが返ってこないことも

しかしながら、利用者が望んだ回答を返してこないことも”結構よくある”ことです。
今回は例として、“ChatGPTとBingAIについて”をテーマに、私の代わりにブログ記事を執筆してみてもらいましょう。なお、以下スクリーンショットでは、一画面にまとまらない程に長い回答が出力されたため、一時的に削るような処置をしています。

プロンプト

ChatGPTとBingAIについてブログを書きたいです。内容を考えてください。

出力結果

ChatGPTでは…

BingAIでは…

ChatGPT、BingAI共にブログ記事を書くためのアイデアは羅列してくれていますが、ブログの記事は利用者(私)がちゃんと考えないといけないようです。ChatGPT、BingAIへの命令文の改善で、もう少し精度の高い(ブログの執筆者が楽をできる)回答を出力させてみましょう!

なお、この命令文はpromptiaまめたろうさんの投稿をお借りさせていただきました。テーマ内容と最初の設定だけ少しだけ変更させていただいたものがこちらです。結果はどうなったでしょう。

改善したプロンプト

プロのwebライターになりきって、
以下の【テーマ】について【ステップ】に従ってブログ記事を書いてください。


#テーマ
ChatGPTとBingAIについて

#ステップ
1: テーマにあわせた記事のタイトルを多数考えて、その中から、SEOの観点から、もっともアクセス数が伸び、読者がクリックしたくなると予測される{タイトル}を選びます。
2: {タイトル}をもとに、3つの記事ブロックに分けて{アウトライン}を作成します。
3: {アウトライン} を元に、第1ブロックの{記事文章}を作成します。
4: {記事文章}を、SEOと読みやすさの観点から、修正して{最終文章} として出力します。
5: 同様にして、第2ブロック、第3ブロック、までの{最終文章}を出力します。
6: すべてのブロックの内容を要約して、まとめの文章を作成します。SEOと読みやすさの観点から、それを修正して{まとめの文章} として出力します。

出力結果

ChatGPTでは…

BingAIでは…

これはこれで、ブログの目次にはとても助かりますが、もっと私の代わりにブログの記事の内容を書いてほしい!……ということで、ここから話したい本論になります。以下は、DAIR.AIのPrompt Engineering Guideを参考に、実例を交えながら解説していきます。

プロンプトエンジニアリングとは?

プロンプトエンジニアリングは、言語モデル(LMs)を効率的に使用するためのプロンプトを開発および最適化する比較的新しい学問分野です。プロンプトエンジニアリングのスキルを身につけることで、大規模言語モデル(LLMs)の能力と限界をより理解することができます。

Prompt Engineering Guide

上記の定義を簡単に言い直すと、プロンプトエンジニアリングとは、ChatGPTやBingAIなど、AIチャットシステムに入力する命令文(プロンプト)の最適化を図ることによって自分の期待する答えを返してもらおう!という新しい開発手法(学問分野)のことです。

Zero-Shotプロンプティング

利用者が一般的に利用しているプロンプトの種類です。私が上部で使ったように、「~について教えてください」や、「~について要約して」など、皆さんも普段使いしているのはこれだと思います。promptiaで紹介されているプロンプトなど、”一般的なテクニック”を使っているものもここに該当します。

また、ChatGPTやBingAIなどのLLM(大規模言語モデル)は、このZero-Shotプロンプティングに最適化されるように開発されています。適当に質問文を投げるだけでもそれなりの精度を出してくれるのは、OpenAI社やモデル開発者方の苦労の賜物ですね。

例)上部で私が質問してみた結果(再掲)

このZero-Shotプロンプティングでも良い答えが返ってこなかった場合には、以下のFew-Shotプロンプティングを使ってみましょう!

Few-Shotプロンプティング

Few-Shotプロンプティングは、プロンプト内でいくつか例やデモンストレーションを提供して、回答をより求めているものに近づける手法です。実例を見て頂いた方が分かりやすそうですね!

プロンプト

【テーマ】Unityとは
【内容】 Unityとは、C#を用いたプログラミングが可能なゲームエンジンです。また、誰でも無料で使用可能で、ノンコーディングでのアプリ作りも可能です。ご存じのゲームアプリやゲームソフトの多数はUnityによって開発されたものだったりするのです。有名どころでは、「Pokemon GO」や、「どうぶつの森ポケットキャンプ」、「原神」、「FALL GUYS」などもUnityで作成されたゲームです。

【テーマ】Vuforia Engineとは
【内容】Vuforia Engineは、主要な携帯端末、タブレット、アイウェア(ヘッドマウントディスプレイ)をサポートし、AR開発のための最も広く使用されているプラットフォームです。開発者は、Android、iOS、およびUWPアプリに高度なコンピュータビジョン機能を簡単に追加して、オブジェクトや環境とリアルに対話するAR体験を作成することができます。

【テーマ】ChatGPTとBingAIについて
【内容】

出力結果

ChatGPTでは……

BingAIでは……(上は「より厳密に」モード、下は「より創造的に」モード)

この例の場合、Two-Shot(プロンプトに例を二つ提供してる)プロンプティングですね。例は過去に私自身がこの記事で書いたものを引用しました。ChatGPTでは、ちゃんと本文を書いてくれましたね!さらに、ちゃんと事実に基づいた、正しい回答をしてくれています!

BingAIでも、プロンプトの強度(命令として認識されている具合)は少し弱いものの、この出力を元にしたら簡単に3段落分くらいの本文は書けそうです。

これでも私は十分満足ですが、折角他のプロンプトエンジニアリングの手法も説明して頂いているので、実際に試してみることにしましょう!

Chain-of-Thoughtプロンプティング(Zero-Shot COT プロンプティング)

chain-of-thought (CoT)プロンプティングは、推論ステップを介して複雑な推論タスクを実行させます。Few-Shotプロンプティングと組み合わせることで、推論が必要な、より複雑なタスクでより良い回答を求める手法です。

ですが、ブログの記事の推論ステップ(数学や算数で言うところの途中式のようなもの)をいくつも例として上げるのは手間……、楽しようという最初の目的から遠ざかってしまいます。なので、今回は、Zero-Shot COT プロンプティングを利用して出力を試してみます。

Zero-Shot COT プロンプティングとは、Zero-Shotの時点で入力した「ChatGPTとBingAIについてブログを書きたいです」に「ステップバイステップで考えてみましょう」という文言を追加するだけです!

プロンプト

ChatGPTとBingAIについてブログを書きたいです。
本文をステップバイステップで考えてみましょう。

出力結果

ChatGPTでは…

BingAIでは……(上は「より厳密に」モード、下は「より創造的に」モード)

このZero-Shot COT プロンプティングは、単純なタスクに適用されることを想定されている手法のため、文章生成などの”クリエイティブな”タスクには余り向いていなさそうですね。次の手法も試してみましょう。

知識生成プロンプティング

知識生成プロンプティングとは、プロンプトの一部に出力のヒントとなる知識をインプットしてあげることで、より良い回答を求めるプロンプトエンジニアリングの一種です。この手法の元になった論文と、Prompt Engineering Guideの記事をしっかり読み込んだつもりではあるのですが、考え方が誤ってる等お気付きの点があればコメントで教えて頂ければ幸いです。

プロンプト

質問:ChatGPTとBingAIについてブログ記事の本文を書きたいです。
知識1:ChatGPTはプロンプトエンジニアリングの影響を受けやすく、適したプロンプトを利用することで、利用者の求める回答が出力されやすくなっています。
知識2:BingAIは検索処理を行うので、プロンプトの影響を受けにくく、実データに基づいた正確な回答を利用者に提供してくれます。

回答と本文:

出力結果

ChatGPTでは…

BingAIでは……(上は「より厳密に」モード、下は「より創造的に」モード)

BingAIの「より厳密に」モードで出力された回答は「ブログの内容」としては少し不十分感がありますが、「より創造的に」で出力された回答はブログの記事で書く内容のアイデアとしてかなり優秀な出力ではないでしょうか。

そしてChatGPTの出力ですが、これですこれ!私が望んだものはこれです!入力された知識の内容を取り入れつつ、記事内容として十分な精度と読みやすさ!言い回しがちょっとおかしい部分やプロンプト内で知識として入力した文章そのまま繰り返しているところは少し気になりますが、その辺りは筆者の腕の見せ所ですね!

プロンプトの使い方

個人的な主観ですが、

  • Zero-Shotプロンプティング
  • Few-Shotプロンプティング
  • 知識生成プロンプティング
  • Zero-Shot COT プロンプティング
  • Chain-of-Thoughtプロンプティング

の順に試していくのがお勧めします。これは、プロンプトを考える手間を重きを置いて優先度付けをしています。これは、ChatGPTやBingAIの回答時間より、入力するための質問文を考える時間の方が随分長く掛かってしまった私の自戒のメモでもあります……。

まとめ

この記事で紹介したプロンプトエンジニアリングの手法たちは、文章生成のタスクだけではなく、人が書いた文章の添削や評価タスクなどの一般的なタスクや、Prompt Engineering Guideで紹介されているような計算タスクにも勿論、適用可能です。課題解決に困っているという方、試してみようと興味がわいた!という方は一度お試しください!

日々進化していくLLMのモデル、様々なプロンプトを期待しつつ、その他も最新情報や新技術をこれからも追っていきますので、是非これからもてくいの!ブログをたまに覗いていただければ幸いです!

  • このエントリーをはてなブックマークに追加
  • LINEで送る

SNSでもご購読できます。