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, 数据生成, 数据科学, 数据脱敏, 模型评估, 资源验证, 逆向工具