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