メインコンテンツへスキップ
Weave では、Scorer を使用して AI の出力を評価し、評価メトリクスを返します。Scorer は AI の出力を受け取り、それを分析して、結果を辞書形式で返します。必要に応じて入力データを参照情報として使用できるほか、評価の説明や推論などの追加情報を出力することもできます。
Scorer は、評価時に weave.Evaluation オブジェクトに渡されます。Weave には 2 種類の Scorer があります。
  1. 関数ベースの Scorer: @weave.op でデコレートされたシンプルな Python 関数。
  2. クラスベースの Scorer: より複雑な評価向けに weave.Scorer を継承した Python クラス。
Scorer は辞書を返す必要があり、複数のメトリクスやネストされたメトリクスに加えて、LLM 評価器がその推論について返したテキストのような非数値の値も返せます。

独自のスコアラーを作成する

すぐに使えるスコアラー このガイドではカスタムスコアラーの作成方法を紹介しますが、Weave には、すぐに使用できるさまざまな組み込みスコアラーローカル SLM スコアラーも用意されています。たとえば、次のようなものがあります。

関数ベースのスコアラー

これらは、辞書を返す @weave.op デコレーターを付けた関数です。次のようなシンプルな評価に適しています。
評価を実行すると、evaluate_uppercase はテキストがすべて大文字かどうかを確認します。

クラスベースの Scorer

より高度な評価、特に scorer の追加メタデータを保持したい場合、LLM 評価器に対して異なるプロンプトを試したい場合、または複数の関数呼び出しを行いたい場合は、Scorer クラスを使用できます。要件:
  1. weave.Scorer を継承します。
  2. @weave.op でデコレートされた score メソッドを定義します。
  3. score メソッドは辞書を返す必要があります。
例:
このクラスは、要約を元のテキストと比較して、その品質を評価します。

Scorersの仕組み

Scorer のキーワード引数

Scorer は、AI システムの出力とデータセット行の入力データの両方にアクセスできます。
  • Input: “label” 列や “target” 列など、データセット行のデータを Scorer で使いたい場合は、Scorer の定義に label または target のキーワード引数を追加するだけで、そのデータを簡単に Scorer から利用できます。
たとえば、データセット内の “label” という列を使いたい場合、Scorer 関数 (または score クラスメソッド) のパラメーターリストは次のようになります。
weave の Evaluation を実行すると、AI システムの出力が output パラメーターに渡されます。また、Evaluation は追加の Scorer 引数名をデータセット列名に自動的に対応付けようとします。Scorer の引数やデータセット列を調整できない場合は、列マッピングを使用できます。詳しくは以下を参照してください。
  • Output: AI システムの出力にアクセスするには、Scorer 関数のシグネチャに output パラメーターを含めてください。

column_map を使用した列名のマッピング

score メソッドの引数名が、データセット内の列名と一致しないことがあります。その場合は column_map を使って対応できます。クラスベースの Scorer を使用している場合は、Scorer クラスの初期化時に辞書を Scorercolumn_map 属性に渡します。この辞書は、score メソッドの引数名をデータセットの列名に対応付けるもので、形式は {scorer_keyword_argument: dataset_column_name} です。例:
これで、score メソッドの text 引数は news_article データセット列のデータを受け取ります。メモ:
  • 列をマッピングする別の同等の方法として、Scorer をサブクラス化し、score メソッドをオーバーライドして列を明示的にマッピングすることもできます。

スコアリングプロンプトで op の変数にアクセスする

LLM-as-a-judge scorer のスコアリングプロンプトでは、op の変数を参照できます。これらの値は、scorer の実行時に自動的に自動抽出されます。 次のような関数の場合:
以下の変数を利用できます。 スコアリングプロンプトの例:

Scorer の最終集計

評価時には、データセットの各行に対して Scorer が実行されます。評価の最終スコアを出すために、出力の戻り値のタイプに応じて auto_summarize が提供されています。
  • 数値列では平均が計算されます
  • 真偽値列では件数と割合が計算されます
  • その他の列タイプは無視されます
Scorer クラスの summarize method をオーバーライドして、最終スコアを計算する独自の方法を指定できます。summarize function では、次の内容を想定しています。
  • 1つのパラメーター score_rows: これは辞書のリストで、各辞書にはデータセットの1行に対して score method が返したスコアが含まれます。
  • 集計したスコアを含む辞書を返す必要があります。
これが役立つ理由データセットの最終的なスコア値を決める前に、すべての行をスコアリングする必要がある場合に役立ちます。
この例では、デフォルトの auto_summarize は True の件数と割合を返します。
詳しくは、CorrectnessLLMJudge の実装を確認してください。

call に Scorer を適用する

Weave の op に Scorer を適用するには、オペレーションの結果とそのトラッキング情報の両方にアクセスできる .call() メソッドを使用する必要があります。これにより、Scorer の結果を Weave のデータベース内の特定の call に関連付けることができます。 .call() メソッドの使い方の詳細については、Ops の呼び出し ガイドを参照してください。
基本的な例を次に示します。
同じ call に複数の Scorer を適用することもできます。
メモ:
  • Scorer の結果は自動的に Weave のデータベースに保存されます
  • Scorer はメインのオペレーションが完了した後に非同期で実行されます
  • UI で Scorer の結果を確認したり、API 経由でクエリしたりできます
Scorer をガードレールやモニターとして使用する方法について、本番環境でのベストプラクティスや完全な例を含むさらに詳しい情報は、Guardrails and Monitors guide を参照してください。

preprocess_model_input を使用する

preprocess_model_input パラメーターを使用すると、評価中にデータセットの各例がモデルに渡される前に変更できます。 使用方法と例については、評価前に preprocess_model_input を使用してデータセットの行を整形する を参照してください。

スコア分析

このセクションでは、特定の scorer が付けた単一の call、複数の call、またはすべての call のスコアを分析する方法を説明します。

単一のCallのスコアを分析する

単一Call API

単一のCallのcallsを取得するには、get_call methodを使用します。

単一callのUI

callのScoresタブ
個々のcallのスコアは、Call details パネルの「Scores」タブに表示されます。

複数のCallのスコアを分析する

複数のCalls API

複数のcallに対するcallsを取得するには、get_calls method を使用できます。

複数の Calls の UI

複数の Calls タブ
複数の Calls の score は、トレース表の「Scores」列に表示されます。

特定の Scorer がスコア付けしたすべての Calls を分析する

ScorerごとのすべてのCall API

特定のScorerでスコア付けされたすべてのCallを取得するには、get_callsメソッドを使用します。

Scorer ごとのすべての Calls を UI で確認する

最後に、特定の Scorer によってスコア付けされたすべての Calls を確認するには、UI の Scorers タブにアクセスし、“Programmatic Scorer” タブを選択します。Scorer をクリックして、Scorer の詳細ページを開きます。
Scorer の詳細ページ
次に、Scores の下にある View Traces ボタンをクリックして、Scorer によってスコア付けされたすべての Calls を表示します。
Scorer バージョンでフィルターされた Calls
デフォルトでは、選択した Scorer のバージョンが表示されます。バージョンのフィルターを解除すると、Scorer の任意のバージョンによってスコア付けされたすべての Calls を確認できます。
Scorer 名でフィルターされた Calls