یک نمودار دانش زیست پزشکی با NLP بسازید

گره منبع: 1401511

من قبلاً نشان داده ام که چگونه یک نمودار دانش از صفحه ویکی پدیا ایجاد کنید. با این حال، از آنجایی که این پست توجه زیادی را به خود جلب کرد، تصمیم گرفتم حوزه های دیگری را که در آن استفاده از تکنیک های NLP برای ساختن یک نمودار دانش منطقی است، کشف کنم. به نظر من، حوزه بیوپزشکی یک مثال بارز است که در آن نمایش داده ها به عنوان یک نمودار منطقی است زیرا شما اغلب در حال تجزیه و تحلیل تعاملات و روابط بین ژن ها، بیماری ها، داروها، پروتئین ها و موارد دیگر هستید.

زیرگراف مثالی که رابطه اسید اسکوربیک را با سایر مفاهیم زیست پزشکی نشان می دهد. تصویر توسط نویسنده

در تصویر فوق، اسید اسکوربیک، که به عنوان ویتامین C نیز شناخته می شود، و برخی از روابط آن با مفاهیم دیگر را داریم. به عنوان مثال، نشان می دهد که ویتامین C می تواند برای درمان گاستریت مزمن استفاده شود.

اکنون، می‌توانید تیمی از متخصصان حوزه را بخواهید که همه آن ارتباطات بین داروها، بیماری‌ها و سایر مفاهیم زیست‌پزشکی را برای شما ترسیم کنند. اما، متأسفانه، بسیاری از ما نمی توانیم تیمی از پزشکان را استخدام کنیم تا کار را برای ما انجام دهند. در آن صورت، می‌توانیم از تکنیک‌های NLP برای استخراج خودکار آن روابط متوسل شویم. بخش خوب این است که ما می توانیم از خط لوله NLP برای خواندن همه مقالات تحقیقاتی استفاده کنیم، و بخش بد این است که همه نتایج به دست آمده بی نقص نخواهند بود. با این حال، با توجه به اینکه من تیمی از دانشمندان آماده برای استخراج روابط به صورت دستی در کنار خود ندارم، به استفاده از تکنیک های NLP برای ساختن نمودار دانش زیست پزشکی خودم متوسل خواهم شد.

من از یک مقاله تحقیقاتی در این پست وبلاگ استفاده خواهم کرد تا شما را در تمام مراحل مورد نیاز برای ساختن نمودار دانش زیست پزشکی راهنمایی کنم - مهندسی بافت بازسازی پوست و رشد مو.

مقاله توسط محمدرضا احمدی. نسخه PDF مقاله تحت مجوز CC0 1.0 در دسترس است. برای ساختن نمودار دانش مراحل زیر را طی می کنیم:

  • خواندن یک سند PDF با OCR
  • پیش پردازش متن
  • تشخیص و پیوند مفاهیم زیست پزشکی
  • استخراج رابطه
  • غنی سازی پایگاه داده خارجی

در پایان این پست، نموداری با طرحواره زیر خواهید ساخت.

طرح واره گراف زیست پزشکی تصویر توسط نویسنده

ما از Neo4j، یک پایگاه داده گراف که دارای مدل گراف ویژگی برچسب گذاری شده است، برای ذخیره گراف خود استفاده خواهیم کرد. هر مقاله می تواند یک یا چند نویسنده داشته باشد. ما محتوای مقاله را به جملات تقسیم می کنیم و از NLP برای استخراج هر دو نهاد پزشکی و روابط آنها استفاده می کنیم. ممکن است کمی غیر شهودی باشد که ما روابط بین موجودیت ها را به عنوان گره های میانی به جای روابط ذخیره کنیم. عامل حیاتی پشت این تصمیم این است که ما می خواهیم یک دنباله ممیزی از متن منبعی که رابطه از آن استخراج شده است داشته باشیم. با مدل نمودار ویژگی برچسب‌گذاری شده، نمی‌توانید رابطه‌ای داشته باشید که به رابطه دیگری اشاره می‌کند. به همین دلیل، ما ارتباط بین مفاهیم پزشکی را به یک گره میانی تبدیل می کنیم. این همچنین به متخصص دامنه اجازه می دهد ارزیابی کند که آیا یک رابطه به درستی استخراج شده است یا خیر.

در طول مسیر، من همچنین کاربردهای استفاده از نمودار ساخته شده برای جستجو و تجزیه و تحلیل اطلاعات ذخیره شده را نشان خواهم داد.

بیایید درست در آن شیرجه برویم!

اگر این محتوای آموزشی عمیق برای شما مفید است، در لیست پستی تحقیقات هوش مصنوعی ما مشترک شوید زمانی که مطالب جدید را منتشر می کنیم هشدار داده شود.

خواندن یک سند PDF با OCR

همانطور که گفته شد، نسخه PDF مقاله تحقیقاتی تحت مجوز CC0 1.0 در دسترس عموم است، به این معنی که می توانیم آن را به راحتی با پایتون دانلود کنیم. ما استفاده خواهیم کرد 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 آشنا شده اند و نهادهای نامگذاری شده را شناسایی و پیوند می دهند، اجازه دهید با برخی از اصول اولیه شروع کنیم. تکنیک های تشخیص موجودیت نامگذاری شده برای شناسایی موجودیت ها یا مفاهیم مرتبط در متن استفاده می شود. به عنوان مثال، در حوزه زیست پزشکی، می خواهیم ژن ها، داروها، بیماری ها و سایر مفاهیم را در متن شناسایی کنیم.

استخراج مفاهیم زیست پزشکی تصویر توسط نویسنده

در این مثال، مدل NLP ژن ها، بیماری ها، داروها، گونه ها، جهش ها و مسیرهای موجود در متن را شناسایی کرد. همانطور که گفته شد، این فرآیند را شناسایی موجودیت نامگذاری می کنند. ارتقاء به شناسایی موجودیت نامگذاری شده، به اصطلاح پیوند نهاد نامگذاری شده است. تکنیک پیوند نهاد نامگذاری شده مفاهیم مرتبط را در متن شناسایی می کند و سعی می کند آنها را به پایگاه دانش هدف ترسیم کند. در حوزه زیست پزشکی، برخی از پایگاه های دانش هدف عبارتند از:

چرا می خواهیم نهادهای پزشکی را به یک پایگاه دانش هدف پیوند دهیم؟ دلیل اصلی این است که به ما کمک می کند تا با ابهام زدایی موجودیت مقابله کنیم. برای مثال، ما نمی‌خواهیم موجودیت‌های جداگانه‌ای در نمودار نشان‌دهنده اسید اسکوربیک و ویتامین C باشد، زیرا کارشناسان حوزه می‌توانند به شما بگویند که اینها یکسان هستند. دلیل ثانویه این است که با نگاشت مفاهیم به یک پایگاه دانش هدف، می توانیم مدل نمودار خود را با واکشی اطلاعات در مورد مفاهیم نقشه برداری شده از پایگاه دانش هدف غنی سازی کنیم. اگر دوباره از مثال اسید اسکوربیک استفاده کنیم، به راحتی می‌توانیم اطلاعات اضافی را از پایگاه داده CHEBI دریافت کنیم، اگر از قبل بدانیم CHEBI ID.

داده های غنی سازی در مورد اسید اسکوربیک در وب سایت CHEBI موجود است. تمام مطالب در وب سایت در زیر موجود است مجوز CC BY 4.0. تصویر توسط نویسنده

مدتی است که به دنبال یک موجودیت با نام زیست پزشکی از پیش آموزش‌دیده منبع باز و مناسب هستم که پیوند دهد. بسیاری از مدل‌های NLP تنها بر استخراج زیر مجموعه خاصی از مفاهیم پزشکی مانند ژن‌ها یا بیماری‌ها تمرکز دارند. پیدا کردن مدلی که اکثر مفاهیم پزشکی را شناسایی کرده و آنها را به پایگاه دانش هدف پیوند می دهد، حتی نادرتر است. خوشبختانه به طور تصادفی به آن برخورد کردم برن[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 سندباکس

شروع کنید پروژه خالی در sandbox و جزئیات اتصال را در دفترچه 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

استخراج رابطه

اکنون سعی خواهیم کرد روابط بین مفاهیم پزشکی را استخراج کنیم. از تجربه من، استخراج رابطه حداقل یک مرتبه سخت تر از استخراج موجودیت نامگذاری شده است. اگر نباید انتظار نتایج کامل را با پیوند نهادهای نامگذاری شده داشته باشید، مطمئناً می توانید انتظار برخی از اشتباهات را در تکنیک استخراج رابطه داشته باشید.

من به دنبال مدل‌های موجود استخراج رابطه زیست‌پزشکی بودم، اما چیزی پیدا نکردم که خارج از جعبه کار کند یا نیازی به تنظیم دقیق نداشته باشد. به نظر می رسد که حوزه استخراج رابطه در آستانه پیشرفت است و امیدواریم در آینده شاهد توجه بیشتری به آن باشیم. متأسفانه، من متخصص NLP نیستم، بنابراین از تنظیم دقیق مدل خودم اجتناب کردم. در عوض، ما از استخراج کننده رابطه صفر بر اساس کاغذ استفاده خواهیم کرد بررسی محدودیت صفر شات 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

نتایج

تصویر توسط نویسنده

همانطور که گفته شد، مدل NLP که من برای استخراج روابط استفاده کرده ام کامل نیست، و از آنجایی که من پزشک پزشکی نیستم، نمی دانم چند ارتباط را از دست داده است. با این حال، مواردی که شناسایی کرد معقول به نظر می رسند.

غنی سازی پایگاه داده خارجی

همانطور که قبلا ذکر کردم، ما هنوز هم می توانیم از پایگاه های داده خارجی مانند CHEBI یا MESH برای غنی سازی نمودار خود استفاده کنیم. به عنوان مثال، نمودار ما حاوی یک موجودیت پزشکی است اپیدرمولیز بولوزا و همچنین شناسه MeSH آن را می دانیم.

شما می توانید شناسه MeSH Epidermolysis bullosa را با پرس و جو زیر بازیابی کنید:

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

می توانید ادامه دهید و MeSH را برای یافتن اطلاعات موجود بررسی کنید:

داده های مرتبط با MeSH

اسکرین شات توسط نویسنده داده ها توسط کتابخانه ملی پزشکی ایالات متحده ارائه شده است.

در اینجا تصویری از اطلاعات موجود در وب سایت MeSH برای Epidermolysis bullosa آمده است. همانطور که گفته شد، من یک پزشک پزشکی نیستم، بنابراین دقیقاً نمی دانم بهترین راه برای مدل کردن این اطلاعات در یک نمودار چیست. با این حال، من به شما نشان خواهم داد که چگونه می توانید این اطلاعات را در 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 منان شاه، گروه اسنپ. تصویر تحت مجوز MIT در دسترس است https://github.com/snap-stanford/cs224w-notes.

فرض کنید یک نمودار دانش زیست پزشکی حاوی نهادها و مفاهیم پزشکی، روابط آنها و غنی سازی از پایگاه های داده پزشکی مختلف ساخته اید. می‌توانید از تکنیک‌های جاسازی گره برای یادگیری نمایش گره‌ها، که بردارهایی با طول ثابت هستند، استفاده کنید و آن‌ها را در گردش کار یادگیری ماشین خود وارد کنید. برنامه های کاربردی مختلفی از این رویکرد استفاده می کنند، از استفاده مجدد از دارو گرفته تا پیش بینی عوارض جانبی دارو. من یک مقاله تحقیقاتی پیدا کردم که از آن استفاده می کند پیش‌بینی پیوند برای درمان‌های بالقوه بیماری‌های جدید[4].

نتیجه

حوزه زیست پزشکی یک نمونه بارز است که در آن نمودارهای دانش قابل استفاده هستند. برنامه های کاربردی زیادی وجود دارد، از موتورهای جستجوی ساده گرفته تا گردش کار پیچیده تر یادگیری ماشین. امیدواریم با خواندن این پست وبلاگ، ایده هایی در مورد اینکه چگونه می توانید از نمودارهای دانش زیست پزشکی برای پشتیبانی از برنامه های خود استفاده کنید، به ذهنتان رسیده است. شما می توانید شروع کنید Neo4j سندباکس رایگان و از امروز شروع به کاوش کنید.

مثل همیشه، کد در دسترس است GitHub.

منابع

[1] دی کیم و همکاران.، "یک ابزار تشخیص نهاد با نام عصبی و نرمال سازی چند نوع ابزار برای استخراج متن زیست پزشکی"، در دسترسی IEEE، جلد 7، صفحات 73729–73740، 2019، doi: 10.1109/ACCESS.2019.2920708.

[2] Kastrin A, Rindflesch TC, Hristovski D. پیش‌بینی پیوند در شبکه هم‌وقوع MeSH: نتایج اولیه. Stud Health Technol Inform. 2014؛ 205:579-83. PMID: 25160252.

[3] Cetoli، A. (2020). بررسی محدودیت صفر شات FewRel. که در مجموعه مقالات بیست و هشتمین کنفرانس بین المللی زبان شناسی محاسباتی (ص 1447–1451). کمیته بین المللی زبانشناسی محاسباتی.

[4] Zhang, R., Hristovski, D., Schutte, D., Kastrin, A., Fiszman, M., & Kilicoglu, H. (2021). استفاده مجدد از دارو برای COVID-19 از طریق تکمیل نمودار دانش. مجله انفورماتیک زیست پزشکی، 115، 103696.

این مقاله در اصل در تاریخ منتشر شد به سمت علم داده و با اجازه نویسنده مجدداً در TOPBOTS منتشر شد.

از این مقاله لذت می برید؟ برای به روز رسانی های بیشتر هوش مصنوعی ثبت نام کنید.

زمانی که آموزش فنی بیشتری را منتشر کنیم به شما اطلاع خواهیم داد.

پست یک نمودار دانش زیست پزشکی با NLP بسازید به نظر می رسد برای اولین بار در TOPBOTS.

تمبر زمان:

بیشتر از TOPBOTS