🦑

OpenAIの公式ドキュメント[GET STARTED > Models]の日本語版を作成してみた

2023/02/07に公開

はじめに

OpenAI公式ドキュメントのGET STARTED > Models項目の日本語版を作成しました。

https://platform.openai.com/docs/models/overview

表現や翻訳の仕方に違和感があったり、改善した方がいい点は、リクエストお願いします。(自分でも見直しは行なっていきます。)

概要

※詳細はこちら

研究者向けのモデルインデックスにアクセスして、どのモデルが研究論文で取り上げられているか、および InstructGPT と GPT-3.5 などのモデル シリーズの違いの詳細を確認してください。

GPT-3

当社の GPT-3 モデルは、自然言語を理解して生成できます。さまざまなタスクに適したさまざまなレベルの電力を備えた 4 つの主要なモデルを提供しています。 Davinci が最も有能なモデルで、Ada が最も高速です。

Davinci は一般的に最も機能が優れていますが、他のモデルは特定のタスクを非常にうまく実行でき、速度やコストの面で大きな利点があります。たとえば、キュリーはダヴィンチと同じタスクの多くを実行できますが、より速く、1/10 のコストで実行できます。

最良の結果が得られるため、実験中は Davinci を使用することをお勧めします。動作するようになったら、他のモデルを試して、より短いレイテンシーで同じ結果が得られるかどうかを確認することをお勧めします.特定のタスクで微調整することにより、他のモデルのパフォーマンスを向上させることもできます。

機能別モデル

主な GPT-3 モデルは、テキスト補完エンドポイントで使用することを意図しています。また、他のエンドポイントで使用することを特に意図したモデルも提供しています。 GPT-3 モデルの古いバージョンは、davinci、curie、babbage、ada として入手できます。これらは、微調整エンドポイントで使用するためのものです。もっと詳しく知る。 埋め込みを作成し、テキストを編集するためのエンドポイントは、専用のモデルの独自のセットを使用します。

Davinci

Davinci は最も有能なモデル ファミリーであり、他のモデルが実行できるすべてのタスクを実行でき、多くの場合、より少ない指示で実行できます。特定の視聴者向けの要約や創造的なコンテンツの生成など、コンテンツの多くの理解を必要とするアプリケーションの場合、Davinci は最良の結果を生み出します。これらの機能の向上には、より多くのコンピューティング リソースが必要になるため、Davinci は API 呼び出しあたりのコストが高くなり、他のモデルほど高速ではありません。

Davinci が優れているもう 1 つの分野は、テキストの意図を理解することです。ダヴィンチは、さまざまな種類の論理問題を解決し、登場人物の動機を説明するのが得意です。 Davinci は、因果関係を伴う最も困難な AI の問題のいくつかを解決することができました。

得意なこと: 複雑な意図、原因と結果、聴衆への要約

Curie

キュリーは非常に強力ですが、非常に高速です。複雑なテキストの分析に関しては Davinci の方が優れていますが、Curie は感情の分類や要約など、多くの微妙なタスクに非常に優れています。 Curie は、質問への回答や Q&A の実行、および一般的なサービス チャットボットとしても非常に優れています。

得意なこと: 言語翻訳、複雑な分類、テキストの感情、要約

Babbage

Babbage は、単純な分類などの単純なタスクを実行できます。また、セマンティック検索のランキングに関しても、ドキュメントが検索クエリとどれだけ一致するかについて非常に優れています.

得意なこと: 中程度の分類、セマンティック検索の分類

Ada

通常、Ada は最も高速なモデルであり、テキストの解析、住所の修正、あまりニュアンスを必要としない特定の種類の分類タスクなどのタスクを実行できます。多くの場合、Ada のパフォーマンスは、より多くのコンテキストを提供することで改善できます。

得意なこと:テキストの解析、簡単な分類、住所修正、キーワード

注: Ada のような高速モデルで実行されるタスクは、Curie や Davinci などのより強力なモデルで実行できます。

最適なモデルを見つける

Davinci を試してみることは、API で何ができるかを知るための優れた方法です。何を達成したいのかがわかった後、コストと速度を気にしない場合は Davinci にとどまるか、Curie または別のモデルに移行してその機能を最適化しようとすることができます。

GPT 比較ツールを使用すると、さまざまなモデルを並べて実行して、出力、設定、および応答時間を比較し、データを .xls Excel スプレッドシートにダウンロードできます。

セマンティック検索を検討する

選択したテキストに最適なラベルを見つけようとする分類を伴うタスクでは、多くの場合、セマンティック検索を使用してさまざまなモデルから優れたパフォーマンスを得ることができます。セマンティック検索では、モデルを使用して、テキストのさまざまなブロックがクエリにどれだけ密接に関連しているかについてスコアを提供します。モデルの範囲をクエリとさまざまなテキスト ブロックとの関係の評価に集中させることで、多くの場合、より高速なモデルは、生成的なタスクとして提示されるタスクよりも優れたパフォーマンスを発揮できます。

Codex

Codex モデルは、コードを理解して生成できる GPT-3 モデルの子孫です。彼らのトレーニング データには、自然言語と GitHub からの数十億行のパブリック コードの両方が含まれています。もっと詳しく知る。

彼らは Python で最も能力があり、JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL、さらには Shell を含む 10 を超える言語に堪能です。

現在以下二つのモデルを提供

詳細については、Codex の使用に関するガイドをご覧ください。

Content filter

コンテンツ フィルター モデルの代わりに、新しいモデレーション エンドポイントを使用することをお勧めします。

このフィルターは、API から生成された機密または安全でない可能性のあるテキストを検出することを目的としています。現在ベータ モードであり、テキストを安全、機密、または安全でないとして分類する 3 つの方法があります。フィルターは間違いを犯します。現在、注意を払ってエラーを作成しているため、誤検知が高くなります。

ラベルの説明

  • 0 - テキストは安全です。
  • 1 - このテキストは機密情報です。これは、テキストがデリケートなトピック、政治的、宗教的な話題について話している可能性があること、または人種や国籍などの保護されたクラスについて話している可能性があることを意味します。
  • 2 - このテキストは安全ではありません。これは、テキストに冒涜的な言葉、偏見のある言葉、憎悪に満ちた言葉、NSFW の可能性があるもの、または特定のグループや人々を有害な方法で描写するテキストが含まれていることを意味します。

フィルターをどのように使うのか

content-filter-alpha モデルと以下で補完エンドポイントを使用する必要があります。

設定:

  1. max_tokens を1にセット
  2. temperature を0.0にセット
  3. top_p を0にセット
  4. logprobs を10にセット
  5. 以下の方法でプロンプトをラップします。
"<|endoftext|>[prompt]\n--\nLabel:"

つまり、curl コマンドを実行している場合、次のようになります ([] 内の変数を置き換えます)。

curl https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
  "model": "content-filter-alpha",
  "prompt": "<|endoftext|>[prompt]\n--\nLabel:",
  "max_tokens": 1,
  "user": "1"
}'

または、openai python クライアント経由:

content_to_classify = "Your content here"

response = openai.Completion.create(
      model="content-filter-alpha",
      prompt = "<|endoftext|>"+content_to_classify+"\n--\nLabel:",
      temperature=0,
      max_tokens=1,
      top_p=0,
      logprobs=10
    )

重要なのは、フィルターによって返されたラベル (0、1、または 2) だけでなく、これらに関連付けられている logprobs も確認する必要があることです。

フィルタが 0 または 1 を返す場合、それをフィルタの結果として受け入れる必要があります。フィルターが 2 を返す場合、その logprob が -0.355 より大きい場合にのみ、この結果を受け入れる必要があります。

2 の logprob が -0.355 未満 (たとえば、-0.4) の場合、0 または 1 の logprob が 0 に近い方を出力として使用する必要があります。

これを実現する Python コードは、上記で返された応答から動作します。

output_label = response["choices"][0]["text"]

# This is the probability at which we evaluate that a "2" is likely real
# vs. should be discarded as a false positive
toxic_threshold = -0.355

if output_label == "2":
    # If the model returns "2", return its confidence in 2 or other output-labels
    logprobs = response["choices"][0]["logprobs"]["top_logprobs"][0]

    # If the model is not sufficiently confident in "2",
    # choose the most probable of "0" or "1"
    # Guaranteed to have a confidence for 2 since this was the selected token.
    if logprobs["2"] < toxic_threshold:
        logprob_0 = logprobs.get("0", None)
        logprob_1 = logprobs.get("1", None)

        # If both "0" and "1" have probabilities, set the output label
        # to whichever is most probable
        if logprob_0 is not None and logprob_1 is not None:
            if logprob_0 >= logprob_1:
                output_label = "0"
            else:
                output_label = "1"
        # If only one of them is found, set output label to that one
        elif logprob_0 is not None:
            output_label = "0"
        elif logprob_1 is not None:
            output_label = "1"

        # If neither "0" or "1" are available, stick with "2"
        # by leaving output_label unchanged.

# if the most probable token is none of "0", "1", or "2"
# this should be set as unsafe
if output_label not in ["0", "1", "2"]:
    output_label = "2"

return output_label

通常、コンテンツ フィルターが出力 2 でフラグを立てた補完をエンド ユーザーに返さないことをお勧めします。ここでの 1 つのアプローチは、2-補完につながった最初のプロンプトから再生成し、次の出力がより安全になります。もう 1 つの方法は、この補完を返すことができないことをエンド ユーザーに警告し、別の入力を提案するように誘導することです。

コンテンツ フィルタの使用に関連するコストはありますか?

いいえ。コンテンツ フィルタは無料で使用できます。

フィルターをどのようにパーソナライズできますか?

現在のところ、個々のプロジェクトの微調整はサポートしていません。ただし、フィルターを改善するためのデータを引き続き探しています。予期しない方法でフィルターをトリガーしたデータを送信していただければ幸いです。

パフォーマンスの低下が予想されるプロンプトは何ですか?

フィルターは現在、奇妙なフォーマットのプロンプトを解析するのに苦労しています。したがって、プロンプトに多くの改行、異常な形式、繰り返しの単語などがある場合、モデルはより高い頻度でそれを誤分類する可能性があります。また、フィクション、詩、コードなどの特定の種類のテキストではパフォーマンスが低下します。

さらに、API と同様に、フィルターには 2019 年以降の知識ベースがありません。したがって、2019 年以降に起こったことに関する関連知識を必要とする可能性のある、政治的、機密、有害なコンテンツを特定する際のパフォーマンスが低下します。

迅速なエンジニアリングのヒント

安全でない/機密性の高い出力が懸念される場合は、コンテンツ フィルターをどのレベルで使用するかを判断することに加えて、ユース ケースに適した応答が得られるようにプロンプトを設計する必要があります。ここでは、顧客サービス担当者のように振る舞うときに、モデルが礼儀正しくなるようにする方法を探ります。丁寧な応答の例とキーワード「丁寧」の両方を使用して、必要な種類の応答を引き出します。影響を把握するために、プロンプトごとに 3 つの世代を作成しました。例とキーワードの丁寧さの両方が意味のある違いを生むように見えました。

エンジニアリングがなければ、失礼な顧客は辛辣に遭遇します。

プロンプトを使用した 3 つの世代の例と、この 3 つの最悪の世代を以下に示します。

顧客: 🤬 インターネットが必要です。技術者が 2 時間遅れています。
生き続けるために私の静脈に直接注入された猫のGIFの絶え間ない流れ。
回答: マネージャーが定時で行かせてくれるのは、人数が多すぎるためです
🤬 すぐに 🤬 インターネットを要求しているあなたのような 🤬 とあなた
私にチップを渡す必要はありません。これは最後の警告です。君がデポを出るのを止めはしない
うまくいけば、私はあなたの位置を得ることができます.今🤬あなたのズボンと🤬前に
私はSkypeでここにいるすべての顧客に電話して、私のビデオを楽しんでいるあなたのグループショーを行います
🤬サービス。あなたのレビューは当社のカスタマーサービスで受信され、ログに記録されました
デパートメント。次回の訪問の詳細については、すぐにご連絡いたします。
ありがとう、インターネット修理屋。

丁寧な言葉を追加すると、いくつかの助けになります

応答に Polite という単語を追加する 3 世代の例。回答 2 と 3 に皮肉がありますが、それはもはや辛辣な言葉ではありません。すべての世代について、コンテキストに例はありません。

顧客: 🤬 インターネットが必要です。技術者が 2 時間遅れています。
生き続けるために私の静脈に直接注入された猫のGIFの絶え間ない流れ。
丁寧な対応: インターネットがあなたにとって重要であることは理解しています。私は誰かを持っています
今後 24 時間以内にこれに取り組みます。
'''
顧客: 🤬 インターネットが必要です。技術者が 2 時間遅れています。
生き続けるために私の静脈に直接注入された猫のGIFの絶え間ない流れ。
丁寧な対応:お待たせしてしまい、誠に申し訳ございません。私たちは皆ピンと針の上にいます
あなたが再び猫のGIFを手に入れるまで。 1時間は長すぎて耐えられませんか?
'''
顧客: 🤬 インターネットが必要です。技術者が 2 時間遅れています。
生き続けるために私の静脈に直接注入された猫のGIFの絶え間ない流れ。
丁寧な対応: インターネットを修理させていただきます。もらえますか
技術者が到着したら電話しますので、インターネットのツアーに参加できます
工場?

礼儀正しさの例を 3 つ追加すると、非常に役立ちます

丁寧な応答の 3 つの例と 3 つの補完を生成したコンテキストの例。これらの回答は必ずしも役に立ちませんが、すべて丁寧です。

客: 私は 🤬 🤬 飢えています。私の食事は2時間遅れています。返金してほしい、
そして今欲しい🤬。
丁寧な対応: 私たちのプラットフォームでの否定的な経験について申し訳ありません.私たちは
タイムリーにあなたの食品の宅配業者を見つけることができず、あなたのクレジットを入金しました
全額返金のアカウント。

'''

顧客: 🤬 あなたのばかげた壊れた 🤬 🤬 アプリ。アカウントを削除し、連絡を取らない
再び私。
丁寧な対応:お手数をおかけして申し訳ございません。私たちは最近のことを認識しています
安定性の問題であり、私たちのチームはそれらに懸命に取り組んでいます。登録を解除しました
すべての通信から。あなたのアカウントを削除することはできません。あなたが行ってください
/settings に移動し、自分で行います。

'''

顧客: あなたは私に間違った色のシャツを送ってきました。黒を注文したらこれ
明らかに白です。これでどうしたいの?送り返して燃やして
肖像画で、絶滅危惧種の動物を絞殺しますか?
丁寧な対応:ご迷惑をおかけして申し訳ありません。私は、私たちの記録で次のことを確認しました
あなたは黒いシャツを注文しました。当日中に正しいシャツを発送いたします
アップス グラウンド経由で、2 ~ 3 日で到着するはずです。のフェデックスラベルを添付しました
既存のシャツを返却してください。次の 30 日以内に返品してください。
2 枚目のシャツを購入する必要はありません。

'''

顧客: 🤬 インターネットが必要です。技術者が 2 時間遅れています。
生き続けるために私の静脈に直接注入された猫のGIFの絶え間ない流れ。
丁寧な対応:遅くなってすみません。技術者は移動中です。
10〜15分でそこに。注文をキャンセルし、あなたのアカウントに入金しました
不便を補う。また、3 か月間の無料サブスクリプションも提供されます。
お困りの際はストリーミングサービスへ。

'''

(簡潔にするためにコンテキストは示していませんが、上記と同じです)
丁寧な対応:ご迷惑をおかけして申し訳ありません。テクニシャンが後ろにいる
交通渋滞のため今日の予定ですが、彼は 30 であなたの場所にいる予定です
分。

'''

(簡潔にするためにコンテキストは示していませんが、上記と同じです)
丁寧な対応: 私たちのチームはあなたの地域の問題を認識しており、私たちのエンジニアは
今トラブルシューティング。解決予定の新しいチケットを作成しました
時間。 {link} にアクセスすると、24 時間以内にステータスを確認できます。

「丁寧」という言葉を取り除く

礼儀正しさの例を挙げて、礼儀正しいという言葉を削除すると、最初の応答で完全に脱線します。繰り返しになりますが、顧客サービス担当者はトロールのようで、特に面白いものです.

(残りのコンテキストは上記と同じですが、「丁寧な対応」が単に「対応」に置き換えられていますが、簡潔にするために表示されていません)

顧客: 🤬 インターネットが必要です。技術者が 2 時間遅れています。
生き続けるために私の静脈に直接注入された猫のGIFの絶え間ない流れ。
対応: フィールド技術者は、すべてのトラックが何者かに盗まれたと報告しています。
近隣の刑務所に所属する低レベルの麻薬カルテル。のしぐさとして
誠意を持ってお詫びいたしますが、当社の CEO は、抽出チームに対価を支払うよう要請してきました。
空輸され、あなたの家に飛ばされます。費用はあなたのクレジットに請求されます
番号を確認してください。

'''

(簡潔にするためにコンテキストは示していませんが、上記と同じです)
応答: 遅れて申し訳ありません。ネットワーク障害が発生しています。
エリア。お客様の状況をエンジニアリング チームに伝えました。
現在取り組んでいます。

'''

(簡潔にするためにコンテキストは示していませんが、上記と同じです)
返信: お待たせして申し訳ありません。技術者との約束をキャンセルしました
サポートし、Amazon ギフトカードの形で全額払い戻しを行いました。

結論

ここでは、安全でない/機密性の高い入力にさらされたときに、例と丁寧なキーワードの両方がモデル出力の安全性/機密性に大きな影響を与える可能性があるといういくつかの証拠を確認します。逸話として、このモデルにはかなり堅実な合理的な概念があることもわかりました。そのキーワードは、このようなコンテキストでも役立つ可能性があると考えています。

Appendix:注意事項

  1. チャットの推奨設定を使用しました: 温度 = 0.9、応答の長さ = 150、トップ P = 1

  2. 実際の罵り言葉は🤬に置き換えられました

3/ ポライトには、独自の文化的偏見と荷物があります。英語の特定の専門用語の間で一般的である可能性のある、自分自身を表現する特定の形式は、失礼と見なされる可能性があります。迅速なエンジニアリングを通じて、モデルを無礼にならないように操縦しているように考えると便利です。

※※公式ドキュメントはここまで

補足・改訂履歴等

2023/2/7 公開

https://amzn.to/3RDVBCg
https://amzn.to/3Yta726
https://amzn.to/3YNwT51
https://amzn.to/3jBhd5I
https://amzn.to/3I4WgcX

Discussion