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

Источник

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