
يحتوي هذا المستودع على أنابيب ونماذج مخصصة تتعلق باستخدام Spacy للوثائق العلمية.
على وجه الخصوص ، هناك رمز مخصص يضيف قواعد الرمز المميز على رأس الرمز المميز القائم على قواعد Spacy ، و tagger pos و parser النحوي المدربين على البيانات الطبية الحيوية ونموذج الكشف عن تمتد الكيان. بشكل منفصل ، هناك أيضًا نماذج NER لمزيد من المهام المحددة.
فقط هل تبحث لاختبار النماذج على بياناتك؟ تحقق من العرض التجريبي الخاص بنا (ملاحظة: هذا العرض التوضيحي يعمل على إصدار أقدم من Scispacy وقد ينتج عنه نتائج مختلفة عن أحدث إصدار).
يتطلب تثبيت Scispacy خطوتين: تثبيت المكتبة وتخفيف النماذج. لتثبيت المكتبة ، قم بتشغيل:
pip install scispacyلتثبيت نموذج (راجع اختيارنا الكامل للموديلات المتاحة أدناه) ، قم بتشغيل أمر مثل ما يلي:
pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.5.4/en_core_sci_sm-0.5.4.tar.gzملاحظة: نوصي بشدة باستخدام بيئة Python المعزولة (مثل VirtualEnv أو Conda) لتثبيت Scispacy. ألقِ نظرة أدناه في قسم "إعداد بيئة افتراضية" إذا كنت بحاجة إلى بعض المساعدة في هذا. بالإضافة إلى ذلك ، تستخدم Scispacy الميزات الحديثة للبيثون ، وبالتالي فإنه متاح فقط لـ Python 3.6 أو أكثر .
على مر السنين ، أصبح تثبيت NMSLIB أمرًا صعبًا للغاية. هناك عدد من مشكلات github على scispacy و nmslib repo نفسها حول هذا الموضوع. هذه المصفوفة هي محاولة لمساعدة المستخدمين على تثبيت NMSLIB في أي بيئة لديهم. ليس لدي إمكانية الوصول إلى كل نوع من البيئة ، لذلك إذا كنت قادرًا على اختبار شيء ما ، فيرجى فتح مشكلة أو سحب!
| Windows 11 | نظام Windows الفرعي لـ Linux | MAC M1 | Mac M2 | Mac M3 | MAC M4 | إنتل ماك | |
|---|---|---|---|---|---|---|---|
| بيثون 3.8 | ✅ | ✅ | ❓ | ❓ | ؟ | ❓ | |
| بيثون 3.9 | ؟ | ✅ | ؟ | ❓ | ؟ | ❓ | |
| بيثون 3.10 | ؟ | ✅ | ❓ | ❓ | ❓ | ؟ | ✅ |
| بيثون 3.11 | ؟ | ؟ | ❓ | ❓ | ❓ | ؟ | |
| بيثون 3.12 | ؟ | ؟ | ❓ | ❓ | ❓ | ؟ | ❓ |
✅ = يعمل بشكل طبيعي مع تثبيت PIP من scispacy
= لا يعمل بشكل طبيعي مع تثبيت PIP من scispacy
؟ = يمكن تثبيته مع mamba install nmslib
= يمكن تثبيتها باستخدام CFLAGS="-mavx -DWARN(a)=(a)" pip install nmslib
؟ = يمكن تثبيته مع pip install nmslib-metabrainz
؟ = يمكن تثبيت مع conda install -c conda-forge nmslib
❓ = غير مؤكد
طرق أخرى المذكورة في قضايا جيثب ، ولكن غير مؤكد ما هي الإصدارات التي تعمل من أجلها:
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 إعداد بيئة افتراضية مع إصدار Python المطلوب لـ Scispacy. إذا كان لديك بالفعل بيئة Python التي تريد استخدامها ، فيمكنك الانتقال إلى قسم "التثبيت عبر PIP".
اتبع تعليمات التثبيت لـ Mamba.
إنشاء بيئة كوندا تسمى "scispacy" مع Python 3.9 (أي إصدار> = 3.6 يجب أن يعمل):
mamba create -n scispacy python=3.10تفعيل بيئة مامبا. ستحتاج إلى تفعيل بيئة الكوندا في كل محطة تريد استخدامها.
mamba activate scispacy يمكنك الآن تثبيت scispacy وواحد من النماذج باستخدام الخطوات المذكورة أعلاه.
بمجرد الانتهاء من الخطوات المذكورة أعلاه وتنزيل أحد النماذج أدناه ، يمكنك تحميل نموذج scispacy كما تفعل مع أي نموذج Spacy آخر. على سبيل المثال:
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." ) إذا كنت تقوم بترقية scispacy ، فستحتاج إلى تنزيل النماذج مرة أخرى ، للحصول على إصدارات النموذج متوافقة مع إصدار scispacy الذي لديك. يجب أن يحتوي الرابط على النموذج الذي تقوم بتنزيله على رقم إصدار scispacy الذي لديك.
لتثبيت نموذج ، انقر على الرابط أدناه لتنزيل النموذج ، ثم قم بتشغيله
pip install < / path / to / download >بدلاً من ذلك ، يمكنك التثبيت مباشرة من عنوان URL بالنقر بزر الماوس الأيمن على الرابط ، وتحديد "عنوان الرابط" وتشغيله
pip install CMD - V ( to paste the copied URL )| نموذج | وصف | تثبيت عنوان URL |
|---|---|---|
| en_core_sci_sm | خط أنابيب Spacy الكامل للبيانات الطبية الحيوية مع ~ 100K المفردات. | تحميل |
| en_core_sci_md | خط أنابيب Spacy الكامل للبيانات الطبية الحيوية مع المفردات ~ 360k و 50 كيلو الكلمة. | تحميل |
| en_core_sci_lg | خط أنابيب Spacy الكامل للبيانات الطبية الحيوية مع ~ 785k المفردات و 600 كيلو. | تحميل |
| en_core_sci_scibert | خط أنابيب كامل للبيانات الطبية الحيوية مع ~ 785k المفردات و allenai/scibert-base كنموذج المحول. قد ترغب في استخدام وحدة معالجة الرسومات مع هذا النموذج. | تحميل |
| en_ner_craft_md | نموذج ner spacy مدرب على مجموعة الحرف. | تحميل |
| en_ner_jnlpba_md | نموذج spacy ner مدرب على jnlpba corpus. | تحميل |
| en_ner_bc5cdr_md | نموذج ner spacy مدرب على bc5cdr corpus. | تحميل |
| en_ner_bionlp13cg_md | نموذج ner spacy مدرب على bionlp13cg corpus. | تحميل |
يعد AbbreviationDetector مكونًا Spacy يقوم بتنفيذ خوارزمية اكتشاف الاختصار في "خوارزمية بسيطة لتحديد تعريفات الاختصار في النص الطبيب الحيوي" ، (Schwartz & Hearst ، 2003).
يمكنك الوصول إلى قائمة الاختصارات عبر doc._.abbreviations وللتوخير المعطى ، يمكنك الوصول إلى شكله الطويل (وهو spacy.tokens.Span ) باستخدام span._.long_form ، والتي ستشير إلى فترة أخرى في المستند.
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 receptorملاحظة إذا كنت تريد أن تكون قادرًا على إجراء تسلسل كائنات
docالخاصة بك ، قم بتحميل كاشف الاختصار باستخدامmake_serializable=True، على سبيل المثالnlp.add_pipe("abbreviation_detector", config={"make_serializable": True})
EntityLinker هو مكون Spacy الذي يؤدي الارتباط بقاعدة المعرفة. يقوم الرابط ببساطة بإجراء بحث تداخل على سلسلة (char -3grams) على الكيانات المسماة ، ومقارنتها بالمفاهيم في قاعدة المعرفة باستخدام أقرب جيران تقريبي.
حاليا (v2.5.0) ، هناك 5 روابط مدعومة:
umls : روابط إلى نظام اللغة الطبية الموحدة ، المستويات 0،1،2 و 9. هذا له ~ 3M مفاهيم.mesh : روابط لعناوين الموضوعات الطبية. يحتوي هذا على مجموعة أصغر من الكيانات ذات الجودة العالية ، والتي تستخدم للفهرسة في PubMed. شبكة تحتوي على ~ 30K كيانات. ملاحظة: يتم اشتقاق شبكة KB مباشرة من شبكة نفسها ، وبالتالي يستخدم معرفات فريدة مختلفة عن KBs الأخرى.rxnorm : روابط إلى ontology rxnorm. يحتوي Rxnorm على ~ 100k مفاهيم تركز على الأسماء الطبيعية للعقاقير السريرية. وهي تتألف من العديد من مفردات الأدوية الأخرى شائعة الاستخدام في إدارة الصيدلة والتفاعل الدوائي ، بما في ذلك بنك البيانات الأول و micromedex وقاعدة بيانات Gold Standard Drug.go : روابط إلى علم الجينات. يحتوي علم الجينات على مفاهيم ~ 67k تركز على وظائف الجينات.hpo : روابط إلى الأنطولوجيا النمطية البشرية. يحتوي علم الوجود الظاهري البشري على 16 كيلو بايت التي تركز على تشوهات النمط الظاهري التي واجهتها في الأمراض البشرية.قد ترغب في اللعب مع بعض المعلمات أدناه للتكيف مع حالة الاستخدام الخاصة بك (دقة أعلى ، استدعاء أعلى ، إلخ).
resolve_abbreviations : bool = True, optional (default = False) ما إذا كان يجب حل الاختصارات المحددة في المستند قبل إجراء الارتباط. هذه المعلمة ليس لها أي تأثير إذا لم يكن هناك AbbreviationDetector في خط أنابيب Spacy.k : int, optional, (default = 30) عدد من أقرب الجيران للبحث عن مولد المرشح لكل ذكر.threshold : float, optional, (default = 0.7) العتبة التي يجب أن يصل المرشح المذكر إلى إضافة إلى الذكر في المستند كمرشح ذكر.no_definition_threshold : float, optional, (default = 0.95) العتبة التي يجب أن يصل إليها مرشح الكيان إلى الإشارة في المستند كمرشح ذكر إذا لم يكن لدى المرشح الكيان تعريف.filter_for_definitions: bool, default = True ما إذا كنت تريد تصفية الكيانات التي يمكن إرجاعها لتشمل فقط تلك التي لديها تعريفات في قاعدة المعرفة.max_entities_per_mention : int, optional, default = 5 الحد الأقصى لعدد الكيانات التي سيتم إرجاعها لذكر معين ، بغض النظر عن عدد الجيران الأقرب. تقوم max_entities_per_mention الفئة بتعيين سمة ._.kb_ents
يمكنك البحث عن مزيد من المعلومات لمعرف معين باستخدام سمة KB لهذه الفئة:
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 , ...يقوم هذا المكون بتنفيذ AMIROMATION TOMMATION من hyponyms من شركة نصية كبيرة باستخدام مكون Spacy Matcher.
تمتد extended=True إلى HyponymDetector سيستخدم المجموعة الموسعة من أنماط Hearst ، والتي تشمل استدعاء أعلى ولكن انخفاض العلاقات الهوية الدقيقة (على سبيل المثال x مقارنة بـ y ، x مماثلة لـ y ، إلخ).
ينتج هذا المكون سمة مستوى DOC على DOC SPACY: doc._.hearst_patterns ، وهي قائمة تحتوي على tuples من أزواج hypowned المستخرجة. يحتوي tuples:
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 )]إذا كنت تستخدم scispacy في بحثك ، فيرجى الاستشهاد بـ Scispacy: نماذج سريعة وقوية لمعالجة اللغة الطبيعية الحيوية. بالإضافة إلى ذلك ، يرجى الإشارة إلى إصدار ونموذج Scispacy الذي استخدمته بحيث يمكن إعادة إنتاج البحث.
@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 هو مشروع مفتوح المصدر تم تطويره من قبل معهد ألين للذكاء الاصطناعي (AI2). AI2 هو معهد غير ربحية يتمتع بمهمة المساهمة في الإنسانية من خلال الأبحاث والهندسة عالية التأثير.