בניית גרף ידע ביו-רפואי עם NLP

צומת המקור: 1401511

כבר הדגמתי איך לעשות ליצור גרף ידע מתוך דף ויקיפדיה. עם זאת, מאז שהפוסט זכה לתשומת לב רבה, החלטתי לחקור תחומים אחרים שבהם שימוש בטכניקות NLP לבניית גרף ידע הגיוני. לדעתי, התחום הביו-רפואי הוא דוגמה מצוינת שבה ייצוג הנתונים כגרף הוא הגיוני מכיוון שלעתים קרובות אתה מנתח אינטראקציות ויחסים בין גנים, מחלות, תרופות, חלבונים ועוד.

תת-גרף לדוגמה המראה קשרים בין חומצה אסקורבית למושגים ביו-רפואיים אחרים. תמונה מאת המחבר.

בהדמיה לעיל, יש לנו חומצה אסקורבית, הידועה גם בשם ויטמין C, וכמה מהקשרים שלה למושגים אחרים. לדוגמה, זה מראה שניתן להשתמש בויטמין C לטיפול בדלקת קיבה כרונית.

כעת, תוכל לבקש מצוות של מומחי תחום למפות עבורך את כל הקשרים הללו בין תרופות, מחלות ומושגים ביו-רפואיים אחרים. אבל, למרבה הצער, לא רבים מאיתנו יכולים להרשות לעצמם לשכור צוות של רופאים שיעשו את העבודה עבורנו. במקרה זה, נוכל להשתמש בטכניקות NLP כדי לחלץ את הקשרים הללו באופן אוטומטי. החלק הטוב הוא שאנו יכולים להשתמש בצינור NLP כדי לקרוא את כל מאמרי המחקר שקיימים, והחלק הרע הוא שלא כל התוצאות שהושגו יהיו מושלמות. עם זאת, בהתחשב בכך שאין לי צוות של מדענים מוכן לצידי כדי לחלץ קשרים באופן ידני, אפנה להשתמש בטכניקות NLP כדי לבנות גרף ידע ביו-רפואי משלי.

אני אשתמש במאמר מחקר יחיד בפוסט זה בבלוג כדי להדריך אותך בכל השלבים הנדרשים לבניית גרף ידע ביו-רפואי - הנדסת רקמות של חידוש העור וצמיחת שיער.

העיתון נכתב על ידי מוחמדרזה אחמדי. גרסת ה-PDF של המאמר זמינה תחת רישיון CC0 1.0. נעבור את השלבים הבאים לבניית גרף ידע:

  • קריאת מסמך PDF עם OCR
  • עיבוד מראש של טקסט
  • זיהוי וקישור מושגים ביו-רפואיים
  • מיצוי יחסים
  • העשרת מסד נתונים חיצוני

בסוף הפוסט הזה, תבנה גרף עם הסכמה הבאה.

סכימת גרפים ביו-רפואיים. תמונה מאת המחבר.

אנו נשתמש ב-Neo4j, מסד נתונים גרפים הכולל את מודל גרף המאפיינים שכותרתו, כדי לאחסן את הגרף שלנו. לכל מאמר יכול להיות מחבר אחד או יותר. נחלק את תוכן המאמר למשפטים ונשתמש ב-NLP כדי לחלץ הן ישויות רפואיות והן את מערכות היחסים ביניהן. זה אולי קצת מנוגד לאינטואיציה שנאחסן את היחסים בין ישויות כצמתי ביניים במקום קשרים. הגורם הקריטי מאחורי החלטה זו הוא שאנו רוצים לקבל נתיב ביקורת של טקסט המקור ממנו הוצא הקשר. עם מודל גרף המאפיינים המסומן, לא יכול להיות קשר המצביע על קשר אחר. מסיבה זו, אנו מחדשים את הקשר בין מושגים רפואיים לצומת ביניים. זה גם יאפשר למומחה תחום להעריך אם הקשר חולץ כהלכה או לא.

על הדרך, אדגים גם יישומים של שימוש בגרף הבנוי לחיפוש וניתוח מידע מאוחסן.

בואו נצלול ישר לתוכו!

אם תוכן חינוכי מעמיק זה שימושי עבורך, הירשם לרשימת התפוצה של מחקרי AI שלנו להתריע כשאנחנו משחררים חומר חדש.

קריאת מסמך PDF עם OCR

כאמור, גרסת ה-PDF של עבודת המחקר נגישה לציבור ברישיון CC0 1.0, מה שאומר שנוכל להוריד אותה בקלות עם Python. אנו נשתמש ב- pytesseract ספרייה כדי לחלץ טקסט מה-PDF. עד כמה שידוע לי, ספריית pytesseract היא אחת הספריות הפופולריות יותר עבור OCR. אם אתה רוצה לעקוב אחר דוגמאות קוד, הכנתי א מחברת Google Colab, כך שלא תצטרך להעתיק ולהדביק את הקוד בעצמך.

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 מזהה.

נתוני העשרה זמינים לגבי חומצה אסקורבית באתר 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 הוא עדיין המודל הביו-רפואי הטוב ביותר בקוד פתוח שיכולתי למצוא במהלך החקירה שלי.

בניית גרף ידע

לפני שנסתכל על טכניקות מיצוי יחס, נבנה גרף ידע ביו-רפואי תוך שימוש רק בישויות ונבחן את היישומים האפשריים. כאמור, הכנתי א מחברת Google Colab שבו אתה יכול להשתמש כדי לעקוב אחר דוגמאות הקוד בפוסט זה. כדי לאחסן את הגרף שלנו, נשתמש ב-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})

אתה יכול לבצע את שאילתת הסייפר הבאה כדי לבדוק את הגרף שנבנה:

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, אז נמנעתי מכוונון עדין של הדגם שלי. במקום זאת, נשתמש במחלץ יחס אפס המבוסס על הנייר בחינת מגבלת ה-XNUMX shot של 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 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: תוצאות ראשוניות. Stud Health Technol Inform. 2014;205:579–83. PMID: 25160252.

[3] Cetoli, A. (2020). בחינת מגבלת ה-XNUMX shot של FewRel. ב הליכים של הכנס הבינלאומי ה-28 לבלשנות חישובית (עמ' 1447–1451). הוועדה הבינלאומית לבלשנות חישובית.

[4] Zhang, R., Hristovski, D., Schutte, D., Kastrin, A., Fiszman, M., & Kilicoglu, H. (2021). שימוש מחדש בתרופה עבור COVID-19 באמצעות השלמת גרף ידע. Journal of Biomedical Informatics, 115, 103696.

מאמר זה פורסם במקור ב לקראת מדעי נתונים ופורסם מחדש ל- TOPBOTS באישור המחבר.

נהנה ממאמר זה? הירשם לעוד עדכוני AI.

נודיע לך כשנפרסם חינוך טכני נוסף.

ההודעה בניית גרף ידע ביו-רפואי עם NLP הופיע לראשונה ב עליון.

בול זמן:

עוד מ עליון