これはインタラクティブなノートブックです。ローカルで実行することも、以下のリンクを使用することもできます。
事前準備
始める前に、必要なライブラリをインストールしてインポートし、W&B APIキーを取得して、Weave プロジェクトを初期化してください。この手順を完了すると、環境から W&B に認証できるようになり、トレースを Weave プロジェクトにログできるようになります。Weave でプロンプトを作成して改善する
適切なプロンプトエンジニアリングは、モデルがエンティティを正しく抽出できるようにするうえで重要です。このセクションでは、最初のプロンプトを作成し、それを Weave に公開して経時的な変更をトラッキングできるようにしたうえで、より厳格な検証ルールを使って改善します。 まず、画像データから何を抽出し、どのような形式で出力するかをモデルに指示する基本的なプロンプトを作成します。次に、そのプロンプトを Weave に保存し、トラッキングと反復的な改善を行います。データセットを取得する
プロンプトを用意したら、次はパイプラインに渡す入力データが必要です。OCR パイプラインの入力として使用する、手書きのメモのデータセットを取得します。 データセット内の画像はすでにbase64 エンコードされているため、LLM は前処理なしでこのデータを使用できます。
NER パイプラインを構築する
プロンプトとデータセットの準備ができたので、それらを VLM に接続する NER パイプラインを構築します。パイプラインは 2 つの関数で構成されます。- データセット内の PIL 画像を受け取り、VLM に渡せる画像の
base64エンコード済み string 表現を返すencode_image関数。 - 画像とシステムプロンプトを受け取り、システムプロンプトの記述に従って、その画像から抽出した固有表現を返す
extract_named_entities_from_image関数。
named_entity_recognation という関数を作成します。この関数は次の処理を行います。
- 画像データを NER パイプラインに渡します。
- 結果を正しい形式の JSON で返します。
@weave.op() デコレータ を使用します。
named_entity_recognation が実行されるたびに、完全なトレース結果が Weave UI に表示されます。トレースを表示するには、Weave プロジェクトの Traces タブにアクセスします。
processing_results.json に保存します。結果は Weave UI でも確認できます。

Weave を使ってパイプラインを評価する
VLM を使用して NER を実行するパイプラインを作成したので、次は Weave を使ってこれを体系的に評価し、どの程度うまく機能するかを確認できます。パイプラインを評価すると、スポットチェックに頼るのではなく、データセット全体にわたる抽出品質を測定できます。Weave の評価について詳しくは、Evaluations Overview を参照してください。 Weave の評価を構成する基本要素が Scorer です。Scorers は AI の出力を評価し、評価メトリクスを返します。AI の出力を受け取り、それを分析して、結果を dict として返します。Scorers は必要に応じて入力データを参照として使用できるほか、評価に関する説明や推論などの追加情報を出力することもできます。 このセクションでは、パイプラインを評価するために 2 つの scorers を作成します。- プログラムによる scorer。
- LLM-as-a-judge scorer。
プログラムによる Scorer
最初の Scorer は、LLM を使用せずに実行される決定的なチェックです。プログラムによる Scorer であるcheck_for_missing_fields_programatically は、モデルの出力 (named_entity_recognition 関数の出力) を受け取り、結果内で欠落している、または空の keys を特定します。
このチェックは、モデルがいずれのフィールドも抽出できなかったサンプルを特定するのに役立ちます。
LLM-as-a-judge scorer
プログラムによる scorer では、欠落しているフィールドや空のフィールドしか検出できないため、抽出された値が画像に表示されている内容と一致しているかどうかを確認するために、2 つ目の scorer が必要です。この評価ステップでは、評価結果が実際の NER のパフォーマンスを反映するように、画像データとモデルのoutput の両方を提供します。参照されるのはモデルの出力だけでなく、画像の内容そのものです。
このステップで使用する scorer check_for_missing_fields_with_llm は、LLM (具体的には OpenAI の gpt-4o) を使用してスコアリングを行います。eval_prompt の内容で指定されているとおり、check_for_missing_fields_with_llm は Boolean 値を出力します。すべてのフィールドが画像内の情報と一致し、形式も正しい場合、scorer は true を返します。いずれかのフィールドが欠落している、空である、不正確である、または一致していない場合、結果は false となり、scorer は問題を説明するメッセージも返します。
評価を実行する
両方の Scorers を定義したので、評価を実行できるようになりました。渡されたdataset を自動的に反復処理し、結果をまとめて Weave UI にログする評価 call を定義します。
次のコードは評価を開始し、NER パイプラインの各出力に 2 つの Scorers を適用します。結果は Weave UI の Evals タブで確認できます。
