
Двунаправленная модель классификации токенов для обнаружения и маскирования PII в тексте, с CLI для редактирования, оценки и дообучения на локальных серверах.
OpenAI Privacy Filter — это двунаправленная модель классификации токенов для обнаружения и маскирования персональных данных (PII) в тексте. Она предназначена для высокопроизводительных рабочих процессов очистки данных, где командам нужна модель, которую можно запускать локально, и которая является быстрой, контекстно-зависимой и настраиваемой.
OpenAI Privacy Filter предварительно обучен авторегрессивно, чтобы получить контрольную точку с архитектурой, аналогичной gpt-oss, albeit меньшего размера. Затем мы преобразовали эту контрольную точку в двунаправленный классификатор токенов по таксономии меток приватности и дообучили с использованием контролируемой функции потерь классификации. (Подробности архитектуры gpt-oss см. в карточке модели gpt-oss.) Вместо генерации текста токен за токеном эта модель размечает входную последовательность за один прямой проход, а затем декодирует связные спаны с помощью ограниченной процедуры Витерби. Для каждого входного токена модель предсказывает распределение вероятностей по таксономии меток, которая состоит из 8 выходных категорий, описанных ниже.
Ключевые особенности:
Этот репозиторий содержит локальный код, CLI и примеры ресурсов, используемых для запуска, оценки и дообучения контрольных точек Privacy Filter. Он предназначен для команд, которые хотят напрямую изучить реализацию и эксплуатировать модель в своей собственной среде.
Ресурсы репозитория: Лицензия и Политика безопасности.
pip install -e .
После этого у вас появится python-скрипт opf, который можно запускать напрямую или через python -m opf. Скрипт можно использовать 3 отдельными способами, как описано ниже.
По умолчанию opf ищет модель в каталоге, указанном переменной OPF_CHECKPOINT, или в ~/.opf/privacy_filter. Если модель не найдена в расположении ~/.opf/privacy_filter, она будет загружена.
opf "Alice was born on 1990-01-02."
Код поддерживает работу как на GPU (по умолчанию), так и на CPU. Для запуска на CPU используйте флаг --device cpu:
opf --device cpu "Alice was born on 1990-01-02."
Чтобы переопределить контрольную точку по умолчанию, передайте --checkpoint:
opf --checkpoint /path/to/checkpoint_dir "Alice was born on 1990-01-02."
Режим редактирования поддерживает редактирование целого файла сразу
opf -f /path/to/file
Редактирование также можно выполнять через каналы, что поддерживает сложные однострочники:
cat /path/to/file | grep -e 'some_pattern' | opf
Если входные данные не предоставлены, opf запустится в интерактивном режиме. В этом режиме для каждого входного примера CLI выводит структурированный JSON, используя предварительный просмотр с ANSI-цветовой кодировкой, если терминал это поддерживает. Эти параметры можно контролировать с помощью флагов.
Обратитесь к opf redact --help для получения дополнительных флагов и информации о режиме редактирования.
opf eval examples/data/sample_eval_five_examples.jsonl
Примеры оценочных фикстур в examples/data/sample_eval_five_examples*.jsonl являются только синтетическими примерами данных и не описывают реальных людей или реальные конфиденциальные записи. См. examples/data/README.md.
Обратитесь к opf eval --help для получения дополнительных флагов и информации о режиме оценки.
opf train /path/to/train.jsonl --output-dir /path/to/finetuned_checkpoint
Обратитесь к opf train --help для получения дополнительных флагов и информации о режиме дообучения.
opf/__main__.py: единая точка входа CLI для режимов redact, eval и train.opf/_api.py: API для Python поверх стека выполнения и декодирования.opf/_cli/: разбор аргументов командной строки и вспомогательные средства отрисовки в терминале.opf/_core/: загрузка среды выполнения, преобразование спанов и общая логика декодирования.opf/_eval/: загрузка наборов данных, предобработка, метрики и средства запуска оценки.opf/_train/: разбор аргументов локального дообучения и средства запуска обучения.opf/_model/: реализация трансформера, конфигурация контрольной точки и загрузка весов.examples/data/: примеры оценочных файлов, а также воспроизводимые демонстрационные наборы данных для дообучения.examples/scripts/finetuning/: запускаемые демонстрационные обвязки для дообучения.FINETUNING.md: сфокусированное руководство по рабочему процессу дообучения и демонстрационным скриптам.OUTPUT_SCHEMAS.md: форматы JSON-ответов и экспортируемых полезных нагрузок.EVAL_AND_OUTPUT_MODES.md: описание режимов вывода для редактирования и оценки.Privacy Filter — это модель двунаправленной классификации токенов с декодированием спанов. Она обучается поэтапно, начиная с авторегрессивного предварительного обучения. Затем предварительно обученная языковая модель модифицируется и дообучается как двунаправленный классификатор токенов с полосным вниманием (banded attention) с размером полосы 128 (эффективное окно внимания: 257 токенов, включая сам токен). Это означает:
С архитектурной точки зрения реализация в этом репозитории представляет собой стек в стиле pre-norm трансформерного энкодера с:
d_model = 640.По сравнению с итеративными авторегрессивными подходами, эта конструкция позволяет размечать все токены за один проход, что повышает пропускную способность. По сравнению с классическими подходами предварительного обучения на основе маскированных языковых моделей, это пост-обучающее преобразование авторегрессивной модели, а не нативная настройка masked-LM.
Privacy Filter может обнаруживать 8 категорий спанов приватности:
account_numberprivate_addressprivate_emailprivate_personprivate_phoneprivate_urlprivate_datesecretДля выполнения классификации токенов каждая нефоновая категория спанов расширяется в классы токенов с граничными тегами: B-<label>, I-<label>, E-<label>, S-<label>, плюс фоновый класс O. Таким образом, общее число классов вывода на уровне токенов равно 33: 1 фоновый класс + 8 меток спанов * 4 граничных тега = 33 класса. Это означает, что выходная голова выдаёт 33 логита для каждого токена. Для последовательности длины T выход имеет форму [T, 33]; для батча размера B он имеет форму [B, T, 33].
Словарь меток токенов состоит из фоновой метки O плюс вариантов каждой категории приватности с тегами BIOES: account_number, private_address, private_email, private_person, private_phone, private_url, private_date и secret. Иными словами, для каждой категории модель предсказывает формы B-, I-, E- и S-, соответствующие началу, внутренней части, концу и однотокенному спану. Во время вывода эти логиты на уровне токенов декодируются в связные метки спанов BIOES с помощью ограниченного последовательного декодирования.
После того как классификатор токенов выдаёт логиты на уровне токенов, мы декодируем метки с помощью ограниченного декодера Витерби, используя линейно-цепочечное переходное оценивание, вместо взятия независимого argmax для каждого токена. Декодер обеспечивает соблюдение допустимых граничных переходов BIOES и оценивает полные пути меток с начальными, переходными и конечными членами, а также шестью параметрами смещения переходов, которые управляют сохранением фона, входом в спан, продолжением спана, закрытием спана и передачей от границы к границе. Эта глобальная оптимизация пути предназначена для улучшения связности спанов и стабильности границ за счёт того, что каждое решение по токену зависит от структуры на уровне последовательности, а не только от локальных логитов, особенно в зашумлённом тексте или тексте со смешанным форматом, где одни только локальные решения по токенам могут давать фрагментированные или несогласованные границы.
Параметры последовательного декодирования могут препятствовать пребыванию в фоне, одновременно поощряя вход в спан и его продолжение, что даёт более широкое и более непрерывное маскирование для улучшения полноты, или наоборот для улучшения точности. Во время выполнения пользователи могут настраивать параметры, управляющие этим компромиссом.
Разработано: OpenAI
Финансируется: OpenAI
Предоставлено: OpenAI
Тип модели: модель двунаправленной классификации токенов для обнаружения спанов приватности
Язык(и): преимущественно английский; сообщается о выборочной оценке многоязычной устойчивости
Лицензия: Apache 2.0
Веса модели: https://huggingface.co/openai/privacy-filter
Карточка модели: OpenAI Privacy Filter Model Card
Privacy Filter — это вспомогательное средство для редактирования и минимизации данных, а не гарантия анонимизации, соответствия требованиям или безопасности. Чрезмерная зависимость от инструмента как от универсального заявления об анонимизации создаёт риск недостижения желаемых целей приватности. Privacy Filter лучше всего использовать как один из нескольких слоёв в целостном подходе к приватности на этапе проектирования.
Модель будет идентифицировать только те спаны персональных данных, которые соответствуют обученной таксономии и определениям меток. Реальные сценарии использования приватности разнообразны и сложны, и определения подходящих политик меток и границ решений могут различаться. Таким образом, настройки модели по умолчанию могут не удовлетворять специфическим для организации требованиям управления без калибровки/дообучения.
Privacy Filter не поддерживает динамическую настройку политик меток во время выполнения; вместо этого изменение политик требует дальнейшего дообучения модели. Нативный набор меток и связанные с ним границы решений могут подходить не для каждого сценария использования. Например, политика обучения модели направлена на приоритизацию персональных идентификаторов, часто по замыслу сохраняя контекст, который не сильно связан с личностью; некоторые пользователи могут захотеть изменить этот выбор.
Производительность может снижаться на неанглийском тексте, нелатинских письменностях, шаблонах именования защищённых групп или доменах, которые выходят за пределы распределения по сравнению с обучением модели.
Как и все модели, Privacy Filter может ошибаться, например: недосмотр редких личных имён, региональных соглашений об именовании, инициалов, обращений с обилием титулов или специфичных для домена идентификаторов; избыточное редактирование публичных сущностей, организаций, местоположений или нарицательных существительных, когда локальный контекст неоднозначен; фрагментированные или смещённые границы спанов в тексте со смешанным форматом, длинных документах или тексте с обилием пунктуации и артефактов вёрстки; пропущенные секреты для новых форматов учётных данных, специфичных для проекта шаблонов токенов или секретов, разделённых окружающим синтаксисом; и избыточное редактирование безобидных высокоэнтропийных строк, заполнителей, хешей, примеров учётных данных или синтетических примеров, напоминающих секреты.
Эти ограничения могут взаимодействовать с демографическими, региональными и доменными вариациями. Например, имена и идентификаторы, которые недостаточно представлены в обучающих данных или следуют соглашениям, отличным от доминирующего обучающего распределения, могут с большей вероятностью быть пропущены или иметь несогласованные границы.
Дополнительная осторожность оправдана в высокочувствительных условиях, таких как медицинские, юридические, финансовые, кадровые, образовательные и государственные рабочие процессы. В этих условиях как ложноотрицательные, так и ложноположительные результаты могут быть дорогостоящими: пропущенные спаны могут раскрыть конфиденциальную информацию, в то время как избыточное маскирование может удалить существенный контекст, необходимый для проверки, аудита или принятия последующих решений.