
Ce référentiel contient des tuyaux et des modèles personnalisés liés à l'utilisation de Spacy pour des documents scientifiques.
En particulier, il existe un tokenizer personnalisé qui ajoute des règles de tokenisation en plus du tokenizer basé sur les règles de Spacy, un tagueur POS et un analyseur syntaxique formé sur des données biomédicales et un modèle de détection de gamme d'entités. Par ailleurs, il existe également des modèles NER pour des tâches plus spécifiques.
Vous cherchez simplement à tester les modèles sur vos données? Consultez notre démo (Remarque: cette démo exécute une ancienne version de Scispacy et peut produire des résultats différents de la dernière version).
L'installation de SCISPACY nécessite deux étapes: l'installation de la bibliothèque et l'installer les modèles. Pour installer la bibliothèque, exécutez:
pip install scispacyPour installer un modèle (voir notre sélection complète des modèles disponibles ci-dessous), exécutez une commande comme ce qui suit:
pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.5.4/en_core_sci_sm-0.5.4.tar.gzRemarque: Nous vous recommandons fortement d'utiliser un environnement python isolé (comme VirtualEnv ou Conda) pour installer Scispacy. Jetez un œil ci-dessous dans la section "Configuration d'un environnement virtuel" si vous avez besoin d'aide avec cela. De plus, Scispacy utilise des caractéristiques modernes de Python et, en tant que telles, n'est disponible que pour Python 3,6 ou plus .
Au fil des ans, l'installation de NMSLIB est assez difficile. Il y a un certain nombre de problèmes GitHub sur Scispacy et le repo NMSLIB lui-même. Cette matrice est une tentative d'aider les utilisateurs à installer NMSLIB dans n'importe quel environnement. Je n'ai pas accès à tous les types d'environnement, donc si vous êtes en mesure de tester quelque chose, veuillez ouvrir une demande de problème ou de traction!
| Windows 11 | Sous-système Windows pour Linux | Mac M1 | Mac m2 | Mac m3 | Mac M4 | Intel Mac | |
|---|---|---|---|---|---|---|---|
| Python 3.8 | ✅ | ✅ | ❓ | ❓ | ? | ❓ | |
| Python 3.9 | ? | ✅ | ? | ❓ | ? | ❓ | |
| Python 3.10 | ? | ✅ | ❓ | ❓ | ❓ | ? | ✅ |
| Python 3.11 | ? | ? | ❓ | ❓ | ❓ | ? | |
| Python 3.12 | ? | ?? | ❓ | ❓ | ❓ | ? | ❓ |
✅ = Fonctionne normalement avec l'installation PIP de Scispacy
= ne fonctionne pas normalement avec l'installation PIP de scipacy
? = Peut être installé avec mamba install nmslib
= Peut être installé avec CFLAGS="-mavx -DWARN(a)=(a)" pip install nmslib
? = Peut être installé avec pip install nmslib-metabrainz
? = Peut être installé avec conda install -c conda-forge nmslib
❓ = non confirmé
Autres méthodes mentionnées dans les problèmes de github, mais non confirmées pour les versions pour lesquelles ils travaillent:
CFLAGS="-mavx -DWARN(a)=(a)" pip install nmslibpip install --no-binary :all: nmslibpip install "nmslib @ git+https://github.com/nmslib/nmslib.git/#subdirectory=python_bindings"pip install --upgrade pybind11 + pip install --verbose 'nmslib @ git+https://github.com/nmslib/nmslib.git#egg=nmslib&subdirectory=python_bindings' Mamba peut être utilisé pour configurer un environnement virtuel avec la version de Python requise pour Scispacy. Si vous avez déjà un environnement Python que vous souhaitez utiliser, vous pouvez passer à la section «Installation via PIP».
Suivez les instructions d'installation pour Mamba.
Créez un environnement conda appelé "Scispacy" avec Python 3.9 (toute version> = 3.6 devrait fonctionner):
mamba create -n scispacy python=3.10Activez l'environnement Mamba. Vous devrez activer l'environnement Conda dans chaque terminal dans lequel vous souhaitez utiliser Scispacy.
mamba activate scispacy Vous pouvez maintenant installer scispacy et l'un des modèles en utilisant les étapes ci-dessus.
Une fois que vous avez terminé les étapes ci-dessus et téléchargé l'un des modèles ci-dessous, vous pouvez charger un modèle Scispacy comme vous le feriez pour n'importe quel autre modèle spacy. Par exemple:
import spacy
nlp = spacy . load ( "en_core_sci_sm" )
doc = nlp ( "Alterations in the hypocretin receptor 2 and preprohypocretin genes produce narcolepsy in some animals." ) Si vous améliorez scispacy , vous devrez à nouveau télécharger les modèles pour obtenir les versions du modèle compatibles avec la version de scispacy que vous avez. Le lien vers le modèle que vous téléchargez doit contenir le numéro de version de scispacy que vous avez.
Pour installer un modèle, cliquez sur le lien ci-dessous pour télécharger le modèle, puis exécuter
pip install < / path / to / download >Alternativement, vous pouvez installer directement à partir de l'URL en cliquant avec le bouton droit sur le lien, en sélectionnant "Copier l'adresse du lien" et en exécutant
pip install CMD - V ( to paste the copied URL )| Modèle | Description | Installer l'URL |
|---|---|---|
| en_core_sci_sm | Un pipeline spacy complet pour les données biomédicales avec un vocabulaire ~ 100K. | Télécharger |
| en_core_sci_md | Un pipeline spacy complet pour les données biomédicales avec un vocabulaire ~ 360k et des vecteurs de mots 50k. | Télécharger |
| en_core_sci_lg | Un pipeline spacy complet pour les données biomédicales avec un vocabulaire ~ 785k et des vecteurs de mots 600k. | Télécharger |
| en_core_sci_scibert | Un pipeline spacy complet pour les données biomédicales avec un vocabulaire ~ 785K et allenai/scibert-base comme modèle de transformateur. Vous voudrez peut-être utiliser un GPU avec ce modèle. | Télécharger |
| en_ner_craft_md | Un modèle Spacy Ner formé sur le Craft Corpus. | Télécharger |
| en_ner_jnlpba_md | Un modèle SPACY NER s'est formé sur le corpus JNLPBA. | Télécharger |
| en_ner_bc5cdr_md | Un modèle SPACY NER a formé sur le corpus BC5CDR. | Télécharger |
| en_ner_bionlp13cg_md | Un modèle SPACY NER a formé sur le corpus Bionlp13cg. | Télécharger |
L'AbréviationDetector est un composant spacy qui met en œuvre l'algorithme de détection d'abréviation dans "Un algorithme simple pour identifier les définitions d'abréviation dans le texte biomédical.", (Schwartz et Heart, 2003).
Vous span._.long_form accéder spacy.tokens.Span la liste des abréviations via l'attribut doc._.abbreviations
import spacy
from scispacy . abbreviation import AbbreviationDetector
nlp = spacy . load ( "en_core_sci_sm" )
# Add the abbreviation pipe to the spacy pipeline.
nlp . add_pipe ( "abbreviation_detector" )
doc = nlp ( "Spinal and bulbar muscular atrophy (SBMA) is an
inherited motor neuron disease caused by the expansion
of a polyglutamine tract within the androgen receptor (AR).
SBMA can be caused by this easily." )
print ( "Abbreviation" , " t " , "Definition" )
for abrv in doc . _ . abbreviations :
print ( f" { abrv } t ( { abrv . start } , { abrv . end } ) { abrv . _ . long_form } " )
> >> Abbreviation Span Definition
> >> SBMA ( 33 , 34 ) Spinal and bulbar muscular atrophy
> >> SBMA ( 6 , 7 ) Spinal and bulbar muscular atrophy
> >> AR ( 29 , 30 ) androgen receptorRemarque Si vous souhaitez pouvoir sérialiser vos objets
doc, chargez le détecteur d'abréviation avecmake_serializable=True, par exemplenlp.add_pipe("abbreviation_detector", config={"make_serializable": True})
L' EntityLinker est un composant spacy qui effectue un lien vers une base de connaissances. Le linker effectue simplement une recherche basée sur une chaîne (CHAR-3GRAMS) sur les entités nommées, les comparant aux concepts d'une base de connaissances à l'aide d'une recherche approximative des voisins les plus proches.
Actuellement (v2.5.0), il y a 5 lieurs pris en charge:
umls : Liens vers le système de langage médical unifié, niveaux 0,1,2 et 9. Cela a ~ 3m concepts.mesh : liens vers les titres des sujets médicaux. Cela contient un ensemble plus petit d'entités de meilleure qualité, qui sont utilisées pour l'indexation dans PubMed. Le maillage contient ~ 30k entités. Remarque: Le maillage KB est dérivé directement du maillage lui-même et utilise en tant que tels d'identifiants uniques différents que les autres KB.rxnorm : Liens vers l'ontologie Rxnorm. Rxnorm contient ~ 100k concepts axés sur les noms normalisés pour les médicaments cliniques. Il est composé de plusieurs autres vocabulaires médicamenteux couramment utilisés dans la gestion de la pharmacie et l'interaction médicamenteuse, notamment la première banque de données, Micromedex et la base de données de médicaments sur les normes.go : Liens vers l'ontologie du gène. L'ontologie du gène contient ~ 67k concepts axés sur les fonctions des gènes.hpo : liens vers l'ontologie du phénotype humain. L'ontologie du phénotype humain contient 16k concepts axés sur les anomalies phénotypiques rencontrées dans les maladies humaines.Vous voudrez peut-être jouer avec certains des paramètres ci-dessous pour vous adapter à votre cas d'utilisation (précision plus élevée, rappel plus élevé, etc.).
resolve_abbreviations : bool = True, optional (default = False) s'il faut résoudre les abréviations identifiées dans le DOC avant d'effectuer une liaison. Ce paramètre n'a aucun effet s'il n'y a pas AbbreviationDetector dans le pipeline spacy.k : int, optional, (default = 30) Le nombre de voisins les plus proches à rechercher du générateur candidat par mention.threshold : float, optional, (default = 0.7) le seuil qu'un candidat de mention doit atteindre pour être ajouté à la mention du DOC en tant que candidat.no_definition_threshold : float, optional, (default = 0.95) Le seuil qu'un candidat d'entité doit atteindre pour être ajouté à la mention dans le DOC en tant que candidat de mention si le candidat d'entité n'a pas de définition.filter_for_definitions: bool, default = True pour filtrer les entités qui peuvent être renvoyées uniquement inclure celles avec des définitions dans la base de connaissances.max_entities_per_mention : int, optional, default = 5 le nombre maximal d'entités qui seront retournées pour une mention donnée, quel que soit le nombre de voisins les plus proches. max_entities_per_mention classe définit l'attribut ._.kb_ents
Vous pouvez rechercher plus d'informations pour un ID donné en utilisant l'attribut KB de cette classe:
print(linker.kb.cui_to_entity[concept_id])
import spacy
import scispacy
from scispacy . linking import EntityLinker
nlp = spacy . load ( "en_core_sci_sm" )
# This line takes a while, because we have to download ~1GB of data
# and load a large JSON file (the knowledge base). Be patient!
# Thankfully it should be faster after the first time you use it, because
# the downloads are cached.
# NOTE: The resolve_abbreviations parameter is optional, and requires that
# the AbbreviationDetector pipe has already been added to the pipeline. Adding
# the AbbreviationDetector pipe and setting resolve_abbreviations to True means
# that linking will only be performed on the long form of abbreviations.
nlp . add_pipe ( "scispacy_linker" , config = { "resolve_abbreviations" : True , "linker_name" : "umls" })
doc = nlp ( "Spinal and bulbar muscular atrophy (SBMA) is an
inherited motor neuron disease caused by the expansion
of a polyglutamine tract within the androgen receptor (AR).
SBMA can be caused by this easily." )
# Let's look at a random entity!
entity = doc . ents [ 1 ]
print ( "Name: " , entity )
> >> Name : bulbar muscular atrophy
# Each entity is linked to UMLS with a score
# (currently just char-3gram matching).
linker = nlp . get_pipe ( "scispacy_linker" )
for umls_ent in entity . _ . kb_ents :
print ( linker . kb . cui_to_entity [ umls_ent [ 0 ]])
> >> CUI : C1839259 , Name : Bulbo - Spinal Atrophy , X - Linked
> >> Definition : An X - linked recessive form of spinal muscular atrophy . It is due to a mutation of the
gene encoding the ANDROGEN RECEPTOR .
> >> TUI ( s ): T047
> >> Aliases ( abbreviated , total : 50 ):
Bulbo - Spinal Atrophy , X - Linked , Bulbo - Spinal Atrophy , X - Linked , ....
>> > CUI : C0541794 , Name : Skeletal muscle atrophy
> >> Definition : A process , occurring in skeletal muscle , that is characterized by a decrease in protein content ,
fiber diameter , force production and fatigue resistance in response to ...
>> > TUI ( s ): T046
> >> Aliases : ( total : 9 ):
Skeletal muscle atrophy , ATROPHY SKELETAL MUSCLE , skeletal muscle atrophy , ....
> >> CUI : C1447749 , Name : AR protein , human
> >> Definition : Androgen receptor ( 919 aa , ~ 99 kDa ) is encoded by the human AR gene .
This protein plays a role in the modulation of steroid - dependent gene transcription .
> >> TUI ( s ): T116 , T192
>> > Aliases ( abbreviated , total : 16 ):
AR protein , human , Androgen Receptor , Dihydrotestosterone Receptor , AR , DHTR , NR3C4 , ...Ce composant met en œuvre une aéristion automatique des hyponymes à partir de grands corpus de texte à l'aide du composant Matcher Spacy.
Passer extended=True à l' HyponymDetector utilisera l'ensemble étendu de modèles Hearst, qui incluent un rappel plus élevé mais des relations d'hyponymie plus faibles de précision (par exemple x par rapport à y, x similaire à y, etc.).
Ce composant produit un attribut de niveau DOC sur le Doc Spacy: doc._.hearst_patterns , qui est une liste contenant des tuples de paires d'hyponyme extraites. Les tuples contiennent:
str )spacy.Span )spacy.Span ) import spacy
from scispacy . hyponym_detector import HyponymDetector
nlp = spacy . load ( "en_core_sci_sm" )
nlp . add_pipe ( "hyponym_detector" , last = True , config = { "extended" : False })
doc = nlp ( "Keystone plant species such as fig trees are good for the soil." )
print ( doc . _ . hearst_patterns )
> >> [( 'such_as' , Keystone plant species , fig trees )]Si vous utilisez Scispacy dans vos recherches, veuillez citer Scispacy: Modèles rapides et robustes pour le traitement biomédical du langage naturel. De plus, veuillez indiquer la version et le modèle de spiré
@inproceedings{neumann-etal-2019-scispacy,
title = "{S}cispa{C}y: {F}ast and {R}obust {M}odels for {B}iomedical {N}atural {L}anguage {P}rocessing",
author = "Neumann, Mark and
King, Daniel and
Beltagy, Iz and
Ammar, Waleed",
booktitle = "Proceedings of the 18th BioNLP Workshop and Shared Task",
month = aug,
year = "2019",
address = "Florence, Italy",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/W19-5034",
doi = "10.18653/v1/W19-5034",
pages = "319--327",
eprint = {arXiv:1902.07669},
abstract = "Despite recent advances in natural language processing, many statistical models for processing text perform extremely poorly under domain shift. Processing biomedical and clinical text is a critically important application area of natural language processing, for which there are few robust, practical, publicly available models. This paper describes scispaCy, a new Python library and models for practical biomedical/scientific text processing, which heavily leverages the spaCy library. We detail the performance of two packages of models released in scispaCy and demonstrate their robustness on several tasks and datasets. Models and code are available at https://allenai.github.io/scispacy/.",
}
Scispacy est un projet open source développé par l'Allen Institute for Artificial Intelligence (AI2). AI2 est un institut à but non lucratif avec la mission de contribuer à l'humanité par la recherche et l'ingénierie d'IA à fort impact.