Начало работы с Microsoft Presidio: пошаговое руководство по обнаружению и анонимизации персональных данных в тексте

В этом руководстве мы рассмотрим, как использовать 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` предоставляет инструменты для анонимизации обнаруженных персональных данных с помощью настраиваемых операторов. Например, можно использовать операторы для замены, хеширования или псевдонимизации обнаруженных сущностей.

Источник

Оставьте комментарий