Erstellen Sie einen biomedizinischen Wissensgraphen mit NLP

Quellknoten: 1401511

Ich habe bereits gezeigt, wie es geht einen Wissensgraphen aus einer Wikipedia-Seite erstellen. Da der Beitrag jedoch viel Aufmerksamkeit erhielt, habe ich mich entschieden, andere Bereiche zu erkunden, in denen die Verwendung von NLP-Techniken zum Erstellen eines Wissensgraphen sinnvoll ist. Meiner Meinung nach ist der biomedizinische Bereich ein Paradebeispiel, wo die Darstellung der Daten als Diagramm sinnvoll ist, da Sie häufig Wechselwirkungen und Beziehungen zwischen Genen, Krankheiten, Medikamenten, Proteinen und mehr analysieren.

Beispiel-Unterdiagramm, das die Beziehungen von Ascorbinsäure zu anderen biomedizinischen Konzepten zeigt. Bild vom Autor.

In der obigen Visualisierung haben wir Ascorbinsäure, auch bekannt als Vitamin C, und einige ihrer Beziehungen zu anderen Konzepten. Es zeigt zum Beispiel, dass Vitamin C zur Behandlung von chronischer Gastritis eingesetzt werden könnte.

Jetzt könnten Sie ein Team von Fachexperten haben, die all diese Verbindungen zwischen Medikamenten, Krankheiten und anderen biomedizinischen Konzepten für Sie abbilden. Aber leider können es sich nicht viele von uns leisten, ein Team von Ärzten einzustellen, die die Arbeit für uns erledigen. In diesem Fall können wir auf NLP-Techniken zurückgreifen, um diese Beziehungen automatisch zu extrahieren. Der gute Teil ist, dass wir eine NLP-Pipeline verwenden können, um alle Forschungsarbeiten zu lesen, und der schlechte Teil ist, dass nicht alle erzielten Ergebnisse perfekt sein werden. Da ich jedoch kein Team von Wissenschaftlern an meiner Seite habe, um Beziehungen manuell zu extrahieren, werde ich auf die Verwendung von NLP-Techniken zurückgreifen, um einen eigenen biomedizinischen Wissensgraphen zu erstellen.

Ich werde in diesem Blogbeitrag ein einzelnes Forschungspapier verwenden, um Sie durch alle Schritte zu führen, die zum Erstellen eines biomedizinischen Wissensgraphen erforderlich sind – Tissue Engineering der Hautregeneration und des Haarwachstums.

Das Papier wurde geschrieben von Mohammedreza Ahmadi. Die PDF-Version des Artikels ist unter der Lizenz CC0 1.0 verfügbar. Wir werden die folgenden Schritte durchlaufen, um einen Wissensgraphen zu erstellen:

  • Lesen eines PDF-Dokuments mit OCR
  • Textvorverarbeitung
  • Erkennung und Verknüpfung von biomedizinischen Konzepten
  • Beziehungsextraktion
  • Externe Datenbankanreicherung

Am Ende dieses Beitrags konstruieren Sie ein Diagramm mit dem folgenden Schema.

Biomedizinisches Diagrammschema. Bild vom Autor.

Wir werden Neo4j verwenden, eine Diagrammdatenbank, die das beschriftete Eigenschaftsdiagrammmodell enthält, um unser Diagramm zu speichern. Jeder Artikel kann einen oder mehrere Autoren haben. Wir werden den Inhalt des Artikels in Sätze aufteilen und NLP verwenden, um sowohl medizinische Einheiten als auch ihre Beziehungen zu extrahieren. Es mag ein wenig kontraintuitiv sein, dass wir die Beziehungen zwischen Entitäten als Zwischenknoten anstelle von Beziehungen speichern. Der entscheidende Faktor hinter dieser Entscheidung ist, dass wir einen Audit-Trail des Quelltextes haben möchten, aus dem die Relation extrahiert wurde. Mit dem beschrifteten Eigenschaftsdiagrammmodell können Sie keine Beziehung haben, die auf eine andere Beziehung zeigt. Aus diesem Grund refaktorisieren wir die Verbindung zwischen medizinischen Konzepten in einen Zwischenknoten. Dadurch kann ein Domänenexperte auch beurteilen, ob eine Beziehung korrekt extrahiert wurde oder nicht.

Nebenbei werde ich auch Anwendungen demonstrieren, wie der konstruierte Graph verwendet wird, um gespeicherte Informationen zu suchen und zu analysieren.

Tauchen wir gleich ein!

Wenn dieser ausführliche Bildungsinhalt für Sie nützlich ist, Abonnieren Sie unsere AI Research Mailingliste benachrichtigt werden, wenn wir neues Material veröffentlichen.

Lesen eines PDF-Dokuments mit OCR

Wie bereits erwähnt, ist die PDF-Version des Forschungspapiers unter der Lizenz CC0 1.0 öffentlich zugänglich, was bedeutet, dass wir es einfach mit Python herunterladen können. Wir werden die verwenden Pytesseract Bibliothek zum Extrahieren von Text aus dem PDF. Soweit ich weiß, ist die Pytesseract-Bibliothek eine der beliebtesten Bibliotheken für OCR. Wenn Sie Codebeispiele mitverfolgen möchten, habe ich a vorbereitet Google Colab-Notizbuch, sodass Sie den Code nicht selbst kopieren und einfügen müssen.

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)

Textvorverarbeitung

Da uns nun der Artikelinhalt zur Verfügung steht, werden wir Abschnittstitel und Abbildungsbeschreibungen aus dem Text entfernen. Als nächstes teilen wir den Text in Sätze auf.

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)

Verknüpfung von biomedizinischen benannten Entitäten

Jetzt kommt der spannende Teil. Für diejenigen, die neu in NLP und in der Erkennung und Verknüpfung benannter Entitäten sind, beginnen wir mit einigen Grundlagen. Techniken zur Erkennung benannter Entitäten werden verwendet, um relevante Entitäten oder Konzepte im Text zu erkennen. Im biomedizinischen Bereich möchten wir beispielsweise verschiedene Gene, Medikamente, Krankheiten und andere Konzepte im Text identifizieren.

Extraktion biomedizinischer Konzepte. Bild vom Autor.

In diesem Beispiel identifizierte das NLP-Modell Gene, Krankheiten, Medikamente, Arten, Mutationen und Signalwege im Text. Wie bereits erwähnt, wird dieser Vorgang als Named Entity Recognition bezeichnet. Eine Erweiterung zur Named-Entity-Erkennung ist das sogenannte Named-Entity-Linking. Die benannte Entitätsverknüpfungstechnik erkennt relevante Konzepte im Text und versucht, sie der Ziel-Wissensbasis zuzuordnen. Im biomedizinischen Bereich sind einige der angestrebten Wissensbasen:

Warum sollten wir medizinische Einheiten mit einer Ziel-Wissensdatenbank verknüpfen? Der Hauptgrund ist, dass es uns hilft, mit der Disambiguierung von Entitäten umzugehen. Beispielsweise möchten wir keine getrennten Entitäten im Diagramm, die Ascorbinsäure und Vitamin C darstellen, da Domänenexperten Ihnen sagen können, dass dies dasselbe ist. Der zweite Grund ist, dass wir durch das Abbilden von Konzepten auf eine Ziel-Wissensbasis unser Graphenmodell bereichern können, indem wir Informationen über die abgebildeten Konzepte aus der Ziel-Wissensbasis abrufen. Wenn wir das Ascorbinsäure-Beispiel noch einmal verwenden, könnten wir leicht zusätzliche Informationen aus der CHEBI-Datenbank abrufen, wenn wir sie bereits kennen CHEBI-Ident.

Anreicherungsdaten zu Ascorbinsäure auf der CHEBI-Website verfügbar. Alle Inhalte der Website sind unter verfügbar CC BY 4.0-Lizenz. Bild vom Autor.

Ich habe seit einiger Zeit nach einer anständigen vortrainierten biomedizinischen benannten Entitätsverknüpfung auf Open-Source-Basis gesucht. Viele NLP-Modelle konzentrieren sich darauf, nur eine bestimmte Teilmenge medizinischer Konzepte wie Gene oder Krankheiten zu extrahieren. Es ist noch seltener, ein Modell zu finden, das die meisten medizinischen Konzepte erkennt und sie mit einer Ziel-Wissensbasis verknüpft. Zum Glück bin ich darüber gestolpert BERN[1], ein Werkzeug zur Erkennung neuronaler biomedizinischer Entitäten und zur Normalisierung mehrerer Typen. Wenn ich das richtig verstehe, handelt es sich um ein fein abgestimmtes BioBert-Modell mit verschiedenen benannten Entitätsverknüpfungsmodellen, die integriert sind, um Konzepte auf biomedizinische Zielwissensbasen abzubilden. Nicht nur das, sie bieten auch einen kostenlosen REST-Endpunkt, sodass wir uns nicht mit den Kopfschmerzen herumschlagen müssen, um die Abhängigkeiten und das Modell zum Laufen zu bringen. Die oben verwendete biomedizinische Visualisierung zur Erkennung benannter Entitäten wurde mit dem BERN-Modell erstellt, sodass wir wissen, dass es Gene, Krankheiten, Medikamente, Arten, Mutationen und Signalwege im Text erkennt.

Leider weist das BERN-Modell nicht allen Konzepten Ziel-Wissensdatenbank-IDs zu. Also habe ich ein Skript vorbereitet, das zuerst prüft, ob für ein Konzept eine eindeutige ID angegeben ist, und wenn dies nicht der Fall ist, verwendet es den Entitätsnamen als ID. Wir werden auch den sha256 des Texts von Sätzen berechnen, um bestimmte Sätze später leichter zu identifizieren, wenn wir die Beziehungsextraktion durchführen.

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()})

Ich habe die Ergebnisse der benannten Entitätsverknüpfung überprüft, und wie erwartet ist sie nicht perfekt. Beispielsweise werden Stammzellen nicht als medizinisches Konzept identifiziert. Auf der anderen Seite entdeckte es eine einzelne Entität namens „Herz, Gehirn, Nerven und Niere“. BERN ist jedoch immer noch das beste biomedizinische Open-Source-Modell, das ich während meiner Untersuchung finden konnte.

Konstruieren Sie einen Wissensgraphen

Bevor wir uns mit Techniken zur Extraktion von Beziehungen befassen, werden wir einen biomedizinischen Wissensgraphen erstellen, der nur Entitäten verwendet, und die möglichen Anwendungen untersuchen. Wie bereits erwähnt, habe ich eine vorbereitet Google Colab-Notizbuch die Sie verwenden können, um den Codebeispielen in diesem Beitrag zu folgen. Um unser Diagramm zu speichern, verwenden wir Neo4j. Sie müssen sich nicht mit der Vorbereitung einer lokalen Neo4j-Umgebung befassen. Stattdessen können Sie eine kostenlose Neo4j-Sandbox-Instanz verwenden.

Neo4j-Sandbox

Starte das Leeres Projekt in der Sandbox und kopieren Sie die Verbindungsdetails in das Colab-Notebook.

Neo4j Sandbox-Verbindungsdetails. Bild vom Autor.

Jetzt können Sie die Neo4j-Verbindung im Notebook vorbereiten.

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())

Wir beginnen damit, den Autor und den Artikel in die Grafik zu importieren. Der Artikelknoten enthält nur den Titel.

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})

Wenn Sie den Neo4j-Browser öffnen, sollten Sie die folgende Grafik sehen.

Bild vom Autor.

Sie können die Sätze und erwähnten Entitäten importieren, indem Sie die folgende Cypher-Abfrage ausführen:

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})

Sie können die folgende Cypher-Abfrage ausführen, um den konstruierten Graphen zu untersuchen:

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

Wenn Sie die Daten korrekt importiert haben, sollten Sie eine ähnliche Visualisierung sehen.

Als Diagramm gespeicherte Entitätsextraktion. Bild vom Autor.

Anwendungen für Wissensgraphen

Auch ohne den Beziehungsextraktionsfluss gibt es bereits einige Anwendungsfälle für unseren Graphen.

Suchmaschine

Wir könnten unser Diagramm als Suchmaschine verwenden. Beispielsweise könnten Sie die folgende Cypher-Abfrage verwenden, um Sätze oder Artikel zu finden, die eine bestimmte medizinische Entität erwähnen.

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

Die Ergebnisse

Bild vom Autor.

Kookkurrenzanalyse

Die zweite Möglichkeit ist die Co-Occurrence-Analyse. Sie könnten das gleichzeitige Auftreten medizinischer Einheiten definieren, wenn sie im selben Satz oder Artikel vorkommen. Ich habe einen Artikel gefunden[2], der das medizinische Co-Occurrence-Netzwerk verwendet, um neue mögliche Verbindungen zwischen medizinischen Einheiten vorherzusagen.

Link-Vorhersage in einem MeSH-Kookkurrenz-Netzwerk: vorläufige Ergebnisse – PubMed

Sie können die folgende Cypher-Abfrage verwenden, um Entitäten zu finden, die häufig im selben Satz vorkommen.

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

Die Ergebnisse

Entität1 Entität2 gleichzeitiges Auftreten
Hautkrankheiten diabetische Geschwüre 2
chronische Wunden diabetische Geschwüre 2
Hautkrankheiten chronische Wunden 2

Offensichtlich wären die Ergebnisse besser, wenn wir Tausende oder mehr Artikel analysieren würden.

Überprüfen Sie die Expertise des Autors

Sie können dieses Diagramm auch verwenden, um die Expertise des Autors zu ermitteln, indem Sie die medizinischen Einheiten untersuchen, über die er am häufigsten schreibt. Mit diesen Informationen können Sie auch zukünftige Kooperationen vorschlagen.

Führen Sie die folgende Cypher-Abfrage aus, um zu überprüfen, welche medizinischen Einrichtungen unser einziger Autor in der Forschungsarbeit erwähnt hat.

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

Die Ergebnisse

Autor Einheit zählen
Mohammedreza Ahmadi Kollagen 9
Mohammedreza Ahmadi Verbrennungen 4
Mohammedreza Ahmadi Hautkrankheiten 4
Mohammedreza Ahmadi Kollagenase-Enzyme 2
Mohammedreza Ahmadi Epidermolysis bullosa 2

Beziehungsextraktion

Jetzt werden wir versuchen, Beziehungen zwischen medizinischen Konzepten zu extrahieren. Aus meiner Erfahrung ist die Extraktion von Beziehungen mindestens eine Größenordnung schwieriger als die Extraktion benannter Entitäten. Wenn Sie beim Named Entity Linking keine perfekten Ergebnisse erwarten sollten, dann können Sie definitiv mit einigen Fehlern bei der Beziehungsextraktionstechnik rechnen.

Ich habe nach verfügbaren biomedizinischen Beziehungsextraktionsmodellen gesucht, aber nichts gefunden, das sofort einsatzbereit ist oder keine Feinabstimmung erfordert. Es scheint, dass das Gebiet der Beziehungsextraktion an der Spitze steht, und wir werden hoffentlich in Zukunft mehr Aufmerksamkeit dafür sehen. Leider bin ich kein NLP-Experte, daher habe ich es vermieden, mein eigenes Modell zu verfeinern. Stattdessen verwenden wir den auf dem Papier basierenden Zero-Shot-Beziehungsextraktor Erkundung der Zero-Shot-Grenze von FewRel[3]. Obwohl ich nicht empfehlen würde, dieses Modell in Produktion zu nehmen, ist es gut genug für eine einfache Demonstration. Das Modell ist auf verfügbar Umarmendes Gesicht, sodass wir uns nicht mit dem Training oder der Einrichtung des Modells befassen müssen.

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)

Mit dem Zero-Shot Relation Extractor können Sie definieren, welche Relationen Sie erkennen möchten. In diesem Beispiel habe ich die verwendet damit verbundenen und interagiert Beziehungen. Ich habe auch spezifischere Beziehungstypen wie Leckereien, Ursachen und andere ausprobiert, aber die Ergebnisse waren nicht großartig.

Bei diesem Modell müssen Sie definieren, zwischen welchen Paaren von Entitäten Sie Beziehungen erkennen möchten. Wir werden die Ergebnisse der benannten Entitätsverknüpfung als Eingabe für den Beziehungsextraktionsprozess verwenden. Zuerst finden wir alle Sätze, in denen zwei oder mehr Entitäten erwähnt werden, und führen sie dann durch das Beziehungsextraktionsmodell, um alle Verbindungen zu extrahieren. Ich habe auch einen Schwellenwert von 0.85 definiert, was bedeutet, dass wir die Vorhersage ignorieren, wenn ein Modell eine Verbindung zwischen Entitäten mit einer Wahrscheinlichkeit von weniger als 0.85 vorhersagt.

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})

Wir speichern die Beziehungen sowie den Quelltext, der zum Extrahieren dieser Beziehung im Diagramm verwendet wird.

Extrahierte Beziehungen, die in einem Diagramm gespeichert sind. Bild vom Autor.

Sie können die extrahierten Beziehungen zwischen Entitäten und dem Quelltext mit der folgenden Cypher-Abfrage untersuchen:

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

Die Ergebnisse

Bild vom Autor.

Wie bereits erwähnt, ist das NLP-Modell, das ich zum Extrahieren von Beziehungen verwendet habe, nicht perfekt, und da ich kein Arzt bin, weiß ich nicht, wie viele Verbindungen es übersehen hat. Die erkannten scheinen jedoch vernünftig zu sein.

Externe Datenbankanreicherung

Wie ich bereits erwähnt habe, können wir immer noch die externen Datenbanken wie CHEBI oder MESH verwenden, um unsere Grafik anzureichern. Unser Diagramm enthält beispielsweise eine medizinische Entität Epidermolysis bullosa und wir kennen auch seine MeSH-ID.

Sie können die MeSH-ID von Epidermolysis bullosa mit der folgenden Abfrage abrufen:

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

Sie könnten fortfahren und den MeSH untersuchen, um verfügbare Informationen zu finden:

MeSH-verknüpfte Daten

Screenshot vom Autor. Daten mit freundlicher Genehmigung der US National Library of Medicine.

Hier ist ein Screenshot der verfügbaren Informationen auf der MeSH-Website für Epidermolysis bullosa. Wie bereits erwähnt, bin ich kein Arzt, daher weiß ich nicht genau, wie ich diese Informationen am besten in einem Diagramm modellieren könnte. Ich zeige Ihnen jedoch, wie Sie diese Informationen in Neo4j mithilfe der Prozedur apoc.load.json abrufen, um die Informationen vom MeSH-REST-Endpunkt abzurufen. Und dann können Sie einen Domänenexperten bitten, Ihnen bei der Modellierung dieser Informationen zu helfen.

Die Cypher-Abfrage zum Abrufen der Informationen vom MeSH-REST-Endpunkt lautet:

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

Wissensgraph als Dateneingabe für maschinelles Lernen

Als abschließenden Gedanken werde ich Ihnen kurz erläutern, wie Sie den biomedizinischen Wissensgraphen als Eingabe für einen Arbeitsablauf für maschinelles Lernen verwenden können. In den letzten Jahren gab es viel Forschung und Weiterentwicklung auf dem Gebiet der Knoteneinbettung. Knoteneinbettungsmodelle übersetzen die Netzwerktopologie in Einbettungsraum.

Copyright © 2017 Manan Shah, SNAP Group. Bild verfügbar unter MIT-Lizenz in https://github.com/snap-stanford/cs224w-notes.

Angenommen, Sie haben einen biomedizinischen Wissensgraphen erstellt, der medizinische Einheiten und Konzepte, ihre Beziehungen und Anreicherungen aus verschiedenen medizinischen Datenbanken enthält. Sie könnten Techniken zum Einbetten von Knoten verwenden, um die Knotendarstellungen zu lernen, bei denen es sich um Vektoren mit fester Länge handelt, und sie in Ihren Arbeitsablauf für maschinelles Lernen einzugeben. Verschiedene Anwendungen verwenden diesen Ansatz, von der Wiederverwendung von Arzneimitteln bis hin zu Vorhersagen von Nebenwirkungen oder Nebenwirkungen von Arzneimitteln. Ich habe eine Forschungsarbeit gefunden, die verwendet Verknüpfungsvorhersage für potenzielle Behandlungen neuer Krankheiten[4].

Zusammenfassung

Der biomedizinische Bereich ist ein Paradebeispiel für die Anwendung von Wissensgraphen. Es gibt viele Anwendungen, die von einfachen Suchmaschinen bis hin zu komplizierteren Workflows für maschinelles Lernen reichen. Hoffentlich sind Ihnen beim Lesen dieses Blogbeitrags einige Ideen gekommen, wie Sie biomedizinische Wissensgraphen zur Unterstützung Ihrer Anwendungen verwenden könnten. Sie können eine starten kostenlose Neo4j-Sandbox und beginnen Sie noch heute mit der Erkundung.

Den Code gibt es wie immer unter GitHub.

Bibliographie

[1] D.Kim et al., „Ein neuronales Erkennungs- und Multityp-Normalisierungstool für benannte Entitäten für biomedizinisches Text-Mining“, in IEEE-Zugriff, Bd. 7, S. 73729–73740, 2019, doi: 10.1109/ACCESS.2019.2920708.

[2] Kastrin A, Rindflesch TC, Hristovski D. Link-Vorhersage in einem MeSH-Co-Occurrence-Netzwerk: vorläufige Ergebnisse. Stud Health Technology Inform. 2014;205:579–83. PMID: 25160252.

[3] Cetoli, A. (2020). Erkundung der Zero-Shot-Grenze von FewRel. Im Tagungsband der 28. Internationalen Konferenz für Computerlinguistik (S. 1447–1451). Internationales Komitee für Computerlinguistik.

[4] Zhang, R., Hristovski, D., Schutte, D., Kastrin, A., Fiszman, M., & Kilicoglu, H. (2021). Umwidmung von Arzneimitteln für COVID-19 durch Vervollständigung von Wissensgraphen. Zeitschrift für Biomedizinische Informatik, 115, 103696.

Dieser Artikel wurde ursprünglich veröffentlicht am Auf dem Weg zu Data Science und mit Genehmigung des Autors erneut auf TOPBOTS veröffentlicht.

Genießen Sie diesen Artikel? Melden Sie sich für weitere AI-Updates an.

Wir werden Sie informieren, wenn wir mehr technische Ausbildung veröffentlichen.

Die Post Erstellen Sie einen biomedizinischen Wissensgraphen mit NLP erschien zuerst auf TOPBOTS.

Zeitstempel:

Mehr von TOPBOTS