Skip to content
Snippets Groups Projects
Commit 7dc61c6e authored by ivan.pavlovic's avatar ivan.pavlovic
Browse files

Premiere version du teste pour les modèles

parent 76060944
No related branches found
No related tags found
No related merge requests found
gptKey
\ No newline at end of file
This diff is collapsed.
File added
......@@ -3,9 +3,6 @@
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
def classify(sequence):
sequence_to_classify = sequence
candidate_labels = [
"Diabetes",
"Cancer",
......@@ -15,8 +12,12 @@ def classify(sequence):
"Diabetes type 1",
"Diabetes type 2"
]
results = classifier(sequence_to_classify, candidate_labels)
def classify(sequence):
results = classifier(sequence, candidate_labels)
return results
# print(f"Sequence: {sequence_to_classify}")
print(f"Labels: {results["labels"]}")
print(f"Scores: {results["scores"]}")
# print(f"Labels: {results["labels"]}")
# print(f"Scores: {results["scores"]}")
This diff is collapsed.
This diff is collapsed.
......@@ -6,6 +6,7 @@ FILENAME = "pubmedData.xml"
# term = "diabetes+type+1+OR+diabetes+type+2+OR+mental+health"
term = '"Diabetes+Mellitus"[Mesh]'
# term = 'cancer'
date_min = "2024/11/29"
date_max = "2024/11/29"
......@@ -42,17 +43,26 @@ print(obj["PubmedArticle"][0].get("Title"))
for key in obj.keys():
if isinstance(obj[key], list):
i = 0
for entrie in obj[key]:
print("--------------------------------------------------------")
if "MedlineCitation" in entrie:
if "MeshHeadingList" in entrie["MedlineCitation"]:
i+=1
print(f"Index: {obj[key].index(entrie)}")
if "Abstract" in entrie["MedlineCitation"]["Article"] :
pmid = entrie["MedlineCitation"]["PMID"]
title = entrie["MedlineCitation"]["Article"]["Journal"]["Title"]
articleTitle = entrie["MedlineCitation"]["Article"]["ArticleTitle"]
abstract = entrie["MedlineCitation"]["Article"]["Abstract"]["AbstractText"]
print(f"PMID: {pmid}")
print(f"Title: {title}")
print(f"ArticleTitle: {articleTitle}")
if "Abstract" in entrie["MedlineCitation"]["Article"] :
abstract = entrie["MedlineCitation"]["Article"]["Abstract"]["AbstractText"]
print(f"Abstract: {abstract}")
meshTerms = []
......@@ -61,9 +71,43 @@ for key in obj.keys():
print(meshTerms)
facebookBartLargeMnli.classify(title + " \n " + articleTitle + " \n " + abstract)
else:
print(f"It has no abstract: {entrie["MedlineCitation"]["PMID"]}")
if i > 20:
break
# print(f"Index: {obj[key].index(entrie)}")
# pmid = entrie["MedlineCitation"]["PMID"]
# title = entrie["MedlineCitation"]["Article"]["Journal"]["Title"]
# articleTitle = entrie["MedlineCitation"]["Article"]["ArticleTitle"]
# print(f"PMID: {pmid}")
# print(f"Title: {title}")
# print(f"ArticleTitle: {articleTitle}")
# if "Abstract" in entrie["MedlineCitation"]["Article"] :
# abstract = entrie["MedlineCitation"]["Article"]["Abstract"]["AbstractText"]
# print(f"Abstract: {abstract}")
# if "Abstract" in entrie["MedlineCitation"]["Article"] :
# pmid = entrie["MedlineCitation"]["PMID"]
# title = entrie["MedlineCitation"]["Article"]["Journal"]["Title"]
# articleTitle = entrie["MedlineCitation"]["Article"]["ArticleTitle"]
# abstract = entrie["MedlineCitation"]["Article"]["Abstract"]["AbstractText"]
# print(f"PMID: {pmid}")
# print(f"Title: {title}")
# print(f"ArticleTitle: {articleTitle}")
# print(f"Abstract: {abstract}")
# meshTerms = []
# for meshTerm in entrie["MedlineCitation"]["MeshHeadingList"]["MeshHeading"]:
# meshTerms.append(meshTerm["DescriptorName"])
# print(meshTerms)
# facebookBartLargeMnli.classify(title + " \n " + articleTitle + " \n " + abstract)
# else:
# print(f"It has no abstract: {entrie["MedlineCitation"]["PMID"]}")
print("--------------------------------------------------------")
......
from parser.jsonParser import parseJsonFile
import time
import model.facebookBartLargeMnli as facebookBartLargeMnli
def predict(article):
pmid = article["PMID"]
title = article["Title"]
articleTitle = article["ArticleTitle"]
abstract = article["Abstract"]
meshTerms = article["MeshTerms"]
print(f"PMID: {pmid}")
print(f"Title: {title}")
print(f"ArticleTitle: {articleTitle}")
print(f"Abstract: {abstract}")
print(f"MeshTerm: {meshTerms}")
return facebookBartLargeMnli.classify(title + " \n " + articleTitle + " \n " + abstract)
try:
articles = parseJsonFile("./model/test.json")
# print(articles)
except Exception as e:
print(f"Error: {e}")
start = time.time()
predictions = 0
for article in articles:
results = predict(article)
print(f"Labels: {results["labels"]}")
print(f"Scores: {results["scores"]}")
predictPresent = False
for id, score in enumerate(results["scores"]):
if score >= 0.6:
if results["labels"][id] in article["Predictions"]:
predictPresent = True
break
print(f"Prediction: {predictPresent}")
if predictPresent and len(article["Predictions"]) != 0:
predictions += 1
elif predictPresent == False and len(article["Predictions"]) == 0:
predictions += 1
end = time.time()
print(f"Time to classify all articles: {end-start} seconds")
print(f"Good classification: {predictions}/{len(articles)}")
\ No newline at end of file
# Rapport 20.12.2024
## ChatGpt
J'ai exploré comment utiliser curl depuis le terminal pour interagir avec ChatGPT et obtenir des réponses. Jusqu'à présent, il semble que la seule méthode fonctionnelle nécessite l'utilisation de l'API d'OpenAI. Par exemple :
```bash
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer API_KEY" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Bonjour, comment vas-tu ?"}]
}'
```
Pour l'instant, le seul moyen d'utiliser ChatGPT sans clé API est de passer directement par le site web, ce qui implique de faire les tests manuellement. Je vais poursuivre mes recherches pour essayer de trouver une alternative ou d'obtenir une clé API afin de pouvoir automatiser mes tests.
## Teste des models
Nous avons discuté de la nécessité de concevoir une méthode pour évaluer les performances des modèles que je trouve. Pour pouvoir par la suite identifier le modèle qui marcherait le mieux pour notre cas de figure. J'ai commencé à travailler sur une méthode.
J'ai regroupé plusieurs articles pour constituer un ensemble de tests. Pour le moment, ces articles sont divisés en deux catégories : ceux classés comme "Diabète" et ceux qui ne le sont pas. Ces articles sont stockés dans un fichier JSON au format suivant :
```json
{
"PMID": 0,
"Title": "...",
"ArticleTitle": "...",
"Abstract": "...",
"Predictions": ["...", "..."],
"MeshTerms": ["...", "..."]
},
```
Le champ "Predictions" est rempli manuellement par mes soins. Je précise les classes que le modèle de classification devrait reconnaître en me basant sur les MeshTerms fournis par PubMed.
J'ai également développé un programme qui exécute la classification sur tous les articles pré-sélectionnés et qui :
- calcule le temps nécessaire au modèle pour classifier les articles.
- évalue le taux de prédictions correctes en comparant les résultats du modèle avec mes prédictions manuelles.
### A faire
- Ajouter plus d'article.
- Ajouter une plus grande variété d'articles :
- plus d'articles sans abstract
- des articles vagues, mais qui devraient tout de même être correctement classés
- Refaire mon calcul de classification correcte. Actuellement, je considère qu'une classe est choisie si son score dépasse 60 %, ce qui ne fonctionne pas forcément. Par exemple dans le cas d'articles qui ont moins de contenu, le modèle pourrai être moins confiant de ces prédictions, donc faudrait prendre ces variations en compte.
- Ajouter une meilleure séparation dans les résultats pour les rendre plus compréhensibles.
- Intégrer des articles permettant de tester tous les mots-clés.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment