Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-john-wbdocs-2044-rename-serverless-products.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
これはインタラクティブなノートブックです。ローカルで実行することも、以下のリンクを利用することもできます:
このガイドでは、HuggingFace Datasets を Weave の評価で使用するための回避策を紹介します。
この手順をより簡単にする、シームレスなインテグレーションの開発を現在積極的に進めています。
この方法でも利用できますが、近いうちに改善や更新が行われ、外部データセットをより簡単に扱えるようになる予定です。
まず、Weave を初期化し、Experiments をトラッキングするため、Weights & Biases に接続します。
!pip install datasets wandb weave
python
# 変数を初期化する
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()
HuggingFace データセットを読み込んで準備する
- HuggingFace データセットを読み込みます。
- データセットの各行を参照するためのインデックスを作成します。
- このインデックス方式により、元のデータセットへの参照を維持できます。
注:
インデックスでは、各行に一意の識別子を確実に付与するため、hf_hub_name を hf_id とあわせてエンコードします。
この一意のダイジェスト値は、評価時に特定のデータセットエントリをトラッキングしたり参照したりするために使用されます。
# HuggingFaceデータセットを読み込む
ds = load_dataset(HUGGINGFACE_DATASET)
row_count = ds["train"].num_rows
# データセットのインデックスマッピングを作成する
# HFデータセットのインデックスを含むdictのリストを作成する
# 例: [{"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)]
preprocess_example: インデックス参照を、評価に必要な実データへ変換します
hf_eval: モデルの出力をどのように評価するかを定義します
function_to_evaluate: 実際に評価される関数/モデル
@weave.op()
def preprocess_example(example):
"""
評価前に各サンプルを前処理します。
Args:
example: hf_idを含むDict
Returns:
HFデータセットのプロンプトを含むDict
"""
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:
"""
モデル出力を評価するためのスコアリング関数。
Args:
hf_id: HFデータセット内のインデックス
output: 評価対象のモデル出力
Returns:
評価スコアを含むDict
"""
hf_row = ds["train"][hf_id]
return {"scorer_value": True}
@weave.op()
def function_to_evaluate(prompt: str):
"""
評価対象の関数(例:モデルやパイプライン)。
Args:
prompt: データセットからの入力プロンプト
Returns:
モデル出力を含むDict
"""
return {"generated_text": "testing "}
- hf_index の各インデックスについて:
preprocess_example が HF データセットから対応するデータを取得します。
- 前処理したデータが
function_to_evaluate に渡されます。
- 出力は
hf_eval を使ってスコア付けされます。
- 結果は Weave でトラッキングされます。
# 評価オブジェクトを作成する
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())