Pokazałem już, jak utwórz wykres wiedzy ze strony Wikipedii. Jednak ponieważ post wzbudził duże zainteresowanie, postanowiłem zbadać inne dziedziny, w których użycie technik NLP do skonstruowania grafu wiedzy ma sens. Moim zdaniem dziedzina biomedyczna jest doskonałym przykładem, w którym przedstawianie danych w postaci wykresu ma sens, ponieważ często analizuje się interakcje i relacje między genami, chorobami, lekami, białkami i nie tylko.
W powyższej wizualizacji mamy do czynienia z kwasem askorbinowym, zwanym również witaminą C i niektórymi jego powiązaniami z innymi pojęciami. Na przykład pokazuje, że witamina C może być stosowana w leczeniu przewlekłego zapalenia żołądka.
Teraz możesz mieć zespół ekspertów dziedzinowych, który zmapuje dla Ciebie wszystkie te powiązania między lekami, chorobami i innymi koncepcjami biomedycznymi. Niestety, niewielu z nas może sobie pozwolić na zatrudnienie zespołu lekarzy, którzy wykonaliby za nas pracę. W takim przypadku możemy skorzystać z technik NLP, aby automatycznie wyodrębnić te relacje. Dobrą stroną jest to, że możemy użyć potoku NLP do odczytania wszystkich artykułów naukowych, a złą jest to, że nie wszystkie uzyskane wyniki będą doskonałe. Jednak biorąc pod uwagę, że nie mam przy sobie zespołu naukowców gotowych do ręcznego wyodrębniania relacji, ucieknę się do wykorzystania technik NLP do skonstruowania własnego wykresu wiedzy biomedycznej.
Użyję jednego artykułu badawczego w tym poście na blogu, aby przeprowadzić Cię przez wszystkie kroki wymagane do skonstruowania wykresu wiedzy biomedycznej – Inżynieria tkankowa regeneracji skóry i wzrostu włosów.
Artykuł został napisany przez Mohammadrezy Ahmadi. Artykuł w wersji PDF jest dostępny na licencji CC0 1.0. Przejdziemy przez następujące kroki, aby skonstruować wykres wiedzy:
- Czytanie dokumentu PDF z OCR
- Wstępne przetwarzanie tekstu
- Rozpoznawanie i łączenie koncepcji biomedycznych
- Ekstrakcja relacji
- Wzbogacanie zewnętrznej bazy danych
Pod koniec tego postu utworzysz wykres z następującym schematem.
Do przechowywania naszego wykresu będziemy używać Neo4j, bazy danych wykresów, która zawiera model wykresów właściwości oznaczonych. Każdy artykuł może mieć jednego lub więcej autorów. Podzielimy treść artykułu na zdania i użyjemy NLP do wyodrębnienia zarówno podmiotów medycznych, jak i ich relacji. Może to być nieco sprzeczne z intuicją, że będziemy przechowywać relacje między podmiotami jako węzły pośrednie zamiast relacji. Krytycznym czynnikiem stojącym za tą decyzją jest to, że chcemy mieć ścieżkę audytu tekstu źródłowego, z którego została wyodrębniona relacja. W przypadku modelu wykresu właściwości z etykietą nie można mieć relacji wskazującej na inną relację. Z tego powodu refaktoryzujemy połączenie między koncepcjami medycznymi w węzeł pośredni. Pozwoli to również ekspertowi domeny ocenić, czy relacja została poprawnie wyodrębniona, czy nie.
Po drodze zademonstruję również zastosowania wykorzystania skonstruowanego grafu do wyszukiwania i analizy przechowywanych informacji.
Zanurzmy się w to!
Jeśli te szczegółowe treści edukacyjne są dla Ciebie przydatne, zapisz się na naszą listę dyskusyjną AI zostać powiadomionym, gdy wydamy nowy materiał.
Czytanie dokumentu PDF z OCR
Jak wspomniano, wersja PDF dokumentu badawczego jest dostępna publicznie na licencji CC0 1.0, co oznacza, że możemy ją łatwo pobrać za pomocą Pythona. Będziemy używać piteserakt biblioteka do wyodrębniania tekstu z pliku PDF. O ile mi wiadomo, biblioteka pytesseract jest jedną z bardziej popularnych bibliotek do OCR. Jeśli chcesz śledzić wraz z przykładami kodu, przygotowałem Notatnik Google Colab, więc nie musisz samodzielnie kopiować i wklejać kodu.
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)Wstępne przetwarzanie tekstu
Teraz, gdy mamy już dostęp do treści artykułu, usuniemy z tekstu tytuły sekcji i opisy rysunków. Następnie podzielimy tekst na zdania.
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)Biomedyczne łączenie nazwanych jednostek
Teraz nadchodzi ekscytująca część. Dla nowych użytkowników NLP oraz rozpoznawania i łączenia nazwanych jednostek zacznijmy od podstaw. Techniki rozpoznawania nazwanych jednostek są używane do wykrywania odpowiednich jednostek lub pojęć w tekście. Na przykład w dziedzinie biomedycznej chcemy zidentyfikować w tekście różne geny, leki, choroby i inne pojęcia.
W tym przykładzie model NLP zidentyfikował w tekście geny, choroby, leki, gatunki, mutacje i ścieżki. Jak wspomniano, proces ten nazywa się rozpoznawaniem nazwanych jednostek. Uaktualnienie do rozpoznawania nazwanych jednostek to tak zwane łączenie nazwanych jednostek. Technika łączenia nazwanych jednostek wykrywa odpowiednie pojęcia w tekście i próbuje zmapować je do docelowej bazy wiedzy. W dziedzinie biomedycznej niektóre z docelowych baz wiedzy to:
Dlaczego mielibyśmy chcieć łączyć podmioty medyczne z docelową bazą wiedzy? Głównym powodem jest to, że pomaga nam radzić sobie z ujednoznacznieniem jednostek. Na przykład nie chcemy oddzielnych jednostek na wykresie przedstawiających kwas askorbinowy i witaminę C, ponieważ eksperci dziedzinowi mogą powiedzieć, że to to samo. Drugim powodem jest to, że mapując koncepcje do docelowej bazy wiedzy, możemy wzbogacić nasz model wykresu, pobierając informacje o mapowanych konceptach z docelowej bazy wiedzy. Jeśli ponownie użyjemy przykładu kwasu askorbinowego, możemy łatwo pobrać dodatkowe informacje z bazy danych CHEBI, jeśli znamy już jego Identyfikator CHEBI.
Od jakiegoś czasu szukam przyzwoitego, przeszkolonego, wyszkolonego biomedycznego podmiotu o nazwie open source. Wiele modeli NLP koncentruje się na wyodrębnianiu tylko określonego podzbioru pojęć medycznych, takich jak geny lub choroby. Jeszcze rzadziej można znaleźć model, który wykrywa większość koncepcji medycznych i łączy je z docelową bazą wiedzy. Na szczęście się natknąłem BERNO[1], neuronowe rozpoznawanie jednostek biomedycznych i wielotypowe narzędzie normalizacji. Jeśli dobrze rozumiem, jest to dopracowany model BioBert z różnymi nazwanymi modelami łączącymi jednostki zintegrowanymi w celu mapowania koncepcji do biomedycznych baz wiedzy docelowej. Nie tylko to, ale zapewniają również bezpłatny punkt końcowy REST, więc nie musimy radzić sobie z bólem głowy związanym z działaniem zależności i modelu. Biomedyczna wizualizacja rozpoznawania nazwanych jednostek, której użyłem powyżej, została stworzona przy użyciu modelu BERN, więc wiemy, że wykrywa geny, choroby, leki, gatunki, mutacje i ścieżki w tekście.
Niestety model BERN nie przypisuje identyfikatorów docelowej bazy wiedzy do wszystkich koncepcji. Przygotowałem więc skrypt, który najpierw sprawdza, czy dla pojęcia podano odrębny identyfikator, a jeśli tak nie jest, użyje nazwy encji jako identyfikatora. Obliczymy również sha256 tekstu zdań, aby później łatwiej zidentyfikować określone zdania, gdy będziemy robić wyodrębnianie relacji.
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()})Sprawdziłem wyniki łączenia nazwanej jednostki i zgodnie z oczekiwaniami nie jest to idealne. Na przykład nie identyfikuje komórek macierzystych jako koncepcji medycznej. Z drugiej strony wykrył pojedynczą jednostkę o nazwie „serce, mózg, nerwy i nerki”. Jednak BERN jest nadal najlepszym modelem biomedycznym o otwartym kodzie źródłowym, jaki udało mi się znaleźć podczas mojego dochodzenia.
Skonstruuj wykres wiedzy
Zanim przyjrzymy się technikom ekstrakcji relacji, skonstruujemy graf wiedzy biomedycznej przy użyciu wyłącznie jednostek i zbadamy możliwe zastosowania. Jak wspomniano, przygotowałem Notatnik Google Colab którego możesz użyć do śledzenia przykładów kodu w tym poście. Do przechowywania naszego wykresu użyjemy Neo4j. Nie musisz zajmować się przygotowywaniem lokalnego środowiska Neo4j. Zamiast tego możesz użyć bezpłatnej instancji Neo4j Sandbox.
Zacząć Pusty projekt w piaskownicy i skopiuj szczegóły połączenia do notatnika Colab.
Teraz możesz śmiało przygotować połączenie Neo4j w notebooku.
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())Zaczniemy od zaimportowania autora i artykułu do wykresu. Węzeł artykułu będzie zawierał tylko tytuł.
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})Jeśli otworzysz przeglądarkę Neo4j, powinieneś zobaczyć następujący wykres.
Możesz zaimportować zdania i wspomniane encje, wykonując następujące zapytanie 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})Możesz wykonać następujące zapytanie Cypher, aby sprawdzić skonstruowany wykres:
MATCH p=(a:Article)-[:HAS_SENTENCE]->()-[:MENTIONS]->(e:Entity) RETURN p LIMIT 25
Jeśli poprawnie zaimportowałeś dane, powinieneś zobaczyć podobną wizualizację.
Aplikacje wykresów wiedzy
Nawet bez przepływu ekstrakcji relacji istnieje już kilka przypadków użycia naszego wykresu.
Wyszukiwarka
Moglibyśmy użyć naszego wykresu jako wyszukiwarki. Na przykład możesz użyć następującego zapytania szyfrującego, aby znaleźć zdania lub artykuły, które wspominają o określonej jednostce medycznej.
MATCH (e:Entity)<-[:MENTIONS]-(s:Sentence) WHERE e.name = "autoimmune diseases" RETURN s.text as result
Efekt
Analiza współwystępowania
Drugą opcją jest analiza współwystępowania. Możesz zdefiniować współwystępowanie między podmiotami medycznymi, jeśli występują w tym samym zdaniu lub artykule. Znalazłem artykuł [2], który wykorzystuje medyczną sieć współwystępowania do przewidywania nowych możliwych powiązań między podmiotami medycznymi.
Przewidywanie linków w sieci współwystępowania MeSH: wstępne wyniki – PubMed
Możesz użyć następującego zapytania szyfrującego, aby znaleźć jednostki, które często występują w tym samym zdaniu.
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
Efekt
podmiot1 podmiot2 współwystępowanie choroby skóry wrzody cukrzycowe 2 przewlekłe rany wrzody cukrzycowe 2 choroby skóry przewlekłe rany 2 Oczywiście wyniki byłyby lepsze, gdybyśmy przeanalizowali tysiące lub więcej artykułów.
Sprawdź wiedzę autora
Możesz również użyć tego wykresu, aby znaleźć ekspertyzę autora, badając podmioty medyczne, o których najczęściej piszą. Dzięki tym informacjom możesz również zasugerować przyszłą współpracę.
Wykonaj następujące zapytanie Cypher, aby sprawdzić, które podmioty medyczne wymienił nasz jedyny autor w artykule badawczym.
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
Efekt
autor jednostka liczyć Mohammadrezy Ahmadi Kolagen 9 Mohammadrezy Ahmadi oparzenia 4 Mohammadrezy Ahmadi choroby skóry 4 Mohammadrezy Ahmadi enzymy kolagenazy 2 Mohammadrezy Ahmadi Pęcherzowe oddzielanie się naskórka 2 Ekstrakcja relacji
Teraz spróbujemy wydobyć relacje między koncepcjami medycznymi. Z mojego doświadczenia wynika, że wyodrębnianie relacji jest co najmniej o rząd wielkości trudniejsze niż wyodrębnianie nazwanych encji. Jeśli nie powinieneś oczekiwać doskonałych wyników z łączeniem nazwanych encji, z pewnością możesz spodziewać się błędów w technice wyodrębniania relacji.
Szukałem dostępnych modeli ekstrakcji relacji biomedycznych, ale nie znalazłem niczego, co działa po wyjęciu z pudełka lub nie wymaga dostrajania. Wydaje się, że dziedzina wyodrębniania relacji jest w czołówce i miejmy nadzieję, że w przyszłości przyjrzymy się temu więcej. Niestety nie jestem ekspertem NLP, więc unikałem dostrajania własnego modelu. Zamiast tego użyjemy ekstraktora relacji zero-shot opartego na papierze Odkrywanie limitu zerowego strzału w FewRel[3]. Chociaż nie polecałbym wprowadzania tego modelu do produkcji, jest on wystarczająco dobry do prostej demonstracji. Model dostępny na Przytulanie twarzy, dzięki czemu nie musimy zajmować się szkoleniem ani konfiguracją modelu.
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)Dzięki ekstraktorowi relacji zero-shot możesz określić, które relacje chcesz wykryć. W tym przykładzie użyłem powiązany i współdziała relacje. Próbowałem również bardziej konkretnych typów relacji, takich jak smakołyki, przyczyny i inne, ale wyniki nie były wspaniałe.
W tym modelu musisz zdefiniować, pomiędzy którymi parami encji chcesz wykrywać relacje. Użyjemy wyników linkowania nazwanej encji jako danych wejściowych do procesu wyodrębniania relacji. Najpierw znajdujemy wszystkie zdania, w których wymieniono dwa lub więcej podmiotów, a następnie przeprowadzamy je przez model wyodrębniania relacji, aby wyodrębnić wszelkie powiązania. Zdefiniowałem również wartość progową 0.85, co oznacza, że jeśli model przewiduje powiązanie między podmiotami z prawdopodobieństwem niższym niż 0.85, zignorujemy tę prognozę.
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']) > 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] > 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]->(r:Relation {type: row.type})-[:REL]->(target) MERGE (text)-[:MENTIONS]->(r) """, {'data': predicted_rels})Przechowujemy relacje, a także tekst źródłowy użyty do wyodrębnienia tej relacji na wykresie.
Wyodrębnione relacje między jednostkami a tekstem źródłowym można zbadać za pomocą następującego zapytania szyfrującego:
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
Efekt
Jak wspomniałem, model NLP, którego użyłem do wyodrębniania relacji, nie jest doskonały, a ponieważ nie jestem lekarzem, nie wiem, ile połączeń pominął. Jednak te, które wykrył, wydają się rozsądne.
Wzbogacanie zewnętrznej bazy danych
Jak wspomniałem wcześniej, nadal możemy korzystać z zewnętrznych baz danych, takich jak CHEBI czy MESH, aby wzbogacić nasz wykres. Na przykład nasz wykres zawiera podmiot medyczny Pęcherzowe oddzielanie się naskórka znamy również jego identyfikator MeSH.
Możesz pobrać identyfikator MeSH pęcherza moczowego naskórka za pomocą następującego zapytania:
MATCH (e:Entity) WHERE e.name = "Epidermolysis bullosa" RETURN e.name as entity, e.other_ids as other_ids
Możesz iść dalej i sprawdzić MeSH, aby znaleźć dostępne informacje:
Oto zrzut ekranu z informacjami dostępnymi na stronie MeSH dla Epidermolysis bullosa. Jak wspomniano, nie jestem lekarzem, więc nie wiem dokładnie, jaki byłby najlepszy sposób modelowania tych informacji na wykresie. Jednak pokażę ci, jak pobrać te informacje w Neo4j za pomocą procedury apoc.load.json, aby pobrać informacje z punktu końcowego MeSH REST. Następnie możesz poprosić eksperta domeny o pomoc w modelowaniu tych informacji.
Zapytanie Cypher do pobrania informacji z punktu końcowego MeSH REST to:
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
Wykres wiedzy jako dane wejściowe uczenia maszynowego
Na koniec szybko przeprowadzę Cię przez proces wykorzystania wykresu wiedzy biomedycznej jako danych wejściowych do przepływu pracy uczenia maszynowego. W ostatnich latach przeprowadzono wiele badań i postępów w dziedzinie osadzania węzłów. Modele osadzania węzłów przekładają topologię sieci na przestrzeń osadzania.
Załóżmy, że skonstruowałeś graf wiedzy biomedycznej zawierający jednostki i koncepcje medyczne, ich relacje i wzbogacenie z różnych medycznych baz danych. Możesz użyć technik osadzania węzłów, aby poznać reprezentacje węzłów, które są wektorami o stałej długości, i wprowadzić je do przepływu pracy uczenia maszynowego. Podejście to wykorzystuje się w różnych zastosowaniach, od zmiany przeznaczenia leku po przewidywanie skutków ubocznych lub skutków ubocznych. Znalazłem artykuł badawczy, który używa prognoza linków dla potencjalnych metod leczenia nowych chorób[4].
Wnioski
Dziedzina biomedyczna jest doskonałym przykładem zastosowania wykresów wiedzy. Istnieje wiele aplikacji, od prostych wyszukiwarek po bardziej skomplikowane przepływy pracy związane z uczeniem maszynowym. Mamy nadzieję, że czytając ten wpis na blogu, wpadłeś na kilka pomysłów, jak wykorzystać wykresy wiedzy biomedycznej do wsparcia swoich aplikacji. Możesz zacząć darmowa piaskownica Neo4j i zacznij odkrywać już dziś.
Jak zawsze kod jest dostępny na GitHub.
Referencje
[1] D. Kim i wsp., „Neural Named Entity Recognition and Multi-Type Normalization Tool for Biomedical Text Mining”, w: Dostęp IEEE, tom. 7, s. 73729–73740, 2019, doi: 10.1109/ACCESS.2019.2920708.
[2] Kastrin A, Rindflesch TC, Hristovski D. Przewidywanie linków w sieci współwystępowania MeSH: wyniki wstępne. Informacje o technologii zdrowia stadnin. 2014;205:579–83. PMID: 25160252.
[3] Cetoli, A. (2020). Odkrywanie limitu zerowego strzału w FewRel. W Materiały XXVIII Międzynarodowej Konferencji Lingwistyki Komputerowej (s. 1447-1451). Międzynarodowy Komitet Lingwistyki Komputerowej.
[4] Zhang R., Hristovski D., Schutte D., Kastrin A., Fiszman M. i Kilicoglu H. (2021). Ponowne przeznaczenie leków na COVID-19 poprzez uzupełnienie wykresu wiedzy. Journal of Biomedical Informatics, 115, 103696.
Ten artykuł został pierwotnie opublikowany w W kierunku nauki o danych i ponownie opublikowane w TOPBOTS za zgodą autora.
Podoba Ci się ten artykuł? Zarejestruj się, aby otrzymywać więcej aktualizacji AI.
Damy Ci znać, kiedy wydamy więcej edukacji technicznej.
Post Zbuduj wykres wiedzy biomedycznej za pomocą NLP pojawiła się najpierw na TOPBOTY.
- '
- "
- &
- 10
- 11
- 2019
- 2020
- 2021
- 7
- 9
- a
- O nas
- dostępny
- Dodatkowy
- administracja
- niekorzystny
- przed
- AI
- ai badania
- Wszystkie kategorie
- już
- zawsze
- amp
- analiza
- analityka
- w czasie rzeczywistym sprawiają,
- Inne
- odpowiedni
- aplikacje
- stosowany
- Stosowanie
- podejście
- artykuł
- towary
- powiązany
- Uwaga
- Audyt
- Autorzy
- automatycznie
- dostępny
- Podstawy
- zanim
- poniżej
- BEST
- pomiędzy
- Najwyższa
- Bit
- Blog
- Bolt
- Pudełko
- przeglądarka
- biznes
- wezwanie
- kandydat
- kandydatów
- walizka
- Etui
- Przyczyny
- wyzwanie
- kod
- połączenie
- kombinacje
- obliczać
- pojęcie
- Konferencja
- połączenie
- połączenia
- zawiera
- zawartość
- kontynuować
- mógłby
- Para
- COVID-19
- Stwórz
- stworzony
- krytyczny
- klient
- Obsługa klienta
- dane
- Baza danych
- Bazy danych
- sprawa
- postanowiła
- decyzja
- wykazać
- wykazać
- opisać
- detale
- wykryte
- choroby
- Lekarz
- Lekarze
- Nie
- domena
- domeny
- pobieranie
- kierowca
- lek
- Narkotyki
- podczas
- każdy
- z łatwością
- krawędź
- Edukacja
- edukacyjny
- efekt
- Punkt końcowy
- silnik
- Inżynieria
- wzbogacać
- podmioty
- jednostka
- Środowisko
- oceniać
- wydarzenie
- dokładnie
- przykład
- przykłady
- Z wyjątkiem
- ekscytujący
- oczekiwać
- spodziewany
- doświadczenie
- ekspert
- ekspertyza
- eksperci
- odkryj
- Korzyści
- Postać
- finansować
- i terminów, a
- pływ
- Skupiać
- obserwuj
- następujący
- znaleziono
- Darmowy
- od
- przyszłość
- miejsce
- dobry
- wspaniały
- Zarządzanie
- Włosy
- głowa
- Zdrowie
- pomoc
- pomaga
- zatrudnić
- W jaki sposób
- How To
- Jednak
- hr
- HTTPS
- pomysły
- zidentyfikować
- obraz
- importowanie
- Informacja
- wkład
- przykład
- zintegrowany
- na świecie
- śledztwo
- IT
- dziennik
- Wiedzieć
- wiedza
- znany
- Korea
- UCZYĆ SIĘ
- nauka
- Regulamin
- Biblioteka
- Licencja
- LIMIT
- LINK
- Powiązanie
- linki
- załadować
- miejscowy
- poszukuje
- maszyna
- uczenie maszynowe
- WYKONUJE
- ręcznie
- mapa
- mapowanie
- Marketing
- Mecz
- materiał
- znaczenie
- znaczy
- medyczny
- lekarstwo
- średni
- wzmiankowany
- wspomina
- może
- Górnictwo
- błędy
- MIT
- model
- modele
- jeszcze
- większość
- narodowy
- sieć
- NIH
- węzły
- notatnik
- uzyskane
- koncepcja
- operacje
- Opinia
- Option
- zamówienie
- Inne
- własny
- Papier
- część
- Hasło
- doskonały
- Proszę
- Popularny
- możliwy
- potencjał
- przewidzieć
- przepowiednia
- Przewidywania
- Przygotować
- teraźniejszość
- pierwotny
- wygląda tak
- Produkt
- Produkcja
- projekt
- własność
- zapewniać
- publiczny
- szybko
- nośny
- Czytający
- rozsądny
- niedawny
- polecić
- relacje
- związek
- Relacje
- zwolnić
- reprezentowanie
- wywołań
- wymagać
- wymagany
- Badania naukowe
- Resort
- REST
- Efekt
- powrót
- run
- sole
- taki sam
- piaskownica
- Naukowcy
- Szukaj
- Wyszukiwarka
- Wyszukiwarki
- wtórny
- rozsądek
- zestaw
- ustawienie
- znak
- podobny
- Prosty
- ponieważ
- pojedynczy
- szósty
- skóra
- Snap
- So
- kilka
- Typ przestrzeni
- specyficzny
- dzielić
- początek
- trzon
- Nadal
- sklep
- wsparcie
- cel
- zespół
- Techniczny
- Techniki
- Połączenia
- Źródło
- rzecz
- tysiące
- próg
- Przez
- czas
- Tytuł
- już dziś
- narzędzie
- Trening
- leczyć
- typy
- nas
- dla
- zrozumieć
- Nowości
- us
- posługiwać się
- przypadków użycia
- wartość
- różnorodny
- wersja
- wyobrażanie sobie
- Strona internetowa
- Co
- Podczas
- Wikipedia
- bez
- Praca
- przepływów pracy
- działa
- by
- X
- lat
- Wydajność
- Twój