> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# HuggingFace データセットを使用した評価

> W&B Weave で HuggingFace データセットを使用した評価の使い方を学びます

<Note>
  これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクから利用できます。

  * [Google Colab で開く](https://colab.research.google.com/github/wandb/docs/blob/main/weave/cookbooks/source/hf_dataset_evals.ipynb)
  * [GitHub でソースを表示する](https://github.com/wandb/docs/blob/main/weave/cookbooks/source/hf_dataset_evals.ipynb)
</Note>

このノートブックでは、HuggingFace データセットを Weave の `Evaluation` の入力ソースとして使用する方法を説明します。最後まで進めると、HuggingFace データセットの行をインデックスで参照し、各行をモデルが想定する形式に前処理したうえで、スコア付けされた結果を Weave でトラッキングする評価パイプラインが完成します。このパターンは、既存の HuggingFace データセットを Weave ネイティブのデータセットに変換することなく、そのままモデルの評価に使用したい場合に便利です。

<Note>
  このガイドでは、HuggingFace データセットを Weave の評価で使用するための回避策を紹介します。この方法は現時点でも問題なく動作しますが、外部データセットとのよりシームレスなインテグレーションも現在開発中です。
</Note>

<h2 id="setup-and-imports">
  セットアップとインポート
</h2>

まず、Weave を初期化して W\&B に接続します。これにより、Weave が評価 run とその結果を Weave プロジェクトでトラッキングできるようになります。

```python lines theme={"system"}
!pip install datasets wandb weave

# 変数を初期化
HUGGINGFACE_DATASET = "wandb/ragbench-test-sample"
WANDB_KEY = ""
WEAVE_TEAM = ""
WEAVE_PROJECT = ""

# weave と必要なライブラリを初期化
import asyncio

import nest_asyncio
import wandb
from datasets import load_dataset

import weave
from weave import Evaluation

# wandb にログインして weave を初期化
wandb.login(key=WANDB_KEY)
client = weave.init(f"{WEAVE_TEAM}/{WEAVE_PROJECT}")

# nest_asyncio を適用し、ネストしたイベントループを使えるようにする（一部のノートブック環境で必要）
nest_asyncio.apply()
```

<h2 id="load-and-prepare-huggingface-dataset">
  HuggingFace データセットを読み込んで準備する
</h2>

次に、HuggingFace データセットを読み込み、評価で反復処理する軽量なインデックスを構築します。データセットの行を Weave に直接渡すのではなく、インデックス参照のリストを渡し、前処理の段階でそれぞれを完全な行に解決します。この方法により、評価を元の HuggingFace データセットに紐づけたまま、そのデータセットへの参照を保持できます。

<Note>
  各行に一意の ID を持たせるため、インデックスには `hf_id` とあわせて `hf_hub_name` をエンコードしてください。Weave はこの一意のダイジェスト値を使用して、評価中に特定のデータセットエントリをトラッキングおよび参照します。
</Note>

```python lines theme={"system"}
# HuggingFace データセットを読み込む
ds = load_dataset(HUGGINGFACE_DATASET)
row_count = ds["train"].num_rows

# データセットのインデックスマッピングを作成する
# HF データセットのインデックスを持つ辞書のリストが作成される
# 例: [{"hf_id": 0}, {"hf_id": 1}, {"hf_id": 2}, ...]
hf_index = [{"hf_id": i, "hf_hub_name": HUGGINGFACE_DATASET} for i in range(row_count)]
```

<h2 id="define-processing-and-evaluation-functions">
  処理関数と評価関数を定義する
</h2>

インデックスの準備ができたら、評価パイプラインを構成する 3 つの関数を定義します。各インデックス参照を使用可能なサンプルに変換する関数、モデルの出力をスコアリングする関数、そして評価対象のモデルを表す関数です。

処理パイプラインでは、次の関数を使用します。

* `preprocess_example`: インデックス参照を、評価に必要な実際のデータに変換します。
* `hf_eval`: モデル出力のスコアリング方法を定義します。
* `function_to_evaluate`: 評価対象となる実際の関数またはモデルです。

```python lines theme={"system"}
@weave.op()
def preprocess_example(example):
    """
    Preprocesses each example before evaluation.
    Args:
        example: Dict containing hf_id
    Returns:
        Dict containing the prompt from the HF dataset
    """
    hf_row = ds["train"][example["hf_id"]]
    return {"prompt": hf_row["question"], "answer": hf_row["response"]}

@weave.op()
def hf_eval(hf_id: int, output: dict) -> dict:
    """
    Scoring function for evaluating model outputs.
    Args:
        hf_id: Index in the HF dataset
        output: The output from the model to evaluate
    Returns:
        Dict containing evaluation scores
    """
    hf_row = ds["train"][hf_id]
    return {"scorer_value": True}

@weave.op()
def function_to_evaluate(prompt: str):
    """
    The function that will be evaluated (e.g., your model or pipeline).
    Args:
        prompt: Input prompt from the dataset
    Returns:
        Dict containing model output
    """
    return {"generated_text": "testing "}
```

<h2 id="create-and-run-the-evaluation">
  評価を作成して実行する
</h2>

最後に、インデックス、Scorer、前処理関数を Weave の `Evaluation` に組み込み、モデルに対して実行します。`hf_index` の各エントリに対して、Weave は次の処理を行います。

1. `preprocess_example` が HuggingFace データセットから対応するデータを取得します。
2. Weave が前処理済みのデータを `function_to_evaluate` に渡します。
3. `hf_eval` が出力をスコアリングします。
4. Weave が結果をトラッキングします。

評価が完了したら、run とその行ごとのスコアを Weave プロジェクトで確認できます。

```python lines theme={"system"}
# Evaluation オブジェクトを作成
evaluation = Evaluation(
    dataset=hf_index,  # 作成したインデックスのマッピングを使用
    scorers=[hf_eval],  # スコアリング関数のリスト
    preprocess_model_input=preprocess_example,  # 入力を前処理する関数
)

# 評価を非同期で実行
async def main():
    await evaluation.evaluate(function_to_evaluate)

asyncio.run(main())
```
