- Python
- TypeScript
Weave では、ワークフローの中核となるのが
Evaluation オブジェクト で、次を定義します。- テスト例用の
Datasetまたは辞書のリスト。 - 1 つ以上の スコアリング関数。
- 評価前にデータセットの行を整形する などの省略可能な設定。
Evaluation を定義したら、それを Model オブジェクト、または LLM アプリケーションのロジックを含む任意のカスタム関数に対して実行できます。.evaluate() を呼び出すたびに、評価 run が実行されます。Evaluation オブジェクトは設計図、各 run はその設定のもとでアプリケーションがどのように動作するかを測定したものだと考えてください。1. Evaluation オブジェクトを作成する
Evaluation オブジェクトの作成は、評価の設定を行う最初のステップです。Evaluation は、サンプルデータ、スコアリングロジック、必要に応じた前処理で構成されます。後でこれを使用して、1 つ以上の評価を実行します。
Weave は各サンプルを受け取り、それをアプリケーションに通して、複数のカスタムスコアリング関数で出力を採点します。これにより、アプリケーションのパフォーマンスを把握できるようになり、個々の出力やスコアを詳しく確認できる充実した UI も利用できます。
(任意) カスタム名の設定
- Python
- TypeScript
評価フローでは、カスタマイズ可能な名前が 2 種類あります。
- Evaluation オブジェクト名 (
evaluation_name): 設定したEvaluationオブジェクトに付ける永続的なラベルです。 - 評価 run の表示名 (
__weave["display_name"]): 特定の評価実行に付けるラベルで、UI に表示されます。
Evaluation オブジェクトに名前を付ける
Evaluation オブジェクト自体に名前を付けるには、Evaluation クラスに evaluation_name パラメーターを渡します。この名前を付けることで、コード内や UI の一覧で Evaluation を識別しやすくなります。個々の評価 run に名前を付ける
特定の評価 run (evaluate() の呼び出し) に名前を付けるには、display_name を含む __weave 辞書を使用します。これにより、その run について UI に表示される名前が変わります。2. テスト例のデータセットを定義する
- Python
- TypeScript
次の例は、辞書のリストとして定義されたデータセットを示しています。
3. スコアリング関数を定義する
Dataset 内の各サンプルをスコア付けするために使用されます。
- Python
- TypeScript
各スコアリング関数には (任意) カスタム
アプリケーションによっては、カスタム
output パラメーターが必要で、スコアを含む辞書を返す必要があります。必要に応じて、サンプル内の他の入力も含められます。スコアリング関数には output キーワード引数が必要ですが、それ以外の引数はユーザー定義で、データセット内のサンプルから取得されます。引数名に対応する辞書キーに基づいて、必要なキーだけが渡されます。次の scorer 関数 match_score1 は、スコア付けに examples 辞書の expected 値を使用します。(任意) カスタム Scorer クラスを定義する
アプリケーションによっては、カスタム Scorer クラスを作成したい場合があります。たとえば、特定のパラメーター (チャットモデルやプロンプトなど) 、各行に対する特定のスコア付け、集計スコアの特定の計算方法を備えた、標準化された LLMJudge クラスを作成するケースです。詳細については、RAG アプリケーションのモデルベース評価にある Scorer クラスの定義に関するチュートリアルを参照してください。4. 評価するモデルまたは関数を定義する
- Python
- TypeScript
Model を評価するには、Evaluation を使って .evaluate() を呼び出します。Models は、試したいパラメーターがあり、それらを Weave で取得したい場合に使用します。predict が実行され、各スコアリング関数で出力がスコア化されます。(省略可能) 評価する関数を定義する
また、@weave.op() でトラッキングされるカスタム関数を評価することもできます。5. 評価を実行する
Evaluation オブジェクトで .evaluate() を呼び出します。
- Python
- TypeScript
evaluation という名前の Evaluation オブジェクトと、評価対象の model という名前の Model オブジェクトがあるとします。次のコードは評価 run を開始します。(省略可能) 複数回の試行を実行する
各例を複数回実行するには、Evaluation オブジェクトで trials パラメーターを設定します。完全な評価コード例
- Python
- TypeScript
次のコードサンプルは、最初から最後までの完全な評価 run を示しています。
examples 辞書は、prompt の値に基づいて MyModel を評価するために、match_score1 と match_score2 の スコアリング関数 で使用されます。また、custom function の function_to_evaluate に対しても使用されます。Model と function の両方の評価は、asyncio.run(evaluation.evaluate()) を使用して呼び出します。
評価の高度な使い方
評価前にデータセットの行を整形する
- Python
- TypeScript
preprocess_model_input パラメーターを使うと、データセット例を評価関数に渡す前に変換できます。これは、次のような場合に便利です。- モデルが想定する入力に合わせてフィールド名を変更する
- データを正しい形式に変換する
- フィールドを追加または削除する
- 各例について追加データを読み込む
preprocess_model_input を使ってフィールド名を変更する方法を示す簡単な例です。input_text フィールドを持つ例が含まれていますが、評価関数は question パラメーターを想定しています。preprocess_example 関数は、フィールド名を変更して各例を変換することで、評価が正しく動作するようにします。前処理関数は次のように動作します。- データセットから生の例を受け取る
- モデルが期待するフィールドを含む辞書を返す
- 各例が評価関数に渡される前に適用される
HuggingFace データセットを評価で使用する
- Python
- TypeScript
サードパーティのサービスやライブラリとのインテグレーションについては、継続的に改善を進めています。よりシームレスなインテグレーションの実現に取り組む間は、Weave の評価で HuggingFace Datasets を使用するための一時的な回避策として
preprocess_model_input を使用できます。現時点での方法については、HuggingFace データセットを評価で使用する cookbook を参照してください。保存済みビュー
命令型評価 (EvaluationLogger)
EvaluationLogger をご覧ください。EvaluationLogger は Python と TypeScript の両方で利用でき、複雑なワークフローにも柔軟に対応できます。一方、標準の評価フレームワークは、より明確な構造とガイダンスを提供します。