В Curai мы принимаем стажеров во все наши команды круглый год. По понятным причинам последние два года мы перешли на полностью удаленную модель и ожидаем, что она будет продолжаться, по крайней мере, сейчас. Нам всегда везло каждый год привлекать замечательных стажеров (см. здесь или здесь некоторые прошлые примеры), а полная удаленность даже позволила нам получить доступ к большему количеству отличных кандидатов. Итак, в этом году у нас снова был отличный класс стажеров, работами которых стоит поделиться!

Этот пост посвящен работе, проделанной замечательными стажерами-инженерами по машинному обучению, которые у нас были за последний год. В ближайшие месяцы мы обновим этот блог работами стажеров из других команд. Здесь мы включаем работу, проделанную Абдуллой Ахмедом, в настоящее время студентом-медиком в Брауне, Коста-Хуанг, доктором компьютерных наук. студентка Drexel, Сесилия Ли, аспирантка Калифорнийского университета в Санта-Круз, и Пуджан Палваи, аспирантка Карнеги-Меллона.

Далее следует отредактированная короткая версия их работы, написанная их собственными словами. Наслаждайтесь чтением об их работе и, пожалуйста, загляните на наш веб-сайт, если вы заинтересованы в том, чтобы помочь нам в нашей миссии, пройдя стажировку или заняв любую другую нашу должность. Мы гордимся тем, что обеспечиваем наших стажеров значимыми проектами и знакомим их с некоторыми из наиболее актуальных инструментов, включая PyTorch, AWS, и передовыми исследованиями в области понимания естественного языка для медицинских данных.

Связывание объектов: Абдулла Ахмед

Меня зовут Абдулла Ахмед, и в настоящее время я учусь на втором курсе медицинского факультета Брауна (давай, Брунос!) с опытом работы в области искусственного интеллекта и машинного обучения. Целью моей стажировки было объединить мои клинические знания и знания в области машинного обучения для улучшения модуля Entity Linking Module (CELM) Curai.

Сделаем шаг назад. Связывание сущностей (EL) — это задача НЛП по извлечению сущностей из произвольного текста и сопоставлению их с понятиями в базе знаний (KB). CELM был создан для выполнения этой задачи специально для концепций в собственной базе знаний Curai.

Чтобы привести конкретный пример, предположим, что пациент входит на платформу Curai и отправляет следующее сообщение:

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

CELM берет этот текст и выдает два идентификатора, которые соответствуют медицинским понятиям в базе знаний Curai:

1. CID0072 à Дизурия (боль при мочеиспускании)

2. CID00189 à Гематурия (кровь в моче)

Прежде чем я внес какие-либо улучшения в CELM, мне сначала нужно было найти способ измерения успеха. Стандартными показателями для общих задач EL являются точность, полнота и F1. Однако, учитывая, что CELM оказывает прямое влияние на пациентов, использующих приложение, я хотел создать показатель, более тесно связанный с клиническим результатом.

Интуиция, стоящая за созданной мной метрикой, заключается в том, что CELM следует более строго наказывать за неспособность извлечь возникающие симптомы. Например, если CELM пропускает «боль в груди», это гораздо большая проблема, чем если он пропускает «насморк», поскольку первое является симптомом, связанным с серьезными сердечными осложнениями, такими как инфаркт миокарда (то есть сердечный приступ).

Я использовал метаданные из нашей базы знаний, чтобы вычислить этот новый, взвешенный, клинически значимый показатель.

С помощью этой новой метрики я смог увидеть влияние изменений, которые я внес в CELM. Например, мы доказали, что добавление медицинской проверки орфографии на этапе предварительной обработки улучшило общую производительность нашей системы.

В целом, мой опыт работы в Curai Health был фантастическим! Я невероятно благодарен моему наставнику Нираджу и моим менеджерам Франсуа и Намиту за то, что они курировали проект, который идеально дополнил мой двойной опыт и помог мне довести его до конца. Мне выпала честь работать здесь с замечательными людьми как в инженерном, так и в клиническом отделах. Конечно, совмещать работу в Curai с учебой в медицинском институте было непросто, но, оглядываясь назад, оно того стоило! Очень рекомендую всем заинтересованным 😁

Управление экспериментом: Коста Хуанг

Здравствуйте, меня зовут Коста. Я третий год доктор компьютерных наук. студент Университета Дрекселя, специализирующийся на глубоком обучении с подкреплением. Во время стажировки у меня была прекрасная возможность присоединиться к Curai в качестве стажера-инженера по машинному обучению. В течение нескольких месяцев я 1) внедрил решение для управления экспериментом, которое было адаптировано к рабочему процессу машинного обучения Curai под руководством моего наставника по машинному обучению Luladay Price, и 2) руководил разработкой прототипа проекта для создания медицинского разговора с использованием DialoGPT. под руководством моего научного наставника по машинному обучению Намит Катария.

Управление экспериментом

Мой основной проект (80% моего времени) состоял в том, чтобы внедрить решение для управления экспериментами. До этого проекта текущий рабочий процесс в основном зависел от пользовательских сценариев для отслеживания экспериментов. Это проблематично, потому что иногда зависимости эксперимента или наборы данных не регистрируются, что может затруднить воспроизведение экспериментов.

Мой первый шаг состоял в том, чтобы проанализировать потребности экспериментов по машинному обучению за 4 года. Члены моей замечательной команды особенно помогли мне в создании документа, в котором перечислены болевые точки проектов машинного обучения Curai. Подводя итог, мы хотели, чтобы наше решение для управления экспериментами имело следующие функции:

  1. Управление версиями данных, отслеживание экспериментов, анализ и настройка
  • Данные версии и ее генеалогия
  • Визуализация конвейера данных
  • Отслеживание основных метрик
  • Отслеживание гиперпараметров
  • Информация о воспроизводимости
  • Отслеживание артефактов
  • Запрашивайте, сортируйте, фильтруйте, группируйте и визуализируйте артефакты
  • Отчет, который напрямую связывает связанные эксперименты
  • Автоматическая настройка гиперпараметров

2. Оркестровка эксперимента, развертывание модели

  • Планирование и постановка в очередь экспериментов в масштабе

Это много функций, которые нужно поддерживать, если мы собираемся создавать все своими силами. Более жизнеспособным подходом является поиск поставщиков, которые предоставляют эти услуги. Следующим моим шагом был опрос поставщиков решений для управления экспериментами. В общей сложности я рассмотрел более 15 современных решений, включая Weights and Biases (W&B), Neptune, Comet.ml, Sagemaker, Valohai, Verta, Aim, KubeFlow, ClearML, Polyaxon, Sacred + Omniboard. , MLflow, DVC, Guild AI, толстокожее животное, Deepkit-мл. Прочитав их документы и создав с их помощью прототипы проектов, я обнаружил, что большинство решений очень хорошо охватывают отслеживание экспериментов, но W&B действительно хорош в функциях анализа и управления версиями данных, поэтому я порекомендовал его своей команде.

Моя команда согласилась с моей оценкой, и я помог провести техническое обсуждение с W&B, чтобы организовать пробную версию. Чтобы помочь этому проекту укорениться в рабочем процессе команды, я написал учебные пособия, чтобы помочь всем присоединиться и настроить 1:1 с владельцами продуктов машинного обучения, чтобы помочь им отслеживать эксперименты с использованием W&B.

В частности, мой наставник Луладей работал со мной над внедрением W&B в проект модели маршрутизации is_diagnosable. Эта модель рассматривает основные жалобы пациента и определяет, должны ли мы отправлять пациенту автоматические вопросы для сбора анамнеза. С помощью W&B было намного проще отслеживать эксперименты по абляции признаков наборов данных и сравнению классификаторов. Кроме того, мы также можем визуализировать эффекты и зависимости экспериментов, как показано ниже:

Симулятор медицинской беседы

Мой побочный проект (20% моего времени) заключался в создании чат-бота для медицинских разговоров путем тонкой настройки DialoGPT с использованием нашего пользовательского набора данных. И конечный результат выглядит следующим образом, где мой ввод начинается с «›››», а симулятор отвечает мне.

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

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

Ассистент по написанию EHR: Сесилия Ли

Здравствуйте, меня зовут Сесилия Ли. Я аспирант Калифорнийского университета в Санта-Круз. программа обработки естественного языка. Под наставничеством Нираджа Кумара Сингха у меня была возможность применить на практике некоторые принципы, которые я изучил в своей программе магистратуры, внедрив помощника по письму для нашей электронной медицинской карты Curai.

Помощник по написанию электронных медицинских карт

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

Во время моей стажировки я отвечал за создание такой функции для нашей системы EHR. Эта функция предварительно заполняет первую часть заметки История текущего заболевания (HPI), которая содержит демографическую информацию о пациенте. Предложение отображается в виде затемненного серого текста и может быть выбрано простым нажатием клавиши табуляции. Функция автозаполнения также делает прогнозы, аналогичные интеллектуальному составлению Google, когда поставщики печатают медицинские заметки. Опять же, врачи выбирают выделенный серым цветом предполагаемый текст с помощью табуляции (как показано на следующем рисунке).

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

Создание функции предварительного заполнения

Набор данных: мы создали набор данных, который включал возраст пациента, пол, записи HPI, написанные поставщиками, и результаты, полученные поставщиками во время их беседы с пациентом. Этот набор данных был создан с помощью SQL-запроса путем слияния разных таблиц в нашем хранилище данных (BigQuery).

Метрики. Для оценки модели мы использовали две метрики: одна — это стандартная точность классификации (чтобы проверить, соответствует ли прогноз предварительного заполнения истинному) и пользовательская функция оценки для оценки качества предварительного заполнения (как правило, более длинные правильные прогнозы предпочтительнее коротких).

Модель: мы предпочли простоту для создания базовой линии, используя набор традиционных подходов к сопоставлению биграмм, n-грамм и строк, надеясь в будущем изучить современные подходы на основе нейронных сетей.

Настройка гиперпараметров: чтобы максимизировать точность, мы точно настроили входной префикс и длину предсказания модели, а также изменили традиционный подход n-грамм для частичного предсказания слов. Наша лучшая точно настроенная ансамблевая модель дала оценку точности 0,88.

Что мне было действительно интересно в этом процессе, так это возможность изучить и понять данные Curai, а затем создать набор данных, который можно было бы применить к этой задаче. Проблемы на этом пути помогли мне осознать, что в нашей модели может быть так много настроек в реальных условиях; на самом деле нет предела тому, что мы можем выполнять и тестировать. Я очень ценю то, что Curai предоставил мне эту возможность внести свой вклад в большое сообщество с очень важной миссией и предоставил мне свободу заниматься исследовательской работой, подобной этой. Рабочая среда в Curai очень приятная, так как со всеми легко общаться и общаться. Благодаря оказанной мне помощи и поддержке процесс стажировки был по-настоящему приятным и продуктивным.

Улучшение поиска панели обслуживания вопросов: Poojan Palwai

Меня зовут Пуджан Палваи. Я учусь на магистра машинного обучения в Университете Карнеги-Меллона. Во время стажировки в Curai под руководством моего наставника Луладея Прайса я смог глубоко погрузиться в важнейший компонент машинного обучения в приложении Curai Health для поставщиков услуг: панель обслуживания вопросов.

Панель обслуживания вопросов Поиск

Панель подачи вопросов — это функция приложения Curai, которая позволяет врачам отправлять структурированные вопросы пациентам и выбирать диагнозы для фильтрации этих вопросов. Они могут принимать вопросы и диагнозы, предложенные ИИ, или использовать поле поиска, которое предоставляет собственную базу медицинских знаний Curai (поиск панели обслуживания вопросов) для поиска других вопросов и диагнозов. Моя стажировка была сосредоточена на улучшении функции поиска панели обслуживания вопросов, в частности (1) создании блокнота отладки, (2) уменьшении задержки функции и (3) курировании набора данных и показателей для оценки производительности функции.

Первой частью моей стажировки было внедрение автономной записной книжки для отладки в серверной части панели обслуживания вопросов. Цель блокнота состояла в том, чтобы иметь автономный механизм, чтобы узнать, почему конкретный запрос возвращает определенные результаты, и протестировать различные сценарии в автономном режиме. Для записной книжки я реализовал три команды: команду «query», которая возвращает нефильтрованные результаты поиска на Панели обслуживания вопросов для запроса, команду «verbose», которая возвращает нефильтрованные результаты поиска для запроса, и идентификатор понятия. , оценка и синонимы понятий для первых n понятий в КБ, а также команда «содержит» для проверки того, содержится ли понятие в результатах. для поиска панели обслуживания вопросов.

Вторая часть моей стажировки была посвящена уменьшению задержки приложения. Провайдеры сообщали о задержке в отображении результатов поиска, что приводило к ухудшению взаимодействия с пользователем. Моя задача состояла в том, чтобы исследовать и попытаться уменьшить эту задержку. Изучив, как работает приложение, я обнаружил, что приложение делает два отдельных обращения к нашей внутренней базе знаний, чтобы помочь в составлении списка соответствующих медицинских концепций. Мне удалось объединить эти два отдельных вызова в один запрос и отфильтровать результаты локально. Разница в задержке между функциями была измерена путем проверки среднего времени выполнения 20 запросов, и было обнаружено, что новая функция в среднем на 32% меньше времени выполнения, чем старая функция для всех 20 запросов.

Пример старой функции:

аллергии м среднее время: 3,74 с, стандартное время: 0,36 с

аллергия на меня среднее время: 3,44 с, стандартное время: 0,43 с

среднее время аллергии: 3,32 с, стандартное время: 0,49 с

Пример новой функции:

аллергии м среднее время: 2,54 с, стандартное время: 0,37 с

аллергия на меня среднее время: 2,25 с, стандартное время: 0,41 с

среднее время аллергии: 2,20 с, стандартное время: 0,42 с

Заключительной частью моей стажировки было введение набора данных и метрики для измерения точности поиска панели обслуживания вопросов. Прежде чем улучшать результаты поиска, нам нужно было определить показатели для измерения улучшений и набор данных, который мы могли бы использовать для расчета этих показателей. Предлагаемый набор данных связывает запрос с упорядоченным списком вопросов/диагнозов, где каждому вопросу/диагнозу присваивается ранг релевантности 1. , 2 или 3. Банк вопросов и диагнозов был составлен в автономном режиме из 100 наиболее частых вопросов/диагнозов, используемых врачами в онлайн-встречах, где запрашивался запрос. Предлагаемый показатель для использования с этим набором данных — нормализованный дисконтированный кумулятивный прирост, или nDCG. Это показатель со значением от 0 до 1, который учитывает показатель релевантности и ранжирование документов, где более релевантные документы имеют более высокий рейтинг.

В целом стажировка дала отличный опыт. Я приобрел опыт, анализируя данные с файлами журналов и замечая общие тенденции, чтобы увидеть, где система работает хорошо, а где она нуждается в улучшении. Я также изучил процесс написания проектных документов, которые объясняли мой мыслительный процесс всей команде автоматизации. Мне нравилось проводить время в Curai, и я обнаружил, что это отличное место для стажировки благодаря всей поддержке.