О модели
Модель ищет персональные данные в русскоязычных документах. Кроме имён, адресов, дат, телефонов и почты она размечает идентификаторы, по которым человека можно связать с документом: данные паспорта и миграционных документов, СНИЛС, ИНН и другие госномера, банковские реквизиты, медицинские, судебные, нотариальные, кадровые и учебные номера, данные об имуществе и транспорте, номера билетов и заказов, аккаунты, пропуска, внутренние коды систем и многое другое. В реальных документах именно на них приходится большая часть персональных данных.
Датасет размечен по контексту, поэтому модель находит идентификаторы, которые не описать регулярным выражением, и отличает данные человека от данных организации. Границы разметки опираются на 152-ФЗ и российскую правоприменительную практику. Разметка консервативная — если непонятно к кому данные относятся, значение считается персональными данными. При этом граница проводилась по юридическому смыслу, а не по принципу «замазать всё подряд», то есть данные организаций, справочные и служебные значения, не привязанные к человеку, остаются нетронутыми.
| vladlinv/ru-pii-ner-gliner2.5 | Распознавание типов и границ персональных данных. GLiNER2.5 |
| vladlinv/ru-pii-ner | Распознавание типов и границ персональных данных. ruRoberta-large |
Метрики
Валидационная выборка: 405 документов, 4 134 сущности
Метрики строгие: спан засчитывается только при точном совпадении границ с эталоном. Coverage мягче — доля эталонных сущностей, полностью покрытых предсказаниями того же класса.
| Класс | Сущностей | Precision | Recall | F1 | Coverage |
|---|---|---|---|---|---|
| PERSON | 789 | 93.28% | 91.51% | 92.39% | 92.52% |
| LOCATION | 249 | 88.94% | 74.30% | 80.96% | 78.31% |
| DATE | 562 | 89.64% | 75.44% | 81.93% | 78.11% |
| PHONE | 136 | 95.04% | 84.56% | 89.49% | 86.03% |
| 62 | 100.00% | 87.10% | 93.10% | 87.10% | |
| PII | 2 336 | 89.91% | 80.86% | 85.15% | 83.05% |
| Общее | 4 134 | 90.83% | 81.98% | 86.18% | 84.06% |
Зависимость от порога, по умолчанию 0.5:
| Порог | Precision | Recall | F1 | TP | FP | FN |
|---|---|---|---|---|---|---|
| 0.02 | 0.834 | 0.838 | 0.836 | 3 464 | 689 | 670 |
| 0.10 | 0.868 | 0.834 | 0.851 | 3 447 | 522 | 687 |
| 0.30 | 0.897 | 0.828 | 0.861 | 3 422 | 392 | 712 |
| 0.50 | 0.908 | 0.820 | 0.862 | 3 389 | 342 | 745 |
| 0.70 | 0.917 | 0.810 | 0.860 | 3 349 | 302 | 785 |
| 0.90 | 0.929 | 0.795 | 0.857 | 3 286 | 252 | 848 |
| 0.99 | 0.947 | 0.707 | 0.809 | 2 922 | 164 | 1 212 |
Датасет
4 097 примеров
Датасет полностью сгенерирован. Работа проходила в несколько этапов: юридическая проработка состава ПДн и правил разметки, генерация и аугментация документов, затем ручная доработка части примеров.
Примеры охватывают личные документы физических лиц, кадровую и внутреннюю документацию организаций, корпоративные и административные материалы, юридические и нормативные документы, договорную, коммерческую, финансовую, бухгалтерскую и банковскую документацию. Также государственные и регистрационные документы, медицинские, социальные и образовательные материалы, производственная и техническая документация, документы об имуществе и транспорте, деловая и пользовательская переписка, реестры, справочники, формы, таблицы и другие примеры.
Различные варианты bad OCR, HTML и Markdown, и других форматов. Около 6% примеров иностранные — английский, белорусский, узбекский, казахский, киргизский, таджикский, армянский, грузинский, азербайджанский.
| Класс | Сущностей | Примеров |
|---|---|---|
| PERSON | 7 790 | 2 629 |
| LOCATION | 1 918 | 763 |
| DATE | 4 514 | 1 481 |
| PHONE | 1 548 | 889 |
| 1 004 | 600 | |
| PII | 22 466 | 3 103 |
Архитектура
Полный файнтюн fastino/gliner2.5-multi-v1 — GLiNER2.5 на энкодере mDeBERTa-v3-base, 287M параметров.
Модель не перебирает все возможные фрагменты текста, а сразу предсказывает, где сущность начинается и где заканчивается, после чего сопоставляет найденный фрагмент с каждой меткой. На практике это значит, что длина сущности ничем не ограничена: длинные адреса, банковские реквизиты и составные идентификаторы не обрезаются, а скорость не падает на объёмных документах. За один проход модель принимает до 4096 токенов, поэтому большинство документов обрабатывается целиком, без нарезки на куски.
Список меток не зашит в веса, а подаётся на вход вместе с текстом. Метки можно переименовать под свою схему или добавить новые типы без переобучения — модель ищет их по смыслу названия. Но заявленное качество относится только к меткам из карточки: на произвольных метках оно не гарантировано.
Использование
Установка:
pip install gliner2
Загрузка модели и обработка текста:
from gliner2 import AutoExtractor
model = AutoExtractor.from_pretrained("vladlinv/ru-pii-ner-gliner2.5")
model.to("cuda")
LABELS = ["ru_pii_person", "ru_pii_location", "ru_pii_date",
"ru_pii_phone", "ru_pii_email", "ru_pii"]
result = model.extract_entities(
"Иван Петров, телефон +7 999 123-45-67",
LABELS,
threshold=0.5,
include_spans=True,
)
{
"entities": {
"ru_pii_person": [
{"text": "Иван Петров", "start": 0, "end": 11},
],
"ru_pii_phone": [
{"text": "+7 999 123-45-67", "start": 21, "end": 37},
],
"ru_pii_location": [],
"ru_pii_date": [],
"ru_pii_email": [],
"ru_pii": [
{"text": "Иван Петров", "start": 0, "end": 11},
{"text": "+7 999 123-45-67", "start": 21, "end": 37},
],
}
}
Остальные параметры, батчи и работа со схемами — в документации GLiNER2.
ru_pii — общий класс персональных данных. ru_pii_person, ru_pii_location, ru_pii_date, ru_pii_phone, ru_pii_email его подклассы. Поэтому один фрагмент может одновременно получить общий класс и более конкретный. Для обезличивания рекомендуется использовать объединение всех найденных классов. Общий класс служит дополнительной страховкой и покрывает персональные идентификаторы, для которых нет отдельной категории.
Ограничения
NER модель — только один из слоёв системы обезличивания ПДн. В реальной системе её необходимо дополнять регулярными выражениями, словарями и прикладными правилами. При этом ни модель, ни полностью автоматический пайплайн не могут гарантировать обнаружение всех чувствительных данных.
Модель предназначена для поиска персональных данных. Она не выявляет коммерческую тайну и другую конфиденциальную информацию, не относящуюся к физическим лицам: без отдельных правил такие сведения останутся открытыми.