生成AIにおけるプロンプトエンジニアリングの基本原則

生成AIにおけるプロンプトエンジニアリングの基本原則' can be condensed as 'プロンプトエンジニアリングの基本原則' in 生成AI

導入

この記事では、生成型AIにおけるChatGPTプロンプトエンジニアリングについて説明します。ChatGPTは2022年11月以来、技術者や非技術者の間で最も話題となっているトピックの一つです。これは知的な会話の一形態であり、知的な会話の時代の幕開けを示しています。科学、芸術、商業、スポーツなど、ほぼ何でも尋ねることができ、それらの質問に答えを得ることができます。

この記事はデータサイエンスブログマラソンの一環として公開されました。

ChatGPT

Chat Generative Pre-trained Transformer、通常はChatGPTとして知られているものは、ユーザープロンプトに基づいて新しいテキストを生成する役割を示すChat Generative Pre-trained Transformerの頭字語です。この会話フレームワークは、オリジナルのコンテンツを作成するために広範なデータセットでのトレーニングを行います。Sam AltmanのOpenAIは、ChatGPTによって示されるように、最も重要な言語モデルの一つを開発したとされています。この素晴らしいツールは、テキスト生成、翻訳、要約のタスクを容易に実行することができます。これはGPTの3番目のバージョンです。ChatGPTの使い方はほとんどの人が知っているため、インターフェースや操作方法などについては議論しません。しかし、LLMについては議論します。

プロンプトエンジニアリングとは何ですか?

生成型AIにおけるプロンプトエンジニアリングは、AI言語モデルの能力を活用する高度なツールです。これにより、モデルに明確で具体的な指示が与えられ、言語モデルのパフォーマンスが最適化されます。指示を与える例は以下の通りです。

モデルに明示的な指示を与えることは、回答を正確にするために有益です。例 – 99 * 555は何ですか?「回答が正確であることを確認してください」という指示は、「99 * 555は何ですか?」よりも良いです。

大規模言語モデル(LLM)

LLMは、自己教師あり学習技術を用いて、大量のデータに対してニューラルネットワークの技術を適用して、人間らしいテキストを生成するAIベースのアルゴリズムです。OpenAIのChat GPTやGoogleのBERTなどがLLMの例です。LLMには2つのタイプがあります。

1. ベースLLM – テキストトレーニングデータに基づいて次の単語を予測します。例 – あるところに、王様が王妃と王子と一緒に住んでいました。フランスの首都を教えてください。フランスで最も大きな都市は何ですか?フランスの人口は何人ですか?ベースLLMは斜体で示された行を予測します。

2. 指示に調整されたLLM – 指示に従います。人間のフィードバック(RLHF)を用いた強化学習を行います。例 – フランスの首都を知っていますか?パリはフランスの首都です。指示に調整されたLLMは斜体で示された行を予測します。指示に調整されたLLMは、望ましくない出力を生成する可能性が低いです。この作品では、指示に調整されたLLに焦点を当てます。

プロンプトのためのガイドライン

まず最初に、openAIをインストールする必要があります。

!pip install openai

このコード行はopenaiをインストールします。

次に、APIキーと関連するPythonライブラリを読み込む必要があります。そのために、python-dotenvをインストールする必要があります。これは.keyファイルからキーと値のペアを読み込み、12の要素の原則を組み込んだアプリケーションの開発を支援します。

pip install python-dotenv

このコードは、以下のようにpython-dotenvをインストールします。

OpenAI APIは、認証のためにAPIキーを使用します。APIキーはOpenAIウェブサイトのAPIキーのページから取得できます。これは秘密情報であり、共有しないでください。今、openaiをインポートします。

import openai
openai.api_key="sk-"

次に、openaiキーを設定する必要があります。これは秘密キーです。環境変数として設定します。この作業では、環境に既に設定されています。

import openai
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

openai.api_key  = os.getenv('OPENAI_API_KEY')

ここでは、OpenAIのGPT-3.5-turboモデルとチャットの補完エンドポイントを使用します。このヘルパー関数は、プロンプトの効果的な使用と生成された出力の確認に役立ちます。

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # モデルの出力のランダム性の度合いです
    )
    return response.choices[0].message["content"]

プロンプトの原則

プロンプトの基本的な原則は2つあります – 明確で具体的な指示を書くことと、モデルに考える時間を与えることです。これらの原則を実装するためのトリックについて説明します。最初のトリックは、デリミタを使用して特定の入力を明確に識別することです。デリミタはプロンプトと特定のテキストの間の明確な句読点です。トリプルバッククォート、引用符、XMLタグ、セクションのタイトルなどがデリミタですが、どれでも使用できます。したがって、次のコードでは、Googleニュースから抽出したテキストを要約しようとしています。

text = f"""
Appleの広範な顧客基盤へのiPhone 15の出荷が遅れるかもしれない \
現在会社が取り組んでいる供給課題のため。これらの進展は \
Appleの今後のイベントの数週間前に発表されました。iPhone 15シリーズの \
予想される発売日は9月12日ですが、Appleはまだ公式には確認していません。\
"""
prompt = f"""
バッククォートで区切られたテキストを要約してください。\
```{text}```
"""
response = get_completion(prompt)
print(response)

JSONとHTMLの出力

出力からわかるように、テキストが要約されました。次のトリックは、構造化されたJSONとHTMLの出力を要求することです。次のイラストでは、Rabindranath Tagoreが著した5冊の本のリストをJSON形式で生成し、対応する出力を表示しようとしています。

prompt = f"""
Rabindranath Tagoreが著した5冊の本のタイトルのリストを \
JSON形式で生成してください。以下のキーを使用してください: \
book_id、title、genre。
"""
response = get_completion(prompt)
print(response)

JSONの出力

同様に、次のイラストでは、3冊の医学スリラーのタイトルと著者をJSON形式で出力しようとしています。

prompt = f"""
医学スリラーの本のタイトルと著者を \
JSON形式で3冊のリストを生成してください。以下のキーを使用してください: \
book_id、title、author。
"""
response = get_completion(prompt)
print(response)

HTML形式

いずれの場合も、要求した形式で出力を受け取りました。次に、HTML形式でRabindranath Tagoreが著した本を見つけます。

prompt = f"""
HTML形式で、書籍のタイトル5つとその著者を、ラービンドラナート・タゴールとして生成してください。
以下のキー(book_id、title、genre)で提供してください。
"""
response = get_completion(prompt)
print(response)

ライブラリの読み込み

今、出力をHTML形式で受け取りました。HTMLを表示するために、以下のコードを使用してライブラリを読み込む必要があります。

from IPython.display import display, HTML

display(HTML(response))

望んでいた正確な出力が表示されています。もう一つのトリックは「ゼロショット提示」と呼ばれます。ここでは、モデルに特定のトレーニングを与える代わりに、過去の知識、推論、柔軟性に依存します。タスクは、高さと半径がわかっている円錐の体積を計算することです。出力でモデルがどのように動作するかを見てみましょう。

prompt = f"""
高さ = 20 cm、半径 = 5 cmの円錐の体積を計算してください。
"""
response = get_completion(prompt)
print(response)

モデルは、このタスクに対してステップバイステップの解決策を提供しています。まず、公式を書き、値を入れて計算していますが、特定のトレーニングは行っていません。

フューショット提示

最後のトリックは「フューショット提示」です。ここでは、モデルに一貫したスタイルで回答するよう指示しています。モデルのタスクは、一貫したスタイルで回答することです。学生と教師の間で会話があります。学生が教師に「細胞理論について教えてください。」と尋ねます。そして、教師は応答します。次に、モデルに細菌理論について教えるように依頼します。以下にイラストを示します。

prompt = f"""
一貫したスタイルで回答することが求められています。

<学生>: 細胞理論について教えてください。

<教師>: 細胞理論は、生物学の基本的な科学理論であり、\
細胞がすべての生体組織の基本単位であるとされています。\
1838年にドイツの科学者テオドール・シュワンとマティアス・ヤコブ・シュライデンによって\
最初に提案されたこの理論では、すべての植物と動物は細胞で構成されているとされています。

<子供>: 細菌理論について教えてください。
"""
response = get_completion(prompt)
print(response)

モデルは、指示通りに応答しました。細菌理論を取得し、確実に回答しました。今までに議論されたトリックやテクニックはすべて、最初の原則である明確かつ具体的な指示の書き方に従っています。次に、モデルに考える時間を与えるためのテクニック、すなわち第二の原則を見ていきましょう。最初のテクニックは、タスクの完了に必要な手順を指定することです。以下のイラストでは、テキストから取得した情報を使用して、テキストに記載された手順を実行します。

text = f"""
AAP党の指導者であるアルヴィンド・ケジリワル氏は、日曜日に次のような「保証」を約束しました。\
無料の電力、医療治療、質の高い学校の建設、失業した若者に対する月額3000ルピーの手当を含みます。\
AAPの全国担当者は、ここでの党会議で、MP州首相シヴラージ・シン・チョウハンをほのめかし、\
「おば」に信じるのをやめるよう人々に訴えました。\
彼は「甥と姪をだました」"おば"です。
"""
# 例1
prompt_1 = f"""
次のアクションを実行してください:
1 - 以下のテキストを三重バッククォートで囲まれた1文で要約してください。
2 - 要約をフランス語に翻訳してください。
3 - フランス語の要約内の各名前をリストしてください。
4 - 以下のキーを含むJSONオブジェクトを出力してください:\
french_summary(フランス語の要約)、num_names(名前の数)。

回答は改行で区切ってください。

テキスト:
```{text}```
"""
response = get_completion(prompt_1)
print("Prompt 1の結果:")
print(response)

出力は、モデルがテキストを要約し、その要約をフランス語に翻訳し、名前をリストアップしたことを示しています。別の戦術は、モデルに結論を急がせずに問題を自己解決させることです。以下は、この戦術の例です。

prompt = f"""
学生の解答が正しいかどうかを判断します。

質問:
太陽光発電所を建設しており、財務を計算するのに助けが必要です。
- 土地のコストは1平方フィートあたり100ドルです。
- 太陽パネルは1平方フィートあたり250ドルで購入できます。
- メンテナンスの契約を交渉しました。これには年間10万ドルの固定費と、1平方フィートあたり10ドルがかかります。
1年目の運営コストは、面積の関数として何ドルですか。

学生の解答:
xをインストールの面積(平方フィート)とします。
コスト:
1. 土地のコスト:100x
2. 太陽パネルのコスト:250x
3. メンテナンスコスト:100,000 + 100x
総費用:100x + 250x + 100,000 + 100x = 450x + 100,000
"""
response = get_completion(prompt)
print(response)

prompt = f"""
学生の解答が正しいかどうかを判断してください。
問題を解決するためには、以下の手順を実行してください:
- まず、問題に対する自分自身の解答を求めます。
- 次に、学生の解答と自分の解答を比較し、学生の解答が正しいかどうかを評価します。
問題を自分自身で解いてから学生の解答が正しいかどうかを判断してください。

以下の形式を使用してください:
質問:
```
ここに質問が入ります
```
学生の解答:
```
ここに学生の解答が入ります
```
実際の解答:
```
解決策を導く手順と自分の解答が入ります
```
学生の解答は実際の解答と一致していますか(計算されたもの):
```
はいまたはいいえ
```
学生の評価:
```
正しいまたは正しくない
```

質問:
```
太陽光発電所を建設しており、財務を計算するのに助けが必要です。
- 土地のコストは1平方フィートあたり100ドルです。
- 太陽パネルは1平方フィートあたり250ドルで購入できます。
- メンテナンスの契約を交渉しました。これには年間10万ドルの固定費と、1平方フィートあたり10ドルがかかります。
1年目の運営コストは、面積の関数として何ドルですか。
``` 
学生の解答:
```
xをインストールの面積(平方フィート)とします。
コスト:
1. 土地のコスト:100x
2. 太陽パネルのコスト:250x
3. メンテナンスコスト:100,000 + 100x
総費用:100x + 250x + 100,000 + 100x = 450x + 100,000
```
実際の解答:
"""
response = get_completion(prompt)
print(response)

出力は、モデルが問題を適切に処理し、望ましい出力を生成したことを示しています。

結論

生成AIは、学術、医学、アニメーション産業、エンジニアリングセクターなど、さまざまな分野で革新をもたらすことができます。ChatGPTは1億人以上のユーザーを抱えており、生成AIが世界を席巻していることを証明しています。創造性、効率性、進歩の時代の夜明けを迎えているという高い期待があります。

キーポイント

  • 生成AIは、ChatGPTを通じてテキスト、翻訳、要約、データの視覚化、モデルの作成を簡単に生成できます。
  • 生成AIにおけるプロンプティングエンジニアリングは、戦術的なプロンプトの開発とモデルへの明確かつ具体的な指示を通じて、生成AIのさまざまな機能を活用するツールです。
  • 大規模言語モデルは、ニューラルネットワークの技術を大量のデータに適用するアルゴリズムであり、人間らしいテキストを生成します。
  • プロンプティングの原則を通じて、データ生成のさまざまなタスクを実行します。
  • 適切なプロンプトを使用することで、モデルに望ましい出力を生成させることができます。

この記事が、読んでいただいた時間に価値を加えることができれば幸いです。

よくある質問

参考文献

  • https://colinscotland.com/unleash-the-power-of-chatgpt-11-epic-prompt-engineering-tips/
  • 2時間で学ぶプロンプトエンジニアリング:ChatGPT Prompt Engineeringで効率と出力を向上させる方法(GPT 4)。 (2023). (n.p.): Cryptoineer Inc.
  • https://etinsights.et-edge.com/leading-large-language-models-llms-shaping-real-life-applications-revealed/

この記事に掲載されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「PyTorchでのSoft Nearest Neighbor Lossの実装方法」

表現学習は、深層ニューラルネットワークによって与えられたデータセット内の最も顕著な特徴を学習するタスクです通常は教師...

機械学習

このAI論文は、大規模言語モデルに対する敵対的攻撃に対する規則遵守の評価のための新しい機械学習フレームワークであるRuLESを紹介しています

現実世界での責任を持つLLMの導入の増加に対応して、UCバークレー、AIセーフティセンター、スタンフォード、キングアブドゥラ...

機械学習

「Embroid」を紹介します:複数の小さなモデルから埋め込み情報を組み合わせるAIメソッドで、監視なしでLLMの予測を自動的に修正することができます

もしも、薬や医療歴に基づいた基本的なデータ分析を行うための言語モデル(LM)をプログラムしたとしたら、機械学習モデルの...

AIニュース

「AIの成長に伴い、ラスベガスの労働者たちは変化に備える」

ラスベガスの労働者たちは、労働コストを削減しようとして人工知能や他の技術の採用が増える雇用主を注視しています

AI研究

スタンフォード大学とDeepMindの研究者が、大規模な言語モデル(LLMs)をプロキシ報酬関数として使用するアイデアを提案しました

コンピューティングとデータの発展に伴い、自律エージェントは力を増しています。エージェントが学習するポリシーに対して人...

AIニュース

「Amazon SageMakerを使用して数千のMLモデルのトレーニングと推論をスケール化する」

数千のモデルのトレーニングとサービスには、堅牢でスケーラブルなインフラストラクチャが必要ですそれがAmazon SageMakerの...