Konstruer en biomedisinsk kunnskapsgraf med NLP

Kilde node: 1401511

Jeg har allerede demonstrert hvordan lage en kunnskapsgraf fra en Wikipedia-side. Men siden innlegget fikk mye oppmerksomhet, har jeg bestemt meg for å utforske andre domener der det er fornuftig å bruke NLP-teknikker for å konstruere en kunnskapsgraf. Etter min mening er det biomedisinske feltet et godt eksempel der det er fornuftig å representere dataene som en graf, da du ofte analyserer interaksjoner og relasjoner mellom gener, sykdommer, medikamenter, proteiner og mer.

Eksempel på undergrafikk som viser askorbinsyreforhold til andre biomedisinske konsepter. Bilde av forfatteren.

I visualiseringen ovenfor har vi askorbinsyre, også kjent som vitamin C, og noen av dens relasjoner til andre konsepter. For eksempel viser det at vitamin C kan brukes til å behandle kronisk gastritt.

Nå kan du få et team av domeneeksperter til å kartlegge alle disse forbindelsene mellom medikamenter, sykdommer og andre biomedisinske konsepter for deg. Men dessverre er det ikke mange av oss som har råd til å ansette et team med leger for å gjøre jobben for oss. I så fall kan vi ty til å bruke NLP-teknikker for å trekke ut disse relasjonene automatisk. Den gode delen er at vi kan bruke en NLP-pipeline til å lese alle forskningsartikler der ute, og den dårlige delen er at ikke alle oppnådde resultater vil være perfekte. Men gitt at jeg ikke har et team av forskere klar ved min side for å trekke ut relasjoner manuelt, vil jeg ty til å bruke NLP-teknikker for å konstruere en egen biomedisinsk kunnskapsgraf.

Jeg vil bruke en enkelt forskningsartikkel i dette blogginnlegget for å lede deg gjennom alle trinnene som kreves for å konstruere en biomedisinsk kunnskapsgraf – Vevsteknikk for hudregenerering og hårvekst.

Oppgaven er skrevet av Mohammadreza Ahmadi. PDF-versjonen av artikkelen er tilgjengelig under CC0 1.0-lisensen. Vi vil gå gjennom følgende trinn for å konstruere en kunnskapsgraf:

  • Lese et PDF-dokument med OCR
  • Forbehandling av tekst
  • Biomedisinsk konseptgjenkjenning og kobling
  • Relasjonsutvinning
  • Ekstern databaseberikelse

På slutten av dette innlegget vil du konstruere en graf med følgende skjema.

Biomedisinsk grafskjema. Bilde av forfatteren.

Vi vil bruke Neo4j, en grafdatabase som inneholder den merkede egenskapsgrafmodellen, for å lagre grafen vår. Hver artikkel kan ha en eller flere forfattere. Vi vil dele artikkelinnholdet i setninger og bruke NLP til å trekke ut både medisinske enheter og deres relasjoner. Det kan være litt kontraintuitivt at vi lagrer relasjonene mellom enheter som mellomnoder i stedet for relasjoner. Den kritiske faktoren bak denne beslutningen er at vi ønsker å ha et revisjonsspor av kildeteksten som relasjonen ble hentet fra. Med den merkede egenskapsgrafmodellen kan du ikke ha et forhold som peker til et annet forhold. Av denne grunn refaktoriserer vi forbindelsen mellom medisinske konsepter til en mellomnode. Dette vil også tillate en domeneekspert å vurdere om en relasjon ble riktig hentet ut eller ikke.

Underveis vil jeg også demonstrere anvendelser av å bruke den konstruerte grafen til å søke og analysere lagret informasjon.

La oss dykke rett i det!

Hvis dette inngående pedagogiske innholdet er nyttig for deg, abonner på vår adresseliste for AI-forskning å bli varslet når vi slipper nytt materiale.

Lese et PDF-dokument med OCR

Som nevnt er PDF-versjonen av forskningsoppgaven tilgjengelig for publikum under CC0 1.0-lisensen, noe som betyr at vi enkelt kan laste den ned med Python. Vi vil bruke pytesseract bibliotek for å trekke ut tekst fra PDF-en. Så vidt jeg vet, er pytesseract-biblioteket et av de mer populære bibliotekene for OCR. Hvis du vil følge med på kodeeksempler, har jeg utarbeidet en Google Colab notatbok, slik at du ikke trenger å kopiere og lime inn koden selv.

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)

Forbehandling av tekst

Nå som vi har artikkelinnholdet tilgjengelig, vil vi gå videre og fjerne seksjonstitler og figurbeskrivelser fra teksten. Deretter deler vi teksten i setninger.

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)

Biomedisinsk navngitt enhetskobling

Nå kommer den spennende delen. For de som er nybegynnere i NLP og navngitt enhetsgjenkjenning og kobling, la oss starte med litt grunnleggende. Teknikker for navngitt enhetsgjenkjenning brukes til å oppdage relevante enheter eller konsepter i teksten. For eksempel, i det biomedisinske domenet, ønsker vi å identifisere ulike gener, medikamenter, sykdommer og andre begreper i teksten.

Utvinning av biomedisinske konsepter. Bilde av forfatteren.

I dette eksemplet identifiserte NLP-modellen gener, sykdommer, medikamenter, arter, mutasjoner og veier i teksten. Som nevnt kalles denne prosessen navngitt enhetsgjenkjenning. En oppgradering til den navngitte enhetsgjenkjenningen er den såkalte navngitte entitetskoblingen. Den navngitte enhetskoblingsteknikken oppdager relevante konsepter i teksten og prøver å kartlegge dem til målkunnskapsbasen. I det biomedisinske domenet er noen av målkunnskapsbasene:

Hvorfor vil vi knytte medisinske enheter til en målkunnskapsbase? Den primære grunnen er at det hjelper oss med å håndtere enhetsdisambiguering. For eksempel vil vi ikke ha separate enheter i grafen som representerer askorbinsyre og vitamin C, da domeneeksperter kan fortelle deg at det er det samme. Den sekundære grunnen er at ved å kartlegge konsepter til en målkunnskapsbase, kan vi berike grafmodellen vår ved å hente informasjon om de kartlagte konseptene fra målkunnskapsbasen. Hvis vi bruker askorbinsyreeksemplet igjen, kan vi enkelt hente ytterligere informasjon fra CHEBI-databasen hvis vi allerede vet det CHEBI id.

Anrikningsdata tilgjengelig om askorbinsyre på CHEBIs nettsted. Alt innholdet på nettsiden er tilgjengelig under CC BY 4.0-lisens. Bilde av forfatteren.

Jeg har lett etter en anstendig åpen kildekode forhåndsutdannet biomedisinsk navngitt enhetskobling i noen tid. Mange NLP-modeller fokuserer på å trekke ut bare en spesifikk undergruppe av medisinske konsepter som gener eller sykdommer. Det er enda sjeldnere å finne en modell som oppdager de fleste medisinske konsepter og kobler dem til en målkunnskapsbase. Heldigvis har jeg snublet over BERN[1], et nevralt biomedisinsk enhetsgjenkjennings- og multi-type normaliseringsverktøy. Hvis jeg forstår det riktig, er det en finjustert BioBert-modell med ulike navngitte entitetskoblingsmodeller integrert for å kartlegge konsepter til biomedisinske målkunnskapsbaser. Ikke bare det, men de gir også et gratis REST-endepunkt, slik at vi ikke trenger å håndtere hodepinen med å få avhengighetene og modellen til å fungere. Den biomedisinske navngitte enhetsgjenkjenningsvisualiseringen jeg har brukt ovenfor ble laget ved hjelp av BERN-modellen, så vi vet at den oppdager gener, sykdommer, medikamenter, arter, mutasjoner og veier i teksten.

Dessverre tildeler ikke BERN-modellen målkunnskapsbase-IDer til alle konsepter. Så jeg har utarbeidet et skript som først ser om en distinkt id er gitt for et konsept, og hvis det ikke er det, vil det bruke enhetsnavnet som id. Vi vil også beregne sha256 i teksten til setninger for å identifisere spesifikke setninger lettere senere når vi skal gjøre relasjonsekstraksjon.

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

Jeg har inspisert resultatene av den navngitte enhetskoblingen, og som forventet er den ikke perfekt. For eksempel identifiserer den ikke stamceller som et medisinsk konsept. På den annen side oppdaget den en enkelt enhet kalt "hjerte, hjerne, nerver og nyre". Imidlertid er BERN fortsatt den beste biomedisinske modellen med åpen kildekode jeg kunne finne under undersøkelsen min.

Lag en kunnskapsgraf

Før vi ser på relasjonsekstraksjonsteknikker, vil vi konstruere en biomedisinsk kunnskapsgraf ved å bruke bare enheter og undersøke mulige anvendelser. Som nevnt har jeg forberedt en Google Colab notatbok som du kan bruke til å følge kodeeksemplene i dette innlegget. For å lagre grafen vår bruker vi Neo4j. Du trenger ikke å forholde deg til å forberede et lokalt Neo4j-miljø. I stedet kan du bruke en gratis Neo4j Sandbox-forekomst.

Neo4j sandkasse

Start Blankt prosjekt i sandkassen og kopier tilkoblingsdetaljene til Colab-notisboken.

Neo4j Sandbox-tilkoblingsdetaljer. Bilde av forfatteren.

Nå kan du gå videre og forberede Neo4j-tilkoblingen i den bærbare datamaskinen.

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

Vi starter med å importere forfatteren og artikkelen inn i grafen. Artikkelnoden vil kun inneholde tittelen.

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

Hvis du åpner Neo4j-nettleseren, bør du se følgende graf.

Bilde av forfatteren.

Du kan importere setningene og nevnte enheter ved å utføre følgende Cypher-spørring:

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

Du kan utføre følgende Cypher-spørring for å inspisere den konstruerte grafen:

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

Hvis du har importert dataene riktig, bør du se en lignende visualisering.

Enhetsutvinning lagret som en graf. Bilde av forfatteren.

Kunnskapsgrafapplikasjoner

Selv uten relasjonsekstraksjonsflyten, er det allerede et par brukstilfeller for grafen vår.

Søkemotor

Vi kan bruke grafen vår som søkemotor. Du kan for eksempel bruke følgende Cypher-søk for å finne setninger eller artikler som nevner en spesifikk medisinsk enhet.

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

Resultater

Bilde av forfatteren.

Samforekomstanalyse

Det andre alternativet er samforekomstanalysen. Du kan definere samtidig forekomst mellom medisinske enheter hvis de vises i samme setning eller artikkel. Jeg har funnet en artikkel[2] som bruker det medisinske samforekomstnettverket til å forutsi nye mulige forbindelser mellom medisinske enheter.

Linkprediksjon i et MeSH-samforekomstnettverk: foreløpige resultater – PubMed

Du kan bruke følgende Cypher-spørring for å finne enheter som ofte forekommer samtidig i samme setning.

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

Resultater

enhet 1 enhet 2 samtidig forekomst
hudsykdommer diabetiske sår 2
kroniske sår diabetiske sår 2
hudsykdommer kroniske sår 2

Selvfølgelig ville resultatene vært bedre hvis vi analyserte tusenvis eller flere artikler.

Inspiser forfatterens ekspertise

Du kan også bruke denne grafen til å finne forfatterens ekspertise ved å undersøke de medisinske enhetene de oftest skriver om. Med denne informasjonen kan du også foreslå fremtidige samarbeid.

Utfør følgende Cypher-spørring for å inspisere hvilke medisinske enheter vår enkeltforfatter nevnte i forskningsoppgaven.

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

Resultater

forfatter enhet telle
Mohammadreza Ahmadi kollagen 9
Mohammadreza Ahmadi brannskader 4
Mohammadreza Ahmadi hudsykdommer 4
Mohammadreza Ahmadi kollagenase enzymer 2
Mohammadreza Ahmadi Epidermolysis bullosa 2

Relasjonsutvinning

Nå skal vi prøve å trekke ut relasjoner mellom medisinske begreper. Fra min erfaring er relasjonsekstraksjonen minst en størrelsesorden vanskeligere enn navngitt enhetsekstraksjon. Hvis du ikke bør forvente perfekte resultater med navngitte entitetskoblinger, kan du definitivt forvente noen feil med relasjonsekstraksjonsteknikken.

Jeg har lett etter tilgjengelige biomedisinske relasjonsekstraksjonsmodeller, men fant ingenting som fungerer ut av esken eller som ikke krever finjustering. Det ser ut til at feltet for relasjonsutvinning er i forkant, og forhåpentligvis vil vi se mer oppmerksomhet om det i fremtiden. Dessverre er jeg ikke en NLP-ekspert, så jeg unngikk å finjustere min egen modell. I stedet vil vi bruke nullskuddsrelasjonsekstraktoren basert på papiret Utforsker nullskuddsgrensen til FewRel[3]. Selv om jeg ikke vil anbefale å sette denne modellen i produksjon, er den god nok for en enkel demonstrasjon. Modellen er tilgjengelig på Klem ansikt, så vi trenger ikke å forholde oss til trening eller oppsett av modellen.

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)

Med nullskuddsrelasjonsuttrekkeren kan du definere hvilke relasjoner du ønsker å oppdage. I dette eksemplet har jeg brukt assosiert og interaktiv forhold. Jeg har også prøvd mer spesifikke forholdstyper som godbiter, årsaker og andre, men resultatene var ikke bra.

Med denne modellen må du definere mellom hvilke par av enheter du ønsker å oppdage relasjoner. Vi vil bruke resultatene av den navngitte enhetskoblingen som input til relasjonsekstraksjonsprosessen. Først finner vi alle setningene der to eller flere enheter er nevnt og kjører dem deretter gjennom relasjonsekstraksjonsmodellen for å trekke ut eventuelle forbindelser. Jeg har også definert en terskelverdi på 0.85, noe som betyr at hvis en modell forutsier en kobling mellom enheter med en sannsynlighet lavere enn 0.85, vil vi ignorere prediksjonen.

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

Vi lagrer relasjonene så vel som kildeteksten som brukes til å trekke ut denne relasjonen i grafen.

Uttrukket relasjoner lagret i en graf. Bilde av forfatteren.

Du kan undersøke de utpakkede relasjonene mellom enheter og kildeteksten med følgende Cypher-spørring:

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

Resultater

Bilde av forfatteren.

Som nevnt er NLP-modellen jeg har brukt for å trekke ut relasjoner ikke perfekt, og siden jeg ikke er lege, vet jeg ikke hvor mange forbindelser den gikk glipp av. Imidlertid virker de den oppdaget rimelige.

Ekstern databaseberikelse

Som jeg nevnte før, kan vi fortsatt bruke eksterne databaser som CHEBI eller MESH for å berike grafen vår. For eksempel inneholder grafen vår en medisinsk enhet Epidermolysis bullosa og vi kjenner også dens MeSH-id.

Du kan hente MeSH-IDen til Epidermolysis bullosa med følgende spørring:

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

Du kan gå videre og inspisere MeSH for å finne tilgjengelig informasjon:

MeSH Linked Data

Skjermbilde av forfatter. Data er gitt med tillatelse fra U.S. National Library of Medicine.

Her er et skjermbilde av tilgjengelig informasjon på MeSH-nettstedet for Epidermolysis bullosa. Som nevnt er jeg ikke en lege, så jeg vet ikke nøyaktig hva som ville være den beste måten å modellere denne informasjonen i en graf. Jeg vil imidlertid vise deg hvordan du henter denne informasjonen i Neo4j ved å bruke apoc.load.json-prosedyren for å hente informasjonen fra MeSH REST-endepunktet. Og så kan du be en domeneekspert om å hjelpe deg med å modellere denne informasjonen.

Cypher-spørringen for å hente informasjonen fra MeSH REST-endepunktet er:

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

Kunnskapsgraf som maskinlæringsdatainndata

Som en siste tanke vil jeg raskt lede deg gjennom hvordan du kan bruke den biomedisinske kunnskapsgrafen som et input til en arbeidsflyt for maskinlæring. De siste årene har det vært mye forskning og fremskritt innen node-innbygging. Node-innbyggingsmodeller oversetter nettverkstopologien til innebyggingsrom.

Copyright © 2017 Manan Shah, SNAP Group. Bilde tilgjengelig under MIT-lisens i https://github.com/snap-stanford/cs224w-notes.

Anta at du har konstruert en biomedisinsk kunnskapsgraf som inneholder medisinske enheter og konsepter, deres relasjoner og berikelse fra ulike medisinske databaser. Du kan bruke teknikker for innbygging av node for å lære node-representasjonene, som er vektorer med fast lengde, og legge dem inn i arbeidsflyten for maskinlæring. Ulike applikasjoner bruker denne tilnærmingen, alt fra gjenbruk av medikamenter til spådommer om bivirkninger eller bivirkninger. Jeg har funnet en forskningsartikkel som bruker koblingsprediksjon for potensielle behandlinger av nye sykdommer[4].

konklusjonen

Det biomedisinske domenet er et godt eksempel der kunnskapsgrafer er anvendelige. Det er mange applikasjoner som spenner fra enkle søkemotorer til mer kompliserte arbeidsflyter for maskinlæring. Forhåpentligvis, ved å lese dette blogginnlegget, kom du opp med noen ideer om hvordan du kan bruke biomedisinske kunnskapsgrafer for å støtte applikasjonene dine. Du kan starte en gratis Neo4j Sandbox og begynn å utforske i dag.

Som alltid er koden tilgjengelig på GitHub.

Referanser

[1] D. Kim et al., "Et nevralt navngitt enhetsgjenkjenning og multi-type normaliseringsverktøy for biomedisinsk tekstgruvedrift," i IEEE-tilgang, vol. 7, s. 73729–73740, 2019, doi: 10.1109/ACCESS.2019.2920708.

[2] Kastrin A, Rindflesch TC, Hristovski D. Linkprediksjon i et MeSH-samforekomstnettverk: foreløpige resultater. Stud Health Technol Inform. 2014;205:579–83. PMID: 25160252.

[3] Cetoli, A. (2020). Utforsker nullskuddsgrensen til FewRel. I Proceedings of the 28th International Conference on Computational Linguistics (s. 1447–1451). International Committee on Computational Linguistics.

[4] Zhang, R., Hristovski, D., Schutte, D., Kastrin, A., Fiszman, M., & Kilicoglu, H. (2021). Gjenbruk av narkotika for COVID-19 via fullføring av kunnskapsdiagram. Journal of Biomedical Informatics, 115, 103696.

Denne artikkelen ble opprinnelig publisert på Mot datavitenskap og publisert på nytt til TOPBOTS med tillatelse fra forfatteren.

Liker du denne artikkelen? Registrer deg for flere AI-oppdateringer.

Vi gir beskjed når vi slipper mer teknisk utdanning.

Innlegget Konstruer en biomedisinsk kunnskapsgraf med NLP dukket først på TOPPBOTS.

Tidstempel:

Mer fra TOPPBOTS