Я здоров


«Я здоров» — внутренний medtech AI стартап ASAP.

Глобально проект «Я здоров» направлен на повышение возможностей ранней диагностики отклонений здоровья и превентивной медицины. За счёт сбора, агрегации и анализа данных о здоровье пациента из разных источников.
Первый этап — универсальная медицинская карта и сервис для онлайн-взаимодействия с медицинскими специалистами.

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

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

Но современные тренды в медицине говорят о трансформации:

— От пациентоцентричности к клиентоцентричности — важно работать не с «пациентом с жалобами», а с человеком на всем протяжении его жизни.
— Профилактика, чек-апы и ранняя диагностика не менее важны, чем лечение.
— Интегративная медицина — понимание того, что все системы организма взаимосвязаны, и причины заболеваний часто выходят за рамки одного медицинского профиля.

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

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

Главная задача: обеспечить человеку постоянное здоровье, а не разовое лечение конкретных заболеваний.

Задачи проекта

— Создать удобный инструмент хранения и структурирования медицинских данных
— Реализовать механизмы распознавания данных с бланков, в частности бланков анализов любых лабораторий
— Сделать возможность предоставления доступа к данным медицинскому специалисту и инструмент работы с ним в режиме онлайн
Эти задачи мы реализовали при помощи 2-х модулей, о которых расскажем далее.

Возможности приложения

Ассистент здоровья — это многофункциональный продукт, который позволяет взаимодействовать с медицинскими данными, получить консультацию специалиста и хранить все медицинские документы в одном месте. По сути это «семейный врач» в кармане. Мы уже внедрили следующие возможности:

— Медицинская карта
Здесь хранятся все анализы, обследования и назначения врачей, которые можно структурировать по папкам.
— Загрузка и распознавание бланков
Бланки можно загрузить в формате фотографий или pdf-файлов — система автоматически их распознает. Пользователю остается лишь проверить и сохранить.
— Семейный профиль
У пользователя есть возможность вести медицинские карты других членов семьи и быстро переключаться между профилями.
— Работа с медицинскими специалистами
Доступ специалистов к медицинской карте можно настроить. Также сервис дает возможность участвовать в опросах врачей.
— Текстово-голосовой ассистент
Позволяет взаимодействовать с функционалом приложения с помощью текстово-голосового интерфейса и задавать любые вопросы на тему медицины и здоровья.

Я здоров — Изображение №1 — Интерфейсы на Dprofile


Web-сервис для медицинских специалистов

Онлайн-кабинет для работы с пациентами: работа с данными медкарты, назначение анализов, обследований, опросов, направление рекомендаций.

Я здоров — Изображение №2 — Интерфейсы на Dprofile


Авторизация, профиль и семья

В приложении и в web-сервисе реализована авторизация по номеру телефона и смс-коду. Пользователь может привязывать к профилю членов семьи и вести отдельную медицинскую карту например для ребенка или родителя.

Я здоров — Изображение №3 — Интерфейсы на Dprofile


База анализов, обследований и назначений

Пользователь загружает анализы, обследования и назначения врачей файлами или фотографиями.

Я здоров — Изображение №4 — Интерфейсы на Dprofile

После распознавания все данные хранятся в структурированном виде по разделам. Доступен поиск и фильтрация.
В детальной карточке анализа доступна история изменений с графиком для каждого компонента. Можно добавлять собственные примечания и видеть комментарии врача.

Я здоров — Изображение №5 — Интерфейсы на Dprofile


Загрузка и распознавание бланков анализов

Самая сложная техническая задача проекта.

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

Я здоров — Изображение №6 — Интерфейсы на Dprofile

Сложности, с которыми мы столкнулись
Структуры бланков сильно отличаются друг от друга. Изображение распознается в текст с помощью OCR-модели — технологии, которая преобразует печатные документы в файлы цифровых изображений.

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

Я здоров — Изображение №7 — Интерфейсы на Dprofile

Также мы столкнулись с базовыми проблемами изображений — они бывают низкого качества, контрастности и т.д.

Все это на выходе влияет на работу с OCR, которая не распознает часть данных, либо распознает их с ошибками. Иногда данные распознаются в формате, не поддающемся корректному структурированию.

Биомаркеры имеют большое количество синонимов и вариантов сокращений.

Стандартно один биомаркер может иметь 10-20 синонимов, есть и такие, которые имеют сотни. При этом названия биомаркеров часто сокращают, и есть предположение, что каждая лаборатория делает это по-своему. Добавим сюда то, что для каждого биомаркера может быть абсолютное и процентное значение.

Я здоров — Изображение №8 — Интерфейсы на Dprofile

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

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

Реализация
Исходя из этого, мы определили верхнеуровневый пайплайн решения следующим образом:

Я здоров — Изображение №9 — Интерфейсы на Dprofile

Первый этап — формирование базы данных. Затем — распознавание и структурирование данных с помощью мультимодальной модели и параллельно с помощью OCR и собственных алгоритмов. Далее — идентификация биомаркеров и объединение дублей.
Сбор базы данных биомаркеров, единиц измерений и референсных значений

Для корректной работы алгоритмов распознавания и функционирования приложения в целом, нам необходимо было собрать полную и структурированную базу данных, которая включает:

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


Особенности, с которыми мы столкнулись:

— Референсные значения различаются по категориям пациентов
Это достаточно очевидно: нормальные показатели одного и того же биомаркера могут отличаться в зависимости от пола, возраста и других характеристик. Поэтому для каждого биомаркера мы храним несколько вариантов референснов — для разных групп.

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

Представьте, что вы измеряете диван, и в одном случае 1 метр — это 100 см, а в другом — 90 см. Звучит абсурдно. Но в лабораторной диагностике такое встречается довольно часто.

Например:
— для глюкозы: мг/дл х 0,0555 => ммоль/л
— для молочной кислоты: мг/дл х0,111 => ммоль/л⠀
Это значит, что нам необходимо учитывать индивидуальный коэффициент пересчета для каждого биомаркера, и хранить соответствующие данные в системе.

Почему это трудоемкий процесс

Собрать такую базу — уже достаточно непростая задача. У нас уже более 2000 уникальных биомаркеров, и для каждого из них нужно найти, сопоставить и проверить:
— все возможные названия биомаркеров
— синонимы
— варианты единиц измерения
— коэффициенты пересчета
— корректные референсные значения.


Откуда мы берем данные:
Для наполнения базы мы используем два основных источника:

— Парсинг сайтов крупных лабораторий — это помогает собрать нормативную и справочную информацию.

— Обработка реальных бланков — извлекаем данные с помощью наших алгоритмов распознавания.

После этого мы агрегируем всю информацию, систематизируем и проверяем на корректность. Таким образом, база данных биомаркеров строится как результат последовательной работы по сбору, сопоставлению и нормализации большого объема медицинской информации — с учетом всех нюансов единиц измерения и физиологических параметров пациентов.

Распознавание данных с помощью OCR+собственного алгоритма
Следующий этап обработки бланков — распознавание текста с изображений. Для этого мы применили OCR (оптическое распознавание символов), а также разработали собственную логику анализа и структурирования полученных данных.

Мы протестировали несколько OCR-систем, включая Yandex OCR и другие решения. В текущей версии проекта остановились на использовании Tesseract OCR.

Предобработка изображений перед распознаванием предполагает серию шагов до передачи изображения в OCR:
— Преобразование в черно-белый формат
— Это важно, потому что лаборатории часто выделяют отклонения от нормы цветом (например, красным), и такие элементы хуже распознаются.
— Повышение резкости и контрастности
— Особенно помогает в случае некачественных фото — с засветами, размытостями и низким освещением.
— Коррекция поворотов и сдвигов изображения
— OCR-системы хуже работают с текстом, если он расположен под углом, поэтому мы предварительно выравниваем бланки.
— Выделение блоков и послойное распознавание
— Вместо чтения текста по строкам мы разбиваем изображение на логические блоки и обрабатываем каждый отдельно. Это помогает отличать биомаркеры от вспомогательных подкатегорий, которые могут визуально выглядеть схожими.


Почему построчное распознавание не работает?

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

Как мы извлекаем нужные данные?

После OCR мы получаем распознанный текст и координаты каждого элемента на изображении. Далее мы производим:

— Сопоставление и структурирование данных по координатам элементов.
— Поиск в базе биомаркеров и синонимов названий, которые мы распознали.

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

Чтобы решить эту проблему, мы обратились к векторному поиску. Он сопоставляет слова не по текстовому сходству, а по смысловой близости. Но в этом случае и он не сработал, так как базовые векторизаторы настроены на естественные русский и английский языки. А биомаркеры и их синонимы — это «не естественный язык» с другими правилами смыслового сходства и различия слов.

Распознавание данных с помощью OCR+LLM

Это альтернативный подход в рамках работы над системой распознавания медицинских документов, с применением мультимодальной модели (OCR + LLM)

Идея подхода

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

При выборе моделей мы столкнулись с рядом сложностей

— Локальное исполнение. Использование облачных API-моделей исключается — по соображениям безопасности, поскольку документы могут содержать персональные данные.
— Скорость обработки. Мы ориентируемся на мгновенное распознавание: пользователь загружает бланк и сразу получает результат. Это принципиально отличает наш сервис от решений, в которых распознавание происходит в фоновом режиме с задержкой.

Поэтому мы остановились на Qwen 7B omni

После серии тестов мы остановились на модели Qwen 7B. Пока мы продолжаем параллельно тестировать оба варианта — как классический OCR-подход, так и мультимодальную модель. Точность распознавания у них примерно одинаковая, но в подходе с LLM значительно меньше объем кода и логики, которую необходимо расписывать и развивать. Одновременно с этим собственный алгоритм тоже имеет преимущества — требует значительно меньше вычислительных ресурсов и прозрачен в работе.

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

Точность распознавания: хотя полноценного тестирования на больших массивах данных мы еще не проводили, уже сейчас можем говорить о неплохих результатах. По текущим замерам, точность распознавания биомаркеров превышает 90%.

Как мы это измеряли

Методика оценки достаточно простая и прозрачная: в тестовой выборке — около 100 бланков медицинских анализов, в каждом бланке — в среднем по 20 биомаркеров. Качество бланков сильно варьируется: от аккуратных PDF с четкими таблицами до неудачных вариантов, которые демонстрировались в этой статье в начале.

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


Проблема обработки дублей биомаркеров

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

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

В связи с этим мы рассматриваем стратегию дообучения эмбеддинговой модели векторного поиска. Планируется использовать корпус уже собранных наименований и синонимов биомаркеров для формирования троек значений: исходный биомаркер, близкое по смыслу значение, далекое по смыслу значение. Также в планах дальнейшее дообучение векторизатора методом Contrastive Learning.

Цель — адаптировать модель под эту предметную область, чтобы она научилась различать и правильно интерпретировать медицинские термины в контексте биомаркеров. Такой подход должен существенно повысить точность сопоставления и минимизировать появление дублей.


Доступ врача

Пользователь может предоставить доступ к данным своей медицинской карте медицинскому специалисту — ко всей медкарте или настроив доступные данные параметрами фильтрации.

Врач работает с медицинской картой пациента в web-приложении: анализирует данные, пишет комментарии и рекомендации, фиксирует назначения.

Я здоров — Изображение №10 — Интерфейсы на Dprofile


Web-интерфейс врача

Для медицинских специалистов реализован web-интерфейс.

Врач имеет видит медицинские карты пациентов, которые предоставили ему доступ, а также сам может приглашать пациентов в сервис для совместной онлайн-работы.


Я здоров — Изображение №11 — Интерфейсы на Dprofile


Папки

Пользователь может структурировать анализы, обследования и назначения по папкам для более удобной работы. Например, когда нужно сформировать данные в рамках определённого чек-апа или истории болезни. Можно настроить доступ медицинского специалиста только к конкретной папке.

Я здоров — Изображение №12 — Интерфейсы на Dprofile


Опросы

Медицинские специалисты могут создавать опросы для своих пациентов — для сбора анамнеза, анализа состояния и т.д. Можно один раз создать шаблоны опросов и использовать их в дальнейшем.

Я здоров — Изображение №13 — Интерфейсы на Dprofile

Пользователь заполняет полученный от врача опрос в мобильном приложении. По результату заполнения врач получает уведомление.

Текстово-голосовой ассистент

В дополнение к классическому интерфейсу — часть функционала мобильного приложения продублирована текстово-голосовым ассистентом.
Можно просто отправить файл и сервис распознает его и создаст нужную сущность. А можно текстом или голосом спросить «Какие у меня показатели глюкозы?» и сервис выдаст карточку этого биомаркера с историей изменений.

Я здоров — Изображение №14 — Интерфейсы на Dprofile

AI-ассистент по медицинским вопросам, в том числе с учетом данных медицинской карты
Консультирует по любой медицинской тематике (доврачебные консультации):

Симптомы заболеваний и отклонений: сбора анамнеза, формирование вариантов диагноза, рекомендаций анализов, обследований, консультаций врачей, рекомендаций по образу жизни

Второе мнение по назначенному диагнозу, лечению, рекомендациям

Распознавание и интерпретация медицинских документов

Рекомендации до прибытия врача скорой помощи

Доврачебные консультации

Справочная информация по медицинским учреждениям и врачам: куда обратиться по вопросу

Подбор аналогов препаратов, действия до приезда врача, подготовка к госпитализации и другие вопросы, не требующие прямой консультации врача
Ассистирование в узкопрофильных медицинских кейсах

Особенности и преимущества

Обучен на официальных медицинских данных: медицинские справочники, клинические рекомендации

Основан на Российской модели, размещенной на серверах компании на территории РФ
Данные запросов пользователей не передаются на API иностранных сервисов


Сохраняет все загруженные данные, документы, запросы, анамнезы и другую информацию о здоровье пользователя.
Концепция “семейного врача” знает всё о вашем здоровье.
На основании массива данных формирует сигналы и рекомендации, предоставляет нужную информацию для врачей.

Технологии

Собственный алгоритм оркестрации 5 моделей

Модель проверки и классификации запроса пользователя

Универсальная медицинская LLM, дообученная на медицинских текстах (анамнез, диагнозы, рекомендации, второе мнение по назначениям и т.д.). Консультации до приезда врача

Модель / алгоритм распознавания медицинских бланков

Модель справочная по медицинским учреждениям и врачам с доступом в интернет

Модель для консультирования по медицинским препаратам и подбора аналогов на основе справочника Видаль.

Универсальная медицинская LLM

Формирование корпусов медицинских данных из разных доменов (учебники, справочники, статьи, обезличенные клинические случаи) для до обучения модели

Алгоритмы очистки и дедупликации данных на основе эвристик, прямой фильтрации, семантической фильтрации

Двухэтапное до обучение: pre train + fine tuning

Применение технологии RAG c Query Expansion, Adaptive Chunking, Iterative Retrieval-Generation (IRG)

Работа с локальной базой данных о здоровье конкретного пользователя (загруженные медицинские документы, история жалоб/запросов, данные из ЭМК (государственные МИС-системы), календари питания, тренировок, приёма препаратов и т.д).

Результат

— Первая версия приложения решает задачу хранения и структурирования медицинских данных, без привязки к личному кабинету клиники или лаборатории. Пользователь может загрузить любой бланк — данные будут собраны в единую базу.
— Можно предоставить доступ к данным медицинскому специалисту и работать с ним совместно в режиме онлайн.
— AI ассистент консультирует по вопросам медицины и здоровья, даёт рекомендации по данным медицинской карты
— Объединение универсальной медицинской карты и AI-ассистента создаёт концепцию цифрового семейного врача

Планы развития

— Инструменты для врачей
— Интеграция с частными клиниками
— Потенциальная интеграция с государственными медицинскими системами
— Партнерства с крупными игроками медицинской сферы

Проект «Я здоров» — это возможность прийти к новой парадигме здравоохранения, в которой здоровье человека можно поддерживать на постоянной основе с помощью технологий, данных и персонализированного подхода. Нас это очень вдохновляет на дальнейшую работу.

Оценить

Добавить в коллекции...

От автора