当前位置: 首页 > news >正文

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍

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

Python中隐私过滤器的实现,该过滤器通过命名实体识别(NER)删除个人身份信息(PII)

这是我上一篇关于从文本中删除个人信息的文章的后续内容。

GDPR是欧盟制定的《通用数据保护条例》。其目的是保护所有欧洲居民的数据。保护数据也是开发人员的内在价值。通过控制对列和行的访问,保护行/列数据结构中的数据相对容易。但是免费文本呢?

在我上一篇文章中,我描述了一个基于正则表达式用法和禁止词列表的解决方案。在本文中,我们添加了一个基于命名实体识别(NER)的实现。完整的实现可以在github PrivacyFilter项目中找到。

什么是命名实体识别?

根据维基百科,NER是:

命名实体识别(NER)(也称为(命名)实体识别、实体分块和实体提取)是信息提取的一个子任务,旨在定位非结构化文本中提到的命名实体,并将其分类为预定义的类别,如人名、组织、位置、医疗代码、时间表达式、数量、货币值、百分比等。

因此,这一切都是关于寻找和识别文本中的实体。一个实体可以是一个单词或一系列连续的单词。实体被分类到预定义的类别中。例如,在下面的句子中,发现了三个实体:实体人“Sebastian Thrun”、实体组织“Google”和实体日期“2007”。

NLP

Example entity recognition (source: Spacy.io)

NER是自然语言处理(NLP)人工智能领域的一个子集。该领域包含处理和分析自然语言的算法。当NER能够用自然语言识别实体时,如果是个人、组织、日期或地点等与隐私相关的实体,则可以从文本中删除这些实体。

使用NER过滤PII

首先,我们需要一个NLP处理包。NLP包是按语言训练的,因为所有语言都有自己的语法。我们正在与达奇合作,所以我们需要一个了解这一点的人。我们将使用Spacy作为我们的隐私过滤器。

在Spacy网站上可以找到一个帮助安装Spacy的工具。在选择Python环境和语言后,它会给出相应的命令来安装Spacy:

NLP

Spacy install tool (source: Spacy.io)

所选管道(效率或精度)决定了NER模型相对于尺寸和速度的精度。选择“效率”会产生更小、更快的模型,但与“精度”相比精度更低。这取决于您的用例哪个模型更合适。为了发展,我们选择使用效率模型。进行第一次净入学率分析:

import spacy
nlp = spacy.load("nl_core_news_sm")
doc = nlp("Geert werkt sinds 2010 voor HAL.")
for token in doc:print(token.text, token.pos_, token.ent_type_)'''
Output:
Geert PROPN PERSON
werkt VERB 
sinds ADP 
2010 NUM DATE
voor ADP 
HAL PROPN ORG
. PUNCT 
'''

在第2行导入Spacy包之后,将使用Spacy.load()方法加载模型。在这种情况下,加载了Dutch的有效模型。模型由其名称指定,该名称与上一步中用于下载模型的名称相同。要切换到准确的荷兰语模型,请将“nl_core_news_sm”替换为“nl_core _news_lg”。对于上面的示例,这将产生相同的输出。

快速、简单的性能测试表明,加载小型模型大约需要2.0秒,加载大型模型大约需要4.5秒。分析一个句子需要5.5毫秒,而不是6.0毫秒。大型号似乎需要大约500 MB的额外内存。

词性(POS)标签的含义可以在这个网站上找到。例如,它们是:

Geert PROPN PERSON     Proper noun, person
werkt VERB             Verb
sinds ADP              Adposition, case marking
2010  NUM DATE         Numeral, date
voor  ADB              Adposition
HAL   PROPN ORG        Proper noun, organisation
.     PUNCT            Punctuation

对于过滤PII,我们对POS类型NUM和PROPN感兴趣。我们将用描述其实体类型的标签来替换POS文本元素。

import spacystring = "Geert werkt sinds 2010 voor HAL."
print(string)
nlp = spacy.load("nl_core_news_sm")
doc = nlp(string)filtered_string = ""
for token in doc:if token.pos_ in ['PROPN', 'NOUN', 'NUM']:new_token = " <{}>".format(token.ent_type_)elif token.pos_ == "PUNCT":new_token = token.textelse:new_token = " {}".format(token.text)filtered_string += new_token
filtered_string = filtered_string[1:]
print(filtered_string)'''
Output:
Geert werkt sinds 2010 voor HAL.
<PERSON> werkt sinds <NUMBER> voor <ORG>.
'''

代码的第一部分加载语言模型,并将输入字符串解析为令牌列表(doc)。第8-16行中的循环通过迭代文档中的所有标记来构建过滤后的文本。如果令牌的类型为PROPN、NOUN或NUMBER,则会用标记<…>替换,其中标记等于Spacy识别的实体类型。所有令牌都通过前缀空间连接到新字符串。前缀是必需的,因为标记化字符串已经删除了这些前缀。如果是标点符号,则不添加前缀空格(第12-13行)。

在循环之后,由于第11行或第13行的原因,新字符串的第一个字符是一个空格,因此我们需要删除这个空格(第17行)。这导致字符串中没有隐私信息。

它有多好?

在上一篇文章中,我们已经建立了一个基于禁止词列表的隐私过滤器。与NER相比,该学徒需要更多的代码和精力。但它们的比较如何?

  • NER要求语法正确的句子。在这种情况下,即使姓名拼写错误,也可以很好地替换隐私信息。NER优于禁言表。
  • 无论上下文如何,禁词过滤器都会替换禁词。尤其是街道名称和城市名称的列表会导致大量不必要的删除词。例如,植物名称、动物或城堡等项目等单词作为街道名称很常见,将从文本中删除。这可能会删除许多不必要的单词,从而降低生成文本的可用性。NER的表现会更好。
  • 如果文本在语法上不正确(例如,“你叫什么名字?”问题的答案“Peter”将不会被NER过滤为正确。这些句子在聊天信息和对话记录中很常见。在这些情况下,NER方法将失败,因为NER算法无法用一个或几个词来确定这些答案的性质。

因此,这完全取决于您的用例和所需的过滤级别。该组合确定最佳方法是使用禁止列表版本、NER版本还是甚至两者的组合。后者将结合这两种方法的优点(但也有部分缺点)。要找到最佳方法,请使用数据的子集来筛选和测试不同的算法和/或组合,以找到最适合的算法。

将NER与禁止词列表(FWL)进行比较的一些示例:

INPUT: Geert werkt sinds 2010 voor HAL.
NER  : <FILTERED> werkt sinds <FILTERED> voor <FILTERED>.
FWL  : <FILTERED> werkt sinds <FILTERED> voor HAL.
INPUT: Heert werkt sinds 2010 voor HAL.
NER  : <FILTERED> werkt sinds <FILTERED> voor <FILTERED>.
FWL  : Heert werkt sinds <FILTERED> voor HAL.
INPUT: Wat is je naam? Geert.
NER  : Wat is je naam? Geert.
FWL  : Wat is je naam? FILTERED.
INPUT: Geert kijkt naar de duiven op het dak.
NER  : <FILTERED> kijkt naar de duiven op het dak.
FWL  : <FILTERED> kijkt naar de <FILTERED> op het dak.

(为了便于比较,所有标签(如<PERSON>)都替换为通用标签<FILTERED>)

  • 第一个示例显示tat FWL无法删除公司名称,因为它没有公司名称列表。NER算法在句子上确定了“HAL”是一个名词,更具体地说是一个组织。
  • 第二个例子表明,NER可以处理名称中的类型错误,因为它查看句子的结构,而FWL不将“Heert”识别为名称。名称列表只包含拼写正确的版本。
  • 第三个例子表明,NER需要语法正确的句子来识别“Geert”这个名字。这可能是一次谈话的记录,也可能是聊天中的互动。它展示了NER如何在书面语言方面表现良好,但在理解口语方面存在困难。
  • 在最后一个例子中,FWL删除了“duiven”一词,因为它不仅描述了动物(duiven在荷兰语中是鸽子的意思),而且还是一个城市的名字。

privacy filter code on Github 包含这两种方法,在初始化过程中可以选择NER方法或FWL方法。我们在本文中没有涉及正则表达式,但选择NER方法也会执行正则表达式(NER无法识别和替换URL等)。它还包含了一些使用和过滤的示例文本,以了解两种方法在现实生活中的美国案例中的差异。

最后一句话

本文和前一篇文章描述了删除文本中个人信息的两种方法。这两种方法都有其优点和缺点,不可能为所有用例选择一种方法。删除更多的隐私信息也会导致删除更多的非隐私信息,从而降低过滤文本的价值。NER在删除已识别的隐私信息方面更准确,但需要格式良好的句子才能操作。为了最大限度地提高安全性,甚至可以将这两种方法结合起来。请随意在Github上尝试实现。

我希望你喜欢这篇文章。想要获得更多灵感,请查看我的其他文章

本文:【自然语言处理】用Python从文本中删除个人信息-第二部分 | 开发者开聊

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

相关文章:

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…...

设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景

系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式&#xff0c;5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式&#xff0c;每一种模式的概念、使用…...

12.25

led.c #include "led.h" void all_led_init() {RCC_GPIO | (0X3<<4);//时钟使能GPIOE_MODER &(~(0X3<<20));//设置PE10输出GPIOE_MODER | (0X1<<20);//设置PE10为推挽输出GPIOE_OTYPER &(~(0x1<<10));//PE10为低速输出GPIOE_OSPEED…...

MySQL5.7的几种安装方式总结(排错踩坑呕心沥血的经历)

包安装 添加国内源&#xff1a;mysql | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 注意&#xff1a;5.7安装之后有一个临时密码&#xff0c;进行登录并修改新密码后才可以对mysql进行操作。 可以yun list看看各个系统光盘自带的都是什么版本&…...

zookeeper基本使用

目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…...

【华为机试】2023年真题B卷(python)-分月饼

一、题目 题目描述&#xff1a; 中秋节公司分月饼&#xff0c;m个员工&#xff0c;买了n个月饼&#xff0c;m<n&#xff0c;每个员工至少分1个月饼&#xff0c;但可以分多个&#xff0c;单人份到最多月饼的个数为Max1&#xff0c;单人分到第二多月饼的个数是Max2&#xff0c…...

EtherCAT主站SOEM -- 11 -- EtherCAT从站 XML 文件解析

EtherCAT主站SOEM -- 11 -- EtherCAT从站 XML 文件解析 1 EtherCAT 从站信息规范1.1 XML 文件说明1.1.1 XML 数据类型1.1.2 EtherCATInfo1.1.3 Groups1.1.4 Devices1.1.5 Modules1.1.6 Types1.1.6.1 AccessType 的组成1.1.6.2 ArraylnfoType 的组成1.1.6.3 DeviceType 的组成1.…...

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…...

centos系统部署rancher1.6版本并部署服务

1. centos上部署docker. 请参考 博客 2. 用docker安装rancher1.6 sudo docker run -d -v /mnt/rancher/db:/var/lib/mysql --restartunless-stopped -p 8080:8080 rancher/server3.浏览器登录做设置 3.1 浏览器打开 1.117.92.32:8080 #直接就登录了 3.2 第一次进入&am…...

Matlab实时读取串口数据并实时画图方法

** Matlab实时读取串口数据并实时画图方法 ** 按照数据串口协议如&#xff1a;$KT2,1.80,88.18,39.54,42.86,LO[0.72,-1.04,0.35]&#xff0c;举例。 s serialport("COM12",115200,"Timeout",5); poszeros(100000,3); j1; data1 read(s,1,"uint8&…...

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…...

SpringBoot - Maven 打包合并一个胖 JAR 以及主项目 JAR 依赖 JAR 分离打包解决方案

问题描述 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.18.RELEASE</version><configuration><!--<classifier>exec</classifier>--…...

react 18 Hooks扩展函数式组件的状态管理

React函数式组件 特点 React函数式组件具有以下特点&#xff1a; 简洁&#xff1a;使用函数的方式定义组件&#xff0c;语法简单直观。无状态&#xff1a;函数式组件没有内部状态&#xff08;state&#xff09;&#xff0c;只依赖于传入的props。可复用&#xff1a;函数式组…...

智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.浣熊算法4.实验参数设定5.算法结果6.参考文献7.MA…...

c++ qt QtWidgetsApplication 项目 使用外部ui

1 包含生成的UI头文件&#xff1a; 例如&#xff0c;如果你的Qt Designer的.ui文件名为test.ui&#xff0c;那么生成的头文件通常为ui_test.h。 #include "ui_test.h"2 实例化UI类&#xff1a;.h文件中实例化ui 在你的主要类的头文件中&#xff0c;你通常会声明一个U…...

使用React 18、Echarts和MUI实现温度计

关键词 React 18 Echarts和MUI 前言 在本文中&#xff0c;我们将结合使用React 18、Echarts和MUI&#xff08;Material-UI&#xff09;库&#xff0c;展示如何实现一个交互性的温度计。我们将使用Echarts绘制温度计的外观&#xff0c;并使用MUI创建一个漂亮的用户界面。 本文…...

使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

1、通用的业务编码规则的管理功能 在前面随笔我们介绍了一个通用的业务编码规则的管理功能&#xff0c;通过代码生成工具Database2Sharp一步步的生成相关的后端和Winform、WPF的界面&#xff0c;进行了整合&#xff0c;通过利用代码生成工具Database2sharp生成节省了常规功能的…...

Android 13 - Media框架(26)- OMXNodeInstance(三)

上一节我们了解了OMXNodeInstance中的端口定义&#xff0c;这一节我们一起来学习ACodec、OMXNode、OMX 组件使用的 buffer 到底是怎么分配出来的&#xff0c;以及如何关联起来的。&#xff08;我们只会去了解 graphic buffer的创建、input bytebuffer的创建、secure buffer的创…...

力扣题目学习笔记(OC + Swift)21. 合并两个有序链表

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 链表解题经典三把斧&#xff1a; 哑巴节点栈快慢指针 此题比较容易想到的解法是迭代法&#xff0c;生成哑巴节点&#xff0c;然后迭代生成后续节点。…...

C# WPF上位机开发(windows pad上的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面&#xff0c;但是windows平台不仅仅是电脑…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...