用姓名字段统计人数_基于 Wide amp; Deep 网络和 TextCNN 的敏感字段识别

baa048a2a32d450ff32b3ee9bfc471b1.png

数据治理 (Data Governance) [1]作为一种数据管理的重要一环,主要目的在于保证数据在整个生命周期内的高质量性。数据治理的核心包括:数据的可用性 (Availability),易用性 (Usability),一致性 (Consistency),完整性 (Integrity) 和安全性 (Security)。数据的安全性作为关键的一项,旨在保护数据中敏感和隐私数据,因此对于数据中敏感和隐私信息的识别至关重要。利用机器学习算法对敏感字段识别不仅能够提高识别的准确率,同时也能极大的提高识别的效率,从而帮助数据仓库运营人员高效地完成敏感数据的存储策略制定和数据落库。

本文实现了一种基于 Wide & Deep 网络和 TextCNN 的敏感字段识别算法,主要探究:

  • 数据探索性分析
  • Wide & Deep 网络和 TextCNN
  • 敏感字段识别模型

数据探索性分析

首先,我们对接入整个数据仓库贴源层中的所有表所有字段的敏感类型 (也就是模型的目标变量Y)进行了统计,其中敏感类型的字段占全部字段 2% 左右,主要的敏感信息类型包括:姓名,身份证号,手机号,固定电话号,银行卡号,邮箱等。可以看出这一个样本极度不均衡的问题。

其次,我们对于所能获取到的用于判断一个字段敏感类型的信息 (也就是模型的自变量X)统计如下:

a381f2375bfc36a7f56f7b8bb24933f4.png

对于上表中的原始特征,通过统计分析确定相应的数据预处理方法和参数,从而衍生出更多的特征。例如,对于数据库名称 (db_name),我们衍生出数据库名称长度 (db_name_len)特征,并对其在是否为敏感字段上的分布统计如下:

14be07e44ae577878c6fb698b9a0be90.png

从上图中不难看出,数据库名称长度对于字段是否为敏感具有一定的区分性。从字段类型 (column_type) 角度分析,不同字段类型的敏感和非敏感字段占比如下:

c504ef1303264f4821b8e3d2cb1c5fff.png

最终,通过数据预处理,特征衍生等多种手段得到模型最终的输入特征。

Wide&Deep网络和TextCNN

Wide & Deep 网络是由 Google 提出的一种用于推荐系统的深度神经网络模型 [2]。整个网络框架如下图所示:

00d4b98d3dbe48683a952700a1a04611.png

模型 Wide Models 部分的输入为数值型和利用 One-Hot 编码的分类型特征,Deep Models 部分通过学习得到了分类特征的Embedding 编码。对两部分进行合并得到最终的 Wide & Deep 网络,模型预测的条件概率为:

6ac0a17f2e17d206c9678a65530e0a04.png

TextCNN是由 Kim 等人提出的一种利用卷积神经网络对文本进行分类的深度神经网络模型[3]。整个网络框架如下图所示:

b7dddc907d712918ee37e4d0ce2cf1b9.png

敏感字段识别问题的输入中包含了大量的文本特征,因此可以采用 TextCNN 网络进行处理。

敏感字段识别模型

对于敏感字段识别问题,从问题和数据的特点出发,对原始的 Wide & Deep 模型和 TextCNN 做出了如下改进:

Wide&Deep网络改进

原始 Wide & Deep 网络的深度模型的输入均为分类型特征,但在敏感字段识别问题还存在大量的文本特征。考虑到 CNN 在文本分类上具有较好的效果,因此对于文本特征在通过 Embedding 层后利用 CNN 网络对其进行处理,其它的分类型特征在通过 Embedding 层后仍使用全连接网络进行处理。改进后的网络框架如下图所示:

dce75f135ce0fc0687308550d2bd0eef.png

原始的 TextCNN 解决的是英文文本的分类问题,对于敏感字段识别问题,文本特征中存在大量的汉语信息。不同于英文,汉语没有天然的分隔符,传统的做法是采用分词技术对汉语文本进行预处理。但是这样模型的效果就会受制于分词效果的好坏,同时计算效率也会有一定的下降,因此我们选择不分词,直接采用字向量处理文本。

同时需要注意的是 CNN 会隐含地利用到文本的位置信息,因此对于不同的文本特征组合成一个定长的文本时,需先对每个文本特征进行截取和补全,再将其进行拼接得到最终的定长文本。改进后的网络框架如下图所示:

dbb9743f17e5e004972f749bbcaee0e9.png

模型训练

在数据探索性分析阶段,我们指出了数据的不平衡性。因此在处理数据不平衡问题时可以采用如下两个方法:

  1. 数据的过采样和欠采样。即对较少类型的数据多采样一些,或者对于较多类型的数据少采样一些。
  2. 代价敏感学习。即在损失函数中赋予较少类型的样本更大的损失值,增加其在一批数据中的重要程度。

对于训练数据的生成,由于字段数量是有限的,但字段内容值 (column_value) 是大量的。因此我们以一个不为空的字段内容值搭配其他特征为一个训练样本。数据的划分采用常用的模式:训练集测试集划分 7:3,训练集内部训练集验证集划分 8:2。

模型训练的超参数采用常用的模式:

  • Wide 部分 Dropout 比例:0.5
  • Deep 部分 Dropout 比例:0.5
  • Concat 部分 Dropout 比例:0.5
  • Embedding 维度:128
  • 优化器: Adam(lr=0.001, beta_1=0.9, beta_2=0.999)
  • 训练数据 Batch Size: 128

模型性能

敏感字段识别问题为一个多分类问题,训练好的模型在测试集上的整体准确率为 93% 左右。但其在一些具体类型上的效果略有欠缺,通过具体的分析定位问题在于训练数据中包含了一些标注错误的样本,例如:敏感类型为“地址”,但该字段保存的却不是地址类型的数据。

实施流程

模型的整个实施流程如下:

23cc2022e295ad77b40878d0feb869b9.png

[1] https://en.wikipedia.org/wiki/Data_governance

[2] Cheng, H.-T., Koc, L., Harmsen, J., Shaked, T., Chandra, T.,Aradhye, H., … Shah, H. (2016). Wide & Deep Learning for RecommenderSystems. ArXiv:1606.07792 [Cs, Stat].

[3] Kim, Y. (2014). Convolutional Neural Networks for SentenceClassification. In Proceedings of the 2014 Conference on Empirical Methods inNatural Language Processing (EMNLP) (pp. 1746–1751).

文章来源:京东数科技术说

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

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

相关文章

【转】C# HttpWebRequest 异常时获取 HttpWebResponse 数据

使用 C# 的 HttpWebRequest 请求接口如果接口返回了 401 则会抛出异常,而 401 其实也有可能返回正常的响应数据,如何获取异常时的响应流? 解决方案 捕获 WebException 异常,通过 ex.Response 获取 HttpWebResponse 主要代码如下…

innodb下的mvcc_从InnoDB了解MVCC

原标题:从InnoDB了解MVCCMVCC全称是Multi-Version Concurrency Control,即多版本并发控制。这是种很常用的技术,现在几乎所有的关系数据库都支持它。平时它默默工作,像个透明人,似乎不用关心它的细节。但是当我们偶尔在…

【开箱即用】VMware Win7虚拟机下载

前言 在桌面软件开发中,特别是Qt开发过程中,通常需要测试目标软件在不同版本的Windows上是否能够正常运行,以提高软件的系统兼容性。 虽然微软在2020年正式停止对Windows 7系统的支持,并鼓励用户升级Win10,但是由于W…

【转】C# Stream篇(—) -- Stream基类

目录: 什么是Stream? 什么是字节序列? Stream的构造函数 Stream的重要属性及方法 Stream的示例 Stream异步读写 Stream 和其子类的类图 本章总结 什么是Stream? MSDN 中的解释太简洁了: 提供字节序列的一般视图 (我可不想这么理解…

【已解决】解决Win7安装VS2013/VS2015结束时报错“无法建立到信任根颁发机构的证书链”的问题

问题描述 最近在Win7虚拟机上上安装VS,等待许久之后,提示安装完成。但是完成界面报错: “无法建立到信任根颁发机构的证书链”。 而且错误还不少,如下图所示: 根据我的个人经验,证书问题并没有影响日常开…

python把矩阵堆叠成大矩阵_python numpy 矩阵堆叠实例

在实际操作中,遇到了矩阵堆叠的操作,本来想着自己写一个函数,后来想,应该有库函数,于是一阵找寻import numpy as npa np.array([1,2,3])b np.array([4,5,6])np.stack((a,b)) #默认行堆叠输出:array([[1, …

【转】C# Stream篇(二)TextReader 和StreamReader

目录: 为什么要介绍 TextReader? TextReader的常用属性和方法 TextReader 示例 从StreamReader想到多态 简单介绍下Encoding 编码 StreamReader 的定义及作用 StreamReader 类的常用方法属性 StreamReader示例 本章总结 为什么要介绍 TextReade…

【数据结构】能看懂的红黑树

1 总体逻辑 1.2 二叉树 二叉树中&#xff0c;一个根节点最多有两个子节点。 1.3 二叉排序树 Binary Search Tree 二叉排序树是一个排好序的二叉树。且水平方向来看&#xff0c;总有 左节点 < 右节点 简单记忆其规律&#xff0c;可以在脑海中想象一个大大的小于号&#x…

【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)

本文章内容主要为数据流及相关辅助类&#xff1a; 流(Stream)、文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)以及文本读写的StreamReader、StreamWriter、用于二进制读写的BinaryReader和BinaryWriter类等。 对FileStream、Memor…

Linux命令英文全拼及含义解释

最近在做Linux开发。不同于使用Windows系统&#xff0c;使用linux开发经常会使用各种命令来和系统交互&#xff0c;特别是在偏嵌入式的环境下&#xff0c;没有GUI&#xff0c;就会更加依赖命令交互。 Linux命令通常是单词缩写&#xff0c;想要更好的记忆这些命令&#xff0c;最…

node工程默认url_node命令行工具之实现项目工程自动初始化的标准流程

一、目的传统的前端项目初始流程一般是这样&#xff1a;可以看出&#xff0c;传统的初始化步骤&#xff0c;花费的时间并不少。而且&#xff0c;人工操作的情况下&#xff0c;总有改漏的情况出现。这个缺点有时很致命。甚至有马大哈&#xff0c;没有更新项目仓库地址&#xff0…

【转】!C#中的Stream相关

计算机文件基本上分为二种&#xff1a;二进制文件和 ASCII&#xff08;也称纯文本文件&#xff09;。图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件&#xff0c;由一些字符的…

音频帧AVFrame::linesize大于实际值的问题记录

在解析AAC的音频流时&#xff0c;发现AVFrame::linesize[0]大小为8192。 但是AVFrame::nb_samples为1024&#xff0c;AVFrame::format类型为AV_SAMPLE_FMT_FLTP&#xff0c;即每个采样是4字节。 那么此音频帧中的数据应该为4096&#xff0c;和AVFrame::linesize[0]不相等。 …

vscode生成vue模板快捷键_vs code 快速生成vue 模板

1.使用快捷Ctrl Shift P唤出控制台&#xff0c;然后输入snippets并选择。(或 文件>首选项>用户代码片断里面&#xff0c;输入 vue.json &#xff0c;然后回车 )(或 file > Preferences > User Snippets&#xff0c;然后回车)2.接着输入vue&#xff0c;选择vue-ht…

【转】!!c#文件系统操作类继承关系图

自己总结的&#xff0c;给大家参考一下&#xff0c;

FFmpeg资料

ffmpeg内存模型及AVPacket和AVFrame API解释

php elasticsearch 获取索引所有文档_Elasticsearch客户端主要方法的使用规则

安装1.在 composer.json 文件中引入 elasticsearch-php&#xff1a;{ "require": { "elasticsearch/elasticsearch": "~6.0" }}2.用 composer 安装客户端&#xff1a;curl -s http://getcomposer.org/installer | phpphp composer.…

【转】如何用好SVN的Branch

转自&#xff1a; http://www.cnblogs.com/lovebanyi/archive/2012/06/13/2547525.html 在SVN里面我们一般会创建出三个文件夹 Trunk&#xff08;主干&#xff09; Branch&#xff08;分支&#xff09; TAG&#xff08;标签&#xff09; 在我们项目一开始的时候我们会将代码…

python数据爬取并可视化_Python爬取数据并实现可视化代码解析

这次主要是爬了京东上一双鞋的相关评论&#xff1a;将数据保存到excel中并可视化展示相应的信息主要的python代码如下&#xff1a;文件1#将excel中的数据进行读取分析import openpyxlimport matplotlib.pyplot as pit #数据统计用的wkopenpyxl.load_workbook(销售数据.xlsx)she…