
Este repositório contém tubos e modelos personalizados relacionados ao uso do Spacy para documentos científicos.
Em particular, existe um tokenizador personalizado que adiciona regras de tokenização sobre o tokenizador baseado em regras da Spacy, um tagger de POS e um analisador sintático treinado em dados biomédicos e um modelo de detecção de span de entidade. Separadamente, também existem modelos NER para tarefas mais específicas.
Apenas procurando testar os modelos em seus dados? Confira nossa demonstração (Nota: esta demonstração está executando uma versão mais antiga do Scispacy e pode produzir resultados diferentes da versão mais recente).
A instalação do Scispacy requer duas etapas: instalando a biblioteca e intalling os modelos. Para instalar a biblioteca, execute:
pip install scispacyPara instalar um modelo (consulte nossa seleção completa dos modelos disponíveis abaixo), execute um comando como o seguinte:
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 fortemente que você use um ambiente Python isolado (como VirtualEnv ou CONDA) para instalar o Scispacy. Dê uma olhada abaixo na seção "Configuração de um ambiente virtual" se precisar de ajuda com isso. Além disso, o Scispacy usa recursos modernos do Python e, como tal, está disponível apenas para o Python 3.6 ou maior .
Ao longo dos anos, a instalação do NMSLIB se torna bastante difícil. Existem vários problemas do Github no Scispacy e no próprio NMSLIB repositório sobre isso. Essa matriz é uma tentativa de ajudar os usuários a instalar o NMSLIB em qualquer ambiente que tenham. Não tenho acesso a todos os tipos de ambiente; portanto, se você puder testar algo, abra um problema ou puxe a solicitação!
| Windows 11 | Subsistema 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 com a instalação pip de scispacy
= não funciona normalmente com a instalação pip de scispacy
? = pode ser instalado com mamba install nmslib
= pode ser instalado com CFLAGS="-mavx -DWARN(a)=(a)" pip install nmslib
? = pode ser instalado com pip install nmslib-metabrainz
? = pode ser instalado com conda install -c conda-forge nmslib
❓ = não confirmado
Outros métodos mencionados nos problemas do GitHub, mas não confirmados para quais versões eles trabalham:
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' O Mamba pode ser usado configurando um ambiente virtual com a versão do Python necessária para o Scispacy. Se você já possui um ambiente Python que deseja usar, pode pular para a seção 'Instalação via Pip'.
Siga as instruções de instalação para Mamba.
Crie um ambiente de conda chamado "Scispacy" com o Python 3.9 (qualquer versão> = 3.6 deve funcionar):
mamba create -n scispacy python=3.10Ative o ambiente Mamba. Você precisará ativar o ambiente do CONDA em cada terminal no qual deseja usar o Scispacy.
mamba activate scispacy Agora você pode instalar scispacy e um dos modelos usando as etapas acima.
Depois de concluir as etapas acima e baixar um dos modelos abaixo, você pode carregar um modelo Scispacy, como faria com qualquer outro modelo de spacy. Por exemplo:
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." ) Se você estiver atualizando scispacy , precisará baixar os modelos novamente, para obter as versões do modelo compatíveis com a versão do scispacy que você possui. O link para o modelo que você baixar deve conter o número da versão de scispacy que você possui.
Para instalar um modelo, clique no link abaixo para baixar o modelo e depois executar
pip install < / path / to / download >Como alternativa, você pode instalar diretamente a partir do URL clicando com o botão direito do mou
pip install CMD - V ( to paste the copied URL )| Modelo | Descrição | Instale o URL |
|---|---|---|
| en_core_sci_sm | Um oleoduto completo para dados biomédicos com um vocabulário ~ 100k. | Download |
| en_core_sci_md | Um oleoduto completo para dados biomédicos com um vocabulário ~ 360k e vetores de 50 mil palavras. | Download |
| en_core_sci_lg | Um oleoduto completo para dados biomédicos com um vocabulário ~ 785k e vetores de 600 mil palavras. | Download |
| en_core_sci_scibert | Um oleoduto completo para dados biomédicos com um vocabulário ~ 785k e allenai/scibert-base como modelo de transformador. Você pode usar uma GPU com este modelo. | Download |
| en_ner_craft_md | Um modelo NER Spacy treinado no corpus artesanal. | Download |
| en_ner_jnlpba_md | Um modelo NER Spacy treinado no JNLPBA Corpus. | Download |
| en_ner_bc5cdr_md | Um modelo NER espacial treinado no corpus BC5CDR. | Download |
| en_ner_bionlp13cg_md | Um modelo NER Spacy treinado no corpus bionlp13cg. | Download |
O setor de abreviação é um componente de spacy que implementa o algoritmo de detecção de abreviação em "um algoritmo simples para identificar definições de abreviação no texto biomédico"., (Schwartz & Hearst, 2003).
Você pode acessar a lista de abreviações por meio do atributo doc._.abbreviations e, para uma determinada abreviação, você pode acessar sua forma longa (que é um spacy.tokens.Span ) usando span._.long_form , que apontará para outro span no documento.
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 receptorObserve que se você deseja ser capaz de serializar seus objetos
doc, carregue o detector de abreviação commake_serializable=True, por exemplonlp.add_pipe("abbreviation_detector", config={"make_serializable": True})
O EntityLinker é um componente Spacy que executa a ligação a uma base de conhecimento. O vinculador simplesmente executa uma pesquisa baseada em String, baseada em String (Char -3grams) em entidades nomeadas, comparando -as com os conceitos em uma base de conhecimento usando uma pesquisa aproximada dos vizinhos mais próximos.
Atualmente (v2.5.0), existem 5 ligantes suportados:
umls : Links para o sistema de linguagem médica unificada, níveis 0,1,2 e 9. Isso possui ~ 3M conceitos.mesh : links para os títulos do assunto médico. Isso contém um conjunto menor de entidades de alta qualidade, que são usadas para indexação no PubMed. Malha contém ~ 30k entidades. Nota: A malha KB é derivada diretamente da própria malha e, como tal, usa diferentes identificadores exclusivos que os outros KBs.rxnorm : links para a ontologia rxNorm. O RXNorm contém ~ 100k conceitos focados em nomes normalizados para medicamentos clínicos. É composto por vários outros vocabulários de medicamentos comumente usados em gerenciamento de farmácias e interação com medicamentos, incluindo o primeiro banco de dados, MicroMedex e o banco de dados de medicamentos padrão -ouro.go : Links para a ontologia genética. A ontologia genética contém ~ 67k conceitos focados nas funções dos genes.hpo : Links para a ontologia do fenótipo humano. A ontologia do fenótipo humano contém conceitos de 16k focados em anormalidades fenotípicas encontradas em doenças humanas.Você pode brincar com alguns dos parâmetros abaixo para se adaptar ao seu caso de uso (maior precisão, maior recall etc.).
resolve_abbreviations : bool = True, optional (default = False) Se deve resolver as abreviações identificadas no documento antes de executar a vinculação. Este parâmetro não tem efeito se não houver AbbreviationDetector no oleoduto Spacy.k : int, optional, (default = 30) O número de vizinhos mais próximos a procurar do gerador candidato por menção.threshold : float, optional, (default = 0.7) O limite de que um candidato de menção deve alcançar a ser adicionado à menção no documento como candidato à menção.no_definition_threshold : float, optional, (default = 0.95) O limite de que um candidato a entidade deve alcançar a ser adicionado à menção no documento como candidato à menção se o candidato da entidade não tiver uma definição.filter_for_definitions: bool, default = True se deve filtrar entidades que podem ser retornadas apenas para incluir aqueles com definições na base de conhecimento.max_entities_per_mention : int, optional, default = 5 O número máximo de entidades que serão retornadas para uma determinada menção, independentemente de quantos sejam os vizinhos mais próximos. Esta classe define o atributo ._.kb_ents em vãos espaciais, que consiste em uma lista [tupla [str, float]] correspondente ao KB Concept_id e à pontuação associada para uma lista de max_entities_per_mention Número de entidades.
Você pode procurar mais informações para um determinado ID usando o atributo KB desta 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 , ...Este componente implementa a aquisição automática de hiponymas de grandes corpora de texto usando o componente Spacy Matcher.
Passando extended=True ao HyponymDetector Usará o conjunto estendido de padrões Hearst, que incluem uma recall mais alta, mas as relações de hipoonimia de precisão mais baixa (por exemplo, x em comparação com y, x semelhante a y, etc).
Este componente produz um atributo de nível de DOC no Docpacy Doc: doc._.hearst_patterns , que é uma lista que contém tuplas de pares de hipoônimos extraídos. As tuplas contêm:
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 )]Se você usar a Scispacy em sua pesquisa, cite o Scispacy: modelos rápidos e robustos para o processamento de linguagem natural biomédica. Além disso, indique qual versão e modelo de Scispacy você usou para que sua pesquisa possa ser reproduzida.
@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/.",
}
A Scispacy é um projeto de código aberto desenvolvido pelo Instituto Allen de Inteligência Artificial (AI2). A AI2 é um instituto sem fins lucrativos, com a missão de contribuir com a humanidade por meio de pesquisa e engenharia de IA de alto impacto.