ホームページ >バックエンド開発 >PHPチュートリアル >PHP/Symfony 7 での固有表現認識のための OpenAI Assistant の利用
大規模な言語モデルを現実世界の製品バックエンドに統合することは、イノベーションの最新の戦場です。しかし、すべてのテクノロジートレンドと同様に、真の勝者は、急いですべてを知ろうとする人ではありません。代わりに、立ち止まり、熟考し、賢明な決定を下すことが重要です。
AI がかつてないほど身近になったとはいえ、それを簡単なタスクだと考えるのは大きな間違いです。この分野はまだ初期段階にあり、テクノロジー関係者やビジネス関係者のほぼ全員が、この分野を理解する方法を模索しています。インターネットには、信頼できる情報と誤解を招く誇大宣伝の両方が溢れています。
信じられないかもしれませんが、AI のゴシップを耳にするたびに飛びつく必要はありません。一歩下がって、思慮深く取り組んでください。
あなたが PHP 開発者であるか、PHP コードベースを使って作業している場合、AI は異質な概念のように感じるかもしれません。クラス、インターフェイス、メッセージ キュー、およびフレームワークは、NLP、微調整、確率的勾配降下法、LoRA、RAG、およびその他すべての専門用語とはまったく別のもののように見えます。わかった。これらの概念を体系的に学ぶには、ソフトウェア エンジニアリングの他の分野と同様、時間と適切な実践が必要です。
しかし、AI、機械学習、データサイエンスは Python や R プログラマーの領域ではないでしょうか?あなたは部分的には正しいです。ほとんどの基本的な機械学習は Python で行われます。正直なところ、Python は学ぶのが楽しいです。多用途で、無数の興味深いプロジェクトに適用できます。言語モデルの構築とトレーニングから、API を介したデプロイまで、Python がカバーします。
しかし、PHP に戻りましょう。
心配しないでください。あなたが通常のソフトウェア エンジニアとして時代遅れになるわけではありません。まったく逆です。コンテナ化、CI/CD、システム エンジニアリング、クラウド インフラストラクチャなどの関連分野を理解することがますます求められているため、AI は急速にツールキットのもう 1 つの必須スキルになりつつあります。学習を始めるのに今ほど良い時期はありません。
とはいえ、(本当にそうしたい場合を除き)ゼロからニューラル ネットワークの構築に真っ先に取り組むことはお勧めしません。圧倒されやすいです。その代わりに、AI 実験の実用的な出発点を示しましょう。
このガイドで説明する内容は次のとおりです:
非同期 AI ワークフロー
RabbitMQ、Amazon SQS、またはお好みのブローカーのいずれであっても、メッセージ キューを使用して AI ワークフローを実装する方法を説明します。
実稼働対応ソリューション
AI を使用して基本的なビジネス要件を解決する、実稼働システムに導入されたソリューションの実例をご覧ください
Symfony の統合
このソリューションは、Symfony PHP フレームワーク内に完全に実装されています。
OpenAI ツール
OpenAI PHP ライブラリと最新の OpenAI Assistants 2.0 を使用します。
データセット構造
AI モデルのトレーニングと評価のためのデータセットを構築する方法。
OpenAI モデルの微調整
適切な .jsonl ファイルを準備し、特定のビジネス ユースケースに合わせて GPT-4o-mini モデルまたは GPT ファミリの別のモデルを微調整する方法を学びます。
OpenAI Assistant 2.0 の作成とテスト
OpenAI アシスタントをセットアップし、OpenAI Playground でテストする方法を理解します。
知識ベース
ナレッジ ベースの概念を詳しく見てみましょう。GPT がすべてを知っているわけではない理由と、GPT に適切なコンテキストを提供して精度を大幅に向上させる方法を説明します。
PHP と Symfony の統合
AI エージェントと Symfony アプリケーションをシームレスに接続する方法を学びましょう。
興味がありますか?巻いてみましょう
解決している問題について詳しく見ていきましょう。
その中心となるのは、何か (この場合は住所) を表すテキストのブロックです。目標は、そのコンポーネントを事前定義されたグループに分類することです。
そのため、ユーザーがアドレスを送信すると、アドレスを複数の部分に分割した JSON 構造を返すことを目指しています。例:
{ "street": "Strada Grui", "block": "Bloc 7", "staircase": "Scara A", "apartment": "Apartament 6", "city": "Zărnești" }
なぜこれが重要なのでしょうか?
これらのアドレスは人々、つまり当社の顧客によって入力されるもので、一貫性がないことがよくあります。構造化され解析されたデータが必要な理由は次のとおりです:
これを実現するには、住所を「番地」、「家」、「郵便番号」などの事前定義されたグループに分割し、それを目的のシーケンスに再構成します。
正規表現を使用しないのはなぜですか?
一見すると簡単そうに思えます。新規顧客に対して書式設定を強制する場合、または顧客が通常特定の方法で住所を書くことがわかっている場合は、正規表現が合理的な解決策のように思えるかもしれません。
ただし、ルーマニアの住所の例を考えてみましょう。
STRADA GRUI, BLOC 7, SCARA A, APARTAMENT 6, ZĂRNEŞTI BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124
ルーマニアの住所は複雑なことが多く、特定の順序で書かれておらず、郵便番号などの要素が省略されることがよくあります。最も洗練された正規表現でも、このような変動性を確実に処理するのは困難です。
これは、GPT-3.5 Turbo や GPT-4o-mini のような AI モデルが輝くところです。これらの AI モデルは、正規表現のような静的ルールが処理できる範囲をはるかに超えた不整合や複雑さを管理できます。
はい、私たちは従来のアプローチを大幅に改善した AI ワークフローを開発しています。
すべての機械学習プロジェクトは、データとモデルという 2 つの重要な要素に要約されます。モデルも重要ですが、データの方がはるかに重要です。
モデルは事前にパッケージ化され、テスト済みで提供され、どちらのパフォーマンスが優れているかを確認するために交換できます。しかし、真の変革をもたらすのは、モデルに提供するデータの品質です。
機械学習におけるデータの役割
通常、データセットは 2 つまたは 3 つの部分に分割されます。
このプロジェクトでは、住所をそのコンポーネントに分割し、これを分類タスクにしたいと考えています。 GPT のような大規模言語モデル (LLM) で良好な結果を得るためには、トレーニング データセットに少なくとも 100 個の例が必要です。
データセットの生の形式はあまり重要ではありませんが、直感的で使いやすい構造を選択しました。
{ "street": "Strada Grui", "block": "Bloc 7", "staircase": "Scara A", "apartment": "Apartament 6", "city": "Zărnești" }
これが例です:
STRADA GRUI, BLOC 7, SCARA A, APARTAMENT 6, ZĂRNEŞTI BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124
ご覧のとおり、目標は、入力アドレスに基づいて構造化された JSON 応答を生成することです。
まず、OpenAI API アカウントが必要です。これは簡単なプロセスなので、初期資金を追加することをお勧めします。始めるには 10 ドルか 20 ドルで十分です。 OpenAI は便利な前払いサブスクリプション モデルを使用しているため、支出を完全にコントロールできます。
ここでアカウントの請求を管理できます:
OpenAI プレイグラウンドを探索する
アカウントを設定したら、OpenAI Playground に移動します。
インターフェースについてよく理解してください。準備ができたら、左側のメニューで「アシスタント」セクションを探してください。
ここでカスタム GPT インスタンスを作成します。
GPT アシスタントのカスタマイズ
GPT アシスタントは、次の 2 段階で特定のニーズに合わせて調整されます。
例を含む詳細なシステム手順
このステップは、ソリューションが機能するかどうかを迅速にテストして検証するのに役立ちます。これが結果を確認する最も早い方法です。
ナレッジベースによる微調整 (単純な RAG)
最初の結果に満足したら、モデルを微調整します。このプロセスにより、すべてのプロンプトで広範な例を提供する必要性が減り、その結果、推論時間 (モデルが API 経由で応答するまでにかかる時間) が短縮されます。
両方の手順を組み合わせると、最も正確で効率的な結果が得られます。
それでは、始めましょう。
固有表現認識システムでは、構造化された JSON 応答を一貫して出力するモデルが必要です。これを達成するには、思慮深いシステム プロンプトを作成することが重要です。
ここで焦点を当てます:
「少数ショット」テクニックは、このタスクに対する強力なアプローチです。これは、モデルに必要な入出力関係の例をいくつか提供することで機能します。これらの例から、モデルはこれまでに見たことのない入力を一般化して処理できることがわかります。
数ショット プロンプトの重要な要素:
プロンプトはいくつかの部分で構成されており、最良の結果を得るには慎重に構成する必要があります。正確な順序は異なる場合がありますが、次のセクションを含めることが必須です。
プロンプトの最初の部分では、モデルが達成することが期待される内容の概要が示されています。
たとえば、この使用例では、入力はルーマニアの住所であり、スペルミスや間違った形式が含まれている可能性があります。このコンテキストは、モデルの準備を整え、モデルが処理するデータの種類を説明するため、不可欠です。
タスクを定義した後、その出力のフォーマット方法を AI に指示します。
ここでは、モデルが入力から各キーと値のペアをどのように導出するかを含め、JSON 構造について詳しく説明します。期待を明確にするために例が含まれています。さらに、有効な JSON を保証するために、特殊文字はすべて適切にエスケープされます。
例は「少数ショット」テクニックのバックボーンです。より関連性の高い例を提供するほど、モデルのパフォーマンスが向上します。
GPT の広範なコンテキスト ウィンドウ (最大 16,000 トークン) のおかげで、多数の例を含めることができます。
サンプル セットを構築するには:
基本的なプロンプトから開始し、モデルの出力を手動で評価します。
出力にエラーが含まれている場合は、それらを修正し、修正バージョンをサンプル セットに追加します。
この反復プロセスにより、時間の経過とともにアシスタントのパフォーマンスが向上します。
それは避けられません。アシスタントが間違いを犯すことは避けられません。場合によっては、同じエラーが繰り返し発生する可能性があります。
これに対処するには、プロンプトに明確かつ丁寧な修正情報を含めてください。明確に説明してください:
アシスタントが犯している間違い。
代わりに出力から期待されるもの。
このフィードバックは、モデルの動作を調整し、より良い結果を生成するのに役立ちます。
概念実証のための数ショット ソリューションの最初のプロンプトを作成したので、次はアシスタントを構成してテストします。
ステップ1
ステップ 2: アシスタントを設定する
ステップ 3: 適切なモデルを選択します
このプロジェクトでは、次の理由から GPT-4o-mini を選択しました:
とはいえ、常に精度とコストのバランスに基づいてモデルを選択する必要があります。ベンチマークを実行または検索して、特定のタスクに最適なものを判断します。
初期設定が完了したら、アシスタント クリエーターで出力スキーマを直接指定できるようになります。
ステップ 1: 「生成」オプションを使用する
スキーマを手動で作成する代わりに、アシスタント作成者が提供する「生成」オプションを使用しました。その方法は次のとおりです:
このツールは、構造に一致するスキーマを自動的に生成するという優れた機能を果たします。
--
一貫性のある予測可能な応答を確保するには、温度をできるだけ低く設定します。
温度とは何ですか?
温度はモデルの応答のランダム性を制御します。温度値が低いということは、モデルがより予測可能で決定的な出力を生成することを意味します。
私たちのユースケースでは、これがまさに私たちが望んでいることです。入力として同じアドレスが与えられた場合、モデルは常に同じ正しい応答を返す必要があります。信頼性の高い結果を得るには、一貫性が重要です。
すべてのパラメータを設定したら、プレイグラウンドに移動してソリューションをテストします。
プレイグラウンドは、アシスタントを操作できるコンソールを提供します。ここからが楽しいところです。最低限のソリューションを厳密にテストして、次のことを明らかにできます。
これらの結果は、プロンプトの 修正情報 セクションを改良し、アシスタントをより堅牢にするのに役立ちます。
以下は、私の手動テストの結果の例です。
{ "street": "Strada Grui", "block": "Bloc 7", "staircase": "Scara A", "apartment": "Apartament 6", "city": "Zărnești" }
手動テストが重要な理由
昔ながらの実践的なテストは、信頼できるソリューションを構築するための基礎です。モデルの出力を手動で評価すると、問題をすぐに特定し、その修正方法を理解できます。自動化は後から行われますが、手動テストは、確実な概念実証を作成する上で非常に貴重なステップです。
今度は、すべてを PHP Symfony アプリケーションに統合します。セットアップは簡単で、古典的な非同期アーキテクチャに従っています。
フローの内訳は次のとおりです:
1.フロントエンド対話
一般に、ここで説明するのは、メッセージ キューを使用した古典的な非同期セットアップです。 Docker コンテナ内で Symfony アプリケーションの 2 つのインスタンスが実行されています。 1 つ目は、フロントエンド クライアントとの対話です。
たとえば、顧客が次のように入力した場合:
STRADA GRUI, BLOC 7, SCARA A, APARTAMENT 6, ZĂRNEŞTI BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124
アプリケーションは入力アドレスを処理し、それを Message オブジェクトにパッケージ化します。
次に、Message オブジェクトは Symfony Messenger Envelope インスタンスにラップされます。メッセージは、処理用の追加メタデータとともに JSON 形式にシリアル化されます。
Symfony Messenger は、非同期タスクの処理に最適です。これにより、OpenAI API の呼び出しなど、時間のかかる操作をバックグラウンド プロセスにオフロードできます。
このアプローチにより、次のことが保証されます。
以下は私たちのシステムで使用されるメッセージ クラスです:
{ "street": "Strada Grui", "block": "Bloc 7", "staircase": "Scara A", "apartment": "Apartament 6", "city": "Zărnești" }
アプリケーションは、amqp PHP 拡張機能を使用して RabbitMQ インスタンスに接続します。これを設定するには、messenger.yaml 構成ファイルでトランスポートとメッセージ バインディングを定義する必要があります。
詳細なガイダンスについては、Symfony Messenger の公式ドキュメントを参照してください。
Symfony Messenger トランスポート構成
ドキュメント: https://symfony.com/doc/current/messenger.html#transport-configuration
メッセージがブローカー (RabbitMQ、AmazonMQ、または AWS SQS など) にプッシュされると、アプリケーションの 2 番目のインスタンスによって取得されます。このインスタンスは、アーキテクチャ スキーマで 3 とマークされているように、メッセンジャー デーモンを実行してメッセージを消費します。
消費プロセスは以下を実行することで処理されます:
bin/コンソールメッセンジャー:consume
はプロセスとして動作しています。
デーモンは、構成されたキューからメッセージを取得し、対応するメッセージ クラスに逆シリアル化して、処理のためにメッセージ ハンドラーに転送します。
OpenAI アシスタントとの対話が行われる メッセージ ハンドラー は次のとおりです。
STRADA GRUI, BLOC 7, SCARA A, APARTAMENT 6, ZĂRNEŞTI BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124
ハンドラーの重要なポイント
ロギング
トレーサビリティとデバッグのために処理の開始をログに記録します。
正規化サービス
OpenAIAddressNormalizationService は、アシスタント経由で入力アドレスを処理するために呼び出されます。
永続性
正規化されたアドレスは、Doctrine の EntityManager を使用してデータベースに保存されます。
メッセージ ハンドラーは標準の Symfony コードのように見えるかもしれませんが、コアは次の行にあります。
INPUT: <what goes into the LLM> OUTPUT: <what the LLM should produce>
このサービスは、指定された PHP ライブラリを介して OpenAI と対話する役割を果たします。
OpenAI PHP クライアント
PHP クライアントを使用してサービスの実装を見てみましょう。
OpenAIAddressNormalizationService の完全な実装は次のとおりです。
input: STRADA EREMIA GRIGORESCU, NR.11 BL.45B,SC.B NR 11/38, 107065 PLOIESTI output: {{"street": "Eremia Grigorescu", "house_number": "11", "flat_number": "38", "block": "45B", "staircase": "45B", floor: "", "apartment": "", "landmark": "", "postcode": "107065", "county": "Prahova", 'commune': '', 'village': '', "city" "Ploiesti"}}
openai-php/client ライブラリを使用して推論 (または完了) (基本的に GPT からの応答) を取得するワークフローは、次の 3 つの主要な段階に従います。
最初のステップは、OpenAI クライアントをセットアップし、構成されたアシスタントを取得することです:
INPUT: BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124 OUTPUT: { "street": "Bdul 21 Decembrie 1989", "house": "93", "flat": "50", "block": "", "staircase": "", "floor": "", "apartment": "", "landmark": "", "intercom": "", "postcode": "400124", "county": "Cluj", "commune": "", "village": "", "city": "Cluj" }
クライアントの初期化: OpenAI::client() メソッドは、API キーと組織 ID を使用して新しいクライアントを作成します。
アシスタントの取得:retrieve() メソッドは、一意の ID で識別される、タスク用に構成された特定のアシスタント インスタンスに接続します。
クライアントとアシスタントが初期化されたら、スレッドを作成して実行して対話を開始できます。スレッドは通信パイプラインとして機能し、ユーザーとアシスタント間のメッセージの交換を処理します。
スレッドの開始方法は次のとおりです:
{ "street": "Strada Grui", "block": "Bloc 7", "staircase": "Scara A", "apartment": "Apartament 6", "city": "Zărnești" }
スレッドを開始した後、アプリケーションは応答を処理します。 OpenAI プロセスは即座に完了しない可能性があるため、「完了」とマークされるまでスレッドのステータスをポーリングする必要があります:
STRADA GRUI, BLOC 7, SCARA A, APARTAMENT 6, ZĂRNEŞTI BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124
ポーリング: アプリケーションはスレッドのステータス (キューに入れられているか、進行中) を繰り返しチェックします。ステータスが「完了」に変わると、スレッドには最終出力が含まれます。
スレッドが完了すると、アプリケーションは応答メッセージを取得して正規化されたアドレスを抽出します。
INPUT: <what goes into the LLM> OUTPUT: <what the LLM should produce>
正規化されたアドレスをフロントエンド クライアントに返してすぐに使用したり、後で処理するために CustomerAddressNormalized などの構造化エンティティとしてデータベースに保存したりできるようになりました。
このセットアップを実行すると、固有表現認識やその他の分類または生成タスクのために OpenAI から構造化された出力を抽出して保存できるようになります。
場合によっては、基本的な AI ソリューションでは十分ではありません。法規制へのコンプライアンスやビジネス要件で高い精度が求められる場合、出力が事実に基づいていて信頼できるものであることを確認するために、さらに努力する必要があります。
たとえば、JSON 構造を生成するときは、その内容が現実と一致していることを保証する必要があります。一般的なリスクは、提供された郵便番号に基づいて場所を発明するなど、モデルが幻覚情報を提供することです。これは、特に一か八かの環境において、深刻な問題を引き起こす可能性があります。
ナレッジベースによるグラウンドトゥルース
幻覚を排除し、事実の正確性を確保するには、アシスタントに真実の知識ベースを提供する必要があります。これはモデルの最終的な参照として機能し、推論中に正確な情報が確実に使用されるようにします。
私のアプローチ: 郵便番号の知識ベース
ルーマニアのすべての郵便番号の完全な境界を含む、単純な (ただし非常に大きい、約 12 MB) JSON ファイルを作成しました。この辞書のような構造は以下を提供します:
郵便番号: 入力値。
検証済みの情報: 対応する都市、郡、全体的な地名などの事実。
この知識ベースは、固有表現認識を実行する際のアシスタントの参照ポイントとして機能します。
ナレッジベースの構造
ナレッジ ベースの JSON 構造のスニペットの例を次に示します。
{ "street": "Strada Grui", "block": "Bloc 7", "staircase": "Scara A", "apartment": "Apartament 6", "city": "Zărnești" }
ナレッジ ベースの準備ができたら、それを効果的に使用するようにアシスタントに指示します。これをプロンプトに直接埋め込むこともできますが、このアプローチではトークンの使用量とコストが増加します。これは、微調整を導入する絶好の機会となります。
微調整には、事前トレーニングされたモデルの最外層 (特に重み行列) を変更し、特定のタスクに適応させることが含まれます。私たちの場合、固有表現認識 (NER) が最適な候補です。
微調整されたモデル:
主な目標は、モデルが処理する現実世界のデータのニュアンスとより密接に一致するようにすることです。ドメイン固有のデータをトレーニングすると、モデルの理解と適切な応答の生成が向上します。また、アプリケーションによる後処理やエラー修正の必要性も軽減されます。
モデルを微調整するには、OpenAI で必要とされる .jsonl (JSON Lines) 形式で適切にフォーマットされたデータセットが必要です。データセット内の各エントリには以下が含まれます:
このデータセットは、アシスタントにドメイン固有の例を提供し、将来同様のプロンプトに応答する方法を学習できるようにします。
微調整エントリを構成する方法の例を次に示します。
STRADA GRUI, BLOC 7, SCARA A, APARTAMENT 6, ZĂRNEŞTI BD. 21 DECEMBRIE 1989 nr. 93 ap. 50, CLUJ, 400124
ルーマニアの住所処理のケースを例として、.jsonl ファイル内の微調整エントリの構造を分析してみましょう。
各エントリは、ユーザーとアシスタントの間の実際の対話をシミュレートするように設計されており、以下をカプセル化します。
このアプローチは、モデルが現実世界のコンテキストで望ましい動作を学習するのに役立ちます。
1.システム役割メッセージ
アシスタントの機能とその機能の範囲について説明し、通り名、番地、郵便番号など、認識および抽出する必要があるエンティティの種類についての期待値を設定します。
例: システムは、アシスタントがルーマニアの住所の固有表現認識モデルとして機能するように設計されていることを説明し、抽出して分類する必要があるコンポーネントを詳しく説明します。
2.ユーザー役割メッセージ
3.アシスタントの役割メッセージ
トレーニング ファイルを作成したら、次のステップは検証ファイルを準備することです。このファイルは、実際のデータに対する微調整されたアシスタントの精度を評価します。構造はトレーニング ファイルに似ているため、両方のファイルの作成をより簡単に自動化できます。
検証ファイルは、モデルの一般化機能をテストするように設計されています。これにより、不慣れな例や困難な例に直面した場合でも、微調整されたアシスタントが新しい入力を処理し、一貫して実行できることが保証されます。
システムメッセージ:
トレーニング プロセスとの一貫性を維持するには、システム メッセージはトレーニング ファイルで使用されるものと同一である必要があります。
ユーザーメッセージ:
トレーニング ファイルに含まれていなかった新しい入力 (住所など) を導入します。新しい例は、現実的かつドメイン固有であると同時に、軽微なエラーや複雑さを含めてモデルに挑戦する必要があります。
アシスタントメッセージ:
新しいユーザー入力に対して期待される構造化された応答を提供します。
これは、モデルの精度を検証するためのゴールドスタンダードとして機能します。
トレーニング ファイルと検証ファイルの両方の作成を効率化するために、自動スクリプトを使用できます。これらのスクリプトは、入力データセットに基づいて適切にフォーマットされた .jsonl ファイルを生成します。
スクリプトを含むリポジトリにアクセスして、トレーニング ファイルと検証ファイルを生成します。
自動 .jsonl 生成スクリプト
これは、微調整自動化の Python バージョンです。 PHP バージョンは近日公開予定です。
検証が重要な理由
必要に応じて、OpenAI のグラフィカル ユーザー インターフェイス (GUI) を使用してアシスタントを手動で微調整できます。トレーニング ファイルと検証ファイルの両方を準備したら、次の手順に従って開始します。
ステップ 1: 微調整ウィザードにアクセスします
ステップ 2: 微調整を構成する
微調整メニューで、次の設定を更新します:
ステップ 3: 微調整プロセスを監視する
微調整プロセスが開始されると、微調整ダッシュボードで進行状況を追跡できます。
ダッシュボードはリアルタイムの更新を提供し、トレーニング プロセスの監視と評価に役立ついくつかの指標を表示します。
理解すべき主要な指標
トレーニング損失 モデルがトレーニング データにどの程度適合しているかを測定します。トレーニング損失が低いということは、モデルがデータセット内のパターンを効果的に学習していることを示します。
完全な検証損失 検証データセットからの未確認データのパフォーマンスを示します。検証損失が低いということは、モデルが新しい入力に対して適切に一般化されることを示唆しています。
ステップと時間 トレーニング ステップは、データのバッチに基づいてモデルの重みが更新される反復回数です。
タイムスタンプは各ステップがいつ処理されたかを示し、トレーニングの期間と評価間の間隔を監視するのに役立ちます。
メトリクスの解釈
以下のメトリクスを監視すると、微調整プロセスが正しく収束しているか、調整が必要かどうかを判断するのに役立ちます。
アンダーフィッティング: 両方の損失が高いままの場合に発生し、モデルが効果的に学習していないことを示します。
アシスタントのトレーニングと微調整が完了したら、アシスタントをアプリケーションに統合し、パフォーマンスの評価を開始します。
シンプルに始めましょう。
アシスタント プレイグラウンドまたはアプリケーション内で直接手動テストを開始します。この段階では評価が複雑になりすぎないようにしてください。基本が期待どおりに動作することを確認することに重点を置きます。
たとえば、次に示すように、Google スプレッドシートのような単純なツールを使用して、入力と出力を手動で比較できます。
これが最初のステップです。
AI および ML ソリューションでは、パフォーマンスの一貫性を確保するために継続的な評価が必要です。固有表現認識などのタスクの場合、Visual Studio Code の PromptFlow 拡張機能などの自動ツールは、テストと検証の合理化に役立ちます。
参考文献
OpenAI 微調整ドキュメント
Symfony メッセンジャーのドキュメント
OpenAI PHP クライアント ライブラリ
VS Code の PromptFlow 拡張機能
ありがとうございます!
このガイドをお読みいただきありがとうございます。 AI を活用したソリューションを構築し、微調整するための強固な基盤が得られることを願っています。ご質問やご提案がございましたら、お気軽にお問い合わせいただくか、コメントを残してください。
コーディングを楽しんで、AI プロジェクトの成功を祈ってください! ?
以上がPHP/Symfony 7 での固有表現認識のための OpenAI Assistant の利用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。