В конце апреля OpenAI представила Privacy Filter — модель, которая ищет и маскирует персональные данные прямо на устройстве. Мы решили проверить, как работает новый фильтр в сравнении с «Маскировщиком» — нашим решением для обезличивания данных.
Что заявляет OpenAI
Главное из сообщения компании:
- Privacy Filter разработан для обеспечения конфиденциальности и способен выполнять контекстно-зависимое обнаружение ПД в неструктурированном тексте;
- модель может работать локально — идентифицировать персональные данные без их передачи за пределы вашего устройства;
- она способна обрабатывать длинные фрагменты текста и понимать контекст.
OpenAI сообщает о precision 96% и recall 94% на датасете PII-Masking-300k (западноевропейские языки). Это означает, что из 100 найденных сущностей примерно 96 это настоящие ПД, а из 100 реальных ПД в тексте модель находит примерно 94.
Сравнение с «Маскировщиком»
Мы замерили модель от OpenAI на нашем бенчмарке, чтобы проверить, как она работает на русском языке. Для анализа взяли 57 документов, 1 280 сущностей. И вот что получилось.
Сценарий 1. Маскирование файлов
Проверяли на медицинских протоколах, страховых полисах и договорах. Столкнулись с тем, что модель хоть и находит ПД, но часто режет сущности на фрагменты и путает типы.
Например, «разбирает» имена на слоги. Из реального медицинского документа:
«Иванов Петр Серге» → [NAME]
«евич» → [NAME]
«П» → [NAME]
«етров» → [NAME]
49% токенов имен — обрывки: «евич», «П», «етров». Если есть два тега на одно имя, то при замене заглушкой получается два разных плейсхолдера в одном слове.
ИНН и СНИЛС. В документе были данные: ИНН 000000000001, СНИЛС
OpenAI:
[BANK_ACCOUNT] «ИНН»
[BANK_ACCOUNT] «000000»
[BANK_ACCOUNT] «001»
[BANK_ACCOUNT] «СНИЛС 000-000-000»
[BANK_ACCOUNT] «01»
Одно поле ИНН распалось три фрагмента. СНИЛС попал в банковский счет вместе с префиксом, обозначающим тип документа. Выходит, что типичные для российского контекста ПД ожидаемо не знакомы для зарубежной модели. Иногда они могут быть ошибочно отнесены к близким по формату данным — например, к номеру счета.
В таблице — сравнение показателя F1 по OpenAI Privacy Filter и «Маскировщику» на разных типах данных. Дисклеймер: в Privacy Filter все эти данные значатся как account_number. Но мы при сравнении смотрели конкретные типы данных.
| Тип | OpenAI Privacy Filter | «Маскировщик» |
| ИНН | 0% | 93% |
| СНИЛС | 0% | 100% |
| Паспорт | 0% | 85% |
| Банковский счет | 23% | 98% |
| Имена | 44% | 94% |
Сценарий 2. Консистентное маскирование
В этом сценарии один человек упомянут несколько раз в разных формах — полное имя, только имя, транслит. Все это должно быть замаскировано консистентно.
Возьмем пример из документа: «...сотрудника Иванова Алексея Сергеевича, далее — Алексей...». Вот как работает с этим документом OpenAI Privacy Filter:
[NAME] «Иванова Алексея Сергеев»
[NAME] «ича»
[NAME] «Алекс»
Система не видит, что это один человек, и выдает три тэга на один и тот же набор данных.
Похожее происходит, если в документе есть транслитерация ФИО — например, «Иванов Алексей Сергеевич (Ivanov Alexey Sergeevich)».
[NAME] «Иванов Алексей Сергеевич (»
[NAME] «Ivanov Alexey Sergeevich»
[NAME] «)»
Открывающая скобка входит в первый токен, закрывающая получает отдельный тег. После замены: [ИМЯ1( и ) вместо [ИМЯ1] ([ИМЯ1]).
Сценарий 3. Тикеты, отчеты, чаты
Обращения в поддержку, служебные отчеты, как правило, представляют собой текст без четкой структуры — персональные данные могут быть вписаны в текст в произвольном виде.
Для проверки мы взяли такой тикет поддержки:
«...Иванов Алексей Сергеевич (Ivanov Alexey Sergeevich), 15 марта 1991 года рождения...». Получили результат:
[NAME] «Иванов Алексей Сергеевич»
[NAME] «(»
[NAME] «Ivanov Alexey Sergeevich»
[NAME] «),»
[DATE] «15 марта 199»
[DATE] «1»
[NAME] «П»
[NAME] «етров»
[URL] «192.168.12.»
[URL] «34»
Как видно из примера, дата рождения и фамилия оказались разбиты, а IP помечен как URL.
Также обратили внимание, что в медицинских эпикризах модель теряет структуру и размечает произвольные фрагменты. А из 1 371 токена DATE — 728 оказались без числовой даты.
Результаты сравнения OpenAI Privacy Filter и «Маскировщика»
| Критерии | «Маскировщик» | OpenAI Privacy Filter |
| Средняя F1 | 89.2% | 54.1% |
| Предсказаний на 1 280 сущностей | 1 102 | 2 115 |
| F1 по именам | 94% | 44% |
| F1 по датам | 98% | 60% |
| ИНН, СНИЛС, паспорт | знает | не знает |
| Фрагментация сущностей | редко | ~49% токенов |
| Мусорные DATE-токены | нет | 53% |
Вывод: OpenAI Privacy Filter пока плохо справляется с русским контекстом — это, кстати, подтверждают и другие тест-драйвы. Кроме того, модель дает большое количество ложноположительных срабатываний, что сильно бьет по полезности обезличенных данных.



