Download code/export_csv.py from adeerkhan/msq-plurality-gap: direct link, hf CLI and curl.
- Browser
- Download file 3.09 kB
-
https://huggingface.co/adeerkhan/msq-plurality-gap/resolve/main/code/export_csv.py
- Command line
-
hf download hf://adeerkhan/msq-plurality-gap/code/export_csv.py
-
curl -L -o export_csv.py https://huggingface.co/adeerkhan/msq-plurality-gap/resolve/main/code/export_csv.py
3.09 kB
| #!/usr/bin/env python3 | |
| """Export flat CSV versions of the dataset and the summary tables.""" | |
| from __future__ import annotations | |
| import csv | |
| import json | |
| import pathlib | |
| ROOT = pathlib.Path(__file__).resolve().parent.parent | |
| DATASET = ROOT / "dataset" | |
| RESULTS = ROOT / "results" | |
| def export_dataset() -> None: | |
| items = [json.loads(l) for l in (DATASET / "msq49.jsonl").open(encoding="utf-8")] | |
| path = DATASET / "msq49.csv" | |
| with path.open("w", newline="", encoding="utf-8") as fh: | |
| w = csv.writer(fh) | |
| w.writerow(["id", "cls", "domain", "question", "stem", | |
| "n_positions", "position_texts", "position_schools", | |
| "majority_schools", "minority_school", "sources", "notes"]) | |
| for it in items: | |
| w.writerow([ | |
| it["id"], it["cls"], it["domain"], it["question"], it["stem"], | |
| len(it["positions"]), | |
| " | ".join(p["txt"] for p in it["positions"]), | |
| " | ".join("/".join(p["schools"]) for p in it["positions"]), | |
| "/".join(it["majority_schools"]), it["minority_school"] or "", | |
| " ; ".join(it["sources"]), it.get("notes", ""), | |
| ]) | |
| print(f"wrote {path} ({len(items)} rows)") | |
| def export_tables() -> None: | |
| p = RESULTS / "metrics.json" | |
| if not p.exists(): | |
| print("no metrics.json yet") | |
| return | |
| metrics = json.loads(p.read_text()) | |
| rows = [] | |
| for model, rep in metrics.items(): | |
| h = rep.get("headline", {}) | |
| n = rep.get("mcq", {}).get("mcq_neutral", {}) | |
| s = rep.get("mcq", {}).get("mcq_specified", {}) | |
| ft = rep.get("free_text", {}) | |
| rows.append(dict( | |
| model=model, | |
| PRR=h.get("PRR"), PRR_A=h.get("PRR_A"), PRR_B=h.get("PRR_B"), | |
| PRR_C=h.get("PRR_C"), PRR_mass=h.get("PRR_mass"), | |
| MSQ=h.get("MSQ"), blind_spot_gap=h.get("blind_spot_gap"), | |
| acc_control_D=h.get("acc_D"), | |
| conf_contested=h.get("conf_contested"), | |
| conf_control=h.get("conf_control"), | |
| disclosure_default=ft.get("ft_default", {}).get("ALL", {}).get("disclosure_rate"), | |
| disclosure_technical=ft.get("ft_technical", {}).get("ALL", {}).get("disclosure_rate"), | |
| disclosure_two_schools=ft.get("ft_two_schools", {}).get("ALL", {}).get("disclosure_rate"), | |
| attr_two_schools=ft.get("ft_two_schools", {}).get("ALL", {}).get("plural_attribution_rate"), | |
| clarification_default=ft.get("ft_default", {}).get("ALL", {}).get("clarification_rate"), | |
| answer_changed_rate=rep.get("answer_change", {}).get("changed_rate"), | |
| mean_max_prob=n.get("mean_max_prob"), | |
| mean_entropy=n.get("mean_entropy"), | |
| )) | |
| path = RESULTS / "summary_tables.csv" | |
| with path.open("w", newline="", encoding="utf-8") as fh: | |
| w = csv.DictWriter(fh, fieldnames=list(rows[0].keys())) | |
| w.writeheader() | |
| w.writerows(rows) | |
| print(f"wrote {path} ({len(rows)} rows)") | |
| if __name__ == "__main__": | |
| export_dataset() | |
| export_tables() | |