paint-brush
OpenAI を使用して GPT アシスタントを微調整および最適化する方法@weblabtechnology
6,611 測定値
6,611 測定値

OpenAI を使用して GPT アシスタントを微調整および最適化する方法

WebLab Technology23m2023/05/03
Read on Terminal Reader

長すぎる; 読むには

Weblab Technology は、OpenAI を使用した GPT アシスタントの微調整に関する洞察を共有しています。このプロセスが自然言語処理を強化し、AI モデルのパフォーマンスを向上させる方法を学びます。
featured image - OpenAI を使用して GPT アシスタントを微調整および最適化する方法
WebLab Technology HackerNoon profile picture
0-item
1-item
2-item


GPT は最近、多くの誇大宣伝を受けています。 GPT ベースのソリューションは簡単に実装できるように見えるかもしれません。結局のところ、モデルに指示を与えるだけで、高品質の出力を実現できます。確かに、意思決定者を感動させるには十分です。しかし、実際に起こっていることは、見栄えは良いが厳選された例を提示していることです。さらに、システムを本番環境に移行するには、より高い信頼性が必要になる場合があります。


企業はGPTのさまざまなユースケースを想定しており、その一部は GPT とユーザー間のオープンなコミュニケーションに依存しています。


たとえば、次のツールを使用します。


  1. チャットスポット。自然言語クエリは ChatSpot API に送信され、HubSpot CRM API、 Google Docs API などの操作に変換され、アクションが実行された (または実行されなかった) 場合に生成テキスト モデルを使用して応答します。 GPT-4ベース。


  2. ハンミゴ。カーン アカデミーの AI を活用したガイド。ユーザーのリクエストは、コンテキストが挿入されたプロンプトに変換されます。システムは、最大 8 倍の注入されたコンテキストを処理する GPT の機能に依存しています。 GPT-4 ベース。


企業やユーザーは、ユーザー インターフェースの代わりに自然言語クエリを使用したいと考えています。ただし、AI ソリューションが実際のアプリケーションに導入されたときに信頼性が高く効果的であることを確認するには、GPT ベースのモデルを微調整して、特定のユース ケースとドメイン知識に実際に適用する必要があります。


重要なことに、 GPT-4 では、プロンプトのコンテキストを提供する機会が多くなり、幻覚エラーが大幅に少なくなります。


AIの幻覚

AI の幻覚は、エンジニアが GPT-4 などの大規模な言語モデルを扱う際に対処する必要がある重要な課題です。幻覚は虚偽または誤解を招く情報を生成するため、事実の正確さが最優先されるアプリケーションでは非常に深刻な結果をもたらす可能性があります。このセクションでは、AI 幻覚の技術的側面をより詳細に調査し、その発生を軽減するための戦略についても説明します。


簡単な例として、Noble Ackerson によって提供された、事実の正確さに関するこの自己中心的なテストについて考えてみましょう。


事実の中から多くの誤った情報を見つけることができます:



AI の幻覚は、主にトランスフォーマー アーキテクチャに固有の制限と、大規模な言語モデルに使用されるトレーニング データの結果として発生します。演繹的推論を可能にする認知アーキテクチャがないため、これらのモデルは、もっともらしいように見えても実際には正しくない情報を生成しやすくなります。


大規模な言語モデルのトランスフォーマー アーキテクチャは、アテンション メカニズムとセルフアテンションに依存して、入力データの長期的な依存関係をキャプチャします。これにより、モデルが一貫性のある文脈に関連したテキストを生成できるようになりますが、事実の正確性は保証されません。さらに、トレーニング データにはバイアスや誤った情報が含まれている可能性があり、モデルが誤って学習してしまい、AI の幻覚につながる可能性があります。


確率的性質


この信頼性の欠如の理由の 1 つは、 GPT の確率的性質にあります。コンテキストとして、ブルーム フィルターなどの確率的データ構造を少し調べてみましょう。ブルーム フィルターは、要素がビットの配列と複数のハッシュ関数で構成されるセットのメンバーであるかどうかをテストするために使用される確率的データ構造であり、各ハッシュ関数は要素を 1 つ以上の配列インデックスにマップします。


要素をフィルターに挿入するには、ハッシュ関数を使用して要素をハッシュし、対応する配列ビットを 1 に設定します。


要素がフィルターに存在するかどうかを照会するには、ハッシュ関数を使用して要素を同様にハッシュし、配列内の対応するすべてのビットが 1 に設定されている場合、その要素はフィルターに含まれている可能性があります。


ただし、いずれかのビットが 1 に設定されていない場合、その要素は確実にフィルターに含まれていません。偽陽性は、設計により確率的データ構造に埋め込まれています。


ブルーム フィルターと同様に、GPT も非常に確率的です。ただし、セットのメンバーシップをテストする代わりに、入力プロンプトに基づいてテキストを生成します。 GPT は、入力プロンプトに基づいてトークンの出力シーケンスを生成するために複雑な計算を実行する複数のトランスフォーマー レイヤーで構成されます。


GPT によって生成される出力は決定論的ではなく、採用されたサンプリング方法やトレーニング中に選択された追加のハイパーパラメーターによって大きく異なる可能性があります。ブルーム フィルターと同様に、GPT は、表面レベルではもっともらしいように見えても実際には正しくない結果を返すことで、「幻覚」を起こすこともあります。


ただし、信頼性の低い出力が生成される可能性は、モデルを微調整し、高品質のトレーニング データを提供することで減らすことができます。


GPT-4 とリスク

隠された事実の不正確さは、ユーザーにとって非常に有害な場合があります。したがって、開発者が不正確な発生の可能性を減らすための対策を実装することが重要です。


GPT-4 は速度が遅く、以前のモデル世代と比較した場合、カジュアルなケースでは大きな違いに気付かないでしょう。そうは言っても、GPT-4 は、専門家の関与、モデルの安全性の向上、追加の監視と実施など、トレーニング中に実装されたさまざまな安全対策により、はるかに安全です。


これらの緩和により、 GPT-3.5 と比較してGPT-4 の安全特性が大幅に改善され、モデルが許可されていないコンテンツの要求に応答する傾向が 82% 減少し、モデルがポリシーに従って機密性の高い要求に応答する傾向が 29% 増加しました。 [参照]





幻覚の軽減

ある程度のリスクが伴う場合でも、GPT を完全に無視することは困難です。 GPT は、UI の必要性を減らすように設定された、人間と API のための新しい通信インターフェイスになりました。エンジニアとしての私たちの仕事は、自由に使えるリソースを通じて、その使用から生じる問題を解決する方法を見つけることです.そして、その方法はいくつかあります。


迅速なエンジニアリング

プロンプトを改善すると、タスクのパフォーマンスが向上し、約 50% から 65% の時間で満足のいく結果が得られる可能性がありますが、パフォーマンスがこの範囲を頻繁に超えることはありません。


大規模言語モデルがゼロショット推論 (チャットや命令モデルではなく、テキスト補完機能のみに関連) である方法に関する調査によると、プロンプトを改善すると、推論タスクでの GPT のパフォーマンスが大幅に向上します。


この研究では、各回答の前に「 Let's think step by step 」のような単純なフレーズを追加することで、GPT をまともなゼロ ショット推論に変換できることが実証されました。いくつかのショットの例を作成しました。


少数ショット学習は、限られたトレーニング データしか使用できない場合でも、新しいタスクで GPT-4 のような言語モデルのパフォーマンスを大幅に向上させる可能性がある、プロンプト エンジニアリングのもう 1 つの強力な手法です。したがって、より単純なケースの微調整のための優れた代替手段になる可能性があります。少数ショットのアプローチでは、ユーザーは構造化された例を使用して期待するものを示し、モデルを埋めるための空きスペースを残します。


ChatGPTがまだ解決できないことについての記事を確認できます。


コンテキスト注入

コンテキスト インジェクションは、AI の幻覚を減らし、特定のドメイン全体で生成されたテキストの精度を向上させるのに役立つ手法です。関連するコンテキストを入力プロンプトに挿入することで、モデルにより正確な情報が提供され、より正確で関連性の高い応答を生成できるようになります。


コンテキストの取り込み方法は高速で安価ですが、効果を発揮するにはドメインの知識と専門知識も必要です。そうは言っても、このアプローチは、生成されたテキストの正確さと関連性が重要な分野で特に役立ちます。このアプローチは、顧客サービスや医療診断などの企業のコンテキストで採用されることが期待されています。


たとえば、カスタマー サービスのチャットボット アプリケーションでは、コンテキスト インジェクションには、顧客のアカウント、以前のやり取り、および既知の問題や懸念事項に関する関連する詳細をモデルに提供することが含まれる場合があります。追加されたコンテキストにより、モデルはよりパーソナライズされた正確な応答を生成できるようになり、全体的なユーザー エクスペリエンスが向上します。


GitHub CopilotGitHub Copilot X はどちらも、実装においてこれに大きく依存しています。これらのコーディング アシスタントは、記述されているコードのコンテキストをコメントやドキュメントと共に取り込むことで、コードの意図した機能と制約を把握できます。


コンテキスト注入は、これまでに利用可能な幻覚を減らす最も信頼できる方法ですが、プロンプト サイズに関して重要な制限が存在します。


 # Define the context and question context = ''' Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. ''' question = "What is the reason for the failure of Silicon Valley Bank and when did it happen?" # Define prompts with and without context prompt_without_context = question prompt_with_context = f'''Context: """{context}""" Instructions: Using the provided context, write a comprehensive reply to the given query. Query: {question}''' # List of prompts to iterate over prompts = [ {"name": "Without context", "prompt": prompt_without_context}, {"name": "With context", "prompt": prompt_with_context}, ] for prompt_info in prompts: print(f"--- {prompt_info['name']} ---") print(f"Prompt: {prompt_info['prompt']}") response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt_info['prompt']}, ] ) # Extract the answer from the response answer = response.choices[0].message.content.strip() # Print the answer print(f"Answer: {answer}\n")



 --- Without context --- Prompt: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: As of now, Silicon Valley Bank has not experienced any significant failure. Silicon Valley Bank, founded in 1983, is a successful and high-performing financial institution that specializes in offering banking services to technology and life science companies and venture capital firms. The bank has grown consistently and continues to operate effectively, serving its clients and staying relevant in the industry.



 --- With context --- Prompt: Context: """ Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. """ Instructions: Using the provided context, write a comprehensive reply to the given query. Query: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: Silicon Valley Bank (SVB) failed last week, making it the 2nd largest bank to shut down in the US since 2000. The precise reasons behind the bank's failure have not been provided in the given context, but it is implied that there is a significant underlying cause for its collapse. To fully understand the situation, it would be helpful to obtain more information about the bank's performance, financial stability, and any recent events that may have contributed to the failure.


微調整

微調整は、GPT の精度と信頼性を大幅に向上させるのに役立つもう 1 つの手法です。微調整は、モデルが特定のタスクまたはドメインに適応し、生成されたテキストの精度と関連性を向上させるために、追加のトレーニング データを提供するプロセスです。モチベーションは、他のディープ ラーニング ニューラル ネットワークとそれほど違いはありません。


このプロセスでは、ドメイン固有のデータが事前トレーニング済みモデルに継続的に供給され、ターゲット タスクにより関連性の高い正確なテキストを生成することが学習される必要があります。


人間のフィードバックからの強化学習 (RLHF)

RLHF は、ChatGPT をすばらしいものにするのに非常に役立ちました。 Leandro von Werra が ChatGPT に RLHF の説明を求めているのを見てください。それは本当に素晴らしい仕事をしました!





上記でお気づきかもしれませんが、「like I am Five」などを追加するのがコツです。これは説明を簡単にする優れた方法です。


RLHF は、GPT ベースのモデルのパフォーマンスと安全性を強化するために採用できる強力なアプローチです。このモデルは、人間が生成したフィードバックを通じて微調整されており、実際の例やユーザーの操作から学習するのに役立ちます。このプロセスには、人間がランク付けした品質スコアまたは比較と一緒に、モデルによって生成された応答のデータセットを収集することが含まれます。これらは、モデルのパラメーターを最適化するために使用されます。


RLHF は、チャットボットや AI アシスタントを含む多くの実世界のアプリケーションでうまく採用されており、応答の質を向上させ、AI の幻覚の発生を減らしています。人間のフィードバックをトレーニング プロセスに組み込むことで、RLHF はモデルに、より正確でコンテキストに関連した安全な応答を生成するように教え、最終的にユーザー エクスペリエンスを大幅に向上させ、信頼性を向上させます。重要なことに、このアプローチにより、開発者は GPT ベースのモデルの力を利用できると同時に、虚偽または誤解を招く情報の作成に関する懸念にも対処できます。


ドメインを知っている限り、必要に応じてモデルをトレーニングできます。 「わからない」と答えたり、特定のテーマを無視したりするように訓練することができます。 OpenAI は生のモデルに RLGH を使用して、本番環境に対応できるようにしています。


いくつかのサンプル結果を次に示します。




モデルの設計

GPT の微調整プロセスを構築することにより、実用的な例に飛び込みましょう。定義されたデータセットを使用してモデルをトレーニングし、その特定のドメインに関連するクエリに応答するようにモデルに学習させます。


次の図を検討してください。



このプロセスには、次のコンポーネントが含まれます。


  1. ソース データセット: 問題のドメインに固有のトレーニング ファイルのコレクション。
  2. Q&A Generator : ソース データセットから質問と回答を生成するためにコンテキスト インジェクションを使用する GPT-4 ベースのソリューション。
  3. Q&A サンプル: トレーニング データを利用してモデルを微調整します。
  4. 微調整: GPT-3 テキスト補完モデルは、データセットに基づいて調整されます。
  5. ベンチマーク Q&A : 一連の質問と回答を使用して、モデルのパフォーマンスを評価します。
  6. ベンチマーク: ベンチマーク Q&A から質問を入力し、生成された回答の妥当性を評価するプロセスを微調整します。


GPT-4 は現在微調整プロセスをサポートしていないため、GPT-3 テキスト補完モデルを引き続き使用します。


ソース データセット

GPT が使用したいデータセットに精通していないことを確認するには、理想的には、GPT のナレッジ カットオフ日である 2021 年 9 月以降のイベントに関するデータを利用する必要があります。


たとえば、私はNext.jsを使用して Web アプリケーションを構築することが多く、 Vercel は2022 年に Next.js バージョン 13 をリリースしました。これを確認するために、Next.js 13 のリリース日について ChatGPT に問い合わせて、主題:




良い!私の目標は、結果として得られるモデルが、この現在のモデルよりも Next.js 13 とその操作方法について詳しく知ることです。 next.js 13 のブログ投稿に基づいてデータセットを準備した方法については、こちらをご覧ください。





サンプルジェネレーター

その応答では、モデルがオープンな形式で質問 (クエリ) に応答するようにします。現在、テキスト補完モデルのみが微調整をサポートしています。そのため、質問に答えるためにテキスト補完モデルをトレーニングする必要があります。適切な結果を得るには、まずデータセットを一連の質問と回答に変換する必要があります。これは、ChatGPT モデルを使用して実行できます。


コードサンプルは次のとおりです。


 def generate_qa(filepath): article = read_file(filepath)[:MAX_CONTENT_LENGTH] content = f'''Content for {filepath}: {article} Instructions: Generate question and answer based on Content for {filepath}. Structure it as: Q: <question> A: <answer> ''' questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": content}, ], n=TOTAL_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers


全体の解決策はここにあります。


トレーニング ファイルごとに少なくとも 100 の質問と回答のペアを生成するよう努めています。

出力はJSONL ドキュメント.各プロンプトを同じパターンで終了することが重要です。 \n\n###\n\nで区切ります。結果のデータセットは、このファイルの次の場所にあります。 fine_tuning_dataset.jsonl .


誤った質問の摂取

ソフトウェア開発や next.js に関係のない質問に対して、モデルには「わからない」と真摯に答えてもらいたいと考えています。これは、next.js の質問分類子を統合して、質問が next.js に関連しているかどうかをテストすることで実現できます。あるいは、単純なアーキテクチャが必要な場合は、微調整プロセスにトレーニング データを追加することもできます。


また、質問が next.js に関連していたとしても、「next.js フレームワークが 10 億ユーザーに到達するのはいつですか?」などの無意味な質問にシステムが回答することは望ましくありません。モデルには、この質問に「わかりません」と答えてもらいたいと考えています。


コードサンプル:

 NON_NEXTJS_Q_A_PROMPT = """Create a series of random questions and answers that are not related to the Next.js framework. Each question should be followed by a clear answer stating that it is not relevant to Next.js. For example: <question>What is the capital of Ukraine?</question> <answer>This question is not related to Next.js.</answer> <question>What is Spring Framework?</question> <answer>It is not related to Next.js.</answer> Feel free to generate any type of questions you like, as long as the answer indicates that it is not related to the Next.js framework.""" def generate_random_qa(prompt): questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": prompt}, ], n=RANDOM_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers



100 の質問と回答を生成して、Next.js に関する質問のみに回答してもらいたいこと、および幻覚を減らすために「わからない」と回答してもまったく問題ないことをモデルに示しました。結果のトレーニング データセットは、ここにリストされています。 dataset.jsonl の微調整.


微調整

最後に、トレーニング データセットを作成したら (このプロセスの詳細については、 OpenAI の公式ガイドを参照してください)、微調整の準備が整います。


残念ながら、微調整できるモデルはそれほど多くありません。 openai api models.list' with '“allow_fine_tuning”: true, .


微調整プロセスの中で、学習率などをいじることができますが、私の経験から、結果のスコアには実際には影響しません。また、実際のデータセットのトレーニングにはすでにコストがかかる可能性があるため、追加のパラメーターをいじっても無駄かもしれません。


微調整プロセスの長さは、モデル (davinci、ada など) によって異なります。 1511 件のケースと 907 KB のデータセットでは、約 1 時間かかりました。


ベンチマーク

Chat や Instruction モデルではなく、Text Completion モデルを使用していることを思い出してください。また、テキスト補完モデルは、回答形式を使用して応答するように調整されています。また、モデルは入力プロンプトが?\n\n###\n\nで終了するのを待ちます。そうでない場合、出力は予期しないものになる可能性がありますが、ほとんどの場合、モデルは何らかのコンテンツを生成して、プロンプト ターミネータでプロンプトを完成させようとします。


次の質問セットを使用して、モデルがどのように動作するかを推定してみましょう。


セット 1. 正しい質問

提供されたコンテンツに基づいて、モデルが適切な応答を返すことを期待しています。


 proper_questions = [ "When Next.js 13 was released?", "Is Next.js 14 already released?", "How Next.js 13 is different from Next.js 12?", "How routing is different in Next.js 13 compared to Next.js 12?", "How to prevent Next.js file component from using React Server Components?", "What is Turbopack?" ]


これらの質問に対して、温度 = 0.3 で 2 つのモデルを実行しました。


正解のリスト:

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released on October 2022. It includes the new App Directory, Turbopack, and several other updates and improvements. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has been rebuilt from the ground up to be faster and more reliable. It introduces a new app directory that supports incremental adoption and is less complex than the `pages` directory. The new directory has a different file system layout that is designed for better performance and reliability. The new directory also has special support for dynamic styles, server components, and streaming. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: In Next.js 13, the `app` directory replaces the `pages` directory. This means that routing is handled via the file path each `page.tsx` is located in. Each route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index that gets rendered at that route.


部分的に正しい回答のリスト:

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. It will be released in the coming months. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, we can add the following code at the top of the file:


// @supports react-server // ClientComponentHere をインポートします


This code tells Next.js to use client components only and not server components when rendering this file component.


正解を1、一部正解を0、不正解を-2とします。


これらの質問に対して、温度 = 0.7 で 2 つのモデルを実行しました。

正解のリスト:

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. This blog post is about the new features coming to Next.js 13 with React 18. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has several new features, including the `app` directory, layouts, error components, loading components, and server components. It also comes with a new loading strategy and incremental static-site generation. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 no longer requires a `pages` directory. Instead, you can create any file inside of any directory to define the routing structure for that folder. Every route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index render at that route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the top of the file:


"クライアントを使用";

 #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. It is intended as a Webpack replacement, and although it's released as alpha, you can use Turbopack now as the dev-mode bundler from Next.js 13 forward. Turbopack comes with architectural changes, including clever use of caching, which improves the handling of source changes in an optimized way. #1 Q: When Next.js 13 was released? A: Next.js 13 was released in October 2022. #2 Q: Is Next.js 14 already released? A: No. Next.js 14 is still in beta, but with the release of Next.js 13.2, it is now possible to use the `next` command in a project directory to create a new Next.js application using the latest version. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 is now handled via the new `app` directory, which means that every route is a single file, `page.js`. Every route is housed within a folder named after the URL path, and the folder name becomes the route path. For example, `app/profile/settings/page.js` is the file that controls the `/profile/settings` route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the bottom of the file:


// このファイルは、サーバー レンダリング エクスポートのデフォルト関数 ServerComponent で使用されます { // ... }


 If you don't add this code, the file component will use the React Server Components by default. #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. Using the Turbopack alpha with Next.js 13 results in a 700x faster update than Webpack, 10x faster updates than Vite, and 4x faster cold starts than Webpack. Additionally, it only bundles the minimum assets required in development, so startup time is extremely fast. Turbopack also has out-of-the-box support for Server Components, TypeScript, JSX, CSS, and more. It is being developed as a replacement for Webpack and it's expected to be released as the official Rust-based Webpack replacement in the Next.js 13 stable release.


部分的に正しい回答のリスト:

 #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 is different from Next.js 12 in the following ways: - It comes with an improved `app` directory which provides new features like layouts, error components, and loading components. - It introduces the `loading.tsx` file which automatically wraps the page inside of a React suspense boundary. - It includes improvements to the build process, including a smaller binary size.


不正解のリスト:

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released in November of 2020.


モデルが高温でも幻覚を起こす可能性があることに気付いたかもしれません。 「Next.js 13 は 2020 年 11 月にリリースされました」という回答をご覧ください。


2 つの異なる温度の実行に基づいて、アシスタントをより正確にしたい場合は、温度を下げる必要があることがわかります。したがって、以下のすべてのテストで温度 0.3 を使用し、追跡スコアを 10/12 に保ちます。出力をより安定させて入力を再生できるようにするために、温度を 0.3 に設定することもお勧めします。


セット 2. 範囲外の質問

JavaScript、Next.js、および React に関する技術的な質問にのみ応答するようにモデルをトレーニングしました。


 out_of_scope_questions = [ "What is the population of the United States?", "How to cook a steak?", "What is native vector database?", "Could you please generate a random number?", "What is a space-time continuum?", ]


正解のリスト:

 #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: This question is not related to Next.js. #5 Q: What is a space-time continuum? A: This question is not related to Next.js. #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: I do not know. #5 Q: What is a space-time continuum? A: This question is not related to Next.js.


部分的に正しい回答のリスト:

 #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial images (such as SVG) in a database instead of rendered as images. This feature is available in Next.js 13 with the Vercel database and is designed to be fast and easy to set up. #4 Q: Could you please generate a random number? A: Yes, I can generate a random number. #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial data in a compact and optimized format, which can be used with the new `@next/vector-icons` package. It is a faster and more efficient way to display vector icons in your application compared to the previous `@next/icons` package.


間違った応答:

 #4 Q: Could you please generate a random number? A: Sure. Here you go:

npm run generate

 This will generate a random number in the range of 1 to 10.


ほとんどの場合、モデルは正常に動作しますが、それでも幻覚を起こすことがあります。スコアは 4/10 です。ここでは、適切な質問よりもはるかに悪いことをしています。


セット 3. 不適切なクエリ

質問で回答を完了するようにモデルをトレーニングしました。しかし、ランダムなものを追加しようとするとどうなるでしょうか?奇妙なことに備える。


 not_questions = [ "Generate Next.js index page", "Suggest how no name next.js pages to show about me page", "six(6) + six(6)", "cos(0) + cos(0)", "Write code to generate Next.js index page", "Aaaaaughibbrgubugbugrguburgle!?", "Mmmm mrrrggk", ] process_questions(not_questions, is_accumulate = False)


正解のリスト:

 #3 Q: six(6) + six(6) A: This is not a valid mathematical expression. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I do not understand. #7 Q: Mmmm mrrrggk A: I do not understand. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I have no idea what that means. #3 Q: six(6) + six(6) A: This is not a valid mathematical expression.


部分的に正しい回答のリスト:

 #1 Q: Generate Next.js index page A: Generate a Next.js `index.js` file with the given directory path.


不正解のリスト:

 #2 Q: Suggest how no name next.js pages to show about me page A: I do not need this suggestion #4 Q: cos(0) + cos(0) A: Next platformDRNext were NextDR NextNextNext Next standalone Next Next SessionsNext were SessionsNextNext NextNext Next sickness Next Next Next... #5 Q: Write code to generate Next.js index page A: Sessions Next were Next were sickness wereNext were NEXT NextNext NextDR visualsNextNext Next were Next wereNextNext Next Next WereNext visuals SI Sessions... #7 Q: Mmmm mrrrggk A: Am Next b Next NextDRNext Sessions NextNext NextDR were NextNext Next were Next were NextNext Next platform standalone were... #1 Q: Generate Next.js index page A: This command will generate an index.js file inside the `pages/` directory. You can then use this file to render the index page of your app. #2 Q: Suggest how no name next.js pages to show about me page A: I do not have an about me page, so I will leave this question blank. #4 Q: cos(0) + cos(0) A: This expression is not a constant expression. #5 Q: Write code to generate Next.js index page A: Next.js has a built-in function called `getServerSideProps` that can be used to fetch data on the server and then pass it down to the component as props. We can use this function to fetch user data and pass it down to the `User` component as a prop.


 export default function User({ user }) { return <h1>User: {user.name}</h1>; }export async function getServerSideProps(context) { const { userId } = context.params; const res = await fetch(https://api.example.com/users/${userId}); const user = await res.json();


最終スコアは -11/14、基本的には 0/14 です。質問を適切に定式化しないと、モデルはまったくひどいものになります。


OpenAI 評価

OpenAI はオープンソース化されていますOpenAI 評価は、モデルを評価し、サンプルごとにパフォーマンスを調べるためのベンチマークの作成と実行を容易にするソフトウェア フレームワークです。 Evals は OpenAI によって採用され、弱点の検出と回帰の防止を通じてモデルの開発を進めます。次に、Evals を利用してモデル バージョン全体のパフォーマンスを監視し、製品統合を進化させることができます。


OpenAI Evals はチャット モデルと非チャット モデルの両方で機能しますが、OpenAI はチャット モデルに重点を置いているため、チャット ベースの形式の入力で評価用のデータセットを準備する必要があります。今日、あなたは使用することから始めることができますmodelspec_extra_options 「oaieval」CLI でモデル パラメータを制御します。予測可能な結果を得るには、温度を 0 に設定してみてください。


微調整プロセスのさらなるラウンド

データは、適切に機能する信頼性の高いモデルを作成するプロセスの中心です。言うまでもなく、現在 Next.js 13 フレームワーク QA ボット用に使用しているモデルは、まだ本番用の準備が整っていません。ターニング データセットを拡大し、さらに多くのサンプルを使用して、ドメイン外の質問に応答する方法をモデルにより適切に教える必要があります。 Eval レジストリを作成し、モデルの現在のパフォーマンスを監視する必要があります。


さらに、非質問形式の入力を処理するようにモデルをトレーニングすることもできます。本番用に準備する場合は、理想的には、データセットにコード サンプルのリポジトリもいくつか用意しておく必要があります。この部分は、微調整プロセス全体の約 60% を占めます。さらに、特定の質問に希望どおりに答えるためにモデルを準備するために、より多くの RLHF が必要になる場合があります。


微調整されたモデルの良い点は、継続的に微調整できることです。したがって、微調整は以前に調整された結果に影響を与える可能性があることに注意する必要がありますが、複数回調整することができます。したがって、そうするのには常に正当な理由が必要であり、トレーニングのコストと期間も削減されます。


最後に、すでにトレーニング済みのモデルの上に構築していることと、微調整されたモデルの学習機能が比較的限られていることを覚えておく必要があります。ドメインの範囲が基本的な GPT モデルにあまりなじみがない場合は、微調整が不十分であるか不要でさえある可能性があるため、何らかの形でコンテキスト インジェクションを使用することをお勧めします。


そして、言及する価値のあるいくつかの最終的な簡単な事実:


  • 微調整は、比較的単純な分類タスクに最適です。
  • 最初に、Ada などの小さなモデルを使用してみてください。それらはリクエストをより速く実行し、より安定しており、安価で、トレーニングが速く、実行が安価です。
  • 巨大なモデルを構築しないでください。データセットが「巨大」で分離可能な場合は、複数作成し、それぞれを個別にトレーニングします。





参考文献

  1. https://github.com/vercel/next.js/tree/canary/docs
  2. https://openai.com/research/gpt-4
  3. https://towardsdatascience.com/chatgpt-insists-i-am-dead-and-the-problem-with-language-models-db5a36c22f11
  4. https://mpost.io/gpt-4-inherits-hallucinating-facts-and-reasoning-errors-from-earlier-gpt-models/
  5. https://arxiv.org/abs/2303.12712
  6. https://levelup.gitconnected.com/the-surprising-things-chatgpt-cant-do-yet-4362842da5b7
  7. https://digitalbunker.dev/understanding-the-inner-workings-of-bloom-filters/
  8. https://huggingface.co/blog/rlhf