Me LLaMA présente une suite révolutionnaire de modèles LLM (Large Language Models) médicaux open source, comprenant les modèles de base Me LLaMA 13B/70B et leurs versions améliorées par chat, Me LLaMA 13B-chat/70B-chat. Développés grâce à la pré-formation continue innovante et au réglage des instructions de LLaMA2, ces modèles exploitent un vaste corpus médical. Ce corpus comprend une sélection d'articles et de résumés PubMed, un nouvel ensemble de données de directives médicales reconnues à l'échelle internationale et un corpus de domaine général, plaçant Me LLaMA à l'avant-garde de la recherche sur l'IA médicale.
Grâce à ses avancées spécifiques à un domaine, Me LLaMA établit de nouvelles références sur un large éventail de tâches de raisonnement médical. Cela fait de Me LLaMA un atout non négligeable pour les applications et la recherche en PNL médicale.
Le code, les ensembles de données et les modèles sont disponibles pour une utilisation non commerciale.
Ce logiciel et ce modèle sont fournis « tels quels », sans garantie d'aucune sorte, expresse ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs, contributeurs ou détenteurs de droits d'auteur ne pourront être tenus responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans le cadre d'une action contractuelle, délictuelle ou autre, découlant de, hors ou en relation avec le logiciel ou le utilisation ou autres transactions dans le logiciel.
Les modèles Me LLaMA sont des outils de recherche destinés à être utilisés dans le domaine de la linguistique informatique et de la médecine. Ils ne sont pas destinés à être utilisés comme outils de diagnostic ou pour la prise de décision clinique sans validation et approbation réglementaire appropriées. Les utilisateurs des modèles Me LLaMA doivent être conscients de leurs responsabilités pour garantir l’utilisation éthique et appropriée de cette technologie, y compris le respect de toutes les exigences légales et réglementaires applicables.
Le contenu et les données fournis avec les modèles ne remplacent pas l’expertise des professionnels de santé. Les professionnels de la santé doivent faire appel à leur jugement professionnel pour évaluer les résultats des modèles Me LLaMA. Les patients ne doivent pas utiliser les résultats du modèle pour l'autodiagnostic ou le traitement sans consulter un prestataire de soins de santé qualifié. Les informations ne sont pas destinées à la prise de décision clinique, ne sont pas destinées à être utilisées dans le diagnostic ou le traitement des patients et peuvent ne pas être utiles ou appropriées à des fins cliniques.
De plus, il est expressément interdit aux utilisateurs de partager ou de redistribuer les résultats générés à partir des modèles Me LLaMA sans l'autorisation explicite des auteurs. Cela inclut, sans toutefois s'y limiter, la publication, la distribution ou la mise à disposition des résultats générés à des tiers sous quelque forme que ce soit, que ce soit à des fins commerciales ou non. Cette restriction est mise en place pour garantir une utilisation responsable de la technologie et pour respecter les droits de propriété intellectuelle associés aux modèles et à leurs résultats. La violation de ces conditions peut entraîner des poursuites judiciaires et la révocation de l'accès aux modèles.
Le développement de Me LLaMA a impliqué un processus méticuleux de pré-formation continue et de réglage des instructions des modèles LLaMA2, incorporant un vaste nombre de jetons 129B et 214 000 échantillons de réglage d'instructions provenant d'un large éventail de domaines généraux, biomédicaux et cliniques. Cette approche globale visait à équilibrer les connaissances spécifiques à un domaine avec une compréhension plus large du contexte général, atténuant ainsi efficacement les problèmes d'oubli catastrophiques.
L'ensemble de données mixtes de pré-formation continue, comprenant 129 milliards de jetons, comprend un large éventail de littérature biomédicale, de notes cliniques et de données de domaine général. Cet ensemble de données est conçu pour garantir une concentration approfondie sur les connaissances du domaine médical tout en intégrant un large spectre de connaissances générales. La composition de l'ensemble de données comprend :
La pré-formation a utilisé un ratio de 15:1:4 pour les données biomédicales, cliniques et générales, dans le but de maintenir une forte orientation médicale tout en élargissant la compréhension du modèle.
Les modèles Me LLaMA, 13B et 70B, ont été développés grâce à une pré-formation continue et à un réglage des instructions sur le supercalculateur HiPerGator de l'Université de Floride, équipé de 160 GPU A100 de 80 Go. Le processus visait à adapter les modèles LLaMA2 pour une meilleure compréhension et génération de textes médicalement pertinents. Le programme d'entraînement impliquait :
Après la phase de pré-formation, les modèles Me LLaMA ont subi un réglage des instructions à l'aide de 8 GPU H100 pendant 3 époques, avec un taux d'apprentissage de 1e-5. Cette phase s'est concentrée sur l'affinement de la capacité des modèles à suivre des instructions et à généraliser à l'ensemble des tâches médicales, en utilisant un réglage fin efficace des paramètres basé sur LoRA pour des performances améliorées.
Cette procédure de formation détaillée souligne l'approche globale adoptée dans le développement des modèles Me LLaMA, en tirant parti des ressources informatiques et des méthodologies avancées pour atteindre des performances de pointe dans le domaine médical.
Pour utiliser le modèle Me LLaMA localement, commencez par acquérir les fichiers de modèle nécessaires auprès de notre projet PhysioNet.
Tout d’abord, assurez-vous que les bibliothèques torch
et transformers
sont installées dans votre environnement Python. Ces bibliothèques sont requises pour travailler avec le modèle.
Pour la génération de texte de base, vous utiliserez un pipeline de la bibliothèque transformers
. Cette méthode simplifie le processus de génération de texte. Voici comment vous pouvez le configurer :
from transformers import pipeline
# Ensure you replace "FOLDER_PATH_TO_MODEL" with the actual path to your model files.
pipe = pipeline ( "text-generation" , model = "FOLDER_PATH_TO_MODEL" )
# Example usage for generating text.
generated_text = pipe ( "The medical condition is characterized by" , num_return_sequences = 1 )
print ( generated_text )
Cet extrait de code montre comment générer du texte en fonction d'une invite. L'argument num_return_sequences=1
spécifie que vous souhaitez générer une séquence de texte.
Pour les tâches nécessitant davantage de personnalisation ou de capacités de réglage précis, vous préférerez peut-être charger directement le tokenizer et le modèle. Cette approche vous donne plus de contrôle sur le processus de génération de texte, vous permettant d'ajuster des paramètres tels que la longueur maximale du texte généré. Voici un exemple plus détaillé :
from transformers import AutoTokenizer , AutoModelForCausalLM
# Load the tokenizer and model from your local model directory.
# Don't forget to replace "FOLDER_PATH_TO_MODEL" with the actual path to your model files.
tokenizer = AutoTokenizer . from_pretrained ( "FOLDER_PATH_TO_MODEL" )
model = AutoModelForCausalLM . from_pretrained ( "FOLDER_PATH_TO_MODEL" )
# Tokenizing input text for the model.
input_ids = tokenizer ( "[INPUT SENTENCE]" , return_tensors = "pt" ). input_ids
# Generating output based on the input_ids.
# You can adjust the max_length parameter as necessary for your use case.
generated_tokens = model . generate ( input_ids , max_length = 50 )
# Decoding the generated tokens to produce readable text.
generated_text = tokenizer . decode ( generated_tokens [ 0 ], skip_special_tokens = True )
print ( generated_text )
Cette configuration permet des interactions plus nuancées avec le modèle, telles que le réglage fin d'ensembles de données spécifiques ou la modification des paramètres de génération pour différentes sorties. N'oubliez pas de remplacer « [INPUT SENTENCE] » par la phrase ou l'invite sur laquelle vous souhaitez que le modèle développe ou réponde.
git clone [email protected]:BIDS-Xu-Lab/Me-LLaMA.git --recursive
cd Me-LLaMA
pip install poetry
poetry install
cd src/medical-evaluation
poetry run pip install -e .[multilingual]
poetry run python -m spacy download en_core_web_lg
Avant l'évaluation, veuillez télécharger le point de contrôle BART sur src/metrics/BARTScore/bart_score.pth
.
Pour une évaluation automatisée, veuillez suivre ces instructions :
Transformateur câlin
Pour évaluer un modèle hébergé sur le HuggingFace Hub (par exemple, llama2-7b-hf), modifiez cette commande dans scripts/run_evaluation.sh
:
poetry run python src/eval.py
--model " hf-causal-vllm "
--model_args " use_accelerate=True,pretrained=meta-llama/Llama-2-7b-chat-hf,use_fast=False "
--tasks " PUBMEDQA,MedQA,MedMCQA,EmrQA,i2b2,DDI2013,hoc,MTSample,PUBMEDSUM,MimicSum,BioNLI,MedNLI "
Ensuite, exécutez la commande bash :
bash scripts/run_evaluation.sh
Plus de détails peuvent être trouvés dans la documentation lm_eval.
Effectuez les mêmes étapes que les modèles open source, en commençant par modifier le fichier bash avec :
export OPENAI_API_SECRET_KEY=YOUR_KEY_HERE
poetry run python src/eval.py
--model gpt-4
--tasks " PUBMEDQA,MedQA,MedMCQA,EmrQA,i2b2,DDI2013,hoc,MTSample,PUBMEDSUM,MimicSum,BioNLI,MedNLI "
Attention, pour des tâches telles que NER, l'évaluation automatisée est basée sur un modèle spécifique. Cela pourrait ne pas permettre d'extraire les informations pertinentes dans les paramètres de zéro tir, ce qui entraînerait des performances relativement inférieures par rapport aux résultats précédents annotés par l'homme.
@misc{xie2024llama, title={Me LLaMA : Modèles de langage étendus de la Fondation pour les applications médicales}, author={Qianqian Xie et Qingyu Chen et Aokun Chen et Cheng Peng et Yan Hu et Fongci Lin et Xueqing Peng et Jimin Huang et Jeffrey Zhang et Vipina Keloth et Huan He et Lucila Ohno-Machido et Yonghui Wu et Hua Xu et Jiang Bian} , année={2024}, eprint={2402.12749}, archivePrefix={arXiv}, PrimaryClass={cs.CL} }