魏 忠,周 俊,石元兵,黄明浩
(卫士通信息产业股份有限公司,四川 成都 610041)
随着数据泄露事件的日益增多,人们对数据安全越来越看重,要做到全面的数据安全,首先就需要做到精确的内容识别。一种常用的数据内容识别方法是使用预定义的关键词对数据内容进行匹配,根据匹配的结果来确定数据内容类别,从而采取相应的安全策略。但是这种识别方法无法提供准确的内容安全态势信息,一个问题是人为主观预定义的关键词信息有限,而且很多时候有歧义,这就会带来错误的匹配结果,比如预定义关键词为“密码”,会匹配出很多涉及输入密码的产品使用文档;另一个问题是关键字匹配的结果解释性不强,如多个文档都匹配了“密码”关键词,但是这些文档可能是完全不同的主题,有的可能是关于密码算法,有的仅仅是网站登录使用介绍。
本文的内容态势感知方法利用词向量技术Word2vec为基准语料库的词语创建向量空间,使用TF-IDF技术提取出基准语料库中的种子关键词,通过计算向量空间上的余弦距离提取出种子关键词的关键词词集,最后使用关键词词集对用户数据进行内容态势感知,从而得到准确的内容态势感知信息,很好地解决了上述的问题。
Word2vec是谷歌在2013年提出的一种将词语表征为数字向量的自然语言处理技术,是目前应用最广泛的一种词向量技术,它是一种深度学习模型,基于人工神经网络,通过在大规模语料库上的训练,利用词语的上下文信息,可以将一个词语表征为K维空间上的向量,向量空间上的距离可以用来表示词语语义上的相似度,越相似的词语在向量空间中的距离越近,如图1所示,“歌曲”和“参考文献”是语义上完全不同的词语,所以对应的词向量之间的距离将会非常远,而“歌曲”和“专辑”语义很相关,并且在语料中经常一起出现,则对应的词向量之间的距离就相对较小。因为Word2vec技术能够对词语进行很好的向量化处理,所以被广泛地使用在自然语言处理的多种应用中,如主题模型[1]、关键词提取[2]、文本分类、自动摘要[3]等。
图1 词向量可视化
Word2vec提供了两种训练模型,一种是连续词袋模型(Continuous Bag-Of-Words,CBOW),另一种是跳词模型(Skip-gram)[4],如图2所示,CBOW模型的特点是输入中间词的上下文词语,输出对中间词的预测。skip-gram模型是逆转了CBOW的因果关系,即输入中间词,输出对上下文词语的预测。
图2 Word2vec模型
当使用CBOW模型时,对于每一个词语,使用该词语周围的上下文词语来预测当前词语生成的概率。如句子为“今天下午2点钟小组开会”,设置N-GRAM窗口为5,则“2点钟”为中心词,这个中心词的上下文为“今天、下午、小组、开会”,将这些上下文词语的one-hot编码输入CBOW模型训练,使用训练误差来更新神经元的权值和偏移,最终使得“2点钟”这个词在输出层的概率最大。
从这个例子可以看出,CBOW模型有两个限制条件,一是语料库要非常大并且准确,比如类似“x点钟干xx事情”这样结构的句子要有多个,这样才能学习出“x点钟”是时间词;二是N-GRAM窗口大小的限制,超出窗口的词就没法被加入到中心词的词向量训练中来,而将N-GRAM窗口扩展得太大会增加深度模型训练的复杂度,需要通过训练确定的参数增多了,而Skip-gram模型可以通过跳过某些无关词语的方法来解决N-GRAM窗口尺寸不好确定的问题。
如句子为“这场足球赛真是踢得太烂了”,“足球赛”和“太烂”这两个词语的关系更紧密,所以我们可以通过制定skip-gram的数目为2,跳过“足球赛”的直接相邻上下文“真是”和“踢得”这两个词语,直接使用“足球赛太烂”组合进行训练,从而得到“足球赛”和“太烂”这两个词的准确关系。
因为大规模语料库的词语数量巨大,很多时候都是百万级别,如果训练时需要计算出每个词语在输出层的概率,则训练会非常慢,为了加快模型的训练速度,谷歌又提出了Hierarchy Softmax和Negative Sampling两种优化算法[5]。Hierarchy Softmax优化算法是将输出层节点使用二叉树形式进行组织,在输出层计算概率时通过二叉树查找,快速从根节点查找到词语节点,从而加快词语的训练误差反向传播权值更新计算;Negative Sampling优化算法是在计算非中心词(Positive Word)的其他输出词(Negative Word)的概率时,不需要计算所有非中心词的概率,只需要随机选择一部分词语来进行权值更新。
本文将重点介绍CBOW + Hierarchy Softmax组合的训练框架,CBOW + Hierarchy Softmax训练框架的架构如图3所示。
图3 CBOW+HS训练框架
第一层是输入层,首先选定一个窗口大小,当前词语为w,CBOW模型的输入是当前词的上下文窗口内的词语的one-hot编码。
第二层是隐藏层,如果设定词向量为K维,则该层有K个神经元,对输入层的输入值进行权重计算。
第三层是输出层,对隐藏层的计算值进行Softmax概率计算,如果语料字典共有M个词语,则输出层有M个输出节点,根据Hierarchy Softmax优化算法,将这M个输出节点组织成哈夫曼树的形式,叶节点代表语料里所有的词语。对于任意一个叶节点,如果规定左子树为0,右子树为1,就会有一个全局的编码,例如“密码”这个中心词的编码可能为“01001”,在进行Softmax计算时,可以根据这个编码在二叉树上快速找到“密码”这个中心词对应的叶节点,并根据计算得到的值进行误差反向传播来进行权值调整。
CBOW模型的训练流程:
(1)语料预处理
中文语料需要进行分词,将句子分解成词语数组。而英文语料虽然不需要分词,但是要处理各种时态,如“plays”和“playing”这两个词语形态虽然不同,但是意思是一样的,所以要进行词干提取和词形还原。
(2)构造词典,统计词频
遍历一遍语料中的所有文本,找出所有出现过的词语,并统计各词语的出现频率。
(3)构造树形结构
依照词语的出现频率构造哈夫曼树,哈夫曼树是一棵最优二叉树,每个词语都是哈夫曼树的叶子节点,每个叶子节点都有一个权值,叶子节点的权值就是词语出现的频率。
(4)叶节点对应的二进制哈夫曼码
这个二进制码表示节点在树中的位置,能按照编码从根节点一步步找到对应的叶节点。
(5)初始化各非叶节点的中间向量和叶节点中的词向量
树中的各个节点,都与隐藏层的K个神经元连接,每条连接都具有权值,每个节点都相当于可以用一个K维向量来表示,其中,叶节点的K维向量就是各词的词向量,而非叶结点中存储的是中间向量,用于进行分类计算。
(6)训练中间向量和词向量
读取语料库中预处理后的句子对应的词语数组,根据输出层的输出结果计算训练误差,再使用反向传播算法更新叶子节点词向量和非叶子节点处中间向量的值。对于CBOW模型,首先将词w附近的n-1个词的词向量相加作为系统的输入,并且按照词w的二进制哈夫曼码,一步步地在二叉树上找到对应的叶子节点进行分类计算,如果分类计算错误,则通过误差反向传播算法对向量进行修正,最终,当训练结束后,每一个叶子节点都能够被正确分类,对应的向量也就是词语在向量空间上的正确表示。
本文提出的基于Word2vec的内容态势感知技术,可以分为数据预处理、提取关键词词集、使用关键词词集进行内容态势感知三个阶段,总流程图如图4所示。
图4 内容态势感知流程
第一步:数据预处理。
选取具有典型业务特征和应用场景的数据作为基准语料库,在基准语料库上建立Word2vec词向量,词向量空间的余弦距离就能够较准确地反映实际业务中词语之间的相关程度。因为逗号、句号等特殊字符没有语义,而“我”、“是”、“的”、“呢”、“哇”等词语和章节题目等内容对业务没有帮助,如果加入到词向量训练过程中,会对其他词语产生干扰,所以需要在基准语料库中去除特殊字符,对基准语料库进行分词处理并去除停用词。在本实验中,选取了与密码产品相关的200篇技术设计文档和维基中文百科两种不同业务的数据来创建两个不同的基准语料库,分词使用分词工具Jieba,使用哈工大停用词表来去除停用词。
第二步:提取关键词词集。
预处理后的语料库通过Word2vec的CBOW模型创建为词向量,以便后续通过种子关键词提取出向量距离较近的词语形成业务关键词词集。在本实验中,使用自然语言处理工具Gensim来创建词向量,CBOW窗口设定为5,词向量维度设定为300。
TF-IDF是一种常用的关键词提取方法,TF词频(Term Frequency)指的是某一个给定的词语在某文件中出现的次数,IDF逆文件频率(Inverse Document Frequency)指的是包含某一个给定词语的文档比例的倒数。一个词语的TF-IDF越大,表示该词语在某篇文章中出现次数越多,同时在其他文章中出现次数越少,则该词语就越能够代表某篇文章,该词语也就越能被界定为关键词[6]。但是TF-IDF算法只考虑了词语的词频,没有考虑词语的上下文关系,所以通过TF-IDF算法提取出的多个关键词之间的语义关系、相关程度等信息都无法解释,相应的内容态势感知结果的解释性也就很差。为了解决这个问题,先通过TF-IDF算法对基准语料库提取关键词,将提取出的关键词作为种子关键词,然后从Word2vec词向量空间中根据余弦距离度量提取出较近的一组词语作为一个关键词词集。本实验中,基于维基百科中文语料的词向量模型和密码产品语料的词向量模型提取出的种子关键词和关键词词集如表1所示。
表1 词向量关键词词集
从实验结果可以看出,单一的种子关键字“密码”和“算法”对应的信息比较单薄,即使某文件多次匹配了这两个关键词也不能准确解释相关的内容态势感知信息,而基于种子关键词和不同的语料库提取出的关键词集合中的多个关键词具有很强的语义相关性,而且完整地体现相关的主题内容场景,如维基关键词词集反映的是密码应用主题,而产品关键词词集反映的是密码开发技术主题。
第三步,使用关键词词集进行内容态势感知
将待感知内容数据进行去除停用词、去除特殊符号、分词等预处理操作后,使用提取出的关键词词集对内容数据进行精确匹配并对匹配结果进行研判。对于匹配结果,定义了两个数据指标,一个是匹配覆盖率,表示内容数据匹配了多少个关键词词集中的词语,另一个指标是匹配频度,表示内容数据匹配了多少次关键词词集中的词语,以基准语料库中的平均词频作为阈值,匹配覆盖率越广,匹配频度超出基准阈值越多,说明该内容数据越具有该基准语料内容特征。
如果用户数据具有多个主要业务方向,如电子政务数据可能会有市政规划、政策方针、经济分析等主要业务方向,可以对这些主要业务分别创建基准语料库并提取关键词词集,再用这些关键词词集对用户数据逐一进行精确匹配,通过研判匹配结果中的匹配覆盖率和匹配频度就能够得到用户数据的业务方向、数据敏感度、数据价值度等多种内容态势感知信息。
为了验证本文的技术方案,分别使用维基百科中文语料和公司密码产品技术文档创建基准词向量模型,总数据量约为1.5G,操作系统为Windows 7环境,开发语言使用Python3.6,使用分词框架Jieba和自然语言处理库Gensim,硬件环境使用一台服务器。
下面给出一个内容台式感知测试实例,以密码相关的科普文章和公司内部的密码产品技术设计文档作为待测试的态势感知数据,关键词匹配结果如表2所示。
表2 关键词匹配结果
从结果中看到,在使用单一关键词进行匹配时,不同的内容数据的匹配结果没有太大区别,但是使用基于不同词向量模型提取的关键词词集的匹配结果就有了很大的区别,科普文章在维基中文的关键词词集上的匹配覆盖率和频度更高,相应地,密码产品技术设计文档在维基中文的关键词词集上的匹配指标就比较低,这些匹配结果的差异足以对内容数据进行进一步的精确分类和安全研判。
本文通过使用Word2vec词向量技术结合传统的TF-IDF关键字提取方法,实现了一种关键词词集提取方法并应用于内容态势感知。实验结果表明提取出的关键词词集更加全面并更能反映内容主题,使用关键词词集能够得到比较准确全面的内容态势感知结果,大大减少内容态势感知中虚警的 发生。