Когда его хобби пошли на перерыв, Кагглер Дэвид Меззетти сделал борьбу с COVID-19 своей миссией.

Давайте узнаем о Дэвиде!

Дэвид Меззетти - основатель NeuML, компании по анализу данных и машинного обучения, которая разрабатывает инновационные продукты на основе машинного обучения. Ранее он стал соучредителем и превратил Data Works в уважаемую компанию по предоставлению программного обеспечения с более чем 50 сотрудниками. В августе 2019 года была приобретена компания Data Works, и Дэйв работал над тем, чтобы обеспечить успешный переход.

Дэвид, что ты можешь рассказать нам о своем прошлом?

Дэвид: Мои технические знания связаны с ETL, извлечением данных, инженерией данных и аналитикой данных. Я потратил более десяти лет своей карьеры на разработку крупномасштабных конвейеров данных для преобразования как структурированных, так и неструктурированных данных в форматы, которые можно использовать в последующих системах. У меня также есть опыт создания крупномасштабных систем распределенного текстового поиска и обработки естественного языка (NLP).

Есть ли у вас какой-либо предыдущий опыт или знания в предметной области, которые помогли вам добиться успеха в этом конкурсе?

Я проработал в сфере анализа данных более 15 лет, но не имел предварительных знаний о медицинских документах или медицинской отрасли.

Как ты начал соревноваться на Kaggle?

Я участвовал в паре соревнований по мартовскому безумию. Я с нетерпением ждал турнира 2020 года, и у меня была модель, которая меня очень взволновала. Сезон прошел идеально для сильных сторон модели, но мы никогда не узнаем, как бы она себя чувствовала.

Что побудило вас принять участие в этом конкурсе?

Когда соревнование March Madness 2020 было отменено и COVID-19 действительно начал сильно бить, я хотел найти способ принять участие и помочь. NeuML работал над приложением для отслеживания спортивных событий в реальном времени, neuspo, но спорт, как и все остальное, был закрыт, и не было никаких видов спорта, которые нужно было отслеживать.

В перерывах между спортом и жизнью я увидел вызов Kaggle CORD-19 и почувствовал, что у меня есть опыт, чтобы внести свой вклад. Вдобавок ко всему, моя мама скончалась в начале марта. Она была учителем биологии в средней школе и была бы счастлива узнать, что я участвовал. Эти усилия также были хорошим отвлечением от всего, что происходит, и способом почувствовать, что я могу внести свой вклад в борьбу с COVID-19.

Давайте перейдем к техническим вопросам

Расскажите об общей архитектуре или подходе к проблеме.

Решение состояло из двух основных частей: индекса поиска на основе встраивания предложений и настраиваемой модели 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, описанного в этой средней статье.

Какие методы контролируемого обучения вы использовали?

Весь поиск и ответы на вопросы проходили без учителя с использованием fastText + BM25 и модели QA на основе BERT.

Важная концепция, открытая на раннем этапе, заключалась в важности дизайна исследования. Не все статьи считаются равными, и медицинское сообщество уделяет больше внимания различным типам исследований. Например, исследования с большим размером выборки (т. Е. С большим количеством пациентов) или систематические обзоры имеют большее значение, чем статьи о математическом моделировании / прогнозировании. Классификатор случайного леса был создан для анализа статей с целью определения дизайна исследования на основе словарных токенов и именованных сущностей в статье.

Какое понимание данных было для вас наиболее важным?

Набор данных CORD-19 динамичен и постоянно растет. Я видел, что почти все, включая меня, использовали первый подход к построению поискового индекса, который позволял находить документы на основе совпадающих токенов. Кроме того, резюмирование рассматривалось как способ повышения ценности. Идея заключалась в том, чтобы показать исследователям все данные по определенному термину или концепции. Основываясь на предыдущем пункте о дизайне исследования, не все документы имеют одинаковую ценность. Обозначение документов с помощью дизайна исследования оказалось очень полезным, поскольку позволяет исследователям просматривать документ, а не просто показывать документы с соответствующими токенами.

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

Были ли вы удивлены каким-либо из ваших открытий?

У меня не было никаких ожиданий от участия в этом конкурсе, поэтому я бы не сказал, что был чем-то удивлен. Было здорово видеть, как так много умных и способных людей работают вместе, пытаясь помочь всем, чем могут.

Какие инструменты вы использовали?

Вся работа осуществляется платформой Kaggle. Список блокнотов охватывает все заявки на участие в 1 и 2 раундах конкурса CORD-19. Все записные книжки написаны на Python.

Блокнот для вложения предложений

Раунд 1:

Раунд 2:

Также есть отдельный проект Python на github, cord19q. cord19q имеет логику для ETL, построение индекса вложений и запуск пользовательской модели BERT QA.

Как вы потратили время на это соревнование?

Первые дни работы были потрачены на EDA и обмен идеями с другими членами сообщества. Прежде чем можно было построить модели, необходимо было получить представление о данных, сильных и слабых сторонах набора данных, а также о том, что исследователи ищут в наборе данных CORD-19. Мне посчастливилось найти единомышленников, занимающихся данными, которые были готовы засучить рукава и написать код, который поможет понять, чего мы хотим от данных. Только через 1-2 месяца после начала работы над моделями машинного обучения и функциональной инженерией даже стали думать. Большая часть раунда 1 была посвящена извлечению, синтаксическому анализу, анализу требований и созданию системы для поиска документов.

Работа первого раунда привела к открытию, что создание сводных таблиц с извлеченными ответами на ряд вопросов будет наиболее полезным для медицинского сообщества. К счастью, группа медицинских экспертов вручную подготовила набор данных, который можно использовать для построения моделей машинного обучения. Во втором раунде была разработана модель обеспечения качества на основе BERT, которая позволяет извлекать ответы из медицинских документов. Это потребовало создания настраиваемого набора данных вопрос-ответ, чтобы научить модель отвечать на медицинские вопросы. Во втором раунде большая часть времени была потрачена на построение этой модели.

Как выглядит ваше оборудование?

Все материалы были созданы на платформе Kaggle как ноутбуки с процессором. Разработка велась на четырехъядерном ноутбуке с 8 ГБ графического процессора и 32 ГБ оперативной памяти. Встраивания fastText, модели дизайна исследований и пользовательские модели BERT QA были созданы в автономном режиме с использованием этого ноутбука.

Какое время длилось как обучение, так и прогнозирование вашего выигрышного решения?

Учитывая, что данные постоянно обновляются, существует повторяющееся задание, которое запускает каждое обновление (с использованием kernelpipes). Для полного ETL, построения моделей и запуска всех записных книжек решений на Kaggle требуется около 6 часов.

Слова мудрости

Что вы взяли из этого конкурса?

Этот вызов был уникальным по ряду причин. Сначала не было известного ответа, это была реальная проблема, с которой вы столкнетесь в промышленности, где у кого-то есть большой набор данных, и они не уверены, что с ним делать. Этот подход требует итеративного процесса изучения данных, обмена отзывами с экспертами и построения рабочего процесса для решения проблемы. Специалистам по обработке данных, участвовавшим в этой работе, очень повезло, что их руководила Саванна Рид, эпидемиолог, добровольно работавший в свое время. Нам также повезло, что Kaggle активно участвовал в работе, а Пол Муни и Энтони Голдблум помогали нам в этом. Мне повезло, что я смог поделиться идеями с другими учеными, работающими над данными, в частности, Кеном Миллером и Энди Уайтом.

Для меня было честью стать волонтером, и хотя я никогда не узнаю истинного значения этого вклада, мне нравится думать, что он внес небольшой вклад в дело.

Оглядываясь назад, что бы вы сейчас сделали по-другому?

Приняв участие в конкурсе, я первым делом решил использовать встраивание предложений, поскольку у меня уже был подобный проект. Если бы я начал сначала, я бы исследовал различные методы поиска в документах, чтобы увидеть, работают ли какие-либо другие методы лучше.

Что вы можете посоветовать тем, кто только начинает заниматься наукой о данных?

Большая часть вашего времени будет потрачена на подготовку данных и разработку функций. Лучший способ изучить науку о данных - решить интересующую вас проблему. Я начал заниматься наукой о данных со спортивной аналитики. Это был интересный способ сосредоточиться не только на алгоритмах, но и на самих данных.

Дополнительные сообщения на Medium от Дэвида Меззетти:

Борьба с COVID-19 с помощью науки о данных
Создание конвейеров анализа с помощью Kaggle