Download evaluate.py from zeechimp/hv-temporal-context-v1: direct link, hf CLI and curl.
- Browser
- Download file 2.44 kB
-
https://huggingface.co/zeechimp/hv-temporal-context-v1/resolve/main/evaluate.py
- Command line
-
hf download hf://zeechimp/hv-temporal-context-v1/evaluate.py
-
curl -L -o evaluate.py https://huggingface.co/zeechimp/hv-temporal-context-v1/resolve/main/evaluate.py
2.44 kB
| """ | |
| evaluate.py | |
| Reproduce the retrieval metrics. | |
| """ | |
| import numpy as np | |
| from collections import Counter | |
| from hv_temporal_context import HVTemporalContext, DEFAULT_K | |
| from train_temporal_context import load_turns, _fill, TOPIC_TEMPLATES | |
| def generate_queries(seed=99, n_per_topic=4): | |
| rng = np.random.default_rng(seed) | |
| queries = [] | |
| for topic, tpl in TOPIC_TEMPLATES.items(): | |
| for _ in range(n_per_topic): | |
| u = _fill(rng.choice(tpl["user"]), tpl["fills"], rng) | |
| queries.append((topic, u)) | |
| rng.shuffle(queries) | |
| return queries | |
| def evaluate_similarity(model, queries, k=DEFAULT_K): | |
| precisions = [] | |
| for true_topic, query in queries: | |
| idx, _ = model.retrieve(query, k) | |
| topics = [model.topics[i] for i in idx] | |
| precisions.append(sum(1 for t in topics if t == true_topic) / len(topics)) | |
| return float(np.mean(precisions)) | |
| def evaluate_temporal(model, queries, k=DEFAULT_K, lambda_surprise=0.5): | |
| precisions = [] | |
| for true_topic, query in queries: | |
| idx, _ = model.retrieve_temporal(query, true_topic, k, lambda_surprise) | |
| topics = [model.topics[i] for i in idx] | |
| precisions.append(sum(1 for t in topics if t == true_topic) / len(topics)) | |
| return float(np.mean(precisions)) | |
| def evaluate_random(model, queries, k=DEFAULT_K, seed=0): | |
| rng = np.random.default_rng(seed) | |
| precisions = [] | |
| for true_topic, _ in queries: | |
| idx = rng.choice(len(model.topics), size=k, replace=False) | |
| topics = [model.topics[i] for i in idx] | |
| precisions.append(sum(1 for t in topics if t == true_topic) / len(topics)) | |
| return float(np.mean(precisions)) | |
| def main(model_path="temporal_context_model"): | |
| print("Loading model...") | |
| model = HVTemporalContext.load(model_path) | |
| print(f" {len(model.texts)} turns, " | |
| f"{len(model.vocab_index)} vocabulary") | |
| queries = generate_queries(seed=99, n_per_topic=4) | |
| p_rand = evaluate_random(model, queries) | |
| p_sim = evaluate_similarity(model, queries) | |
| p_temp = evaluate_temporal(model, queries) | |
| print() | |
| print(f" {'method':<28} {'precision@5':>12}") | |
| print(" " + "-" * 42) | |
| print(f" {'random':<28} {p_rand:>12.3f}") | |
| print(f" {'similarity':<28} {p_sim:>12.3f}") | |
| print(f" {'position-conditional':<28} {p_temp:>12.3f}") | |
| print() | |
| print(f" gap over similarity: {p_temp - p_sim:+.3f}") | |
| if __name__ == "__main__": | |
| main() |