data-privacy-stack/presidio-research
GitHub: data-privacy-stack/presidio-research
为 Presidio PII 检测系统及通用 NER 模型提供合成数据生成、多格式数据转换和识别器评估能力的数据科学工具包。
Stars: 299 | Forks: 79
# Presidio-research
此包为
[Presidio](https://github.com/microsoft/presidio) 及一般的 PII 检测模型提供评估和数据科学功能。
它还包含一个虚假数据生成器,可以基于模板和虚假 PII 创建合成句子。
## 谁应该使用它?
- 任何有兴趣**开发或评估 PII 检测模型**、现有 Presidio 实例或 Presidio PII 识别器的人。
- 任何有兴趣**基于先前的数据集或句子模板生成新数据**(例如,增加实体值的覆盖率)以用于命名实体识别 (NER) 模型的人。
## 快速入门
### 使用 notebooks
最简单的入门方式是查看这些 notebooks。
- [Notebook 1](notebooks/1_Generate_data.ipynb):展示了如何使用 PII 数据生成器。
- [Notebook 2](notebooks/2_PII_EDA.ipynb):展示了对 PII 数据集的简单分析。
- [Notebook 3](notebooks/3_Split_by_pattern_number.ipynb):提供了将数据集拆分为训练/测试/验证集的工具,同时避免由于相同模式出现在多个折中而导致的泄漏(仅适用于合成生成的数据)。
- [Notebook 4](notebooks/4_Evaluate_Presidio_Analyzer.ipynb):展示了如何使用评估工具来评估 Presidio 检测 PII 的效果。请注意,这里使用的是原版 Presidio,结果并不十分准确。
- [Notebook 5](notebooks/5_Evaluate_Custom_Presidio_Analyzer.ipynb):展示了如何配置 Presidio 以更准确地检测 PII,并将 f 分数提高约 30%。
- [Notebook 6](notebooks/6_Interactive_Entity_Mapping.ipynb):解释了实体映射过程,这在评估多个各自返回不同实体集的模型时至关重要。
### 安装
#### 从 PyPI 安装
```
pip install presidio-evaluator
python -m spacy download en_core_web_sm # for tokenization
python -m spacy download en_core_web_lg # for NER
```
#### 从源码安装
要安装此包:
1. 克隆仓库
2. 安装所有依赖项:
```
# 如果尚未安装,请安装 uv
pip install uv
# 安装 package + dev dependencies
uv sync --extra dev
# 下载用于 tokenization 的 spaCy pipeline
uv run python -m spacy download en_core_web_sm
# 要使用默认的 Presidio configuration,需要 spaCy model:
uv run python -m spacy download en_core_web_lg
# 验证安装
uv run pytest
```
请注意,某些依赖项(如 Flair 和 Stanza)已不再受支持。请直接使用 Presidio Analyzer 来添加自定义 NER 模型。
## 此包包含什么?
1. 用于 PII 识别器和 NER 模型的**虚假数据生成器**
2. 用于数据生成、建模和分析的**数据表示层**
3. 针对 Presidio Analyzer 和自定义 Presidio 识别器的**模型/识别器评估**
4. 用于**结果分析**的辅助函数
## 1. 数据生成
有关更多详细信息,请参阅[数据生成器 README](presidio_evaluator/data_generator/README.md)。
数据生成过程需要一个包含模板的文件,例如 `My name is {{name}}`。
然后,它通过对模板和 PII 值进行采样来创建新的合成句子。
此外,它还会对数据进行分词,为新创建的样本创建标签(IO/BIO/BILUO)和跨度 (spans)。
- 有关数据生成/增强的信息,请参阅数据生成器 [README](presidio_evaluator/data_generator/README.md)。
- 有关运行生成过程的示例,请参阅[this notebook](notebooks/1_Generate_data.ipynb)。
- 要了解所使用的基础虚假 PII 数据,请参阅此[探索性数据分析 notebook](notebooks/2_PII_EDA.ipynb)。
数据生成后,可以将其拆分为训练/测试/验证集,
同时确保每个模板仅存在于一个集中。
有关更多详细信息,请参阅[this notebook](notebooks/3_Split_by_pattern_number.ipynb)。
## 2. 数据表示
为了标准化流程,
我们使用特定的数据对象来保存生成、
分析、建模和评估数据及模型所需的所有信息。具体而言,
请参阅 [data_objects.py](presidio_evaluator/data_objects.py)。
标准化结构 `List[InputSample]` 可以转换为不同的格式:
- CoNLL
- 转换为 CoNLL:
from presidio_evaluator import InputSample
dataset = InputSample.read_dataset_json("data/synth_dataset_v2.json")
conll = InputSample.create_conll_dataset(dataset)
conll.to_csv("dataset.csv", sep="\t")
- 从 CoNLL 转换
from pathlib import Path
from presidio_evaluator.dataset_formatters import CONLL2003Formatter
# 从包含 ConLL2003 文件的文件夹中读取
conll_formatter = CONLL2003Formatter(files_path=Path("data/conll2003").resolve())
train_samples = conll_formatter.to_input_samples(fold="train")
- spaCy v3
from presidio_evaluator import InputSample
dataset = InputSample.read_dataset_json("data/synth_dataset_v2.json")
InputSample.create_spacy_dataset(dataset, output_path="dataset.spacy")
- json
from presidio_evaluator import InputSample
dataset = InputSample.read_dataset_json("data/synth_dataset_v2.json")
InputSample.to_json(dataset, output_file="dataset_json")
## 3. PII 模型评估
presidio-evaluator 框架允许您评估 Presidio 作为一个系统、一个 NER 模型或特定的 PII 识别器的精确率、召回率和进行误差分析。有关示例,请参阅 [Notebook 5](notebooks/5_Evaluate_Custom_Presidio_Analyzer.ipynb)。
## 更多信息
- [关于 PII 评估的博客文章](https://omri-mendels.medium.com/evaluating-pii-detection-models-fa0c745d7a4c)
- [关于数据匿名化 NLP 方法的博客文章](https://towardsdatascience.com/nlp-approaches-to-data-anonymization-1fb5bde6b929)
- [如何使用 Presidio Evaluator 评估 PII 检测输出](https://tranguyen221.medium.com/how-to-evaluate-pii-detection-output-with-presidio-evaluator-3f2684ba3091)
- [关于利用 Presidio 和使用 NLP 方法进行数据匿名化的会议演讲](https://youtu.be/Tl773LANRwY)
标签:NoSQL, PII检测, Presidio, 数据生成, 数据科学, 数据脱敏, 模型评估, 资源验证, 逆向工具