Zeno

Zeno

Zeno 평가 플랫폼을 사용해 Ragas 평가 결과를 쉽게 시각화하고 탐색할 수 있어요. 이 튜토리얼의 결과가 어떤지 여기에서 확인해 볼 수 있어요.

출처: 문서

본문

Zeno로 Ragas 결과 시각화

먼저 zeno-client 패키지를 설치하세요.

pip install zeno-client

다음으로 hub.zenoml.com 에서 계정을 만들고 계정 페이지에서 API 키를 생성하세요.

이제 Getting Started 가이드에서 멈춘 지점부터 평가를 이어갈 수 있어요.

import os

import pandas as pd
from datasets import load_dataset
from zeno_client import ZenoClient, ZenoMetric

from ragas import evaluate
from ragas.metrics import (
    answer_relevancy,
    context_precision,
    context_recall,
    faithfulness,
)

# Set API keys
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
os.environ["ZENO_API_KEY"] = "your-zeno-api-key"

fiqa_eval = load_dataset("vibrantlabsai/fiqa", "ragas_eval")
result = evaluate(
    fiqa_eval["baseline"],
    metrics=[
        context_precision,
        faithfulness,
        answer_relevancy,
        context_recall,
    ],
)

df = result.to_pandas()
df.head()

이제 데이터와 결과를 담은 df를 Zeno에 업로드할 수 있어요.

먼저 커스텀 RAG 뷰 사양과 평가에 쓸 메트릭 컬럼으로 프로젝트를 만들어요.

client = ZenoClient(os.environ["ZENO_API_KEY"])

project = client.create_project(
    name="Ragas FICA eval",
    description="Evaluation of RAG model using Ragas on the FICA dataset",
    view={
        "data": {
            "type": "vstack",
            "keys": {
                "question": {"type": "markdown"},
                "texts": {
                    "type": "list",
                    "elements": {"type": "markdown"},
                    "border": True,
                    "pad": True,
                },
            },
        },
        "label": {
            "type": "markdown",
        },
        "output": {
            "type": "vstack",
            "keys": {
                "answer": {"type": "markdown"},
                "ground_truth": {
                    "type": "list",
                    "elements": {"type": "markdown"},
                    "border": True,
                    "pad": True,
                },
            },
        },
        "size": "large",
    },
    metrics=[
        ZenoMetric(
            name="context_precision", type="mean", columns=["context_precision"]
        ),
        ZenoMetric(name="faithfulness", type="mean", columns=["faithfulness"]),
        ZenoMetric(name="answer_relevancy", type="mean", columns=["answer_relevancy"]),
        ZenoMetric(name="context_recall", type="mean", columns=["context_recall"]),
    ],
)

다음으로 질문과 ground truth를 담은 기본 데이터셋을 업로드해요.

data_df = pd.DataFrame(
    {
        "data": df.apply(
            lambda x: {"question": x["question"], "texts": list(x["contexts"])}, axis=1
        ),
        "label": df["ground_truth"].apply(lambda x: "\n".join(x)),
    }
)
data_df["id"] = data_df.index

project.upload_dataset(
    data_df, id_column="id", data_column="data", label_column="label"
)

마지막으로 RAG 출력과 Ragas 메트릭을 업로드해요. 비교와 반복을 할 때 어떤 모델이든 이 작업을 실행할 수 있어요.

output_df = df[
    [
        "context_precision",
        "faithfulness",
        "answer_relevancy",
        "context_recall",
    ]
].copy()

output_df["output"] = df.apply(
    lambda x: {"answer": x["answer"], "ground_truth": list(x["ground_truth"])}, axis=1
)
output_df["id"] = output_df.index

project.upload_system(
    output_df, name="Base System", id_column="id", output_column="output"
)

질문이 있다면 Discord 또는 [email protected] 으로 Zeno 팀에 연락하세요!

더 알아보기 (Learn more)