epsilon-compositionality

Code for our paper Measuring Idiomaticity in Text Embedding Models with 𝜀-compositionality
git clone https://esimon.eu/repos/epsilon-compositionality.git
Log | Files | Refs | Submodules | README

commit c82e284c00e85275181f14259dda076fd844b902
parent 6dfb0f1474a4e155093ea374865e5005c3e22bfe
Author: Sondre Wold <sondrewold1@gmail.com>
Date:   Wed, 24 Sep 2025 16:43:04 +0200

add class to results

Diffstat:
Mexperiment.py | 13++++++++++---
Mget_epsilon.py | 3+++
2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/experiment.py b/experiment.py @@ -52,6 +52,7 @@ class Point(NamedTuple): phrase_b_embedded: torch.Tensor context_ac_embedded: torch.Tensor context_bc_embedded: torch.Tensor + comp_class: str class ResultObject(NamedTuple): @@ -63,6 +64,7 @@ class ResultObject(NamedTuple): class SentencePairs(NamedTuple): sentence_A: list[str] sentence_B: list[str] + classes: list[str] def normalize_v2(): @@ -543,7 +545,7 @@ class Experiment: self.phrase_b_length: list[int] = [] def run_experiment(self) -> None: - for i, (sentence_a, sentence_b) in enumerate(tqdm.tqdm(zip(*self.sentence_pairs))): + for i, (sentence_a, sentence_b, cls) in enumerate(tqdm.tqdm(zip(*self.sentence_pairs))): diffs: list[str] | None = find_diff(sentence_a, sentence_b) if not diffs: self.diff_errors += 1 @@ -611,6 +613,7 @@ class Experiment: phrase_b_embedded=phrase_b_embedded, context_ac_embedded=a_in_context_embedded, context_bc_embedded=b_in_context_embedded, + comp_class=cls ) ) @@ -647,7 +650,7 @@ def main() -> None: synonym_sentence: list[str] = df[ "synonym both" ].values.tolist() # Both the modifier and the noun are swapped with synonyms from word net. - + sentence_A: list[str] = original_sentence sentence_B: list[str] = synonym_sentence @@ -675,7 +678,11 @@ def main() -> None: else: raise ValueError("Undefined dataset type...") - sentence_pairs = SentencePairs(sentence_A=sentence_A, sentence_B=sentence_B) + clss: list[str] = df[ + "class" + ].values.tolist() # The comp. classes + + sentence_pairs = SentencePairs(sentence_A=sentence_A, sentence_B=sentence_B, classes=clss) models = ( [args.model] if args.model is not None else list(ModelFactory._factory.keys()) diff --git a/get_epsilon.py b/get_epsilon.py @@ -91,6 +91,7 @@ def main() -> None: "divisive": [], "additive": [], "simscores": [], + "classes": [], } for raw_file in raw_files: with open(raw_file, "rb") as file: @@ -104,6 +105,7 @@ def main() -> None: context_sims: numpy.ndarray = numpy.array( [point.contextualized_similarity for point in points] ) + classes = [point.comp_class for point in points] ac_embedded: list[torch.Tensor] = [torch.Tensor(point.context_ac_embedded) for point in points] bc_embedded: list[torch.Tensor] = [torch.Tensor(point.context_bc_embedded) for point in points] tmp_result: dict[str, list[float]] = get_epsilons(word_sims, context_sims) @@ -131,6 +133,7 @@ def main() -> None: final_result["original"].append(final_original) final_result["divisive"].append(final_division) final_result["additive"].append(final_additive) + final_result["classes"] = classes # df: pandas.DataFrame = pandas.DataFrame.from_dict(final_result) # df.to_csv(args.result_path, sep=",", index=False)