
Este repositorio contiene tuberías y modelos personalizados relacionados con el uso de Spacy para documentos científicos.
En particular, existe un tokenizador personalizado que agrega reglas de tokenización sobre el tokenizador basado en reglas de Spacy, un etiquetador POS y un analizador sintáctico entrenado en datos biomédicos y un modelo de detección de amplitud de entidad. Por separado, también hay modelos NER para tareas más específicas.
¿Solo busca probar los modelos en sus datos? Echa un vistazo a nuestra demostración (nota: esta demostración ejecuta una versión anterior de Scispacy y puede producir resultados diferentes que la última versión).
La instalación de Scispacy requiere dos pasos: instalar la biblioteca e indicar los modelos. Para instalar la biblioteca, ejecute:
pip install scispacyPara instalar un modelo (consulte nuestra selección completa de modelos disponibles a continuación), ejecute un comando como el siguiente:
pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.5.4/en_core_sci_sm-0.5.4.tar.gzNota: Recomendamos encarecidamente que use un entorno de pitón aislado (como VirtualEnv o Conda) para instalar Scispacy. Eche un vistazo a continuación en la sección "Configuración de un entorno virtual" si necesita ayuda con esto. Además, Scispacy utiliza características modernas de Python y, como tal, solo está disponible para Python 3.6 o más .
Con los años, la instalación de NMSLIB se ha vuelto bastante difícil. Hay una serie de problemas de GitHub en Scispacy y el repositorio de NMSLIB sobre esto. Esta matriz es un intento de ayudar a los usuarios a instalar NMSLIB en cualquier entorno que tengan. No tengo acceso a todo tipo de entorno, por lo que si puede probar algo, ¡abra un problema o retire la solicitud!
| Windows 11 | Subsistema de Windows para 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 | ? | ? | ❓ | ❓ | ❓ | ? | ❓ |
✅ = funciona normalmente con la instalación de PIP de Scispacy
= no funciona normalmente con la instalación de PIP de Scispacy
? = se puede instalar con mamba install nmslib
= se puede instalar con CFLAGS="-mavx -DWARN(a)=(a)" pip install nmslib
? = se puede instalar con pip install nmslib-metabrainz
? = se puede instalar con conda install -c conda-forge nmslib
❓ = no confirmado
Otros métodos mencionados en temas de GitHub, pero no confirmaron para qué versiones trabajan:
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' Se puede usar Mamba configurar un entorno virtual con la versión de Python requerida para Scispacy. Si ya tiene un entorno Python que desea usar, puede omitir a la sección 'Instalación a través de PIP'.
Siga las instrucciones de instalación para Mamba.
Cree un entorno de condición llamado "Scispacy" con Python 3.9 (cualquier versión> = 3.6 debería funcionar):
mamba create -n scispacy python=3.10Active el entorno mamba. Deberá activar el entorno de conda en cada terminal en el que desea usar Scispacy.
mamba activate scispacy Ahora puede instalar scispacy y uno de los modelos utilizando los pasos anteriores.
Una vez que haya completado los pasos anteriores y haya descargado uno de los modelos a continuación, puede cargar un modelo Scispaccion como lo haría con cualquier otro modelo de Spacy. Por ejemplo:
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 está actualizando scispacy , deberá descargar los modelos nuevamente, para que las versiones del modelo compatible con la versión de scispacy que tiene. El enlace al modelo que descarga debe contener el número de versión de scispacy que tiene.
Para instalar un modelo, haga clic en el siguiente enlace para descargar el modelo y luego ejecutar
pip install < / path / to / download >Alternativamente, puede instalar directamente desde la URL haciendo clic derecho en el enlace, seleccionando "Dirección de enlace de copia" y ejecutando
pip install CMD - V ( to paste the copied URL )| Modelo | Descripción | Instalar URL |
|---|---|---|
| en_core_sci_sm | Una tubería SPacy completa para datos biomédicos con un vocabulario de ~ 100k. | Descargar |
| en_core_sci_md | Una tubería SPACY completa para datos biomédicos con un vocabulario de ~ 360k y vectores de palabras 50k. | Descargar |
| en_core_sci_lg | Una tubería SPacy completa para datos biomédicos con un vocabulario de ~ 785k y 600k vectores de palabras. | Descargar |
| en_core_sci_scibert | Una tubería SPacy completa para datos biomédicos con un vocabulario de ~ 785k y allenai/scibert-base como modelo de transformador. Es posible que desee usar una GPU con este modelo. | Descargar |
| en_ner_craft_md | Una modelo de Spacy Ner entrenada en el Corpus Craft. | Descargar |
| en_ner_jnlpba_md | Un modelo de Spacy Ner entrenó en el Corpus JNLPBA. | Descargar |
| EN_NER_BC5CDR_MD | Un modelo Spacy Ner entrenado en el Corpus BC5CDR. | Descargar |
| EN_NER_BIONLP13CG_MD | Un modelo Spacy NER entrenado en el corpus BionLP13CG. | Descargar |
El Detector de Abreviation es un componente espacial que implementa el algoritmo de detección de abreviación en "un algoritmo simple para identificar definiciones de abreviatura en texto biomédico". (Schwartz y Hearst, 2003).
span._.long_form acceder spacy.tokens.Span la lista de abreviaturas a través del atributo 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 receptorNota Si desea poder serializar sus objetos
doc, cargue el detector de abreviatura conmake_serializable=True, por ejemplonlp.add_pipe("abbreviation_detector", config={"make_serializable": True})
El EntityLinker es un componente espacial que realiza vinculación con una base de conocimiento. El enlazador simplemente realiza una búsqueda basada en una superposición de cadenas (char -3grams) en entidades nombradas, comparándolos con los conceptos en una base de conocimiento utilizando una búsqueda aproximada de vecinos más cercanos.
Actualmente (v2.5.0), hay 5 enlazadores compatibles:
umls : enlaces al sistema de lenguaje médico unificado, niveles 0,1,2 y 9. Esto tiene ~ 3m conceptos.mesh : enlaces a los encabezados de sujetos médicos. Esto contiene un conjunto más pequeño de entidades de mayor calidad, que se utilizan para la indexación en PubMed. La malla contiene ~ 30k entidades. Nota: El KB de malla se deriva directamente de la malla misma, y como tal utiliza diferentes identificadores únicos que los otros KB.rxnorm : enlaces a la ontología RxNorm. RxNorm contiene ~ 100k conceptos centrados en nombres normalizados para medicamentos clínicos. Se compone de varios otros vocabularios de fármacos comúnmente utilizados en el manejo de la farmacia y la interacción de los medicamentos, incluidos el primer banco de datos, el micromedex y la base de datos de drogas estándar de oro.go : enlaces a la ontología del gen. La ontología genética contiene ~ 67k conceptos centrados en las funciones de los genes.hpo : enlaces a la ontología del fenotipo humano. La ontología del fenotipo humano contiene conceptos de 16k centrados en las anormalidades fenotípicas encontradas en la enfermedad humana.Es posible que desee jugar con algunos de los parámetros a continuación para adaptarse a su caso de uso (mayor precisión, mayor retiro, etc.).
resolve_abbreviations : bool = True, optional (default = False) Si resolver abreviaturas identificadas en el DOC antes de realizar la vinculación. Este parámetro no tiene ningún efecto si no hay AbbreviationDetector en la tubería de Spacy.k : int, optional, (default = 30) el número de vecinos más cercanos para buscar al generador candidato por mención.threshold : float, optional, (default = 0.7) El umbral que un candidato de mención debe llegar a la mención en el Doc como candidato de mención.no_definition_threshold : float, optional, (default = 0.95) El umbral que un candidato a la entidad debe llegar a la mención en el Doc como un candidato de mención si el candidato de entidad no tiene una definición.filter_for_definitions: bool, default = True si filtrar entidades que pueden devolverse para incluir solo aquellos con definiciones en la base de conocimiento.max_entities_per_mention : int, optional, default = 5 El número máximo de entidades que se devolverán por una mención dada, independientemente de cuántos vecinos se encuentren más cercanos. Esta clase establece el atributo ._.kb_ents en los tramos de Spacy, que consiste en una lista [Tuple [STR, Float]] correspondiente al KB Concept_ID y la puntuación asociada para una lista de entidades max_entities_per_mention .
Puede buscar más información para una identificación determinada utilizando el atributo KB de esta clase:
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 , ...Este componente implementa la acumulación automática de hiponemas de corporaciones de texto grandes utilizando el componente Spacy Matcher.
Pasar extended=True al HyponymDetector utilizará el conjunto extendido de patrones Hearst, que incluyen un mayor retiro pero relaciones de hiponimia de menor precisión (p. Ej. En comparación con y, x similar a y, etc.).
Este componente produce un atributo de nivel DOC en el Spacy Doc: doc._.hearst_patterns , que es una lista que contiene tuplas de pares hipónimos extraídos. Las tuplas contienen:
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 usa Scispacy en su investigación, cite Scispacy: modelos rápidos y robustos para el procesamiento biomédico del lenguaje natural. Además, indique qué versión y modelo de Scispacy utilizó para que su investigación pueda reproducirse.
@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 es un proyecto de código abierto desarrollado por el Instituto Allen de Inteligencia Artificial (AI2). AI2 es un instituto sin fines de lucro con la misión de contribuir a la humanidad a través de la investigación e ingeniería de IA de alto impacto.