إنشاء رسم بياني للمعرفة الطبية الحيوية باستخدام البرمجة اللغوية العصبية

عقدة المصدر: 1401511

لقد سبق لي أن أظهرت كيف إنشاء رسم بياني للمعرفة من صفحة ويكيبيديا. ومع ذلك ، نظرًا لأن المنشور حظي بالكثير من الاهتمام ، فقد قررت استكشاف مجالات أخرى حيث يكون استخدام تقنيات البرمجة اللغوية العصبية لبناء رسم بياني معرفي أمرًا منطقيًا. في رأيي ، يعد المجال الطبي الحيوي مثالًا رئيسيًا حيث يكون تمثيل البيانات كرسم بياني منطقيًا لأنك غالبًا ما تحلل التفاعلات والعلاقات بين الجينات والأمراض والأدوية والبروتينات والمزيد.

مثال على الرسم البياني الفرعي الذي يوضح علاقات حمض الأسكوربيك بمفاهيم الطب الحيوي الأخرى. الصورة من قبل المؤلف.

في التصور أعلاه ، لدينا حمض الأسكوربيك ، المعروف أيضًا باسم فيتامين سي ، وبعض علاقاته بمفاهيم أخرى. على سبيل المثال ، يُظهر أنه يمكن استخدام فيتامين سي لعلاج التهاب المعدة المزمن.

الآن ، يمكن أن يكون لديك فريق من خبراء المجال يرسمون لك كل تلك الروابط بين الأدوية والأمراض والمفاهيم الطبية الحيوية الأخرى لك. لكن لسوء الحظ ، لا يستطيع الكثير منا توظيف فريق من الأطباء للقيام بهذا العمل نيابة عنا. في هذه الحالة ، يمكننا اللجوء إلى استخدام تقنيات البرمجة اللغوية العصبية لاستخراج تلك العلاقات تلقائيًا. الجزء الجيد هو أنه يمكننا استخدام خط أنابيب البرمجة اللغوية العصبية لقراءة جميع الأوراق البحثية الموجودة هناك ، والجزء السيئ هو أنه لن تكون جميع النتائج التي تم الحصول عليها مثالية. ومع ذلك ، نظرًا لعدم وجود فريق من العلماء بجانبي مستعدًا لاستخراج العلاقات يدويًا ، فسوف ألجأ إلى استخدام تقنيات البرمجة اللغوية العصبية لإنشاء رسم بياني للمعرفة الطبية الحيوية خاص بي.

سأستخدم ورقة بحثية واحدة في منشور المدونة هذا لإرشادك خلال جميع الخطوات المطلوبة لإنشاء رسم بياني للمعرفة الطبية الحيوية - هندسة الأنسجة لتجديد الجلد ونمو الشعر.

الورقة كتبها محمد رضا أحمدي. نسخة PDF من المقال متاحة بموجب ترخيص CC0 1.0. سوف ننتقل من خلال الخطوات التالية لإنشاء رسم بياني للمعرفة:

  • قراءة مستند PDF باستخدام OCR
  • معالجة النص
  • التعرف على مفهوم الطب الحيوي وربطه
  • استخراج العلاقة
  • إثراء قاعدة البيانات الخارجية

بنهاية هذا المنشور ، ستقوم بإنشاء رسم بياني بالمخطط التالي.

مخطط الرسم البياني الطبي الحيوي. الصورة من قبل المؤلف.

سنستخدم Neo4j ، قاعدة بيانات الرسم البياني التي تتميز بنموذج الرسم البياني للممتلكات المسمى ، لتخزين الرسم البياني الخاص بنا. يمكن أن تحتوي كل مقالة على مؤلف واحد أو أكثر. سنقسم محتوى المقالة إلى جمل ونستخدم البرمجة اللغوية العصبية لاستخراج كل من الكيانات الطبية وعلاقاتها. قد يكون من غير البديهي بعض الشيء أن نقوم بتخزين العلاقات بين الكيانات كعقد وسيطة بدلاً من العلاقات. العامل الحاسم وراء هذا القرار هو أننا نريد أن يكون لدينا مسار تدقيق للنص المصدر الذي تم استخلاص العلاقة منه. باستخدام نموذج الرسم البياني للخاصية المسمى ، لا يمكن أن يكون لديك علاقة تشير إلى علاقة أخرى. لهذا السبب ، نقوم بإعادة تشكيل العلاقة بين المفاهيم الطبية في عقدة وسيطة. سيسمح هذا أيضًا لخبير المجال بتقييم ما إذا تم استخراج العلاقة بشكل صحيح أم لا.

على طول الطريق ، سأعرض أيضًا تطبيقات استخدام الرسم البياني المركب للبحث عن المعلومات المخزنة وتحليلها.

دعونا نتعمق في ذلك!

إذا كان هذا المحتوى التعليمي التفصيلي مفيدًا لك ، اشترك في القائمة البريدية لأبحاث الذكاء الاصطناعي ليتم تنبيهنا عندما نصدر مادة جديدة.

قراءة مستند PDF باستخدام OCR

كما ذكرنا ، فإن نسخة PDF من ورقة البحث متاحة للجمهور بموجب ترخيص CC0 1.0 ، مما يعني أنه يمكننا تنزيله بسهولة باستخدام Python. سنستخدم ملف pytesseract مكتبة لاستخراج نص من ملف PDF. بقدر ما أعرف ، تعد مكتبة pytesseract واحدة من أكثر المكتبات شعبية لـ OCR. إذا كنت تريد المتابعة جنبًا إلى جنب مع أمثلة التعليمات البرمجية ، فقد أعددت ملف دفتر جوجل كولاب، لذلك لا يتعين عليك نسخ الرمز ولصقه بنفسك.

import requests
import pdf2image
import pytesseract pdf = requests.get('https://arxiv.org/pdf/2110.03526.pdf')
doc = pdf2image.convert_from_bytes(pdf.content) # Get the article text
article = []
for page_number, page_data in enumerate(doc): txt = pytesseract.image_to_string(page_data).encode("utf-8") # Sixth page are only references if page_number < 6: article.append(txt.decode("utf-8"))
article_txt = " ".join(article)

معالجة النص

الآن بعد أن أصبح لدينا محتوى المقالة متاحًا ، سنمضي قدمًا ونزيل عناوين الأقسام وأوصاف الأشكال من النص. بعد ذلك ، سنقسم النص إلى جمل.

import nltk
nltk.download('punkt') def clean_text(text): """Remove section titles and figure descriptions from text""" clean = "n".join([row for row in text.split("n") if (len(row.split(" "))) > 3 and not (row.startswith("(a)")) and not row.startswith("Figure")]) return clean text = article_txt.split("INTRODUCTION")[1]
ctext = clean_text(text)
sentences = nltk.tokenize.sent_tokenize(ctext)

ربط كيان طبي حيوي مسمى

الآن يأتي الجزء المثير. بالنسبة لأولئك الجدد في البرمجة اللغوية العصبية والتعرف على الكيانات المسماة والربط ، فلنبدأ ببعض الأساسيات. تُستخدم تقنيات التعرف على الكيانات المسماة لاكتشاف الكيانات أو المفاهيم ذات الصلة في النص. على سبيل المثال ، في مجال الطب الحيوي ، نريد تحديد مختلف الجينات والأدوية والأمراض والمفاهيم الأخرى في النص.

استخراج المفاهيم الطبية الحيوية. الصورة من قبل المؤلف.

في هذا المثال ، حدد نموذج البرمجة اللغوية العصبية (NLP) الجينات والأمراض والأدوية والأنواع والطفرات والمسارات في النص. كما ذكرنا ، تسمى هذه العملية التعرف على الكيانات المسماة. الترقية إلى التعرف على الكيان المسمى هو ما يسمى بربط الكيان المسمى. تكتشف تقنية ربط الكيان المسمى المفاهيم ذات الصلة في النص وتحاول تعيينها إلى قاعدة المعرفة الهدف. في مجال الطب الحيوي ، بعض قواعد المعرفة المستهدفة هي:

لماذا نريد ربط الكيانات الطبية بقاعدة المعرفة المستهدفة؟ السبب الرئيسي هو أنه يساعدنا في التعامل مع توضيح الكيان. على سبيل المثال ، لا نريد كيانات منفصلة في الرسم البياني تمثل حمض الأسكوربيك وفيتامين C حيث يمكن لخبراء المجال إخبارك بأنهما متماثلان. السبب الثانوي هو أنه من خلال تعيين المفاهيم إلى قاعدة المعرفة المستهدفة ، يمكننا إثراء نموذج الرسم البياني الخاص بنا عن طريق جلب المعلومات حول المفاهيم المعينة من قاعدة المعرفة الهدف. إذا استخدمنا مثال حمض الأسكوربيك مرة أخرى ، فيمكننا بسهولة جلب معلومات إضافية من قاعدة بيانات CHEBI إذا كنا نعرف بالفعل معرف تشيبي.

تتوفر بيانات تخصيب حمض الأسكوربيك على موقع تشيبي. كل المحتوى على الموقع متاح تحت رخصة CC BY 4.0. الصورة من قبل المؤلف.

لقد كنت أبحث عن كيان طبي حيوي مُسمّى ومفتوح المصدر ومفتوح المصدر ومُدرّب مسبقًا يربط لبعض الوقت. تركز الكثير من نماذج البرمجة اللغوية العصبية على استخراج مجموعة فرعية محددة فقط من المفاهيم الطبية مثل الجينات أو الأمراض. من النادر العثور على نموذج يكتشف معظم المفاهيم الطبية ويربطها بقاعدة المعرفة المستهدفة. لحسن الحظ لقد عثرت عليها BERN[1] ، أداة التعرف على الكيانات الطبية الحيوية العصبية وأداة التطبيع متعددة الأنواع. إذا فهمت بشكل صحيح ، فهو نموذج BioBert مضبوط بدقة مع العديد من الكيانات المسماة التي تربط النماذج المدمجة لرسم خرائط المفاهيم إلى قواعد المعرفة الهدف الطبي الحيوي. ليس ذلك فحسب ، بل إنها توفر أيضًا نقطة نهاية REST مجانية ، لذلك لا يتعين علينا التعامل مع الصداع المتمثل في جعل التبعيات والنموذج يعملان. تم إنشاء تصور التعرف على الكيانات الطبية الحيوية الذي استخدمته أعلاه باستخدام نموذج BERN ، لذلك نعلم أنه يكتشف الجينات والأمراض والأدوية والأنواع والطفرات والمسارات في النص.

لسوء الحظ ، لا يقوم نموذج BERN بتعيين معرفات قاعدة المعارف المستهدفة لجميع المفاهيم. لذلك أعددت برنامجًا نصيًا يبحث أولاً في ما إذا تم تقديم معرّف مميز لمفهوم ما ، وإذا لم يكن كذلك ، فسيستخدم اسم الكيان باعتباره المعرّف. سنقوم أيضًا بحساب sha256 من نص الجمل لتحديد جمل معينة بشكل أسهل لاحقًا عندما سنقوم باستخراج العلاقة.

import hashlib def query_raw(text, url="https://bern.korea.ac.kr/plain"): """Biomedical entity linking API""" return requests.post(url, data={'sample_text': text}).json() entity_list = []
# The last sentence is invalid
for s in sentences[:-1]: entity_list.append(query_raw(s)) parsed_entities = []
for entities in entity_list: e = [] # If there are not entities in the text if not entities.get('denotations'): parsed_entities.append({'text':entities['text'], 'text_sha256': hashlib.sha256(entities['text'].encode('utf-8')).hexdigest()}) continue for entity in entities['denotations']: other_ids = [id for id in entity['id'] if not id.startswith("BERN")] entity_type = entity['obj'] entity_name = entities['text'][entity['span']['begin']:entity['span']['end']] try: entity_id = [id for id in entity['id'] if id.startswith("BERN")][0] except IndexError: entity_id = entity_name e.append({'entity_id': entity_id, 'other_ids': other_ids, 'entity_type': entity_type, 'entity': entity_name}) parsed_entities.append({'entities':e, 'text':entities['text'], 'text_sha256': hashlib.sha256(entities['text'].encode('utf-8')).hexdigest()})

لقد قمت بفحص نتائج ربط الكيان المحدد ، وكما هو متوقع ، فهو ليس مثاليًا. على سبيل المثال ، لا تحدد الخلايا الجذعية كمفهوم طبي. من ناحية أخرى ، اكتشف كيانًا واحدًا اسمه "القلب ، المخ ، الأعصاب ، والكلى". ومع ذلك ، لا يزال BERN أفضل نموذج طبي حيوي مفتوح المصدر يمكن أن أجده أثناء التحقيق.

أنشئ رسمًا بيانيًا للمعرفة

قبل النظر إلى تقنيات استخراج العلاقة ، سنقوم بإنشاء رسم بياني للمعرفة الطبية الحيوية باستخدام الكيانات فقط وفحص التطبيقات الممكنة. كما ذكرنا ، لقد أعددت ملف دفتر جوجل كولاب التي يمكنك استخدامها لمتابعة أمثلة التعليمات البرمجية في هذا المنشور. لتخزين الرسم البياني الخاص بنا ، سنستخدم Neo4j. لست مضطرًا للتعامل مع إعداد بيئة Neo4j محلية. بدلاً من ذلك ، يمكنك استخدام مثيل Neo4j Sandbox مجاني.

Neo4j رمل

ابدأ ال مشروع فارغ في الصندوق الرمل وانسخ تفاصيل الاتصال إلى دفتر Colab المحمول.

تفاصيل اتصال Neo4j Sandbox. الصورة من قبل المؤلف.

يمكنك الآن المضي قدمًا وتجهيز اتصال Neo4j في الكمبيوتر المحمول.

from neo4j import GraphDatabase
import pandas as pd host = 'bolt://3.236.182.55:7687'
user = 'neo4j'
password = 'hydrometer-ditches-windings'
driver = GraphDatabase.driver(host,auth=(user, password)) def neo4j_query(query, params=None): with driver.session() as session: result = session.run(query, params) return pd.DataFrame([r.values() for r in result], columns=result.keys())

سنبدأ باستيراد المؤلف والمقال إلى الرسم البياني. ستحتوي عقدة المقالة على العنوان فقط.

author = article_txt.split("n")[0]
title = " ".join(article_txt.split("n")[2:4]) neo4j_query("""
MERGE (a:Author{name:$author})
MERGE (b:Article{title:$title})
MERGE (a)-[:WROTE]->(b)
""", {'title':title, 'author':author})

إذا فتحت متصفح Neo4j ، فسترى الرسم البياني التالي.

الصورة من قبل المؤلف.

يمكنك استيراد الجمل والكيانات المذكورة عن طريق تنفيذ استعلام Cypher التالي:

neo4j_query("""
MATCH (a:Article)
UNWIND $data as row
MERGE (s:Sentence{id:row.text_sha256})
SET s.text = row.text
MERGE (a)-[:HAS_SENTENCE]->(s)
WITH s, row.entities as entities
UNWIND entities as entity
MERGE (e:Entity{id:entity.entity_id})
ON CREATE SET e.other_ids = entity.other_ids, e.name = entity.entity, e.type = entity.entity_type
MERGE (s)-[m:MENTIONS]->(e)
ON CREATE SET m.count = 1
ON MATCH SET m.count = m.count + 1
""", {'data': parsed_entities})

يمكنك تنفيذ استعلام Cypher التالي لفحص الرسم البياني المركب:

MATCH p=(a:Article)-[:HAS_SENTENCE]->()-[:MENTIONS]->(e:Entity)
RETURN p LIMIT 25

إذا قمت باستيراد البيانات بشكل صحيح ، يجب أن تشاهد تصورًا مشابهًا.

تم تخزين استخراج الكيان كرسم بياني. الصورة من قبل المؤلف.

تطبيقات الرسم البياني المعرفي

حتى بدون تدفق استخراج العلاقة ، توجد بالفعل حالتان من حالات الاستخدام للرسم البياني الخاص بنا.

محرك البحث

يمكننا استخدام الرسم البياني لدينا كمحرك بحث. على سبيل المثال ، يمكنك استخدام استعلام Cypher التالي للعثور على الجمل أو المقالات التي تشير إلى كيان طبي معين.

MATCH (e:Entity)<-[:MENTIONS]-(s:Sentence)
WHERE e.name = "autoimmune diseases"
RETURN s.text as result

النتائج

الصورة من قبل المؤلف.

تحليل التكرار

الخيار الثاني هو تحليل التكرار. يمكنك تحديد التواجد المشترك بين الكيانات الطبية إذا ظهرت في نفس الجملة أو المقالة. لقد عثرت على مقال [2] يستخدم شبكة التعايش الطبي للتنبؤ بالاتصالات الجديدة المحتملة بين الكيانات الطبية.

توقع الارتباط في شبكة التواجد المشترك في MeSH: النتائج الأولية - PubMed

يمكنك استخدام استعلام Cypher التالي للعثور على الكيانات التي غالبًا ما تحدث في نفس الجملة.

MATCH (e1:Entity)<-[:MENTIONS]-()-[:MENTIONS]->(e2:Entity)
MATCH (e1:Entity)<-[:MENTIONS]-()-[:MENTIONS]->(e2:Entity)
WHERE id(e1) < id(e2)
RETURN e1.name as entity1, e2.name as entity2, count(*) as cooccurrence
ORDER BY cooccurrence
DESC LIMIT 3

النتائج

كيان 1 كيان 2 تواجد
الأمراض الجلدية القرحة السكرية 2
الجروح المزمنة القرحة السكرية 2
الأمراض الجلدية الجروح المزمنة 2

من الواضح أن النتائج ستكون أفضل إذا قمنا بتحليل آلاف المقالات أو أكثر.

افحص خبرة المؤلف

يمكنك أيضًا استخدام هذا الرسم البياني للعثور على خبرة المؤلف من خلال فحص الكيانات الطبية التي يكتبون عنها كثيرًا. باستخدام هذه المعلومات ، يمكنك أيضًا اقتراح أوجه تعاون مستقبلية.

نفذ استعلام Cypher التالي لفحص الكيانات الطبية التي ذكرها مؤلفنا الوحيد في ورقة البحث.

MATCH (a:Author)-[:WROTE]->()-[:HAS_SENTENCE]->()-[:MENTIONS]->(e:Entity)
RETURN a.name as author, e.name as entity,
MATCH (a:Author)-[:WROTE]->()-[:HAS_SENTENCE]->()-[:MENTIONS]->(e:Entity)
RETURN a.name as author, e.name as entity, count(*) as count
ORDER BY count DESC
LIMIT 5

النتائج

المؤلفة كيان عد
محمد رضا أحمدي الكولاجين 9
محمد رضا أحمدي الحروق 4
محمد رضا أحمدي الأمراض الجلدية 4
محمد رضا أحمدي إنزيمات الكولاجيناز 2
محمد رضا أحمدي انحلال البشرة الفقاعي 2

استخراج العلاقة

الآن سنحاول استخلاص العلاقات بين المفاهيم الطبية. من واقع خبرتي ، فإن استخراج العلاقة هو على الأقل ترتيب من حيث الحجم أصعب من استخراج الكيان المسمى. إذا كنت لا تتوقع نتائج مثالية مع ارتباط كيان مسمى ، فيمكنك بالتأكيد توقع بعض الأخطاء في تقنية استخراج العلاقة.

لقد كنت أبحث عن نماذج متاحة لاستخراج العلاقة الطبية الحيوية ولكن لم أجد شيئًا يعمل خارج الصندوق أو لا يتطلب ضبطًا دقيقًا. يبدو أن مجال استخراج العلاقة في طليعة ، ونأمل أن نرى المزيد من الاهتمام به في المستقبل. لسوء الحظ ، لست خبيرًا في البرمجة اللغوية العصبية ، لذلك تجنبت ضبط نموذجي الخاص. بدلاً من ذلك ، سنستخدم مستخرج علاقة اللقطة الصفرية استنادًا إلى الورقة استكشاف حد التسديدة الصفرية لـ FewRel[3]. على الرغم من أنني لا أوصي بوضع هذا النموذج في الإنتاج ، إلا أنه جيد بما يكفي لعرض توضيحي بسيط. النموذج متاح في تعانق الوجه، لذلك لا يتعين علينا التعامل مع التدريب أو إعداد النموذج.

from transformers import AutoTokenizer
from zero_shot_re import RelTaggerModel, RelationExtractor model = RelTaggerModel.from_pretrained("fractalego/fewrel-zero-shot")
tokenizer = AutoTokenizer.from_pretrained("bert-large-uncased-whole-word-masking-finetuned-squad")
relations = ['associated', 'interacts']
extractor = RelationExtractor(model, tokenizer, relations)

باستخدام مستخرج علاقة اللقطة الصفرية ، يمكنك تحديد العلاقات التي ترغب في اكتشافها. في هذا المثال ، استخدمت الامتداد أسوشيتد و  يتفاعل العلاقات. لقد جربت أيضًا أنواعًا أكثر تحديدًا من العلاقات مثل المعالجات والأسباب وغيرها ، لكن النتائج لم تكن رائعة.

باستخدام هذا النموذج ، يجب أن تحدد بين أزواج الكيانات التي ترغب في اكتشاف العلاقات. سوف نستخدم نتائج ارتباط الكيان المحدد كمدخل لعملية استخراج العلاقة. أولاً ، نجد كل الجمل التي تم ذكر كيانين أو أكثر فيها ثم نقوم بتشغيلها من خلال نموذج استخراج العلاقة لاستخراج أي وصلات. لقد حددت أيضًا قيمة عتبة قدرها 0.85 ، مما يعني أنه إذا توقع نموذج ارتباطًا بين كيانات ذات احتمالية أقل من 0.85 ، فسوف نتجاهل التوقع.

import itertools
# Candidate sentence where there is more than a single entity present
candidates = [s for s in parsed_entities if (s.get('entities')) and (len(s['entities']) &gt; 1)]
predicted_rels = []
for c in candidates: combinations = itertools.combinations([{'name':x['entity'], 'id':x['entity_id']} for x in c['entities']], 2) for combination in list(combinations): try: ranked_rels = extractor.rank(text=c['text'].replace(",", " "), head=combination[0]['name'], tail=combination[1]['name']) # Define threshold for the most probable relation if ranked_rels[0][1] &gt; 0.85: predicted_rels.append({'head': combination[0]['id'], 'tail': combination[1]['id'], 'type':ranked_rels[0][0], 'source': c['text_sha256']}) except: pass # Store relations to Neo4j
neo4j_query("""
UNWIND $data as row
MATCH (source:Entity {id: row.head})
MATCH (target:Entity {id: row.tail})
MATCH (text:Sentence {id: row.source})
MERGE (source)-[:REL]-&gt;(r:Relation {type: row.type})-[:REL]-&gt;(target)
MERGE (text)-[:MENTIONS]-&gt;(r)
""", {'data': predicted_rels})

نقوم بتخزين العلاقات بالإضافة إلى النص المصدر المستخدم لاستخراج تلك العلاقة في الرسم البياني.

تم تخزين العلاقات المستخرجة في رسم بياني. الصورة من قبل المؤلف.

يمكنك فحص العلاقات المستخرجة بين الكيانات والنص المصدر باستخدام استعلام Cypher التالي:

MATCH (s:Entity)-[:REL]->(r:Relation)-[:REL]->(t:Entity), (r)<-[:MENTIONS]-(st:Sentence)
RETURN s.name as source_entity, t.name as target_entity, r.type as type, st.text as source_text

النتائج

الصورة من قبل المؤلف.

كما ذكرنا ، فإن نموذج البرمجة اللغوية العصبية الذي استخدمته لاستخراج العلاقات ليس مثاليًا ، وبما أنني لست طبيبة ، لا أعرف عدد الاتصالات التي فاتته. ومع ذلك ، فإن تلك التي اكتشفتها تبدو معقولة.

إثراء قاعدة البيانات الخارجية

كما ذكرت من قبل ، لا يزال بإمكاننا استخدام قواعد البيانات الخارجية مثل CHEBI أو MESH لإثراء الرسم البياني لدينا. على سبيل المثال ، يحتوي الرسم البياني الخاص بنا على كيان طبي انحلال البشرة الفقاعي ونعرف أيضًا معرف MeSH الخاص به.

يمكنك استرداد معرف MeSH الخاص بانحلال البشرة الفقاعي باستخدام الاستعلام التالي:

MATCH (e:Entity)
WHERE e.name = "Epidermolysis bullosa"
RETURN e.name as entity, e.other_ids as other_ids

يمكنك المضي قدمًا وتفقد MeSH للعثور على المعلومات المتاحة:

MeSH المرتبطة البيانات

لقطة من قبل المؤلف. البيانات مقدمة من المكتبة الوطنية الأمريكية للطب.

فيما يلي لقطة شاشة للمعلومات المتوفرة على موقع MeSH الخاص بانحلال البشرة الفقاعي. كما ذكرنا سابقًا ، أنا لست طبيبة ، لذلك لا أعرف بالضبط ما هي أفضل طريقة لنمذجة هذه المعلومات في رسم بياني. ومع ذلك ، سأوضح لك كيفية استرداد هذه المعلومات في Neo4j باستخدام إجراء apoc.load.json لجلب المعلومات من نقطة نهاية MeSH REST. وبعد ذلك ، يمكنك أن تطلب من خبير المجال مساعدتك في نمذجة هذه المعلومات.

استعلام Cypher لجلب المعلومات من نقطة نهاية MeSH REST هو:

MATCH (e:Entity)
WHERE e.name = "Epidermolysis bullosa"
WITH e, [id in e.other_ids WHERE id contains "MESH" | split(id,":")[1]][0] as meshId
CALL apoc.load.json("https://id.nlm.nih.gov/mesh/lookup/details?descriptor=" + meshId) YIELD value
RETURN value

الرسم البياني للمعرفة كمدخل لبيانات التعلم الآلي

كفكرة أخيرة ، سوف أطلعك بسرعة على كيفية استخدام الرسم البياني للمعرفة الطبية الحيوية كمدخل لسير عمل التعلم الآلي. في السنوات الأخيرة ، كان هناك الكثير من الأبحاث والتقدم في مجال تضمين العقدة. نماذج تضمين العقدة تترجم طوبولوجيا الشبكة إلى مساحة التضمين.

حقوق النشر © 2017 Manan Shah، SNAP Group. الصورة متاحة بموجب ترخيص MIT بتنسيق https://github.com/snap-stanford/cs224w-notes.

لنفترض أنك أنشأت رسمًا بيانيًا للمعرفة الطبية الحيوية يحتوي على الكيانات والمفاهيم الطبية وعلاقاتها وإثرائها من قواعد البيانات الطبية المختلفة. يمكنك استخدام تقنيات تضمين العقد لمعرفة تمثيلات العقدة ، وهي متجهات ذات طول ثابت ، وإدخالها في سير عمل التعلم الآلي الخاص بك. تستخدم العديد من التطبيقات هذا النهج بدءًا من إعادة استخدام الدواء إلى جانب الدواء أو تنبؤات الآثار السلبية. لقد وجدت ورقة بحث تستخدم ربط التنبؤ بالعلاجات المحتملة للأمراض الجديدة[4].

وفي الختام

يعد المجال الطبي الحيوي مثالًا رئيسيًا حيث تكون الرسوم البيانية المعرفية قابلة للتطبيق. هناك العديد من التطبيقات التي تتراوح من محركات البحث البسيطة إلى مهام سير عمل التعلم الآلي الأكثر تعقيدًا. نأمل ، من خلال قراءة منشور المدونة هذا ، أن تكون قد توصلت إلى بعض الأفكار حول كيفية استخدام الرسوم البيانية للمعرفة الطبية الحيوية لدعم تطبيقاتك. يمكنك أن تبدأ ملف Neo4j Sandbox المجاني وابدأ في الاستكشاف اليوم.

كما هو الحال دائمًا ، يتوفر الرمز على GitHub جيثب:.

مراجع حسابات

[1] د. كيم وآخرون. ، "أداة التعرف على الكيانات المسماة العصبية والمعايرة متعددة الأنواع لتعدين النص الطبي الحيوي ،" في وصول IEEE، المجلد. 7 ، ص 73729-73740 ، 2019 ، دوى: 10.1109 / ACCESS.2019.2920708.

[2] Kastrin A، Rindflesch TC، Hristovski D. توقع الارتباط في شبكة التواجد المشترك في MeSH: النتائج الأولية. ستود هيلث تكنول إعلام. 2014 ؛ 205: 579-83. PMID: 25160252.

[3] سيتولي أ. (2020). استكشاف حد التسديدة الصفرية لـ FewRel. في وقائع المؤتمر الدولي الثامن والعشرين حول اللغويات الحاسوبية (ص 1447-1451). اللجنة الدولية في اللغويات الحاسوبية.

[4] زانج ، آر ، هريستوفسكي ، دي ، شوت ، دي ، كاسترين ، إيه ، فيزمان ، إم ، وكيليك أوغلو ، هـ. (2021). إعادة استخدام الأدوية لـ COVID-19 عبر إكمال الرسم البياني المعرفي. مجلة المعلوماتية الطبية الحيوية ، 115 ، 103696.

تم نشر هذه المقالة في الأصل نحو علم البيانات وإعادة النشر إلى TOPBOTS بإذن من المؤلف.

استمتع بهذا المقال؟ قم بالتسجيل للحصول على المزيد من تحديثات الذكاء الاصطناعي.

سنخبرك عندما نصدر المزيد من التعليم التقني.

وظيفة إنشاء رسم بياني للمعرفة الطبية الحيوية باستخدام البرمجة اللغوية العصبية ظهرت للمرة الأولى على توب بوتس.

الطابع الزمني:

اكثر من توب بوتس