OpenAI Cookbook examples : GPT : 大規模言語モデルを扱う方法 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/04/2023
* 本ページは、OpenAI Cookbook レポジトリの以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
OpenAI Cookbook : GPT : 大規模言語モデルを扱う方法
大規模言語モデルはどのように動作するか
大規模言語モデル はテキストをテキストにマップする関数です。テキストの入力文字列が与えられたとき、大規模言語モデルは次にくるべきテキストを予測します。
大規模言語モデルのマジックは、膨大な量のテキストに対してこの予測誤差を最小化するように訓練されることで、モデルは最終的にこれらの予測に対して有用なコンセプトを学習できることです。例えば、モデルは以下を学習します :
- 字の綴り方 (how to spell)
- 文法が機能する仕組み
- 言い換えの方法
- 質問への答え方
- 会話の方法
- 多くの言語で書く方法
- コーディングする方法
- 等々
これらの機能は明示的にプログラムで組み込まれたものではありません — それらはすべて訓練の結果として現れます。
GPT-3 は生産性 (向上) アプリ、教育アプリ、ゲーム等を含む、数百のソフトウェア製品 を支援しています。
大規模言語モデルを制御する方法
大規模言語モデルへのすべての入力の中で、圧倒的に最も影響力のあるものはテキストプロンプトです。
大規模言語モデルは幾つかの方法で出力を生成するように prompt できます :
- インストラクション (Instruction) : モデルに貴方が望むものを伝えます。
- 補完 (Completion) : 貴方が望むものの開始部分を補完するようにモデルを誘導します。
- デモ (Demonstration) : 以下のいずれかの方法で、モデルに貴方が望むものを示します :
- プロンプト内の幾つかのサンプル
- 微調整訓練データセットで数百か数千のサンプル
An example of each is shown below.
インストラクション (指示)・プロンプト
インストラクション-following モデル (e.g., text-davinci-003 や text- で始まるモデル) は指示に従うように特に設計されています。プロンプトの最初 (または最後、あるいは両方) に貴方の指示を書くとモデルは指示に従うようにベストを尽くしてから停止します。手順は詳述できますので、貴方が望む出力を明示的に詳述するパラグラフを書くことを恐れる必要はありません。
Example instruction prompt:
Extract the name of the author from the quotation below.
“Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard.”
― Ted Chiang, Exhalation
Output:
Ted Chiang
補完プロンプト例
補完スタイルプロンプトは、大規模言語モデルが次にくる可能性が最も高いと考えるテキストを書こうとする方法を利用します。モデルを操縦する (steer, 導く) には、貴方が見たい出力により補完されるパターンやセンテンスを始めてみてください。直接的な指示と比較して、大規模言語モデルを操縦するこのモードはより注意深くそしてより多くの実験を行なうことができます。更に、モデルはどこで停止するべきか必ずしも知りませんので、望まれる出力を超えて生成されるテキストを切り捨てるために停止シークエンスか後処理が必要な場合が多いでしょう。
Example completion prompt:
“Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard.”
― Ted Chiang, Exhalation
The author of this quote is
Output:
Ted Chiang
デモプロンプト例 (few-shot 学習)
補完スタイルのプロンプトと同様に、デモはモデルに貴方がそれに何を行なうことを望むかを示すことができます。このアプローチは few-shot 学習と呼ばれる場合があります、モデルがプロンプトで提供される幾つかのサンプルから学習するからです。
Example demonstration prompt:
Quote:
“When the reasoning mind is forced to confront the impossible again and again, it has no choice but to adapt.”
― N.K. Jemisin, The Fifth Season
Author: N.K. Jemisin
Quote:
“Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard.”
― Ted Chiang, Exhalation
Author:
Output:
Ted Chiang
微調整済みプロンプトの例
十分な訓練サンプルにより、カスタムモデルを微調整することができます。この場合、指示は不要になります、モデルは提供された訓練データからタスクを学習できるからです。ただし、プロンプトがいつ終わるのか、出力がいつ始まるべきかをモデルに伝えるために、区切り文字シークエンス (e.g., -> か ###、または一般に入力に現れない任意の文字列) を含めることは役立つ可能性があります。区切り文字シークエンスがないと、貴方が見たい答えから始めるのではなく、入力テキストから詳述し続けるリスクがあります。
微調整されたプロンプトの例 (類似したプロンプト-補完ペア上でカスタム訓練されたモデルに対して) :
“Some humans theorize that intelligent species go extinct before they can expand into outer space. If they're correct, then the hush of the night sky is the silence of the graveyard.”
― Ted Chiang, Exhalation
###
Output:
Ted Chiang
コーディング機能
大規模言語モデルはテキストにおいて優れているだけではありません – コーディングにおいてもです。OpenAI の専用コーディングモデルは Codex と呼ばれます。
Codex は 70 以上の製品 を支援しています、以下を含みます :
- GitHub Copilot (VS Code と他の IDE の自動補完)
- Pygma (Figma のデザインをコードに変換します)
- Replit (‘Explain code’ ボタンと他の機能を持ちます)
- Warp (AI コマンド検索を持つスマート端末)
- Machinet (Java ユニットテスト・テンプレートの作成)
インストラクション-following テキストモデル (e.g., text-davinci-002) と違い、Codex は指示に従うようには訓練されていないことに注意してください。その結果、良いプロンプトの設計はより注意を払うことができます。
より多くのプロンプト・アドバイス
より多くのプロンプトのサンプルについては、OpenAI サンプル にアクセスしてください。
一般に、入力プロンプトはモデル出力の改良のために最良の手段です。以下のようなトリックを試すことができます :
- より多くの明確な指示を与える。例えば、出力がカンマ区切りリストであることを望む場合、カンマ区切りリストを返すように要求します。答えを知らないとき “I don’t know” と言わせたい場合、’Say “I don’t know” if you do not know the answer.’ と伝えてください。
- よりよい例を提供する。プロンプトで例を示している場合、貴方の例が多様で高品質であることを確認してください。
- モデルに専門家であるかのように回答することを要求する。モデルに高品質な出力か、専門家により書かれたかのような出力を生成することを明示的に要求すれば、モデルが (専門家が書いたと考えるような) より高い品質の回答を与えるように誘導することができます。例えば、”The following answer is correct, high-quality, and written by an expert.”
- モデルにその推論を説明するステップの系列を書き下すようにプロンプトを与える。例えば、回答の前に “Let’s think step by step.” のようなものを追加します。最終的な回答の前にモデルに推論の説明を促すことで、最終的な答えが一貫していて正しい尤度を高めることができます。
以上