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 fb0d5df815b6bf7e18d882800a63e92f6811495b
parent 347e99fd8c16b2dd6ea5971c79f076e2ef9f9a4f
Author: Étienne Simon <esimon@esimon.eu>
Date:   Mon,  6 Oct 2025 07:00:27 +0200

add dataset statistics

Diffstat:
Mepsilon_compositionality/compute_statistics.py | 29+++++++++++++++++++++++++++++
1 file changed, 29 insertions(+), 0 deletions(-)

diff --git a/epsilon_compositionality/compute_statistics.py b/epsilon_compositionality/compute_statistics.py @@ -51,6 +51,34 @@ def read_similarities(epsilon_method: str, offset: int = 0) -> dict[str, Any]: return models +def latex_data_statistics(output_path: pathlib.Path) -> None: + num_compounds: int = 0 + num_sentences: int = 0 + num_words: int = 0 + num_epsilons: int = 0 + + model_path: pathlib.Path = next(INPUT_PATH.iterdir()) + with model_path.open("r") as model_file: + for line in model_file: + compound = json.loads(line) + num_compounds += 1 + for side in ["head", "modifier"]: + for sentence in compound[side]: + num_sentences += 1 + num_words += len(sentence["positives"][0]["context_ac"].split()) + for polarity in ["positives", "negatives"]: + num_epsilons += len(sentence[polarity]) + + num_sentences //= 2 + num_words //= 2 + with output_path.open("w") as output: + print(r"\NewDocumentCommand\dataNumCompounds{}{" + str(num_compounds) + "}", file=output) + print(r"\NewDocumentCommand\dataNumSentences{}{" + str(num_sentences) + "}", file=output) + print(r"\NewDocumentCommand\dataNumEpsilons{}{" + str(num_epsilons) + "}", file=output) + print(r"\NewDocumentCommand\dataAvgSentenceLength{}{" + f"{num_words / num_sentences:4.1f}" + "}", file=output) + print(r"\NewDocumentCommand\dataAvgAlternatives{}{" + f"{num_epsilons / num_sentences / 2:3.1f}" + "}", file=output) + + def table_cell(positives: list[float], negatives: list[float], method: str) -> str: wilcoxon = scipy.stats.wilcoxon(positives, negatives, alternative="greater") if method == "rank biserial": @@ -117,6 +145,7 @@ def write_violins(output_path: pathlib.Path) -> None: def main() -> None: models = read_similarities("multiplicative") RESULTS_PATH.mkdir(exist_ok=True) + latex_data_statistics(RESULTS_PATH / "data statistics.tex") latex_main_statistics_table(RESULTS_PATH / "main statistics.tex", models) latex_distances_statistics(RESULTS_PATH / "distances statistics.tex") write_violins(RESULTS_PATH / "violins.dat")