Поскольку спортивные мероприятия (и всё остальное) были отменены, этот специалист по анализу данных решил бросить вызов COVID-19 | Интервью с победителем Дэвидом Меццетти
Когда его хобби ушли на перерыв, участник Kaggle Дэвид Меццетти сделал борьбу с COVID-19 своей миссией.
8 мин чтения
29 июля 2020 г.
Нажмите Enter или кликните, чтобы просмотреть изображение в полном размере
Давайте познакомимся с Дэвидом!
Нажмите Enter или кликните, чтобы просмотреть изображение в полном размере
Дэвид Меццетти — основатель NeuML, компании по анализу данных и машинному обучению, которая разрабатывает инновационные продукты на базе машинного обучения. Ранее он стал соучредителем и превратил Data Works в уважаемую компанию по оказанию программных услуг с штатом более 50 человек. В августе 2019 года Data Works была приобретена, и Дэйв работал над обеспечением успешного перехода.
Дэвид, что вы можете рассказать о своем профессиональном опыте?
Дэвид: Мой технический опыт связан с ETL, извлечением данных, проектированием данных и аналитикой данных. Я потратил более десяти лет своей карьеры на разработку крупномасштабных конвейеров данных для преобразования как структурированных, так и неструктурированных данных в форматы, которые могут быть использованы в последующих системах. У меня также есть опыт создания крупномасштабных распределенных систем текстового поиска и обработки естественного языка (NLP).
Есть ли у вас какой-либо предыдущий опыт или знания в предметной области, которые помогли вам добиться успеха в этом соревновании?
Я работаю в сфере аналитики данных более 15 лет, но у меня не было предварительных знаний о медицинских документах или медицинской индустрии.
Как вы начали участвовать в соревнованиях на Kaggle?
Я участвовал в паре соревнований March Madness. Я с нетерпением ждал турнира 2020 года, и у меня была модель, на которую я возлагал большие надежды. То, как прошел сезон, идеально подходило для сильных сторон этой модели, но мы никогда не узнаем, как бы она себя показала.
Что заставило вас принять участие в этом соревновании?
Когда соревнование March Madness 2020 было отменено, а COVID-19 начал наносить серьезный удар, я захотел найти способ принять участие и помочь. NeuML работала над приложением для отслеживания спортивных событий в реальном времени, neuspo, но спорт, как и всё остальное, был закрыт, и отслеживать было нечего.
Поскольку спорт и жизнь были на паузе, я увидел конкурс Kaggle CORD-19 и почувствовал, что у меня есть опыт, чтобы внести свой вклад. Вдобавок ко всему происходящему, в начале марта скончалась моя мама. Она была учительницей биологии в старшей школе и была бы рада узнать, что я принимаю в этом участие. Эти усилия также стали хорошим способом отвлечься от всего происходящего и почувствовать, что я могу внести свой вклад в победу над COVID-19.
Давайте перейдем к техническим вопросам
Расскажите нам об общей архитектуре или подходе к решению проблемы.
Решение состояло из двух основных частей: поискового индекса на основе векторных представлений предложений (sentence embeddings) и специализированной модели BERT QA для извлечения ответов в виде столбцов, известных как сводные таблицы для определенного списка вопросов.
Для каждого запроса поисковый запрос по векторным представлениям определяет список наиболее подходящих документов. Общие поля, включая дату, название, авторов и URL-адрес ссылки, сохраняются как столбцы результатов поиска.
Была разработана специализированная модель BERT QA для добавления дополнительных столбцов в список результатов поиска. Например, при поиске по набору данных CORD-19 по запросу «гипертония» в качестве отдельного столбца добавляется дополнительный столбец для вопроса «Каков фактор риска развития тяжелых симптомов у пациентов с гипертонией?»
Помогли ли вам в выборе подхода какие-либо прошлые исследования или предыдущие соревнования?
Большая часть логики поиска была основана на предыдущем проекте, codequestion (https://github.com/neuml/codequestion). codequestion создает индекс векторных представлений предложений по вопросам программирования, чтобы сопоставлять вопросы разработчиков с ранее заданными вопросами/ответами. Учитывая, что у меня уже была эта кодовая база, я применил этот подход, начиная с набора данных CORD-19, и большая часть кода до сих пор основана на codequestion.
Какую предварительную обработку и проектирование признаков вы выполняли?
Набор данных CORD-19 содержит CSV-файл с метаданными и полным списком документов, а также полнотекстовые данные, хранящиеся в отдельных JSON-файлах. Был создан процесс ETL для получения данных из CSV, поиска соответствующих текстовых статей и загрузки данных в базу данных SQLite. Затем текст разбивается на предложения для каждого документа, и эти предложения отображаются в векторные представления с использованием метода BM25 + fastText, описанного в этой статье на Medium.
Какие методы обучения с учителем вы использовали?
Весь поиск и ответы на вопросы были без учителя с использованием fastText+BM25 и модели на базе BERT для QA.
Важной концепцией, обнаруженной на раннем этапе, была важность дизайна исследования. Все статьи не считаются равноценными, и медицинское сообщество придает больше веса различным типам исследований. Например, исследования с большей выборкой (т.е. большим количеством пациентов) или систематические обзоры ценятся выше, чем статьи по математическому моделированию/прогнозированию. Был построен классификатор Random Forest для анализа статей с целью определения дизайна исследования на основе слов-токенов и именованных сущностей внутри статьи.
Какое ваше самое важное озарение относительно данных?
Набор данных CORD-19 динамичен и постоянно растет. Я увидел, что почти все, включая меня, использовали первый подход — создание поискового индекса, который позволял находить документы на основе сопоставления токенов. Кроме того, суммаризация рассматривалась как способ добавить ценность. Идея заключалась в том, чтобы показать исследователям все данные по конкретному термину или концепции. Опираясь на предыдущий пункт о дизайне исследования, не все документы имеют одинаковую ценность. Маркировка документов с указанием дизайна исследования оказалась очень полезной, позволяя исследователям оценивать документ, а не просто просматривать документы с совпадающими токенами.
Кроме того, важно, где именно в документе встречаются токены. Некоторые статьи упоминают концепцию во введении или разделах обсуждения, но сама статья не охватывает эту концепцию. Большинство медицинских статей имеют разделы с методами и результатами, и совпадения в этих разделах более важны.
Удивили ли вас какие-либо из ваших выводов?
У меня практически не было ожиданий от участия в этом соревновании, поэтому я бы не сказал, что меня что-то удивило. Было здорово видеть так много умных и способных людей, работающих вместе, чтобы попытаться помочь всем, чем они могут.
Какие инструменты вы использовали?
Вся работа велась на платформе Kaggle. Список ноутбуков охватывает все материалы для 1-го и 2-го раундов конкурса CORD-19. Все ноутбуки написаны на Python.
Ноутбук с векторными представлениями предложений
Раунд 1:
- Что известно о передаче, инкубационном периоде и стабильности в окружающей среде?
- Что мы знаем о факторах риска COVID-19?
- Что мы знаем о генетике, происхождении и эволюции вируса?
- Что мы знаем о вакцинах и методах лечения?
- Что мы знаем о немедикаментозных вмешательствах?
- Что было опубликовано о медицинском обслуживании?
- Что мы знаем о диагностике и эпиднадзоре?
- Что было опубликовано об обмене информацией и межсекторальном сотрудничестве?
- Что было опубликовано об этических и социально-научных аспектах?
Раунд 2:
- Задача 1: Популяция
- Задача 2: Соответствующие факторы
- Задача 3: Описания пациентов
- Задача 4: Модели и открытые вопросы
- Задача 5: Материалы
- Задача 6: Диагностика
- Задача 7: Терапия
- Задача 8: Факторы риска
- Полный список экспорта задач в формате CSV
На GitHub также есть отдельный проект на Python — cord19q. В cord19q реализована логика ETL, построения индекса вложений и запуска пользовательской модели BERT QA.
Как вы распределяли свое время во время этого соревнования?
Первые дни работы были посвящены разведочному анализу данных (EDA) и обмену идеями с другими участниками сообщества. Прежде чем приступать к созданию моделей, необходимо было понять данные, сильные и слабые стороны датасета, а также то, что исследователи стремятся получить от набора данных CORD-19. Мне посчастливилось найти единомышленников-датасаентистов, которые были готовы засучить рукава и писать код, чтобы помочь выяснить, что именно нам нужно от данных. Машинное обучение и генерация признаков рассматривались лишь спустя 1-2 месяца от начала работы. Большая часть Раунда 1 была сосредоточена на извлечении данных, парсинге, анализе требований и создании системы поиска документов.
Результатом работы первого раунда стало понимание того, что создание сводных таблиц с извлеченными ответами на ряд вопросов принесет наибольшую пользу медицинскому сообществу. К счастью, команда медицинских экспертов вручную подготовила набор данных, который можно было использовать для создания моделей машинного обучения. Во втором раунде была разработана модель QA на базе BERT, способная извлекать ответы из медицинских документов. Для этого потребовалось создать собственный датасет вопросов и ответов, чтобы научить модель отвечать на медицинские вопросы. Во втором раунде большая часть времени ушла на создание этой модели.
Как выглядит ваша аппаратная конфигурация?
Все решения были созданы на платформе Kaggle в виде процессорных ноутбуков (CPU Notebooks). Разработка велась на четырехъядерном ноутбуке с 8 ГБ графической памяти и 32 ГБ оперативной памяти. Вложения fastText, модели дизайна исследований и пользовательские модели BERT QA были созданы офлайн с использованием этого ноутбука.
Каковы были время обучения и прогнозирования вашего решения-победителя?
Учитывая, что данные постоянно обновляются, существует регулярная задача, которая запускается при каждом обновлении (с использованием kernelpipes). Полный цикл ETL, построение моделей и запуск всех ноутбуков решения на Kaggle занимают около 6 часов.
Мудрые слова
Что вы вынесли из этого соревнования?
Это соревнование было уникальным по ряду причин. Во-первых, не существовало заранее известного ответа: это была реальная проблема, с которой можно столкнуться в индустрии, когда у кого-то есть большой массив данных, и они не знают, что с ним делать. Такой подход требует итеративного процесса исследования данных, обмена отзывами с экспертами и построения рабочего процесса для решения проблемы. Датасаентистам, участвовавшим в этой работе, невероятно повезло, что их консультировала Саванна Рид, эпидемиолог, уделявшая этому проекту свое свободное время. Нам также повезло, что Kaggle активно участвовал в лице Пола Муни и Энтони Голдблума, которые помогали координировать работу. Мне посчастливилось обсуждать идеи с другими датасаентистами, работавшими над проектом, в частности с Кеном Миллером и Энди Уайтом.
Для меня было большой честью принять участие в качестве волонтера, и хотя я никогда не узнаю о реальном масштабе пользы от этого вклада, мне хочется думать, что я внес свой небольшой посильный вклад.
Оглядываясь назад, что бы вы сделали по-другому сейчас?
Вступая в соревнование, моим первым инстинктом было использование векторных представлений предложений (sentence embeddings), так как у меня уже был похожий проект. Если бы я начинал все сначала, я бы изучил другие методы поиска по документам, чтобы проверить, не покажут ли себя другие подходы лучше.
Есть ли у вас совет для тех, кто только начинает свой путь в науке о данных?
Большая часть вашего времени будет уходить на подготовку данных и генерацию признаков. Лучший способ изучить науку о данных — решить проблему, которая вам интересна. С аналитики спорта начался мой путь в Data Science. Это был увлекательный способ оставаться сосредоточенным не только на алгоритмах, но и на самих данных.
Дополнительные посты Дэвида Меццетти на Medium:
Борьба с COVID-19 с помощью Data Science: построение конвейеров анализа с использованием Kaggle
