commit a02677026c33d217b07506ec99bfea99f20c1d63
parent 9212ccc92b52c0b9d06181648ebc8e5a878eb8a8
Author: Sondre Wold <sondrewold1@gmail.com>
Date: Tue, 26 Aug 2025 09:00:27 +0200
save distribution to json instead of csv
Diffstat:
1 file changed, 29 insertions(+), 18 deletions(-)
diff --git a/get_epsilon.py b/get_epsilon.py
@@ -6,6 +6,7 @@ from experiment import Point
import matplotlib.pyplot as plt
from typing import Any
+import json
import pandas
@@ -21,6 +22,7 @@ def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Gather epsilon values")
parser.add_argument("-points_path", type=pathlib.Path)
parser.add_argument("-result_path", type=pathlib.Path)
+ parser.add_argument("-percentile", type=float, default=None, help="The percentile for the epsilon value")
return parser.parse_args()
@@ -32,25 +34,22 @@ def get_dataset_and_model_name(filename: str) -> tuple[str, str]:
def get_epsilons(
- word_sims: numpy.ndarray, context_sims: numpy.ndarray, percentile: int = 80
-) -> dict[str, float]:
+ word_sims: numpy.ndarray, context_sims: numpy.ndarray
+) -> dict[str, list[float]]:
# Epsilons
original: list[float] = []
division: list[float] = []
additive: list[float] = []
for i in range(len(word_sims)):
if word_sims[i] > 0:
- original.append(1 - context_sims[i] / word_sims[i]) # Equivalent to our formal relaxation
- division.append(context_sims[i] / word_sims[i])
- additive.append(context_sims[i] - word_sims[i])
- final_original: float = float(numpy.percentile(original, percentile))
- final_division: float = float(numpy.percentile(division, percentile))
- final_additive: float = float(numpy.percentile(additive, percentile))
+ original.append(float(1 - context_sims[i] / word_sims[i])) # Equivalent to our formal relaxation)
+ division.append(float(context_sims[i] / word_sims[i]))
+ additive.append(float(context_sims[i] - word_sims[i]))
return {
- "original": final_original,
- "divisive": final_division,
- "additive": final_additive,
+ "original": original,
+ "divisive": division,
+ "additive": additive,
}
@@ -59,6 +58,7 @@ def main() -> None:
points_folder: str = args.points_path
raw_files = list(pathlib.Path(points_folder).glob("*.pkl"))
+
final_result: dict[str, Any] = {
"dataset": [],
"model": [],
@@ -77,15 +77,26 @@ def main() -> None:
context_sims: numpy.ndarray = numpy.array(
[point.contextualized_similarity for point in points]
)
- tmp_result: dict[str, float] = get_epsilons(word_sims, context_sims)
+ tmp_result: dict[str, list[float]] = get_epsilons(word_sims, context_sims)
final_result["dataset"].append(dataset_name)
final_result["model"].append(model_name)
- final_result["original"].append(tmp_result["original"])
- final_result["divisive"].append(tmp_result["divisive"])
- final_result["additive"].append(tmp_result["additive"])
-
- df: pandas.DataFrame = pandas.DataFrame.from_dict(final_result)
- df.to_csv(args.result_path, sep=",", index=False)
+ if args.percentile is not None: # Save the percentile epsilons to disk as a csv
+ final_original: Any = float(numpy.percentile(tmp_result["original"], args.percentile))
+ final_division: Any = float(numpy.percentile(tmp_result["divisive"], args.percentile))
+ final_additive: Any = float(numpy.percentile(tmp_result["additive"], args.percentile))
+ else:
+ final_original = tmp_result["original"]
+ final_division = tmp_result["divisive"]
+ final_additive = tmp_result["additive"]
+
+ final_result["original"].append(final_original)
+ final_result["divisive"].append(final_division)
+ final_result["additive"].append(final_additive)
+
+ #df: pandas.DataFrame = pandas.DataFrame.from_dict(final_result)
+ #df.to_csv(args.result_path, sep=",", index=False)
+ with open(args.result_path, "w") as f:
+ json.dump(final_result, f)
if __name__ == "__main__":