anonym.legal

By · Last updated 2026-06-05

Назад к блогуGDPR и соблюдение

Самостоятельный PII не проходит аудиты соответствия

spaCy 3.4.4 даёт результаты NER, отличающиеся от spaCy 3.5.1. Финансовая компания обнаружила, что 3% документов были анонимизированы по-разному в staging и продакшне.

June 5, 20266 мин чтения
compliance auditenvironment consistencyspaCy versionsself-hosted PIIreproducible anonymization

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

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

Самостоятельно развёрнутый Presidio имеет здесь реальную проблему. Это не вопрос конфигурации. Это фундаментальное ограничение самостоятельно развёртываемых NLP-инструментов.

Что такое дрейф окружения?

Самостоятельно развёрнутый Presidio работает в среде разработки, в staging и в продакшне. Каждая из них может вести себя по-разному. Поэтому один и тот же входной документ может давать разные результаты в каждой из них.

Это называется дрейфом окружения. У него четыре основных причины.

Дрейф версий моделей

Модели spaCy версионируются. Модели en_core_web_lg 3.4.4 и en_core_web_lg 3.5.1 обучались на разных данных и имеют разную архитектуру. Поэтому один и тот же документ может давать разные результаты NER с каждой версией.

Типичная картина выглядит так:

  • Dev: en_core_web_lg 3.4.4 — установлено при старте проекта
  • Staging: en_core_web_lg 3.5.0 — обновлено в ходе плановых работ
  • Prodakшн: en_core_web_lg 3.5.1 — обновлено при патче безопасности

Три среды. Три версии модели. Три разных результата обнаружения. Тесты проходят в staging. Но продакшн использует другую модель. Разрыв остаётся незамеченным.

Дрейф версий зависимостей

spaCy 3.4.x и 3.5.x по-разному разбивают предложения. Это влияет на то, как обнаруживаются имена вблизи границ предложений. Эти изменения зафиксированы в примечаниях к релизам spaCy. Но большинство команд не проверяет их на предмет влияния на обработку персональных данных.

Дрейф конфигурации

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

Различия оборудования

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

Реальная аудиторская находка

Банк проверил свою самостоятельно развёрнутую установку Presidio.

Тестовая среда: Presidio с spaCy 3.4.4 на кластере staging. Рабочая среда: Presidio с spaCy 3.5.1 на производственном кластере.

Они прогнали один и тот же набор документов через обе среды и сравнили результаты. Вывод: в 3% документов результаты обезличивания персональных данных различались. Некоторые имена обнаруживались в staging, но не в продакшне. В некоторых случаях обнаруженные текстовые фрагменты различались.

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

Статья 32 GDPR требует надлежащих технических мер. Правила EDPB по обезличиванию персональных данных требуют последовательности и воспроизводимости. Уровень в 3% при 100 000 документов в месяц означает 3 000 документов с непоследовательными результатами каждый месяц. Часть из них — ложные отрицания: персональные данные, которые staging обнаружил бы, остаются в рабочем выводе. Это нарушение соответствия требованиям.

Затем банк перешёл на управляемый SaaS. Аудиторское замечание было закрыто. О том, как управляемые решения справляются с этой проблемой, — на нашей странице безопасности и соответствия.

Почему управляемые сервисы устроены иначе

Управляемый сервис работает на одной версии движка. Все пользователи используют одну и ту же версию одновременно. Обновления моделей применяются из одного места. Конфигурация также управляется централизованно с полным журналом изменений. Оборудование пользователя не влияет на результаты.

Поэтому один и тот же документ, обработанный сегодня, даёт тот же результат в следующем месяце. Если версия движка изменилась, это изменение зафиксировано и версионировано.

Ключевое отличие — в журнале аудита.

Журнал аудита при самостоятельном развёртывании:

  • «Использовался Presidio 2.2.35 с spaCy en_core_web_lg 3.5.1 на Ubuntu 22.04».
  • Это та же версия, что и в staging? Неизвестно.
  • Изменилась ли модель с момента обработки этого документа? Неизвестно без отслеживания.
  • Совпадает ли порог оценки с тестовым? Зависит от управления конфигурацией.

Журнал аудита управляемого сервиса:

  • «Использовался API anonym.legal, версия движка 4.22.1, на 2025-03-15T14:22:31Z».
  • Одна и та же версия для всех пользователей? Да.
  • Изменилась ли она? Версии движка зафиксированы. Версия 4.22.1 всегда означает один и тот же движок.
  • Воспроизводима ли конфигурация? Да. Идентификатор пресета регистрируется. Конфигурация для этой версии может быть получена повторно.

Журнал управляемого сервиса прозрачен. Журнал самостоятельного развёртывания требует тщательного ведения, которое большинство команд пропускает.

Как улучшить последовательность при самостоятельном развёртывании

Если самостоятельное развёртывание необходимо, дрейф можно сократить четырьмя шагами.

Во-первых, закрепите версии моделей. Зафиксируйте точные версии моделей во всех файлах развёртывания. Заблокируйте автоматические обновления. Отслеживайте версии в системе контроля версий.

Затем заморозьте образы контейнеров. Собирайте Docker-образы с зафиксированными версиями моделей. Добавляйте тег с версией модели, версией Presidio и датой. Не обновляйте базовые образы без предварительного тестирования.

Также храните конфигурацию в коде. Все настройки Presidio — детекторы, пороги оценки, активные языки — храните в файлах под контролем версий. Развёртывайте конфигурацию вместе с приложением.

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

Эти шаги помогают. Но они также добавляют работы. Управляемый сервис обеспечивает ту же последовательность без дополнительных усилий.

Итог

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

Без активной работы самостоятельные инструменты обнаружения персональных данных дрейфуют. Изменения версий вносят незаметные пробелы. Эти пробелы проявляются как аудиторские замечания.

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

Источники

Готовы защитить ваши данные?

Начните анонимизацию PII с 285+ типов сущностей на 48 языках.

About this page

We update this page when our platform or the law changes.

Read our founder note for how we work.

Each change shows up in the timestamp at the top.

Related reading

We follow these rules

  • GDPR (EU 2016/679).
  • ISO/IEC 27001:2022.
  • NIS2 (EU 2022/2555).
  • HIPAA safe harbor under 45 CFR § 164.514(b)(2).

Our promise

We do not sell your data.

We do not train models on your text.

We store your files in Germany.

You can delete your account at any time.

You own your work.

Where we run

Our servers live in Falkenstein, Germany.

We use Hetzner. They hold ISO 27001 certification.

All data stays in the EU.

Backups run every day.

Need help?

Email support@anonym.legal.

We reply within one business day.

How we test

We run a full check suite on every release.

Each surface gets its own sweep script and report.

Human reviewers spot-check the output each week.

We track recall and precision on a labelled set.

Bad runs block the deploy.

What we never do

  • We never sell your information to third parties.
  • We never train models on what you upload.
  • We never keep your work after you delete it.
  • We never share keys with any outside firm.
  • We never run ads inside the product.

Plans in plain words

We sell credits, not seats.

One credit covers one short job.

Long jobs use a few credits each.

You can top up at any time.

Unused credits roll over each month.

Read the plans page for current rates.

Who built this

A small team of engineers and lawyers built this.

We ship from Europe and work in the open.

Our founder note spells out why we started.

Where to start

How the parts fit

A browser add-on cleans text inside Chrome.

A Word plug-in handles drafts in Office.

A small desktop tool works on whole folders.

An agent protocol link feeds large models safely.

All four share one core engine and one rule set.

Words from our team

We started this work after a lunch about cookies.

One friend kept getting odd ads on her phone.

We asked why a court file leaked through a draft.

We sketched the first build on a napkin that week.

By month three we had a tiny demo for a friend.

She used it on her first case the next day.

Common questions we hear

Can the tool read scanned PDFs? Yes, with OCR.

Does it work on long files? Yes, in small chunks.

Can I roll my own rule set? Yes, save it as a preset.

Does it run offline? The desktop build runs offline.

Do you keep my files? No, the cloud build wipes after each run.

Will it learn from my work? No, we never train on inputs.

A short tour of the workflow

Upload a file or paste a snippet of prose.

Pick the entities you want gone from the draft.

Choose a method: replace, mask, hash, encrypt, or redact.

Press run and watch the side panel show each hit.

Skim the result and tweak any rule that misfired.

Save the cleaned file or send it to a teammate.