Skip to main content
これはインタラクティブなノートブックです。ローカルで実行することも、以下のリンクを使用することもできます。

前提条件

始める前に、必要なライブラリをインストールして import し、W&B APIキーを取得し、Weaveプロジェクトを初期化してください。

1. Weave でプロンプトを作成し、改善を重ねる

適切なプロンプトエンジニアリングは、モデルがEntitiesを正しく抽出できるようにするうえで重要です。まず、画像データから何を抽出するかと、その出力形式をモデルに指示する基本的なプロンプトを作成します。次に、そのプロンプトを Weave に保存して、トラッキングと改善に活用します。
次に、出力の誤りを減らすため、指示と検証ルールをさらに追加してプロンプトを改善します。

2. データセットを取得する

次に、OCR パイプラインの入力として使用する、手書きメモのデータセットを取得します。 データセット内の画像はすでに base64 でエンコードされているため、前処理なしでそのまま LLM で使用できます。

3. NER パイプラインを構築する

次に、NER パイプラインを構築します。このパイプラインは、次の 2 つの関数で構成されます。
  1. データセット内の PIL 画像を受け取り、VLM に渡せる画像の base64 エンコード済み文字列を返す encode_image 関数
  2. 画像と system prompt を受け取り、system prompt に記述されたとおりにその画像から抽出した Entities を返す extract_named_entities_from_image 関数
次に、named_entity_recognation という関数を作成します。これには次の処理を実装します。
  • 画像データを NER パイプラインに渡す
  • 結果を正しい形式の JSON で返す
W&B UI で関数の実行を自動的にトラッキングおよびトレースするには、@weave.op() decorator デコレータを使用します。 named_entity_recognation を実行するたびに、完全なトレース結果が Weave UI に表示されます。トレースを表示するには、Weave プロジェクトの トレース タブにアクセスします。
最後に、データセットに対してパイプラインを実行し、結果を確認します。 次のコードはデータセットの各項目を順に処理し、その結果をローカルファイル processing_results.json に保存します。結果は Weave UI でも確認できます。
Weave UI のトレース表に、以下のような内容が表示されます。
Screenshot 2025-05-02 at 12.03.00 PM.png

4. Weave を使ってパイプラインを評価する

VLM を使用して NER を実行するパイプラインを作成したので、次は Weave を使ってこれを体系的に評価し、どの程度うまく機能するかを確認できます。Weave の評価について詳しくは、Evaluations Overview を参照してください。 Weave の評価を構成する基本要素の 1 つが Scorers です。Scorers は AI の出力を評価し、評価メトリクスを返すために使用されます。AI の出力を受け取り、それを分析して、結果を dict として返します。Scorers は必要に応じて入力データを参照として使用できるほか、評価に関する説明や推論などの追加情報を出力することもできます。 このセクションでは、パイプラインを評価するために 2 つの Scorers を作成します。
  1. プログラムによる Scorer
  2. LLM-as-a-judge Scorer

プログラムベースのスコアラー

プログラムベースのスコアラー check_for_missing_fields_programatically は、モデルの出力 (named_entity_recognition 関数の出力) を受け取り、結果内で欠けている、または空の keys を特定します。 このチェックは、モデルがいずれかのフィールドを取りこぼしたサンプルを特定するのに非常に役立ちます。

LLM-as-a-judge scorer

評価の次のstepでは、評価結果が実際のNERパフォーマンスを反映するように、画像データとモデルの出力の両方が提供されます。参照されるのはモデルの出力だけでなく、画像の内容そのものです。 このstepで使用されるScorer check_for_missing_fields_with_llm は、LLM (具体的にはOpenAIのgpt-4o) を使用してスコアリングを行います。eval_promptの内容で指定されているとおり、check_for_missing_fields_with_llmBoolean値を出力します。すべてのフィールドが画像内の情報と一致し、フォーマットが正しければ、Scorerはtrueを返します。いずれかのフィールドが欠落している、空である、誤っている、または一致していない場合、結果はfalseとなり、scorerは問題を説明するメッセージも返します。

5. 評価を実行する

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