Маленькая модель обыграла гигантский ИИ в обезличивании медицинских текстов: в 40 раз быстрее, на обычном процессоре
Новый инструмент localscrub доказывает, что для защиты конфиденциальных медицинских данных не нужен мощный облачный ИИ или даже видеокарта — достаточно компактной специализированной модели и обычного процессора.
Приватность в медицине — это не только вопрос шифрования, но и вопрос контроля. Новая утилита показала, что эффективно обезличить данные можно, не отправляя их на чужой сервер и не тратя на это дорогостоящие ресурсы.
Проблема: куда отправлять данные, которые нельзя показывать?
Когда речь заходит о медицинских записях, мы сталкиваемся с дилеммой. Использовать облачные сервисы для очистки текста от личной информации (ФИО, адресов, номеров полисов) удобно и точно, но для этого нужно... отправить самые конфиденциальные данные на чужой сервер. Получается замкнутый круг: чтобы защитить данные, сначала нужно их разгласить.
Локальные утилиты, работающие целиком на вашем компьютере, данных не уводят, но, как правило, справляются только с простыми, шаблонными деталями вроде номеров телефонов или почтовых адресов. Сложные, контекстные данные — например, фраза «сестра пациента работает в пекарне на улице Вязов» — для них непреодолимая преграда.
Инженер Вадим Альбаров предложил свой вариант решения — утилиту localscrub. Её принцип — отказаться от этого компромисса. Она работает полностью локально, на вашем оборудовании, и использует каскад из двух этапов. Первый — быстрые правила и простая модель для извлечения структурированных данных. Второй — небольшая языковая модель (LLM), которая анализирует оставшиеся, неоднозначные фрагменты.
Как это работает: каскад вместо одного гиганта
Идея localscrub проста и элегантна. На первом этапе за дело берутся надёжные, быстрые правила (регулярные выражения) и предобученная модель для распознавания именованных сущностей (NER). Это такие «поисковые роботы», которые с высокой точностью находят и вырезают номера телефонов, email, даты, а также имена и географические названия.
То, что осталось необработанным, передаётся на второй этап — в локальную LLM, запущенную через платформу Ollama. Весь запрос происходит внутри машины, в сеть ничего не уходит. Ключевой хитрости конструктора был в том, что он попросил модель не искать символы в тексте (LLM плохо считают), а просто скопировать нужные фрагменты и указать их тип (например, «имя»). Скопированные куски потом находятся в исходном тексте обычным поиском.
Это решило сразу несколько проблем: повторные упоминания обрабатываются автоматически, а если модель «галлюцинирует» и выдаёт несуществующий фрагмент, поиск просто его не находит и ничего не ломает.
Большое испытание: маленький чемпион
После создания системы автор провёл серьёзные бенчмарки. И здесь случилось самое интересное. Для извлечения имён, мест и организаций он попробовал не только общую LLM с 14 миллиардами параметров, но и крошечную, специализированную модельку obi/deid_roberta_i2b2 всего на 125 миллионов параметров. Она была обучена именно на задачах обезличивания текстов.
Результат на синтетических данных был поразительным. Специализированная модель показала качество, сравнимое с гигантской LLM, но работала... в 40 раз быстрее. И для этого ей нужен был только центральный процессор, тогда как 14-миллиардная модель требовала видеокарту.
Автор подчёркивает: сам по себе факт, что узкоспециализированная модель обыгрывает общую, не удивителен. Удивителен масштаб разницы — равная эффективность при сорокакратном выигрыше в скорости и отсутствии необходимости в GPU. Это меняет представление о «стандартном рецепте» для подобных задач, которым часто является «запустить большую LLM».
Настоящие тексты и настоящие результаты
Шаблонные синтетические данные — это слишком просто. Поэтому автор протестировал систему на реальных медицинских транскриптах, искусственно «замешав» в них сконструированные персональные данные.
Здесь картина стала ещё интереснее:
- Правила в одиночку (базовый уровень Presidio) справились с ~75% данных, но имели низкую точность — часто «вырезали» полезный контекст.
- Правила + NER (маленькая специализированная модель) показали фантастическую полноту — 99.9% вредоносных данных были убраны. При этом система работала на CPU с приемлемой задержкой.
- Правила + NER + большая LLM также дали 99.9%, но потребовали GPU и были заметно медленнее.
Выяснилось, что модели дополняют друг друга. Там, где NER могла пропустить часть адреса, LLM подхватывала. Но LLM, в свою очередь, иногда «обрезала» адреса, и тогда NER выручала. Однако использование LLM немного снизило точность (меньше ложных срабатываний).
Главный урок: правильный инструмент для правильной задачи
Этот проект — отличная иллюстрация важного в инженерии принципа: не существует серебряной пули.
- Если ваш текст хорошо структурирован и богат стандартными идентификаторами (отчёты, формы), то маленькой, специализированной NER-модели на CPU может быть достаточно. Она будет быстрой, дешёвой и точной.
- Если текст ближе к живой речи, с нестандартными упоминаниями и сложным контекстом, то LLM (большая или дообученная) на втором этапе действительно нужна, чтобы повысить полноту.
Автор также добился успеха в миниатюризации LLM. Он взял модельку на 1.7 миллиарда параметров и за 17 минут на своём ноутбуке дообучил её на синтетических данных. Дообученная моделька, хоть и уступала 14-миллиардной в качестве, смогла уверенно решать поставленную задачу, работая при этом в разы быстрее и полностью локально.
Ограничения и трезвый взгляд
Автор честно указывает на «пятна» своей работы:
- Основные тесты проводились на синтетических данных. Реальная проверка на эталонном медицинском корпусе (i2b2) ещё впереди.
- Точность на реальных текстах оценивалась нижней границей, так как часть найденных моделью данных могла быть естественной частью текста, а не вредоносной вставкой.
- Система не сертифицирована по стандарту HIPAA. Её задача — максимально снизить риск, но окончательное решение и ответственность остаётся за человеком.
Зачем это обычному пользователю?
Хотя утилита написана для медицинских данных, сама философия и подход актуальны для всех нас.
- Контроль над данными. Мы привыкли, что для анализа фото, текста или документов нужно отправлять их в облако.
localscrubнапоминает, что многие полезные задачи можно решить локально, не жертвуя приватностью. - Эффективность. Проект показывает, что не всегда нужно гнаться за самыми гигантскими моделями. Часто компактная, «заточенная» под задачу модель на CPU даст результат не хуже, чем монстр на GPU.
- Прозрачность. Автор выложил весь код, опубликовал инструменты для воспроизведения экспериментов и приглашает всех «проверить его математику». Это пример открытой и проверяемой разработки.
В конечном итоге, история про обезличивание медицинских текстов — это история о том, как можно строить мощные, но ответственные инструменты для работы с чувствительными данными. Иногда самый быстрый и надёжный путь — не отправлять их в путешествие по сети, а тихо и спокойно обработать у себя дома.