first-aid-rag-assistant / notebooks / 06-sqlite-vector-num-of-results-evals.ipynb
06-sqlite-vector-num-of-results-evals.ipynb
Raw
import path_setup  # noqa: F401 — adds project root to sys.path

%load_ext autoreload
%autoreload 2
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload
import pandas as pd

df_ground_truth = pd.read_csv("data/ground_truth.csv")
ground_truth = df_ground_truth.to_dict(orient="records")
from ingest import load_faq_data, build_vector_index

documents = load_faq_data()
len(documents)
2775
from embedder import Embedder

embedder = Embedder()
index = build_vector_index(embedder, documents)
Generating Embeddings in Batches...



  0%|          | 0/56 [00:00<?, ?it/s]
from evaluation.evaluation import evaluate, vector_search

results = []

for num_of_results in [3, 5, 10]:
    print(
        f"Evaluating vector search num_of_results={num_of_results},"
    )
    result = evaluate(
        ground_truth,
        lambda query, embedder=embedder, num_results=num_of_results: vector_search(
            query,
            embedder,
            index,
            num_results
        )
    )

    results.append({
        "num_of_results": num_of_results,
        "hit_rate": result["hit_rate"],
        "mrr": result["mrr"],
    })
Evaluating question_boost=3,



  0%|          | 0/13874 [00:00<?, ?it/s]


Evaluating question_boost=5,



  0%|          | 0/13874 [00:00<?, ?it/s]


Evaluating question_boost=10,



  0%|          | 0/13874 [00:00<?, ?it/s]
df_results = pd.DataFrame(results)
df_results.sort_values("mrr", ascending=False).head(10)

num_of_results hit_rate mrr
2 10 0.732017 0.466678
1 5 0.628802 0.452757
0 3 0.545337 0.433689
from evaluation.evaluation import vector_search

evaluate(
    ground_truth,
    lambda query='', embedder=embedder, index=index: vector_search(query, embedder, index, 10)
)
  0%|          | 0/13874 [00:00<?, ?it/s]





{'hit_rate': 0.7320167219259046, 'mrr': 0.46667842212565647}