メインコンテンツへスキップ
これはインタラクティブなノートブックです。ローカルで実行することも、以下のリンクを使用することもできます。
このチュートリアルでは、手書きの患者情報の画像に対して固有表現認識 (NER) を行うコンピュータビジョンパイプラインを構築、トレース、評価する方法を説明します。最後には、ビジョン言語モデル (VLM) を利用し、画像から構造化フィールドをどれだけ正確に抽出できるかを測定する W&B Weave 評価 を備えた、実際に動作する光学文字認識 (OCR) パイプラインが完成します。このガイドは、プロンプトを反復的に改善し、マルチモーダル抽出パイプラインの品質を体系的に測定するために Weave を使用したい開発者を対象としています。 以下のセクションでは、5 つの段階を順に説明します。プロンプトの作成と改善、データセットの取得、NER パイプラインの構築、Scorer の定義、そして評価の実行です。

事前準備

始める前に、必要なライブラリをインストールしてインポートし、W&B APIキーを取得して、Weave プロジェクトを初期化してください。この手順を完了すると、環境から W&B に認証できるようになり、トレースを Weave プロジェクトにログできるようになります。

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 で返します。
関数の実行を W&B UI で自動的にトラッキングしてトレースするには、@weave.op() デコレータ を使用します。 named_entity_recognation が実行されるたびに、完全なトレース結果が Weave UI に表示されます。トレースを表示するには、Weave プロジェクトの Traces タブにアクセスします。
最後に、データセットに対してパイプラインを実行し、結果を確認します。このステップでは、次のセクションで評価するモデルの出力が生成されます。 次のコードはデータセットを反復処理し、結果をローカル file processing_results.json に保存します。結果は Weave UI でも確認できます。
Weave UI の Traces 表には、次のように表示されます。
NER パイプラインの実行結果が表示された Weave Traces 表。

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_llmBoolean 値を出力します。すべてのフィールドが画像内の情報と一致し、形式も正しい場合、scorer は true を返します。いずれかのフィールドが欠落している、空である、不正確である、または一致していない場合、結果は false となり、scorer は問題を説明するメッセージも返します。

評価を実行する

両方の Scorers を定義したので、評価を実行できるようになりました。渡された dataset を自動的に反復処理し、結果をまとめて Weave UI にログする評価 call を定義します。 次のコードは評価を開始し、NER パイプラインの各出力に 2 つの Scorers を適用します。結果は Weave UI の Evals タブで確認できます。
前のコードを実行すると、Weave UI の評価表へのリンクが生成されます。リンクを開いて結果を確認し、任意のモデル、プロンプト、データセット間でパイプラインの異なる反復を比較してください。Weave UI は、以下のような可視化をチーム用に自動的に作成します。
データセット全体で Scorer の出力を比較した Weave 評価結果。