From f03a11ec24824d90f94c7b757b23ccd41eaf7881 Mon Sep 17 00:00:00 2001 From: Ivan Pavlovich <ivan.pavlovic@hes-so.ch> Date: Sun, 30 Mar 2025 12:02:11 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20entaite=20aux=20fichier=20utilis?= =?UTF-8?q?=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dataSources/PubMed/pubmedApi.py | 2 +- models/LLM/LLMPrices/calc_llm_prices.py | 24 ++++++++++++++---- models/LLM/LLMPrices/data/llm_prices.json | 24 +++++++++--------- models/Tokenizer/data/token_count.json | 15 ++++++++--- models/Tokenizer/token_count.py | 21 ++++++++++++--- scripts/copy_files_hpc.py | 9 +++++++ scripts/get_results_hpc.py | 9 +++++++ testModel/__pycache__/metrics.cpython-313.pyc | Bin 3122 -> 3122 bytes testModel/__pycache__/utils.cpython-313.pyc | Bin 5414 -> 5416 bytes testModel/dataset/create_test_data.py | 9 +++++++ ...t_articles_len.py => get_dataset_stats.py} | 8 ++++++ testModel/launch_tests.py | 9 +++++++ testModel/metrics.py | 8 ++++++ testModel/show_graph.py | 8 ++++++ testModel/show_results.py | 8 ++++++ testModel/test.py | 10 ++++++++ testModel/utils.py | 8 ++++++ 17 files changed, 147 insertions(+), 25 deletions(-) rename testModel/{test_articles_len.py => get_dataset_stats.py} (85%) diff --git a/dataSources/PubMed/pubmedApi.py b/dataSources/PubMed/pubmedApi.py index 793ba5724..bcd9c161a 100644 --- a/dataSources/PubMed/pubmedApi.py +++ b/dataSources/PubMed/pubmedApi.py @@ -11,7 +11,7 @@ import sys import os # Ajouter le répertoire parent au chemin de recherche -sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))) +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../"))) from requests import get from parsers.xmlParser import parseXmlFile diff --git a/models/LLM/LLMPrices/calc_llm_prices.py b/models/LLM/LLMPrices/calc_llm_prices.py index 4fd46e549..e211bef12 100644 --- a/models/LLM/LLMPrices/calc_llm_prices.py +++ b/models/LLM/LLMPrices/calc_llm_prices.py @@ -1,3 +1,12 @@ +# ----------------------------- +# Le script calcule le prix moyen pour classifier les articles par jour, semaine, mois en utilisant le fichier des nombres de tokens (../../Tokenizer/data/token_count.json). +# Les prix des LLM sont récupérer d'internet et sont en $ par million de token. Les résultats sont stoquer dans ./data/llm_prices.json +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + from transformers import AutoTokenizer import json import sys @@ -10,7 +19,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../. from testModel.utils import get_article_data from variables.pubmed import NCDS_MESH_TERM, KEYWORDS_MESH_TERM, KEYWORDS_MESH_SUBHEADING, KEYWORDS_MESH_SITE_PROPOSITION, KEYWORDS_MESH_PROPOSITION -DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../Tokenizer/data")) +DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../Tokenizer/data")) RESULT_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "./data")) # Prices for 1M tokens @@ -56,7 +65,10 @@ with open(file_path, "r", encoding="utf-8") as file: data = json.load(file) mean_data = { - "ALL": 0 + "ALL": { + "input":0, + "output":0 + } } for category in CATEGORIES: @@ -69,13 +81,15 @@ for category in CATEGORIES: for tokenizer_name in TOKENIZERS: - mean_data["ALL"] += data[tokenizer_name]["ALL"] + mean_data["ALL"]["input"] += data[tokenizer_name]["ALL"]["input"] + mean_data["ALL"]["output"] += data[tokenizer_name]["ALL"]["output"] for category in CATEGORIES: for interval in INTERVALS: for i in ["input", "output"]: mean_data[category][interval][i] += data[tokenizer_name][category][interval][i]["mean"] -mean_data["ALL"] /= len(TOKENIZERS) +mean_data["ALL"]["input"] /= len(TOKENIZERS) +mean_data["ALL"]["output"] /= len(TOKENIZERS) for category in CATEGORIES: for interval in INTERVALS: for i in ["input", "output"]: @@ -96,7 +110,7 @@ for llm in PRICES.keys(): res[llm][category][interval] = 0 for llm, prices in PRICES.items(): - res[llm]["ALL"] = prices["input"] / 1000000 * mean_data["ALL"] + prices["output"] / 1000000 * mean_data["ALL"] + res[llm]["ALL"] = prices["input"] / 1000000 * mean_data["ALL"]["input"] + prices["output"] / 1000000 * mean_data["ALL"]["output"] for category in CATEGORIES: for interval in INTERVALS: res[llm][category][interval] = prices["input"] / 1000000 * mean_data[category][interval]["input"] + prices["output"] / 1000000 * mean_data[category][interval]["output"] diff --git a/models/LLM/LLMPrices/data/llm_prices.json b/models/LLM/LLMPrices/data/llm_prices.json index 09118ec84..2b3669137 100644 --- a/models/LLM/LLMPrices/data/llm_prices.json +++ b/models/LLM/LLMPrices/data/llm_prices.json @@ -1,6 +1,6 @@ { "Mistral Large": { - "ALL": 610.8317493333334, + "ALL": 195.39295733333336, "NO KEYWORDS": { "day": 0.02742357295906432, "week": 0.1916243452108532, @@ -28,7 +28,7 @@ } }, "Mistral Small": { - "ALL": 30.54158746666667, + "ALL": 9.769647866666666, "NO KEYWORDS": { "day": 0.001371178647953216, "week": 0.009581217260542662, @@ -56,7 +56,7 @@ } }, "GPT-4o": { - "ALL": 954.4246083333335, + "ALL": 262.0266216666667, "NO KEYWORDS": { "day": 0.03677566619883041, "week": 0.25697282281791434, @@ -84,7 +84,7 @@ } }, "GPT-4o mini": { - "ALL": 57.265476500000005, + "ALL": 15.7215973, "NO KEYWORDS": { "day": 0.0022065399719298244, "week": 0.015418369369074859, @@ -112,7 +112,7 @@ } }, "DeepSeek-V3": { - "ALL": 104.60493707333335, + "ALL": 28.441158540000004, "NO KEYWORDS": { "day": 0.003991741549473684, "week": 0.027892603994769533, @@ -140,7 +140,7 @@ } }, "Gemini 2.0 Flash": { - "ALL": 38.17698433333334, + "ALL": 10.481064866666667, "NO KEYWORDS": { "day": 0.0014710266479532163, "week": 0.010278912912716575, @@ -168,7 +168,7 @@ } }, "Gemini 2.0 Flash-Lite": { - "ALL": 28.632738250000003, + "ALL": 7.86079865, "NO KEYWORDS": { "day": 0.0011032699859649122, "week": 0.007709184684537429, @@ -196,7 +196,7 @@ } }, "Claude 3.7 Sonnet": { - "ALL": 1374.371436, + "ALL": 335.77445600000004, "NO KEYWORDS": { "day": 0.047126239438596486, "week": 0.3292982569467146, @@ -224,7 +224,7 @@ } }, "Claude 3.5 Haiku": { - "ALL": 366.49904960000003, + "ALL": 89.53985493333334, "NO KEYWORDS": { "day": 0.012566997183625729, "week": 0.0878128685191239, @@ -252,7 +252,7 @@ } }, "Claude 3 Opus": { - "ALL": 6871.857179999999, + "ALL": 1678.87228, "NO KEYWORDS": { "day": 0.23563119719298242, "week": 1.6464912847335729, @@ -280,7 +280,7 @@ } }, "Command A": { - "ALL": 954.4246083333335, + "ALL": 262.0266216666667, "NO KEYWORDS": { "day": 0.03677566619883041, "week": 0.25697282281791434, @@ -308,7 +308,7 @@ } }, "Command R+": { - "ALL": 954.4246083333335, + "ALL": 262.0266216666667, "NO KEYWORDS": { "day": 0.03677566619883041, "week": 0.25697282281791434, diff --git a/models/Tokenizer/data/token_count.json b/models/Tokenizer/data/token_count.json index a4c59fb66..b225156bd 100644 --- a/models/Tokenizer/data/token_count.json +++ b/models/Tokenizer/data/token_count.json @@ -1,6 +1,9 @@ { "bert-base-uncased": { - "ALL": 77536060, + "ALL": { + "input": 77536060, + "output": 7542090 + }, "NO KEYWORDS": { "day": { "input": { @@ -193,7 +196,10 @@ } }, "roberta-base": { - "ALL": 75762923, + "ALL": { + "input": 75762923, + "output": 6900210 + }, "NO KEYWORDS": { "day": { "input": { @@ -386,7 +392,10 @@ } }, "facebook/bart-large": { - "ALL": 75762923, + "ALL": { + "input": 75762923, + "output": 6900210 + }, "NO KEYWORDS": { "day": { "input": { diff --git a/models/Tokenizer/token_count.py b/models/Tokenizer/token_count.py index ed90fd6c7..175458034 100644 --- a/models/Tokenizer/token_count.py +++ b/models/Tokenizer/token_count.py @@ -1,3 +1,12 @@ +# ----------------------------- +# Le script calcule le nombre moyen de token en input et output grace a différent tokenizers qu'une LLM +# aura besoin pour classifier les articles par jour, semaine, mois. Il stoque le résultat dans un fichier json (./data/token_count.json) +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + from transformers import AutoTokenizer import json import sys @@ -5,7 +14,7 @@ import os import statistics from datetime import datetime, timedelta -sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../"))) +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../../"))) from testModel.utils import get_article_data from variables.pubmed import NCDS, NCDS_MESH_TERM, KEYWORDS_MESH_TERM, KEYWORDS_MESH_SUBHEADING, KEYWORDS_MESH_SITE_PROPOSITION, KEYWORDS_MESH_PROPOSITION @@ -75,7 +84,7 @@ TOKENIZERS = [ "facebook/bart-large" ] -TMP_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../dataSources/PubMed/tmp")) +TMP_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../dataSources/PubMed/save")) RESULT_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "./data")) ncds_mesh_terms = [mesh_term.lower() for ncd, mesh_term in NCDS_MESH_TERM.items()] @@ -95,7 +104,10 @@ counts = {} for tokenizer_name in TOKENIZERS: counts[tokenizer_name] = {} - counts[tokenizer_name]["ALL"] = 0 + counts[tokenizer_name]["ALL"] = { + "input" : 0, + "output" : 0 + } for category in CATEGORIES: counts[tokenizer_name][category] = { "day": { @@ -163,7 +175,8 @@ for tokenizer_name in TOKENIZERS: num_tokens = len(tokens["input_ids"][0]) add_token_number(article_date, start_date, num_tokens, output_token_num, counts, tokenizer_name, "NO KEYWORDS") - counts[tokenizer_name]["ALL"] += num_tokens + counts[tokenizer_name]["ALL"]["input"] += num_tokens + counts[tokenizer_name]["ALL"]["output"] += output_token_num added = False diff --git a/scripts/copy_files_hpc.py b/scripts/copy_files_hpc.py index e5f494f67..dbad7fb44 100644 --- a/scripts/copy_files_hpc.py +++ b/scripts/copy_files_hpc.py @@ -1,3 +1,12 @@ +# ----------------------------- +# Le script transfer les fichier de testModel, models, parsers, variables et dateSources à un remote grâce à rclone copy +# +# Arguments: +# --remote : nom du remote où transferer les fichier (default: bamboo) +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import argparse import os import sys diff --git a/scripts/get_results_hpc.py b/scripts/get_results_hpc.py index 6cae4884a..1c42ac7ed 100644 --- a/scripts/get_results_hpc.py +++ b/scripts/get_results_hpc.py @@ -1,3 +1,12 @@ +# ----------------------------- +# Le script transfer les fichier de testModel/results depuis un remote à la machine grâce à rclone copy +# +# Arguments: +# --remote : nom du remote où transferer les fichier (default: bamboo) +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import argparse import os import sys diff --git a/testModel/__pycache__/metrics.cpython-313.pyc b/testModel/__pycache__/metrics.cpython-313.pyc index 592a42936e81fc6665018f4da52330723e48fa77..2b7fabb35a91ff2a66003dc10bbe2eb26c6b8a8d 100644 GIT binary patch delta 84 zcmdlau}OmOGcPX}0|Ns?3jfRWdt4j&n3x$kHw!XrF)?avwqc#d$Y?(KGTTc=yUBam qA2Pa3p3gCl(QER24&}*-oSPT}Hj8liGBSouPU2q7C^VUkM+X4npBJD2 delta 84 zcmdlau}OmOGcPX}0|Nttp6T86=bRh)n3x$EHw!XrF)=D^wqc#d$f!U0GTTc=v&nne qA2QlZp3gCl(P{F04&}*-oSPUuHj8liGBWy2PU2q7$TXRaM+X4Yh8H{l diff --git a/testModel/__pycache__/utils.cpython-313.pyc b/testModel/__pycache__/utils.cpython-313.pyc index f00233042224c15b64c14be459a19aed672e0fec..3cd1f083a84b02d5b105e907ae51628e17d23ebf 100644 GIT binary patch delta 103 zcmZ3cwL**cGcPX}0|Ns?9skSpcN=+4m>GpOJ26``GKx;FWBJ6WxVeyZDifo|W_FH~ zOpNB6FLH@9F?w%)$upIaF>G@^Up6CS%I4Sn*O?g0HXjzc$jH~tz`*c<nURt4vk(I# J*W?8vZ2$`Z9v1)r delta 101 zcmZ3XwM>imGcPX}0|NttNX*l8rH#BM%#2){otUi|8F?qyv3z2b++4^ym5EVdGdssg zCPw|u7rDfl7@ar2<eAFI=(o9^FPo7uX7g+Q>r9M!n-2?JWaQ~&U|{&b%*e=in}Kuk HB9S%#bVnSt diff --git a/testModel/dataset/create_test_data.py b/testModel/dataset/create_test_data.py index 718cd8611..5571083ac 100644 --- a/testModel/dataset/create_test_data.py +++ b/testModel/dataset/create_test_data.py @@ -1,3 +1,12 @@ +# ----------------------------- +# Le script récupère les articles pour chaque maladies pour la classification et les stoque dans un fichier du même nom.abs +# Il récupère 100 articles dont 25 courts, 25 moyens, 25 longs et 25 très long pour chaque maladies. +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import sys import os import json diff --git a/testModel/test_articles_len.py b/testModel/get_dataset_stats.py similarity index 85% rename from testModel/test_articles_len.py rename to testModel/get_dataset_stats.py index c753b3b17..6c91ffe72 100644 --- a/testModel/test_articles_len.py +++ b/testModel/get_dataset_stats.py @@ -1,3 +1,11 @@ +# ----------------------------- +# Le script regarde les statistiques du je de données test (nombre d'article par catégorie de longueur, longeur moyenne d'un article en caractères) +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import sys import os import statistics diff --git a/testModel/launch_tests.py b/testModel/launch_tests.py index 45e6b89e6..1f507282c 100644 --- a/testModel/launch_tests.py +++ b/testModel/launch_tests.py @@ -1,3 +1,12 @@ +# ----------------------------- +# Le script transfer les fichier de testModel, models, parsers, variables et dateSources à un remote grâce à rclone copy +# +# Arguments: +# --remote : nom du remote où transferer les fichier (default: bamboo) +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import subprocess import sys import os diff --git a/testModel/metrics.py b/testModel/metrics.py index f12da370e..13b045724 100644 --- a/testModel/metrics.py +++ b/testModel/metrics.py @@ -1,3 +1,11 @@ +# ----------------------------- +# Le script ne fait rien. Il met a disposition des fonctions qui permettent de calculer les différents scores +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + def get_confusion_matrix(wanted, prediction): matrix = [[0, 0], [0, 0]] for key in wanted.keys(): diff --git a/testModel/show_graph.py b/testModel/show_graph.py index 1084113c3..2d3853dc2 100644 --- a/testModel/show_graph.py +++ b/testModel/show_graph.py @@ -1,3 +1,11 @@ +# ----------------------------- +# Le script crée les graphes pour chaques catégories de longueur en utilisant les résultats des modèles selectionnés et les stoque dans ./tmp. +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import sys import os import matplotlib.pyplot as plt diff --git a/testModel/show_results.py b/testModel/show_results.py index 7843986b8..f97bb5954 100644 --- a/testModel/show_results.py +++ b/testModel/show_results.py @@ -1,3 +1,11 @@ +# ----------------------------- +# Le script crée des bar chart et spider chart pour toutes les combinaisons de modèles possible et sotque dans ./results/graphs. +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import sys import os import matplotlib.pyplot as plt diff --git a/testModel/test.py b/testModel/test.py index 6ff90fbb1..f2ccc165f 100644 --- a/testModel/test.py +++ b/testModel/test.py @@ -1,3 +1,13 @@ +# ----------------------------- +# Le script lance la classification du jeu de données de test avec un modèle selectionné. +# +# Arguments: +# --model : nom du modèle présent dans le fichier variables/models.py +# --remake : permet de refaire les tests déjà réaliser (supprime les anciens résultats) +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import sys import os import statistics diff --git a/testModel/utils.py b/testModel/utils.py index 4a6581b90..7db67a676 100644 --- a/testModel/utils.py +++ b/testModel/utils.py @@ -1,3 +1,11 @@ +# ----------------------------- +# Le script ne fait rien. Il met a disposition des fonctions utiles +# +# Ce script ne prend pas de paramètres. +# +# Auteur : Pavlovich Ivan +# ----------------------------- + import os import sys import json -- GitLab