OpenAI はついに決意を固めました - ChatGPT API を正式にオープンします!
ChatGPT API アドレス: https://platform.openai.com/docs/guides/chat
gpt-3.5-turbo の新しいモデルである OpenAI は、
公式 ChatGPT API を正式にオープンし、開発者に新たな扉を開きました。
微調整_
公式ドキュメントのアドレス: OpenAI API
ChatGPT のパフォーマンスについては、すでに誰もが彼の素晴らしさを感じていますが、試用後、それをどのように個人向けに、または企業向けにカスタマイズするかについては、その微調整機能について言及する必要があります。
微調整とは、より優れた適応性を達成するために、すでにトレーニングされたモデルに新しいデータを使用して微調整することを指します。自然言語処理の分野では、微調整は主に言語モデルに適用され、通常は事前トレーニングされたモデルに基づいて、特定のタスクの要件を満たすようにモデルを微調整するために一定規模の新しいデータセットを使用します。
例として、プレフィックスが与えられた一貫したテキストを生成できる、事前トレーニングされたテキスト生成モデルがあるとします。ただし、このモデルは、医療質問応答などの特定のビジネス シナリオには適していない可能性があります。現時点では、一定規模の医療質問回答データセットを使用してこのモデルを微調整できるため、医療質問回答シナリオによりよく適応し、実際のニーズにより一致したテキストを生成できます。
微調整の利点は、事前トレーニングされたモデルにはすでに優れた言語モデリング機能があり、すでに多くの言語知識が含まれているため、モデルを最初からトレーニングする必要がないことです。ビジネス データ セットをインポートしてトレーニングするだけです。
微調整ステップ
- トレーニングデータを準備してアップロードする
- 新しい微調整されたモデルをトレーニングする
- 微調整されたモデルを使用する
どのモデルが微調整可能ですか?
現在、微調整は次のベース モデルでのみ利用可能です: davinci curie babbage ada text-davinci-003。
ChatGPT の最新モデルである gpt-3.5-turbo の新モデルが微調整に対応しているかどうかは試していません。
練習を始める
1. python3環境の準備
OpenAI モデルを微調整するには、Python3 環境が必要です。(Mac コンピュータの新規インストールを例に挙げます)
1.1 最初に brew を更新する
brew update
最初の実行では、github ウェアハウスにアクセスできないというメッセージが表示されて実行に失敗したため、再度実行したことに注意してください。
1.2 Python3 のインストール -インストールプロセスは比較的長いことに注意してください。私はインストールに 10 分以上かかりました
brew install python3
-インストールプロセスは比較的長く、インストールに 10 分以上かかったことに注意してください。我慢して
1.3 pip のインストールを続ける
この時点で公式コマンドを実行すると、次のようなエラーが報告されます。
zsh: コマンドが見つかりません: pip
まずダウンロードしてください:
curl https://bootstrap.pypa.io/pip/get-pip.py -o get-pip.py
Python3を使用してインストールします
sudo python3 get-pip.py
インストール後に確認する
pip -V
1.4 パンダをインストールする
この手順も必要です。そうしないと、パンダが見つからないことを示すエラーが後で報告されます。
インストールコマンド:
pip install pandas
このようにして準備作業が完了し、OpenAIの公式ドキュメントをインストールして動作させることができます。
2. OpenAI環境の準備
2.1 インストールツール
pip install --upgrade openai
2.2 独自のコーパスを準備する
ハードディスク上に新しい 1.json ファイルを作成しました。内容は次のとおりです。
{"prompt": "你是谁", "completion": "我是唯一客服小助手"}
{"prompt": "你会做什么", "completion": "我能帮你解答使用唯一客服时的问题"}
2.3 環境変数の設定 - OpenAI の API のキーを設定する必要があります
export OPENAI_API_KEY="自己的key"
2.4 このファイルは OpenAI のツールによってフォーマットされています
openai tools fine_tunes.prepare_data -f 本地的json文件路径
私の例:
openai tools fine_tunes.prepare_data -f /Users/szz/app/1.json
翻訳:
分析中。。。
- ファイル拡張子に従って、テキスト ファイルを提供します。
- ファイルには 3 つのプロンプト補完ペアが含まれています。一般に、少なくとも数百の例を推奨します。例の数が 2 倍になるたびにパフォーマンスが直線的に向上することがわかりました。
「補完」列/キーには空の文字列を含めるべきではありません。[2]
- すべての補完はプレフィックス "{"prompt":"you` で始まります。ほとんどの場合、プレフィックスなしで出力データを補完に追加するだけです。補完は空白文字で始まる必要があります
。 (「」)。これは、使用するトークン化により、より良い結果が得られる傾向があります。詳細については、https://beta.openai.com/docs/guides/fine-tuning/preparing-your-dataset を参照してください
。 分析に基づいて、次のアクションが実行されます。
- [必須] 形式「TXT」が変換されます。 to " JSONL"`
- [必須] 1 行の空白コンプリーターを削除します
- [推奨] すべての補完からプレフィックス "{"prompt":"you` を削除します [Y/n]:
- [推奨] 補完の先頭に空白文字を追加します [ Y/n]:
データは新しい JSONL ファイルに書き込まれます。続行 [Y/n]:
変更したファイルを `/tmp/json_prepared.jsonl` に書き込みます
。見てください。
微調整するときにこのファイルを使用します。
> openai apifine_tunes.create -t "/tmp/jsonprepared.jsonl"
生成されたテキストが予期した場所で終わるように、`stop=[""}"]` を必ず含めてください。
モデルがトレーニングされると、「curie」モデルのトレーニングには約 2.47 分かかりますが、「ada」と「babbage」の場合はさらに短い時間かかります。あなたの前では、各ジョブは約 30 分間キューに並んでいました。
このツールは、指定した json ファイルをフォーマットします。フォーマットされたファイルのサフィックスは jsonl で、ファイルは指定した json ファイルと同じディレクトリに配置されます。
内容は次のとおりです。
{"prompt":"你是谁 ->","completion":" 我是唯一客服小助手\n"}
{"prompt":"你会做什么 ->","completion":" 我能帮你解答使用唯一客服时的问题\n"}
提供した元のファイルとは若干異なることがわかります。
3. OpenAI がトレーニングを開始
3.1 微調整されたモデルの作成
ダ ヴィンチ モデルに基づいて独自のモデルを作成します。トレーニングできるのは少数のモデルのみです。
ada
、、、、babbage
_curie
_davinci
openai api fine_tunes.create -t 数据文件路径 -m 基础模型
私の例:
openai api fine_tunes.create -t /Users/szz/app/1_prepared.jsonl -m davinci
このとき、OpenAI キーが見つからないというエラーが報告される場合がありますが、その場合はエクスポート コマンドを再度実行できます。
エラー:
成功:
現時点では、テキストのサイズに応じて数分または数時間辛抱強く待ってください。公式によると、最大ファイルサイズは 1GB です。
3.2 すべての微調整タスクのリストを作成する
openai api fine_tunes.list
ステータスが pending~training であることがわかります。。。
3.3 微調整タスクのステータスを表示する
ID は上記のリストの ID で、実行されていることがわかります。
openai api fine_tunes.get -i 任务ID
openai api fine_tunes.get -i ft-K2iPDoch4D3Aj2fkGATUKXeM
3.4 トレーニングの完了
タスクが完了すると、fine_tuned_model という単語にモデル名が表示され、ステータスが緑色で成功と表示されます。
このモデルは後で使用することができ、モデル名が表示されます。
3.5 使用モデル
openai api completions.create -m 模型名称 -p 提示
注: トレーニング セットが小さすぎるため、Da Vinci モデルが使用されており、トレーニング済みデータ セットはあまり役に立ちません。ChatGPTに質問したところ、次のような答えが返ってきました。
ChatGPT:
データセットが非常に小さいことが、使いにくい理由の 1 つである可能性があります。微調整のプロセスでは、モデルは元の言語データを特定のタスクの言語表現にマッピングする方法を学習する必要があるため、適切なサイズのデータセットは微調整にとって非常に重要です。データセットが小さい場合、モデルはデータ内で無関係なパターンを検出し、不適切な出力につながる可能性があります。さらに、OpenAI の da Vinci モデルは、一部の不適切なコンテンツを含むあらゆる種類のコンテンツを生成する可能性があります。不適切なコンテンツの生成を減らすには、生成プロセスをより詳細に制御する必要があります。より具体的なコンテキストをジェネレーターに提供したり、生成された結果を制御するためのいくつかの生成戦略を採用したりするなど、いくつかのトリックを使用できます。
最後に、モデルが複雑なタスクや言語データをより適切に処理できるように、より大きなモデルを使用して微調整を試みることができ、それによって生成される結果の品質が向上します。
Q: より具体的なコンテキストをジェネレーターに提供するか、生成結果を制御するために何らかの生成戦略を採用するにはどうすればよいですか?
より具体的なコンテキストを提供するには、生成されるコンテンツに関連する情報である可能性があるより多くの入力テキストをジェネレーターに提供することで実現できます。たとえば、料理に関する段落を生成したい場合、材料、調理器具、方法などに関する情報を提供すると、ジェネレーターが何を生成するかをよりよく理解できるようになります。
ビルド ポリシーを使用してビルドの結果を制御するには、いくつかの方法があります。たとえば、次のような方法があります。
プリセットテンプレート: 事前にいくつかの生成テンプレートを用意し、生成されたコンテンツをこれらのテンプレートに埋め込むことで生成結果を制御します。
ジェネレーターのパラメーターを調整する: 温度、サンプリング方法などのジェネレーターのパラメーターを調整して、生成される結果の多様性と精度を制御します。
生成された結果をフィルタリングする: キーワード抽出、固有表現認識などの自然言語処理技術を使用して、生成された結果をフィルタリングし、要件を満たすコンテンツを保持します。
4. サプリメント
4.1 PlayGroud で独自に作成したモデルを表示してテストする
自分でトレーニングしたモデルがこの場所に表示されます。
4.2 トレーニング費用
モデルのトレーニングには料金がかかり、与えられた 18 米ドルの割り当てから差し引かれますが、データセットがそれほど大きくない限り、差し引かれる金額は非常に少額です。昨日は 0.12 米ドル差し引きました。ただし、金額を差し引くか 3 か月が経過すると、割り当ては空になり、支払いアカウントを設定できるようになり、120 米ドルの割り当てが与えられることに注意してください。