Расширьте возможности Doctor.ai с помощью Hetionet, STRING и KEGG

В этой статье показано, как:

1. Интегрировать три графа общедоступных знаний в медицинский чат-бот — Doctor.ai.

2. Спросите Doctor.ai об историях болезни, патогенах, лекарствах и генах, используя естественный язык через AWS Lex.

Продолжающаяся пандемия COVID-19 преподала нам много ценных уроков. Один из них заключается в том, что нам необходимо модернизировать нашу систему здравоохранения и сделать ее более доступной для всех людей. Правительства всего мира вложили огромные деньги в цифровизацию (здесь и здесь). Но через два года после начала пандемии богатые страны, такие как Германия, по-прежнему используют факс и глючное программное обеспечение в своих больницах для передачи данных. Этот вопиющий технологический разрыв стоит жизней.

В декабре 2021 года мы с четырьмя инженерами Neo4j создали чат-бота Doctor.ai на основе базы данных eICU (подробности читайте здесь и здесь). Doctor.ai может управлять огромным количеством медицинских карт пациентов и врачей. С помощью AWS Lex пользователи могут быстро запрашивать свои истории болезни, а врачи могут даже запрашивать рекомендации по лечению. База данных содержит множество различных типов данных: демографическую информацию, сведения о посещении отделения интенсивной терапии, результаты лабораторных исследований, идентификацию возбудителей, диагнозы и методы лечения. Тем не менее, мы смогли поместить их все в один граф знаний Neo4j. В отличие от других баз данных, основанных на таблицах, граф дал нам свободу создавать и легко выполнять очень сложные запросы.

Но эта первая версия Doctor.ai имела очень ограниченный объем знаний — только записи eICU и некоторые заранее определенные медицинские часто задаваемые вопросы. Итак, как мы можем сделать его более осведомленным? Мы можем поместить новые данные в его график. Многие учебные пособия на Medium научили нас использовать обработку естественного языка (NLP) для очистки веб-сайтов, таких как Википедия, для автоматического построения графа знаний. Несмотря на то, что NLP может быстро генерировать черновые графики, для обеспечения их правильности необходимы тщательная проверка и проверка фактов. И нигде точность не имеет большего значения, чем в сфере здравоохранения, где точная информация часто является вопросом жизни и смерти.

Но у нас может быть второй более простой подход. В Интернете есть несколько общедоступных и тщательно отобранных графов знаний, таких как Hetionet, STRING и KEGG. Почему бы просто не перенести эти данные в Doctor.ai? Затем Doctor.ai получит информацию о взаимодействии лекарств, побочных эффектах лекарств, взаимодействиях генов и генов в дополнение ко всем своим медицинским записям. В этой статье я покажу вам, как интегрировать все эти три базы данных в Doctor.ai. Вы можете найти данные и мой код в моем репозитории здесь.



И интегрированный дамп графа знаний находится здесь:

https://1drv.ms/u/s!Apl037WLngZ8hhj_0aRswHOOKm0p?e=7kuWsS

1. Источники данных

База данных Гетионет представляет собой комплексный граф медицинских знаний. Он был разработан Даниэлем Химмельштейном и сотрудниками лаборатории Баранзини в Калифорнийском университете в Сан-Франциско. Он соединяет 47 031 узел с 2 250 197 ребрами 24 различных типов: ген, болезнь, соединение, анатомия, побочный эффект и т. д. (рис. 2). В этой статье я буду использовать Hetionet в качестве основы.

Однако сам Hetionet также нуждается в обновлении. Последнее обновление Hetionet было в 2018 году. Его пакет Neo4j имеет формат 3.x. Мы также можем значительно обогатить его ген-генное взаимодействие некоторыми внешними данными. Наконец, он содержит только 137 болезней. А данные об инфекционных заболеваниях и их возбудителях полностью отсутствуют.

По этой причине я приведу еще две базы данных: базу данных STRING и базу данных болезней KEGG. База данных STRING собирает данные о межбелковых взаимодействиях. Он содержит 67 миллионов белков и 20 миллиардов взаимодействий. База данных болезней KEGG на данный момент содержит более 2500 заболеваний, которые я также исследовал ранее в Neo4j. Он также содержит данные об инфекционных заболеваниях и их возбудителях, включая COVID-19. Наконец, KEGG также интегрировала наркотики и гены в свой граф знаний.

Hetionet выпущен как CC0. STRING находится в свободном доступе под лицензией Creative Commons BY 4.0, а академические пользователи могут свободно использовать веб-сайт KEGG.

2. Интегрируйте три источника данных

Интегрировать разные графы знаний непросто, потому что они могут использовать разные идентификаторы для описания одной и той же концепции. В нашем случае база данных Hetionet индексирует болезни с идентификатором DOID, соединения с идентификатором DrugBank и гены с идентификатором Entrez Gene ID. Обе базы данных KEGG и STRING создали свои уникальные идентификаторы. К счастью, биомедицинские исследователи постепенно договорились о контролируемых словарях и стандартизировали наименования генов, патогенов и других понятий. По этой причине я буду объединять узлы на основе их name свойств, а не их исходных идентификаторов. Поэтому я сначала стандартизировал имена среди трех источников данных (исходный код в моем репозитории).

Я попытался импортировать дамп данных Neo4j из Hetionet, следуя каждому шагу этого учебника. Но он каждый раз терпел неудачу с ошибкой база данных не полностью отключена. Тогда я решил скачать его JSON. Это оказалось лучшим решением, потому что я мог редактировать его содержимое. Я установил узел name в качестве идентификатора и соответствующим образом изменил определения ребер.

Затем я импортировал этот модифицированный Hetionet в Neo4j 4.3.6. Импорт 2,2 миллиона связей занял несколько часов. Я рекомендую вам сделать это на AWS EC2 (шаблон CloudFormation находится в моем репозитории). И не забудьте создать дамп для этой версии 4.3.6 в качестве резервной копии.

После импорта мы видим, что в Hetionet 20 943 гена, 137 болезней и 1 552 соединения.

Затем загрузите два набора данных STRING для Homo sapiens.

База данных STRING присваивает оценку каждому белок-белковому взаимодействию на основе различных каналов доказательств, таких как эксперимент, коэкспрессия, гомология и другие. Оценка 0,5 будет означать, что примерно каждое второе взаимодействие может быть ошибочным (т. е. ложноположительным). Однако в загруженных данных links баллы умножаются на 1000. В этом проекте я удалил соединения с combined_scores ниже 900 перед импортом.

Интеграция базы данных KEGG Disease была более сложной. Я скачал данные через KEGG API, как описано в моем предыдущем проекте. На этот раз мне нужно связать сущности с именами вместо их идентификаторов KEGG. После этого я импортирую данные в граф знаний. После того, как Hetionet поглотил STRING и KEGG, его количество узлов в Болезни, Соединении и Патогенах существенно увеличилось (таблица 1). Также увеличилось количество подключений. Было создано 123 577 пар STRING взаимодействий ген-ген. Количество отношений treats увеличилось с 755 до 3363, а количество causes увеличилось с 138 944 до 139 376.

3. Соедините граф знаний с Doctor.ai

Теперь моя графа знаний Hetionet + STRING + KEGG завершена. Пришло время связать его с Doctor.ai. Я настроил инфраструктуру AWS через CloudFormation, как описано в моей предыдущей статье (шаблон в моем репозитории). Исходными резервными данными в Doctor.ai был набор данных eICU. Кандидаты должны пройти онлайн-курс, а затем дождаться утверждения. В этой статье я просто создам двух вымышленных пациентов на основе данных eICU, чтобы продемонстрировать новый Doctor.ai. У пациента №1 Люси была болезнь Кьясанурского леса, а у пациента №2 Марк страдал синдромом Кристиансона (рис. 6).

После того, как их медицинские записи были импортированы в Doctor.ai, я провел следующие два диалога (рис. 7).

Как вы можете видеть на рисунке 7, Doctor.ai сначала нашел их медицинские записи. И благодаря новому графу знаний он мог бы также предоставить более подробную информацию об этих заболеваниях. В первом случае он сообщил о патогене, а во втором случае он мог сказать, что ген SLC9A6 вовлечен в синдром Кристиансона.

Затем я спросил Doctor.ai о теме последних двух лет — COVID-19. Как видите, Doctor.ai смог не только назвать возбудителя SARS-CoV-2, но и представить список препаратов против болезни. Все эти данные взяты из базы данных KEGG.

Под капотом мы видим ограничение AWS Lex. В настоящее время встроенный тип слота Lex Alphanumeric не может распознавать пробелы по умолчанию. Так что стафилококковая инфекция или инфекция, вызванная вирусом простого герпеса были выявлены некорректно (см. пост здесь). Я обошел это ограничение, определив свой собственный тип слота и введя все две тысячи названий болезней в качестве значений-кандидатов.

Заключение

Вещи легче узнать, когда они находятся в сетях. И этот небольшой проект эффективно подключает Doctor.ai к общему миру медицинских знаний (рис. 9). И вместо того, чтобы сразу создавать с нуля с помощью НЛП, почему бы сначала не интегрировать существующие? Doctor.ai был чат-ботом, который управлял одним конкретным типом данных — медицинскими записями. В своем первом дебюте Doctor.ai отвечал на фактические вопросы с помощью AWS Kendra, который извлекает заранее заданные ответы для пользователей. Это очень дорого ($810 в месяц). Внедрив данные исследований от Hetionet, STRING и KEGG, он очень эффективно приобрел общие медицинские знания. Благодаря этим расширенным знаниям Doctor.ai может не только сообщать пациентам и врачам подробности о прошлых посещениях больниц, но также предоставлять им информацию о патогенах, лекарствах, побочных эффектах и ​​генах. Хотя это еще не делает Doctor.ai чат-ботом с открытым доменом, это серьезный первый шаг в этом направлении.

Однако есть возможности для улучшения. Интеграция данных в этом проекте находится в зачаточном состоянии. Записи данных можно очистить дальше. Например, многие заболевания в Hetionet и KEGG не имеют классификации МКБ-10. Это затруднило слияние данных. Поскольку МКБ-11 уже вступила в силу с 1 января 2022 года и KEGG уже включила этот новый стандарт, нам лучше быстро адаптировать его на будущее.

Вы также можете расширить Doctor.ai. В настоящее время в нашем наборе данных очень мало данных о психических расстройствах. На самом деле, по сравнению с физическими недугами, данные о психическом здоровье повсюду в Интернете скудны. Таким образом, пациенты с психическими расстройствами долгое время не обслуживались. А пациентов много: почти каждый пятый взрослый американец жил с психическим заболеванием в 2020 году. Поэтому нам необходимо срочно собрать больше данных в этой области. Кроме того, данные о лекарственном взаимодействии могут быть дополнены данными из банка наркотиков. Данные CARD об устойчивости к антибиотикам также являются хорошим кандидатом на интеграцию. Таким образом, у Doctor.ai есть много направлений развития.

Наконец, идея объединения графов специальных и общих знаний не ограничивается Doctor.ai для здравоохранения. Имея подходящие данные, мы можем использовать ту же инфраструктуру для других областей: от ветеринарии до лесного хозяйства, от банка до HR и от логистики до производства. Однако лица, принимающие решения, должны учитывать не только технологию, но также этику и законодательство в каждом из этих новых вариантов использования.

Обновление: в этой новой статье я превратил Doctor.ai в инструмент диагностики, основанный на симптомах или генных мутациях с данными из этих перенесенных графов знаний.

Эта статья использует GPT-3 в качестве NLU для повышения производительности, сокращения времени разработки и сокращения кода.