【数据保护】数据匿名的自定义NLP方法

news2024/12/24 8:27:26

自我介绍

  • 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师酒馆】和【开发者开聊】,有更多的内容分享,谢谢大家收藏。
  • 企业架构师需要比较广泛的知识面,了解一个企业的整体的业务,应用,技术,数据,治理和合规。之前4年主要负责企业整体的技术规划,标准的建立和项目治理。最近一年主要负责数据,涉及到数据平台,数据战略,数据分析,数据建模,数据治理,还涉及到数据主权,隐私保护和数据经济。 因为需要,比如数据资源入财务报表,另外数据如何估值和货币化需要财务和金融方面的知识,最近在学习财务,金融和法律。打算先备考CPA,然后CFA,如果可能也想学习法律,备战律考。
  • 欢迎爱学习的同学朋友关注,也欢迎大家交流。微信小号【ca_cea】

消除真实世界私人数据识别的实用方法

随着互联网服务的普及,人们对互联网隐私的渴望不断增长。近年来,诸如GDPR等不同的法律开始发挥作用,这些法律规范了服务收集私人信息的方式。这引起了每家公司对隐私方面的关注,并增加了对处理和匿名私人数据的投资。

我在微软商业软件工程(CSE)团队的工作是与微软最具战略意义的客户合作。我们共同开发人工智能、大规模数据、物联网等领域的新工作负载。在与这些客户接触的同时,我们意识到,PII(个人身份信息)问题是许多希望在本地或云中扩展其解决方案集的公司反复出现的话题和障碍。

因此,我们决定为任何希望解决数据隐私问题的人创建Presidio,这是一项免费的生产准备开源服务。

Presidio允许任何用户在结构化和非结构化数据上创建标准和透明的匿名PII实体流程。为此,它公开了一组预定义的PII识别器(用于名称、信用卡号和电话号码等常见实体),以及用新逻辑扩展它的工具,以识别更具体的PII实体。在这篇博客文章中,我们将重点讨论如何利用自然语言处理来识别不同类型的私人实体。

PII检测过程

Presidio利用一组识别器,每个识别器都能够检测一种或多种语言的一个或多个PII实体。该过程如图1所示,通常由8个不同的步骤组成:

  1. 从用户处获取匿名化请求
  2. 将请求传递给Presidio Analyzer以识别PII实体
  3. 提取NLP特征(引理、命名实体、关键词、词性等),供各种识别器使用
  4. 获取所有PII识别器(预定义的+来自识别器存储服务的自定义)
  5. 运行所有识别器
  6. 汇总结果
  7. 传递给Presidio匿名者进行身份验证
  8. 将取消标识的文本返回给呼叫者

data privacy

Figure 1 — Animation of the identification process in Presidio

图2中的以下动画说明了一个特定示例中的相同过程。请注意,当我们将上下文从“电话号码”更改为“池卡号”时,电话号码识别器的可信度会降低。这是Presidio演示的屏幕截图。看看吧。

Figure 2 — Example input and output

用于数据匿名化的NLP

PII识别器需要检测自由文本中不同类型的实体。对于这样的任务,人们想到了不同的NLP方法:

  • 对于共享模式的实体,我们可以利用正则表达式、验证(例如校验和)和周围单词的上下文。例如,该逻辑可以用于检测信用卡号码或电话号码。
  • 对于有限的选项列表,我们可以使用黑名单。它可以是静态黑名单(例如所有标题:先生、女士、小姐、博士、教授…),也可以是动态黑名单(即连接到数据库并查询所有可能的选项)。
  • 对于可以使用特定逻辑识别的实体,我们可以编写基于规则的识别器。
  • 对于需要自然语言理解输入的实体,我们可以训练机器学习模型,特别是命名实体识别(NER),或者使用预先训练的模型。

在下一节中,我们将重点介绍我们围绕提高人名、地点和组织的命名实体识别率所做的工作。

人名、地点和组织的NER

为了提高我们对这三个实体的检测率,我们对不同的模型进行了实验。以下部分介绍了使用的数据集、评估的不同模型和结果。运行此过程的代码可以在我们的GitHub repo上找到,以供研究。

数据集集合

虽然有一些标记的数据集可用,但我们希望增加名称、组织和位置的覆盖范围。因此,我们从一个标记的数据集(例如,OntoNotes或CoNLL-2003)开始,并对其进行处理以提取模板。这些例子后来被用来生成新的句子,与原始数据集相比,这些句子具有更广泛的实体值(名称、组织和位置)。

例如,从“谢谢你,乔治!”这句话中,乔治被手动标记为人,我们提取了以下模板:“谢谢你[人]!”。图3提供了一个附加示例:

Figure 3 — Data augmentation example

Figure 3 — Data augmentation example

我们使用了一个伪造的PII数据集和多个伪造的PI生成器来对实体进行采样并创建新的句子。这些句子在生成过程中被自动标记,因此训练新的NER模型很容易适用。

然而,这个过程需要我们对数据集进行一些预处理,并为不同的问题提出创造性的解决方案。举几个例子:

  1. 如何看待国家与国籍?在许多情况下,“地点”实体指的是一个民族(或民族男子或民族妇女)。例如,在“萨尔瓦多[LOC]拳击手赢得了世界冠军”这句话中,我们不能用“埃塞俄比亚”代替“萨尔瓦多”,因为这会使这句话不正确。因此,我们为国家、民族、民族男人和民族女人创造了新的中间实体。
  2. 应该如何处理性别问题?有些句子最初是关于男性或女性的,但在数据生成过程中,我们可能会用异性的名字代替一个名字。
  3. 现实生活中的知识是否重要?如果原话描述的是两个国家之间的冲突,我们是否应该用任意的国名取代这些国家?
  4. 数据集中的一些人名是一个机构或组织的名称,如“艾伦人工智能研究所”或“特朗普政府”。在这种情况下,我们是否应该用一个任意的名字来取代“特朗普”?

从8000个独特的模板中,我们提取了80000个不同的标记句子。我们还获得了比前一个更干净的数据集,因为在这个过程中处理了许多未标记的实体。新数据集被拆分为训练/测试/验证集,来自同一模板的样本没有出现在多个集中。此外,我们将10%的样本设为小写,因为这通常表示部署模型时可能遇到的小写文本的比例。据我们所知,这是迄今为止最大的PII数据集。

模型

对不同的建模方法进行了评估。具体来说,我们研究了条件随机场、基于spaCy的模型和基于Flair的模型。

spaCy:

spaCy是一个用于标记化、词性标记、实体提取、文本分类等的生产级NLP库。它包含一个卷积神经网络模型,被认为是最快的深度学习NLP模型。虽然其他模型在公共数据集上具有更高的准确性,但它们可能需要更长的训练和推理时间。spaCy还提供了快速标记化和引理化,用于Presidio中的上下文分析模块。我们评估了spaCy的不同风格:首先,我们查看了预训练的spaCy模型(2.1.0和2.2.0)的结果,然后,我们查看微调预训练的spaCy模型,最后,在利用预训练的单词嵌入(FastText)的同时从头开始训练spaCy模型。

Flair:

Flair是一个深度学习NLP工具包,在公共数据集上取得了有希望的结果。它建立在PyTorch之上,同时具有特殊的嵌入技术(称为Flair嵌入)和预测模型。此外,它提供了与其他嵌入模型(如BERT、ELMo)的简单集成,以及来自不同模型和源的嵌入的堆叠。我们评估了两种不同的基于Flair的模型:一种是带有BERT嵌入的Flair模型,另一种是具有Flair嵌入和GloVe嵌入堆叠的Flair模式。

条件随机场(CRF):

CRF是一类用于序列标记的方法。这些具有鉴别力的图形模型学习预测之间的相关性,自然适合命名实体识别任务。在引入递归和卷积神经网络之前,CRF在公共数据集上的NER任务上实现了最先进的性能。它们在训练和预测方面比基于神经网络的模型快得多,并且提供了相对可解释的结果。我们使用sklearn-crfsuite-Python包,使用L-BGFS优化仅评估了香草CRF模型。

最后,以下是我们试验的模型:

  1. 使用默认的预训练模型进行评估:
    1. spaCy 2.1.0
    2. spaCy 2.2.0(对小写实体有更好的支持)
  2. 从头开始训练:
    1. 条件随机场
  3. 使用预训练的嵌入进行训练:
    1. 带有FastText嵌入的spaCy
    2. 嵌入BERT的Flair
    3. 带有GloVe和Flair嵌入的Flair
  4. 对现有的训练模型进行微调:
    1. spaCy版本2.2.0

度量标准

我们关注PII/no-PII二元决策的F2(回忆比准确性更重要)。我们还研究了特定的类F2和计算性能。最后,可解释性是一个需要考虑的额外因素。

结果

如图4所示,所有模型都取得了不错的结果,但基于Flair的模型更出色。

Figure 4 — F2 results on various models and entities

从这些结果中得出的一些见解:

  • 基于Flair的模型比基于spaCy的模型取得了更高的结果,后者在所有实体上取得了比CRF更高的成果。
  • 我们可以看到,spaCy 2.2.0提供了比预期的2.1.0更好的结果,但数量不多。
  • spaCy和CRF模型在组织实体方面遇到了困难,组织实体经常与人名混淆。Flair模型在组织上获得了更高的结果,这可能暗示过度拟合为组织生成的假PII实体。
  • 训练spaCy模型或对其进行微调都无法提高模型的F2分数。这可能是由于训练集的性质,该训练集源自spaCy最初训练的同一数据集(OntoNotes)。其他数据来源可能会从这些模型的微调或训练中受益。

计算性能

尽管Flair模型获得了更高的F2分数,但它们的训练和预测也要慢得多。表1显示了使用所评估的各种方法的近似训练和推理时间。分析是在一台GPU机器上进行的[1]。

Table 1 — Inference and training time for the different models

[1] Azure上的NC6实例:6 vCPU,56GiB内存,一半NVIDIA特斯拉K80,GPU内存12GiB

结论

在这项工作中,我们评估了各种模型,以便在Presidio中获得更好的检测率。我们考虑了检测率和计算性能之间的权衡,这在许多用例中是至关重要的。对于我们评估的数据集,我们发现没有实际的理由来取代我们在Presidio中使用的当前spaCy模型。然而,可以将数据扩充框架和评估的不同模型应用于新数据,并针对更特定领域的数据集定制Presidio。我们还看到,通过使用CRF模型而不是spaCy,我们可以潜在地改善Presidio的运行时间。如果性能不是问题,例如对于离线作业,我们应该考虑使用基于Flair的方法,可能使用Flair嵌入+GloVe,以提高Presidio中的检测率。

Presidio是完全开源的,免费提供给任何希望解决数据隐私问题的人。我们也欢迎贡献者、拉取请求或任何形式的反馈。单击此处开始。

本文:【数据保护】数据匿名的自定义NLP方法 | 开发者开聊

欢迎收藏  【全球IT瞭望】,【架构师酒馆】和【开发者开聊】.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1333465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android画布Canvas裁剪clipRect,Kotlin

Android画布Canvas裁剪clipRect,Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.A…

【C++11/17】std::map高效插入

我们在使用stl的映射容器std::map时,经常需要向容器中插入数据。由于map的元素key值是唯一的,我们经常遇到这样的场景: 向map中插入元素时,指定的key已经存在则直接更新;指定的key不存在,然后才做插入操作…

四色问题(图论)python

四色问题是一种著名的图论问题,它要求在给定的地图上给每个区域着一种颜色,使得相邻的区域颜色不同,而只使用四种颜色。这个问题可以通过图的着色来解决,其中图的节点表示区域,边表示相邻的关系。 在 Python 中&#…

服装店管理系统打造门店拓客、促活、存留营销方案

打造门店拓客、促活和存留营销方案对于服装店的管理系统来说是非常重要的。以下是一些可行的方案: 1. 会员管理系统:引入会员管理功能,建立会员档案,跟踪会员消费记录和偏好。通过会员系统,可以实施积分制度、生日礼品…

Kioptrix-2

环境搭建 这个靶场环境稍微有点麻烦,首次打开的时候,需要将靶机从VM中移除(注意是 从VM里面移除),然后利用nodpad等工具打开vmx文件,然后两步: 所有以“ethernet0”开头的条目并保存更改。然后…

DBAPI如何进行API请求参数校验

DBAPI如何进行API请求参数校验 实操 案例1- 校验参数字符串长度不能大于4 在参数校验项目点击新增参数校验规则 在校验脚本填写JavaScript脚本内容&#xff0c;就写js代码name.length < 5&#xff0c;然后失败提示信息填上相应的内容&#xff0c;当这个参数校验规则执行不…

GPT每预测一个token就要调用一次模型

问题&#xff1a;下图调用了多少次模型&#xff1f; 不久以前我以为是调用一次 通过看代码是输出多少个token就调用多少次&#xff0c;如图所示&#xff1a; 我理解为分类模型 预测下一个token可以理解为分类模型&#xff0c;类别是vocab的所有token&#xff0c;每一次调用都…

【K8S in Action】服务:让客户端发现pod 并与之通信(2)

一 通过Ingress暴露服务 Ingress (名词&#xff09; 一一进入或进入的行为&#xff1b;进入的权利&#xff1b;进入的手段或地点&#xff1b;入口。一个重要的原因是每个 LoadBalancer 服务都需要自己的负载均衡器&#xff0c; 以及 独有的公有 IP 地址&#xff0c; 而 Ingres…

网络传输介质简介

通信网络除了包含通信设备本身之外&#xff0c;还包含连接这些设备的传输介质&#xff0c;如同轴电缆、双绞线和光纤等。不同的传输介质具有不同的特性&#xff0c;这些特性直接影响到通信的诸多方面&#xff0c;如线路编码方式、传输速度和传输距离等。 简单网络 两个终端&am…

2005年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天距离2024年的AMC8美国数学竞赛举办已不足一个月了&#xff0c;赶紧利用周末的时间刷刷真题&#xff0c;查漏补缺吧&#xff01;如果您有任何关于AMC8比赛的任何问题都可以问我&#xff0c;关于题目的解析也可以交流。 今天我们来看看2005年AMC8竞赛的五道典型考题。欢迎您查…

深入理解依赖反转原则(DIP)

依赖反转原则是一个比较重要的架构原则&#xff0c;从定义上看是要依赖于抽象&#xff0c;不要依赖于细节&#xff0c; 这个听起来很简单&#xff0c;好像加个接口就完事了&#xff0c;大家的service都是一个接口配一个实现类&#xff0c;是不是依赖倒置呢&#xff1f;很显然不…

如何给打印机墨盒加墨

今天打印东西突然遇到问题了&#xff0c;显示墨盒黑色没墨了&#xff0c;网上一搜&#xff0c;整套的墨盒大几十&#xff0c;随手换了一个关键词 墨盒墨水 这下不到十块钱解决&#xff0c;正好锻炼下自己的动手能力&#xff08;其实就是穷嘛。。。&#xff09; 接下来就分享下动…

鸿蒙开发语言介绍--ArkTS

1.编程语言介绍 ArkTS是HarmonyOS主力应用开发语言。它在TypeScript (简称TS)的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 2.TypeScript简介 自行补充TypeScript知识吧。h…

MATLAB ga函数的使用方法

一、ga句法结构 x ga(fitnessfcn,nvars) x ga(fitnessfcn,nvars,A,b) x ga(fitnessfcn,nvars,A,b,Aeq,beq) x ga(fitnessfcn,nvars,A,b,Aeq,beg,IB,UB) x ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon) x ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options) x …

7B蓝屏INACCESSABLE BOOT DEVICE

在p2v的开发阶段&#xff0c;经常出现这个蓝屏&#xff0c;常见的原因有&#xff1a; 1. 分区表错误 潜在原因&#xff1a;p2v的qemu-img resize --shrink砍减qcow2空间时&#xff0c;实际是对磁盘尾部直接砍减&#xff0c;会使得分区表在尾部的数据丢失。 修复方法&#xf…

Socket地址

socket地址其实是一个结构体&#xff0c;封装端口号和IP等信息 。后面的 socket 相关的 api 中需要使用到这个socket地址。 客户端 -> 服务器需要知道服务器的&#xff08; IP, Port &#xff09; 一、通用 socket 地址 socket 网络编程接口中表示 socket 地址的是结构体…

【C语言刷题每日一题#牛客网BC68】——X形图案

问题描述 思路分析 首先根据输入的描述&#xff0c;多组输入需要将scanf放在循环中来实现 #include<stdio.h> int main() {int a 0;while (scanf("%d", &a) ! EOF){} } 完成了输入之后&#xff0c;再来分析输出——输出的是一个由“*”组成的对称的X形…

力扣算法-Day10

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 示例 1&#xff1a; 输入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,6,1,8,4,5], skipA 2, s…

SuperMap Hi-Fi 3D SDK for Unity矢量面贴地贴模型

作者&#xff1a;kele 一、背景 SuperMap Hi-Fi 3D SDK&#xff08;2023 11i&#xff09; for Unity推出新功能&#xff1a;支持矢量面同时贴地形图层和模型图层&#xff0c;并且能实现数据点击查询属性、更改初始填充颜色、初始边框线颜色、选中填充颜色、选中边框线颜色、控…

电子科大软件系统架构设计——软件建模详细设计

文章目录 软件建模详细设计概述软件建模详细设计目标软件建模详细设计原则开闭原则里氏 (Liskov) 替换原则依赖倒置原则接口分离原则单一职责原则最少知识原则&#xff08;迪米特法则&#xff09;高内聚原则松耦合原则可重用原则 软件建模详细设计内容 UML 软件静态结构视图建模…