diff --git a/dataSources/PubMed/pubmedApi.py b/dataSources/PubMed/pubmedApi.py index 793ba5724b2d2d69da2d0e3f0e10410e77f70c4a..bcd9c161a6a71903fb8538e742f2638e04965d5c 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 4fd46e5490be06859296d9023f4ecd04235f00a9..e211bef12c4c0ca0f30695952c0aec67caf3f341 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 09118ec8470fa3da08d0a4bbc30aaa28afbfe22f..2b36691376f5518ee8cb5d0d8b1787a35400a9bf 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 a4c59fb66a256f827c65b203137bd21201642ad5..b225156bd4966bcd591dc1bdcb701cb689d448e7 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 ed90fd6c7fd648b5a01c538c0d89e701c7d600f1..1754580345eae25a43cf53e5ab46a1923438ef76 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 e5f494f67428f92aabb6217d612e00c320654723..dbad7fb44033742b0d116357cdf80e18e5c59bf2 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 6cae4884a9794ca1f533d72fa32e39d914d1be85..1c42ac7ed10706f3d2a1775efd9835fd6d37d8fc 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 Binary files a/testModel/__pycache__/metrics.cpython-313.pyc and b/testModel/__pycache__/metrics.cpython-313.pyc differ diff --git a/testModel/__pycache__/utils.cpython-313.pyc b/testModel/__pycache__/utils.cpython-313.pyc index f00233042224c15b64c14be459a19aed672e0fec..3cd1f083a84b02d5b105e907ae51628e17d23ebf 100644 Binary files a/testModel/__pycache__/utils.cpython-313.pyc and b/testModel/__pycache__/utils.cpython-313.pyc differ diff --git a/testModel/dataset/create_test_data.py b/testModel/dataset/create_test_data.py index 718cd86116201816ff41320cecc47a23e6cdd625..5571083ac5302f793d0f72ea339703f67dd56d1a 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 c753b3b17aaf8c5361418ca84a2152895c15f845..6c91ffe723461fc8ff02b1113de7afa096736199 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 45e6b89e6f084338a7409a240729d6743078053f..1f507282cef6dd54586b0a1bb6208c73813fd64c 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 f12da370e5c27b75aa23cebf7f8cb78fa4bc35f6..13b045724b0f1d77927ec90e49023b5a4218dc2e 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 1084113c33b21f89ac0a372f646195d2c1162778..2d3853dc20327c1d48ba64cda502c471e76c7042 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 7843986b89655c99ba2e05e2ee857af3cf5061eb..f97bb595447e523dca1ffe12fbfeea7d91414e18 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 6ff90fbb145efee79452d3b76c5b8860652a1c96..f2ccc165f3865e50c99083d63b17baf18883c737 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 4a6581b9017907ba1e46c6032e280339c6d110b7..7db67a676174fddbc9473d9dc6e5471995a3c673 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