Всем привет!
На связи команда хакатонщиков “Старые Бауманцы” и я - Саша Зазнобин.
Сегодня хочу поговорить с вами о такой малоприятной теме как защита персональных данных. Если вы точно знаете, чего хотите от этой статьи - листайте в конец, там метрики разных моделей в табличном виде. С остальными продолжим вдумчивую беседу по порядку.
Мировой ландшафт в этой части воистину впечатляет тут и 152-ФЗ в России, и более 20 разных законов действующих по своему в разных штатах США и Генеральный регламент ЕС о защите персональных данных.
Единственное разумное объяснение всего это регуляторного фестиваля для меня - это то, что рептилойды-инопланетяне, тайно контролирующие землю, испугались рывка технологического прогресса в искусственном интеллекте и через эти законы пытаются затормозить прогресс. Все остальные объяснения звучат просто несостоятельно. Впрочем вернемся к основной теме.
Итак, сегодня мы будем соблюдать закон о персональных данных (иначе говоря побеждать заговор рептилойдов) через маскировку персональных данных.То есть мы их будем выявлять и маскировать - а потом обрабатывать данные так как нашей душеньке угодно.
Для этого существует отдельный класс задач в data science: Named Entity Recognition сокращенно (NER) — технология обработки естественного языка, направленная на выделение определенных сущностей в тексте, таких как имена людей, географические объекты, названия организаций, даты, номера телефонов и другие категории.
Основная цель в рамках поставленной задачи NER для маскирования персональных данных — автоматически распознавать и скрывать (маскировать) чувствительную информацию в текстах.
Данные
Тестовый датасет для оценки метрик, который мы использовали, чтобы понять насколько хорошо мы справились с задачей, состоял из 1150 фраз типа: “Марьиванна, пришли корректный акт сверки за Август” в которых [PER] упоминается 1575 раз.
Датасет для обучения это 2814 аналогичных фраз.
Метрики
Что такое хорошо , а что такое плохо - нам скажут метрики. Нас интересует Recall - выявление NER сущностей. Фокусируемся на типе [PER].
Таким образом, Recall это количество выявленных правильно сущностей [PER] разделенное на общее количеству сущностей [PER] в наборе данных То есть, если в данных - было 100 имен, а модель выявила 5 правильно - Recall будет равен 5%.
Модели
Нет времени на раскачку - переходим к доступным моделям
Slavic Bert
Погуглив, обнаруживаем Slavic Bert - Модель для многоязычного распознавания именованных сущностей (NER), разработанная с использованием архитектуры BERT и адаптирована для четырёх славянских языков: русского, польского, болгарского и чешского. Базой для разработки стала изначально многоязычная версия BERT, обученная на 104 языках.
Архитектурно модель представляет собой стандартный BERT, дополненный условным случайным полем (CRF) на верхнем уровне. Это позволяет улучшить согласованность предсказаний, обеспечивая зависимость между последовательными метками. Входные данные обрабатываются с помощью токенизации WordPiece, что позволяет эффективно работать с подсловами и формировать контекстуальные представления для слов.
Для повышения производительности модель была дообучена на текстах из Википедии и новостных ресурсов, что позволило адаптировать её к особенностям славянских языков. Дополнительно был обновлен словарь подслов, чтобы учитывать специфические n-граммы этих языков.
Обучение модели проводилось с использованием метода трансфера знаний. Это позволило объединить преимущества многоязычного обучения и специализированных данных для целевых языков. Результаты показали, что модель значительно превосходит BiLSTM-CRF, использующий FastText-эмбеддинги, а также изначальную многоязычную версию BERT.
Модель приняла участие в BSNLP 2019 (Shared Task on Multilingual Named Entity Recognition), где заняла первое место по трём из четырёх метрик.
Без дообучения (Slavic Bert) показала Recall = 76,4. Вроде не плохо, с другой стороны защита не очень надежная. Пропустить каждый четвертый - это не мало. Кажется, что нет большого смысла тратить много времени на попытки дообучения. Лучше попробовать другие модели.
GLiNER
GLiNER — это модель для задач выделения именованных сущностей (NER), которая объединяет высокую производительность с минимальными требованиями к вычислительным ресурсам. В отличие от крупных языковых моделей (LLMs), требующих значительных ресурсов, GLiNER предлагает компактное и эффективное решение для извлечения сущностей любых типов.
GLiNER основана на двунаправленных языковых моделях (BiLM), таких как вышеупомянутый BERT.
Основные преимущества
Многоязыковая поддержка: GLiNER демонстрирует отличные результаты даже на языках, отсутствующих в обучающем наборе, что делает её универсальным инструментом. А нас то русский язык интересует!
Экономичность: компактная архитектура модели позволяет использовать её в условиях ограниченных вычислительных ресурсов, включая локальные устройства и встроенные системы. Мы использовали https://huggingface.co/urchade/gliner_multi-v2.1 на 209M параметров. 1572MiB GPU memory usage - на самые маленькие карточки влезет.
Без дообучения модель показала Recall 94,9% - очень неплохо! Мы попробовали ее дообучить - существенно результат не улучшился. Несколько выросла вспомогательная в нашей задаче метрика Precision, в которую не будем углубляться в этой статье. Можно было-бы перебрать "100-500" комбинаций гиперпараметров и подтянуть результаты на пару процентов , но мы решили пойти дальше и тестить другие модели.
SPACY:
Spacy — одна из наиболее популярных библиотек для обработки естественного языка (NLP), в том числе и для задач NER. Мы пошли по довольно стандартному пути: сначала вручную разметили порядка 500 документов, чтобы получить базовый датасет. На его основе обучили модель и использовали её для автоматической разметки новой выборки, которую затем проверили эксперты. Однако в процессе мы заметили, что этот итеративный подход не покрывает всех вариантов использования персональных данных..
Чтобы расширить охват, мы выделили типовые паттерны в размеченных данных. Все выявленные паттерны легли в основу синтетического датасета, который мы сгенерировали для дообучения. Итоговый вариант модели Spacy обучался как на реальных, так и на синтетически созданных данных. Подобное комбинирование методик дало нам универсальность в извлечении сущностей, при этом ресурсоёмкость решения осталась на приемлемом уровне. Spacy - наш stand-alone чемпион, выбивший наивысший Recall 95,4% .
QWEN in NER
Тут отлично написано про qwen, не думаю что стоит повторяться. От себя могу добавить, что это чудо китайской мысли стоит под капотом очень большего количества сервисов. А мы чем хуже ? Пусть поработает на NER. Конечно, у читателя может возникнуть легкое чувство забивания гвоздей микроскопом - не сдерживайте свое негодование в комментариях.
Мы использовали Qwen2.5-Coder-7B-Instruct-AWQ, которая взяла себе 14566 MiB GPU, что вроде и не мало, а с другой стороны влезает на все самые популярные карточки (4090,3090 и T4), что полностью нас устроило.
Мы получили 87.4% Recall. Уверен, что если взять модель побольше и заняться вдумчивым промпт инжинирингом - можно улучшить наш резальтат. Добавляйте ваши идеи для промта в комменты.
Комбинации моделей и итоговые результаты
И так мы получили несколько решений, лучшие из которые маскируют до 95% персональных данных. А если мы хотим еще более хорошего результата? Мы попробовали комбинировать
В итоге наивысшую метрику смогла достичь комбинация gliner_multi-v2.1 и Qwen2.5-Coder-7B-Instruct-AWQ - Recall 98,6%
Совсем немного от нее отстает комбинация Spacy gliner_multi-v2.1 - Recall 98,5%, которая гораздо менее требовательна к ресурсам.
А теперь - самое вкусное.
Сравнительная таблица
Метрики |
[1] Slavic - BERT |
[2] gliner_multi-v2.1 zero-shot |
[3] gliner_multi-v2.1 fine-tuned |
[4] Spacy |
[5] Qwen |
[6] [2]+[4] |
[7] [2]+[5] |
[8] [4]+[5] |
Number of true labels |
1575 |
1575 |
1575 |
1575 |
1575 |
1575 |
1575 |
1575 |
True Positive |
1204 |
1494 |
1450 |
1503 |
1377 |
1551 |
1553 |
1534 |
Recall |
0.764 |
0.949 |
0.921 |
0.954 |
0.874 |
0.985 |
0.986 |
0.973 |
Авторы в алфавитном порядке : Александр Зазнобин, Даниил Романов, Мария Страцева
Комментарии (5)
Adgh
28.01.2025 07:02Странно, что не упомянута Natasha
Zaznob0707 Автор
28.01.2025 07:02Спасибо за идею.
Можно будет собрать еще некоторое количество неупомянутых моделей и сделать апдейт темы с ними!
musinit
Интересно!
А я правильно понимаю, что если модель поддерживает, например, русский и английский, то комбинированный текст вида «Ivanov ivan телефон 891234567” она корректно распознает?
Zaznob0707 Автор
Спасибо! Да, именно так.