В этом руководстве мы рассмотрим, как использовать Microsoft Presidio — фреймворк с открытым исходным кодом, предназначенный для обнаружения, анализа и анонимизации персональных данных (ПД) в тексте свободной формы. Presidio, основанный на эффективной библиотеке NLP spaCy, отличается лёгкостью и модульностью, что упрощает его интеграцию в приложения и конвейеры реального времени.
Что мы рассмотрим:
* настройку и установку необходимых пакетов Presidio;
* обнаружение распространённых сущностей ПД, таких как имена, номера телефонов и данные кредитных карт;
* определение пользовательских распознавателей для сущностей, специфичных для домена (например, PAN, Aadhaar);
* создание и регистрацию пользовательских анонимайзеров (например, хеширование или псевдонимизация);
* повторное использование сопоставлений анонимизации для последовательной реанонимизации.
Установка библиотек
Чтобы начать работу с Presidio, вам необходимо установить следующие ключевые библиотеки:
* `presidio-analyzer`: основная библиотека, отвечающая за обнаружение сущностей ПД в тексте с помощью встроенных и пользовательских распознавателей.
* `presidio-anonymizer`: библиотека предоставляет инструменты для анонимизации (например, сокрытие, замена, хеширование) обнаруженных ПД с помощью настраиваемых операторов.
* модель NLP spaCy (`encoreweblg`): Presidio использует spaCy для задач обработки естественного языка, таких как распознавание именованных сущностей. Модель `encoreweblg` обеспечивает высокую точность и рекомендуется для обнаружения ПД на английском языке.
pip install presidio-analyzer presidio-anonymizer
python -m spacy download encoreweb_lg
Возможно, вам потребуется перезапустить сеанс для установки библиотек, если вы используете Jupyter/Colab.
Создание пользовательского распознавателя ПД с помощью списка запрещённых слов (учёные звания)
Этот блок кода показывает, как создать пользовательский распознаватель ПД в Presidio с помощью простого списка запрещённых слов, идеально подходящего для обнаружения фиксированных терминов, таких как учёные звания (например, «Dr.», «Prof.»). Распознаватель добавляется в реестр Presidio и используется анализатором для сканирования вводимого текста.
from presidio_analyzer import AnalyzerEngine, PatternRecognizer, RecognizerRegistry
Шаг 1: создание пользовательского распознавателя с помощью списка запрещённых слов
academictitlerecognizer = PatternRecognizer(
supportedentity=»ACADEMICTITLE»,
deny_list=[«Dr.», «Dr», «Professor», «Prof.»])
Шаг 2: добавление его в реестр
registry = RecognizerRegistry()
registry.loadpredefinedrecognizers()
registry.addrecognizer(academictitle_recognizer)
Шаг 3: создание анализаторного движка с обновлённым реестром
analyzer = AnalyzerEngine(registry=registry)
Шаг 4: анализ текста
text = «Prof. John Smith is meeting with Dr. Alice Brown.»
results = analyzer.analyze(text=text, language=»en»)
for result in results:
print(result)
Создание пользовательского анонимайзера с помощью списка запрещённых слов (учёные звания)
Этот код демонстрирует, как использовать движок анонимизации Presidio для анонимизации обнаруженных сущностей ПД в заданном тексте. В этом примере мы вручную определяем две сущности PERSON, используя RecognizerResult, имитируя вывод из Presidio Analyzer. Эти сущности представляют имена «Bond» и «James Bond» в образце текста.
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import RecognizerResult, OperatorConfig
Инициализация движка:
engine = AnonymizerEngine()
Вызов функции anonymize с текстом, результатами анализатора (потенциально поступающими из presidio-analyzer) и операторами для получения вывода анонимизации:
result = engine.anonymize(
text=»My name is Bond, James Bond»,
analyzer_results=[
RecognizerResult(entity_type=»PERSON», start=11, end=15, score=0.8),
RecognizerResult(entity_type=»PERSON», start=17, end=27, score=0.8),
],
operators={«PERSON»: OperatorConfig(«replace», {«new_value»: «BIP»})},
)
print(result)
Определение пользовательских распознавателей ПД для номеров PAN и Aadhaar
Мы определяем два пользовательских распознавателя на основе регулярных выражений — один для индийских номеров PAN и один для номеров Aadhaar. Они будут обнаруживать пользовательские сущности ПД в вашем тексте.
pan_recognizer = PatternRecognizer(
supportedentity=»INDPAN»,
name=»PAN Recognizer»,
patterns=[Pattern(name=»pan», regex=r»\b[A-Z]{5}[0-9]{4}[A-Z]\b», score=0.8)],
supported_language=»en»
)
aadhaar_recognizer = PatternRecognizer(
supported_entity=»AADHAAR»,
name=»Aadhaar Recognizer»,
patterns=[Pattern(name=»aadhaar», regex=r»\b\d{4}[- ]?\d{4}[- ]?\d{4}\b», score=0.8)],
supported_language=»en»
)
Настройка движков анализатора и анонимайзера
Здесь мы настраиваем движок Presidio AnalyzerEngine, регистрируем пользовательские распознаватели и добавляем пользовательский анонимайзер в движок AnonymizerEngine.
from presidio_anonymizer import AnonymizerEngine, OperatorConfig
Инициализация анализатора и регистрация пользовательских распознавателей
analyzer = AnalyzerEngine()
analyzer.registry.addrecognizer(panrecognizer)
analyzer.registry.addrecognizer(aadhaarrecognizer)
Инициализация анонимайзера и добавление пользовательского оператора
anonymizer = AnonymizerEngine()
anonymizer.add_anonymizer(ReAnonymizer)
Общий словарь сопоставлений для последовательной реанонимизации
entity_mapping = {}
Анализ и анонимизация входных текстов
Мы анализируем два отдельных текста, которые включают одни и те же значения PAN и Aadhaar. Пользовательский оператор гарантирует, что они анонимизированы последовательно в обоих входных данных.
from pprint import pprint
Пример текстов
text1 = «My PAN is ABCDE1234F and Aadhaar number is 1234-5678-9123.»
text2 = «His Aadhaar is 1234-5678-9123 and PAN is ABCDE1234F.»
Анализ и анонимизация первого текста
results1 = analyzer.analyze(text=text1, language=»en»)
anon1 = anonymizer.anonymize(
text1,
results1,
{
«DEFAULT»: OperatorConfig(«reanonymizer», {«entitymapping»: entitymapping})
}
)
Анализ и анонимизация второго текста
results2 = analyzer.analyze(text=text2, language=»en»)
anon2 = anonymizer.anonymize(
text2,
results2,
{
«DEFAULT»: OperatorConfig(«reanonymizer», {«entitymapping»: entitymapping})
}
)
Просмотр результатов анонимизации и сопоставления
Наконец, мы печатаем оба анонимизированных вывода и проверяем сопоставление, используемое внутри для поддержания согласованных хэшей для значений.
print(» Original 1:», text1)
print(» Anonymized 1:», anon1.text)
print(» Original 2:», text2)
print(» Anonymized 2:», anon2.text)
print(«\n Mapping used:»)
pprint(entity_mapping)
Ознакомьтесь с кодами. Все заслуги за это исследование принадлежат исследователям этого проекта. Также не стесняйтесь следить за нами в Twitter и не забудьте присоединиться к нашему 100k+ ML SubReddit и подписаться на нашу рассылку.
Статья «Начало работы с Microsoft Presidio: пошаговое руководство по обнаружению и анонимизации персональных данных в тексте» впервые появилась на MarkTechPost.
1. Какие основные библиотеки необходимо установить для работы с Microsoft Presidio?
Для работы с Microsoft Presidio необходимо установить следующие ключевые библиотеки: `presidio-analyzer`, `presidio-anonymizer` и модель NLP spaCy (`encoreweb_lg`).
2. Как создать пользовательский распознаватель персональных данных в Presidio с помощью списка запрещённых слов?
Чтобы создать пользовательский распознаватель ПД в Presidio, нужно выполнить следующие шаги:
* импортировать необходимые модули из `presidio_analyzer`;
* создать пользовательский распознаватель с помощью списка запрещённых слов;
* добавить распознаватель в реестр Presidio;
* создать анализаторный движок с обновлённым реестром;
* провести анализ текста.
3. Какие шаги необходимо выполнить для настройки движков анализатора и анонимайзера в Presidio?
Для настройки движков анализатора и анонимайзера в Presidio необходимо выполнить следующие шаги:
* инициализировать анализатор и зарегистрировать пользовательские распознаватели;
* инициализировать анонимайзер и добавить пользовательский анонимайзер в движок `AnonymizerEngine`;
* настроить общий словарь сопоставлений для последовательной реанонимизации.
4. Какие типы сущностей персональных данных можно обнаружить с помощью Microsoft Presidio?
С помощью Microsoft Presidio можно обнаружить следующие типы сущностей персональных данных: имена, номера телефонов, данные кредитных карт, учёные звания (например, «Dr.», «Prof.»), номера PAN и Aadhaar.
5. Какие инструменты предоставляет библиотека `presidio-anonymizer` для анонимизации персональных данных?
Библиотека `presidio-anonymizer` предоставляет инструменты для анонимизации обнаруженных персональных данных с помощью настраиваемых операторов. Например, можно использовать операторы для замены, хеширования или псевдонимизации обнаруженных сущностей.