
Repositori ini berisi pipa dan model khusus yang terkait dengan penggunaan spacy untuk dokumen ilmiah.
Secara khusus, ada tokenizer khusus yang menambahkan aturan tokenisasi di atas tokenizer berbasis aturan Spacy, tagger POS dan parser sintaksis yang dilatih pada data biomedis dan model deteksi rentang entitas. Secara terpisah, ada juga model NER untuk tugas yang lebih spesifik.
Hanya ingin menguji model pada data Anda? Lihat demo kami (Catatan: Demo ini menjalankan skispacy versi yang lebih lama dan dapat menghasilkan hasil yang berbeda dari versi terbaru).
Menginstal scispacy memerlukan dua langkah: Menginstal perpustakaan dan melintasi model. Untuk menginstal perpustakaan, jalankan:
pip install scispacyUntuk menginstal model (lihat pilihan lengkap model yang tersedia di bawah ini), jalankan perintah seperti berikut:
pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.5.4/en_core_sci_sm-0.5.4.tar.gzCATATAN: Kami sangat menyarankan Anda menggunakan lingkungan Python yang terisolasi (seperti VirtualEnv atau Conda) untuk menginstal scispacy. Lihatlah di bawah di bagian "Menyiapkan Lingkungan Virtual" jika Anda memerlukan bantuan dengan ini. Selain itu, scispacy menggunakan fitur modern Python dan dengan demikian hanya tersedia untuk Python 3.6 atau lebih besar .
Selama bertahun -tahun, memasang NMSLIB menjadi sangat sulit. Ada sejumlah masalah GitHub tentang scispacy dan NMSLIB repo sendiri tentang ini. Matriks ini merupakan upaya untuk membantu pengguna menginstal NMSLIB di lingkungan apa pun yang mereka miliki. Saya tidak memiliki akses ke setiap jenis lingkungan, jadi jika Anda dapat menguji sesuatu, buka permintaan atau tarik permintaan!
| Windows 11 | Subsistem Windows untuk 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 | ? | ?? | ❓ | ❓ | ❓ | ? | ❓ |
✅ = Bekerja secara normal dengan pemasangan scispacy pip
= tidak berfungsi secara normal dengan pemasangan scispacy pip
? = dapat diinstal dengan mamba install nmslib
= dapat diinstal dengan CFLAGS="-mavx -DWARN(a)=(a)" pip install nmslib
? = dapat diinstal dengan pip install nmslib-metabrainz
? = dapat diinstal dengan conda install -c conda-forge nmslib
❓ = belum dikonfirmasi
Metode lain yang disebutkan dalam masalah GitHub, tetapi belum dikonfirmasi versi apa yang mereka kerjakan:
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 dapat digunakan mengatur lingkungan virtual dengan versi python yang diperlukan untuk scispacy. Jika Anda sudah memiliki lingkungan Python yang ingin Anda gunakan, Anda dapat melompat ke bagian 'Instaling Via Pip'.
Ikuti instruksi instalasi untuk Mamba.
Buat lingkungan conda yang disebut "scispacy" dengan Python 3.9 (versi apa pun> = 3.6 harus berfungsi):
mamba create -n scispacy python=3.10Aktifkan lingkungan Mamba. Anda perlu mengaktifkan lingkungan Conda di setiap terminal di mana Anda ingin menggunakan scispacy.
mamba activate scispacy Sekarang Anda dapat menginstal scispacy dan salah satu model menggunakan langkah -langkah di atas.
Setelah Anda menyelesaikan langkah -langkah di atas dan mengunduh salah satu model di bawah ini, Anda dapat memuat model scispacy seperti yang Anda lakukan pada model spacy lainnya. Misalnya:
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." ) Jika Anda meningkatkan scispacy , Anda harus mengunduh model lagi, untuk membuat versi model kompatibel dengan versi scispacy yang Anda miliki. Tautan ke model yang Anda unduh harus berisi nomor versi scispacy yang Anda miliki.
Untuk menginstal model, klik tautan di bawah ini untuk mengunduh model, dan kemudian jalankan
pip install < / path / to / download >Atau, Anda dapat menginstal langsung dari URL dengan mengklik kanan pada tautan, memilih "Salin Alamat Tautan" dan berjalan
pip install CMD - V ( to paste the copied URL )| Model | Keterangan | Instal URL |
|---|---|---|
| en_core_sci_sm | Pipa spacy penuh untuk data biomedis dengan kosakata ~ 100k. | Unduh |
| EN_CORE_SCI_MD | Pipa spacy penuh untuk data biomedis dengan kosakata ~ 360k dan vektor kata 50k. | Unduh |
| en_core_sci_lg | Pipa spacy penuh untuk data biomedis dengan kosakata ~ 785k dan vektor kata 600k. | Unduh |
| EN_CORE_SCI_SCIBERT | Pipa spacy penuh untuk data biomedis dengan kosakata ~ 785k dan allenai/scibert-base sebagai model transformator. Anda mungkin ingin menggunakan GPU dengan model ini. | Unduh |
| en_ner_craft_md | Model spacy ner yang dilatih pada corpus kerajinan. | Unduh |
| en_ner_jnlpba_md | Model spacy ner yang dilatih di jnlpba corpus. | Unduh |
| EN_NER_BC5CDR_MD | Model spacy ner yang dilatih pada korpus BC5CDR. | Unduh |
| en_ner_bionlp13cg_md | Model spacy ner yang dilatih pada corpus BionLP13CG. | Unduh |
Singkatan Detektor adalah komponen spacy yang mengimplementasikan algoritma deteksi singkatan dalam "algoritma sederhana untuk mengidentifikasi definisi singkatan dalam teks biomedis.", (Schwartz & Hearst, 2003).
Anda dapat mengakses daftar singkatan melalui doc._.abbreviations dan untuk singkatan yang diberikan, Anda dapat mengakses bentuk panjang (yang merupakan spacy.tokens.Span ) menggunakan span._.long_form , yang akan menunjuk ke rentang lain dalam dokumen.
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 receptorCATATAN Jika Anda ingin dapat membuat serial objek
docAnda, muat detektor singkatan denganmake_serializable=True, misalnyanlp.add_pipe("abbreviation_detector", config={"make_serializable": True})
EntityLinker adalah komponen spacy yang melakukan tautan ke basis pengetahuan. Linker hanya melakukan pencarian string overlap - berbasis (char -3grams) pada entitas bernama, membandingkannya dengan konsep dalam basis pengetahuan menggunakan perkiraan pencarian tetangga terdekat.
Saat ini (v2.5.0), ada 5 penghubung yang didukung:
umls : Tautan ke sistem bahasa medis terpadu, level 0,1,2 dan 9. Ini memiliki ~ 3M konsep.mesh : Tautan ke judul subjek medis. Ini berisi serangkaian entitas berkualitas lebih tinggi yang lebih kecil, yang digunakan untuk pengindeksan di PubMed. Mesh berisi ~ 30K entitas. CATATAN: Mesh KB diturunkan langsung dari mesh itu sendiri, dan karena itu menggunakan pengidentifikasi unik yang berbeda dari KB lainnya.rxnorm : Tautan ke Ontologi RXNorm. RXNorm berisi ~ 100 ribu konsep yang berfokus pada nama yang dinormalisasi untuk obat klinis. Ini terdiri dari beberapa kosa kata obat lain yang biasa digunakan dalam manajemen farmasi dan interaksi obat, termasuk bank data pertama, micromedex, dan database obat standar emas.go : Tautan ke ontologi gen. Ontologi gen berisi ~ 67k konsep yang berfokus pada fungsi gen.hpo : Tautan ke ontologi fenotip manusia. Ontologi fenotip manusia mengandung 16K konsep yang berfokus pada kelainan fenotipik yang dihadapi penyakit manusia.Anda mungkin ingin bermain -main dengan beberapa parameter di bawah ini untuk beradaptasi dengan kasus penggunaan Anda (presisi lebih tinggi, penarikan lebih tinggi dll).
resolve_abbreviations : bool = True, optional (default = False) apakah akan menyelesaikan singkatan yang diidentifikasi dalam dokumen sebelum melakukan tautan. Parameter ini tidak berpengaruh jika tidak ada AbbreviationDetector dalam pipa spacy.k : int, optional, (default = 30) Jumlah tetangga terdekat untuk melihat ke atas dari generator kandidat per penyebutan.threshold : float, optional, (default = 0.7) Ambang yang harus dicapai kandidat untuk ditambahkan ke disebutkan dalam dokumen sebagai kandidat yang disebutkan.no_definition_threshold : float, optional, (default = 0.95) Ambang batas yang harus dicapai kandidat entitas untuk ditambahkan ke penyebutan dalam dokumen sebagai kandidat yang disebutkan jika kandidat entitas tidak memiliki definisi.filter_for_definitions: bool, default = True apakah akan memfilter entitas yang dapat dikembalikan hanya memasukkan mereka yang memiliki definisi dalam basis pengetahuan.max_entities_per_mention : int, optional, default = 5 Jumlah maksimum entitas yang akan dikembalikan untuk penyebutan yang diberikan, terlepas dari berapa banyak tetangga terdekat yang ditemukan. Kelas ini menetapkan atribut ._.kb_ents pada Spacy Span, yang terdiri dari daftar [tuple [str, float]] yang sesuai dengan KB Concept_id dan skor terkait untuk daftar max_entities_per_mention jumlah entitas.
Anda dapat mencari informasi lebih lanjut untuk ID yang diberikan menggunakan atribut KB dari kelas ini:
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 , ...Komponen ini mengimplementasikan akuisisi otomatis hiponim dari perusahaan teks besar menggunakan komponen pencocokan spacy.
Lulus extended=True dengan HyponymDetector akan menggunakan set pola Hearst yang diperluas, yang mencakup penarikan yang lebih tinggi tetapi hubungan hyponimy presisi yang lebih rendah (misalnya x dibandingkan dengan y, x mirip dengan y, dll).
Komponen ini menghasilkan atribut level DOC pada spacy doc: doc._.hearst_patterns , yang merupakan daftar yang berisi tupel pasangan hiponim yang diekstraksi. Tupel berisi:
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 )]Jika Anda menggunakan scispacy dalam penelitian Anda, silakan kutip scispacy: Model cepat dan kuat untuk pemrosesan bahasa alami biomedis. Selain itu, tunjukkan versi dan model scispacy mana yang Anda gunakan sehingga penelitian Anda dapat direproduksi.
@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 adalah proyek open-source yang dikembangkan oleh Allen Institute for Artificial Intelligence (AI2). AI2 adalah lembaga nirlaba dengan misi untuk berkontribusi pada kemanusiaan melalui penelitian dan rekayasa AI berdampak tinggi.