一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种状态爆炸型正则表达式的识别方法及系统与流程

2021-11-10 02:55:00 来源:中国专利 TAG:


1.本发明涉及一种状态爆炸型正则表达式的识别方法及系统,属于计算机软件技术领域。


背景技术:

2.正则表达式匹配是网络过滤等许多应用程序中的关键组件,例如在深度包检测(dpi)中,它可以增强网络通信的安全性并检测恶意流量的存在。完成正则表达式匹配时,首先应将正则表达式转换为有限自动机(fa)。有限自动机是一种状态机,其识别的语言和由正则表达式表示的语言相同,根据下一状态转移是否确定,可以将fa分为非确定性有限自动机(nfa)和确定性有限自动机(dfa)。nfa和dfa的表达能力相当,但是由于每个dfa状态都等同于相应的nfa状态集,因此从nfa到dfa的转换可能会导致状态数激增,称这一现象为状态爆炸。表1描述了nfa和dfa在不同的编译策略下,其空间复杂度与匹配的时间复杂度对比结果。
3.表1为nfa和dfa在不同的编译策略下,空间复杂度与匹配的时间复杂度对比
[0004][0005]
1、dfa以其高效的匹配性能而广泛应用于dpi应用中,但是dfa的状态爆炸为dfa的实际应用带来了极大的挑战。现有关于识别正则表达式是否会生成状态爆炸的dfa问题的技术方法是以简单的设置阈值的方式来判断dfa状态数是否过大,超过该阈值则判定其是状态爆炸型正则表达式,否则不是。具体来说是在由正则表达式生成dfa的过程中设置阈值,即首先将正则表达式解析为解析树,然后使用thompson构造方法或glushkov构造方法将其转换为nfa,最后使用子集构造法将其转换为dfa,如果生成的dfa状态数超过该阈值,则该dfa判定为状态爆炸,其对应的正则表达式为正则爆炸型;否则为非状态爆炸型。
[0006]
现有的技术方案主要是通过设置阈值的方式来判别状态爆炸型正则表达式,该技术的缺点如下:
[0007]
1、可执行度低:判断一条正则表达式是否为状态爆炸型,需执行完整的由正则表达式生成dfa的过程,操作复杂,算法处理该过程缓慢,不易执行。
[0008]
2、空间复杂度高:如果该正则表达式是状态爆炸型,则在由nfa生成dfa的过程中会产生大量的dfa状态,需要大量的缓存空间来记录这些状态,空间复杂度极高。
[0009]
3、不能识别状态爆炸型的特定结构:存在一部分正则表达式,其对应的dfa状态数未达到阈值,因而该技术不能识别它们为状态爆炸型的正则表达式,但是它们含有特定的状态爆炸型结构,理应划分为状态爆炸型。


技术实现要素:

[0010]
针对现有技术中存在的技术问题,本发明的目的在于提供一种状态爆炸型正则表达式的识别方法,该方法可高效快速的批量处理正则表达式,满足在线系统的高效处理性能与较低空间消耗的需求。本发明的主要思想是利用图神经网络(gnn)的模型来自动学习nfa图(正则表达式利用thompson构造法生成得到)的结构特征,将高维的图表示嵌入到低维的向量空间中,然后利用分类模型把这些向量化表示的图进行二分类:是否为状态爆炸型的正则表达式对应的nfa,下面是该技术方案的详细阐述。
[0011]
本发明的技术方案为:
[0012]
一种状态爆炸型正则表达式的识别方法,其步骤包括:
[0013]
1)对于一待识别的正则表达式,生成其对应的nfa图,得到该正则表达式对应的nfa图集合;
[0014]
2)对于nfa图集合中的每一nfa图,提取该nfa图中的所有根子图并将其输入graph2vec模型,训练得到该nfa图的嵌入表示;
[0015]
3)利用分类模型处理该nfa图的嵌入化表示,判定该正则表达式是否为状态爆炸型正则表达式。
[0016]
进一步的,步骤1)中,根据thompson构造法生成该正则表达式对应的nfa图,并且用gexf文件存储该nfa图的信息;该nfa图的信息包括:nfa图的节点信息和边信息,其中节点信息包括节点的id值,边信息包括每条边的起始节点、终止节点以及边上的转移字符。
[0017]
进一步的,根据节点的出边字符集合,将节点分为三类,作为节点的特征信息:加速状态爆炸的节点、阻碍状态爆炸的节点以及普通节点;其中,所述加速状态爆炸的节点为:若节点n的出边字符集合与正则表达式的前缀有重叠,且该出边字符集合连续出现了k次,则标记节点n为加速状态爆炸的节点;所述阻碍状态爆炸的节点为:若存在加速状态爆炸的节点n,并且在该节点n之前存在节点m,其出边字符集合与该节点n的出边字符集合交集为空集,则标记节点m为阻碍状态爆炸的节点;将加速状态爆炸的节点、阻碍状态爆炸的节点之外剩余的节点标记为普通节点。
[0018]
进一步的,将节点的特征信息加入到wl算法中,然后利用融合节点分类的wl算法提取gexf文件中的所有根子图。
[0019]
进一步的,所述分类模型为svm分类器。
[0020]
进一步的,训练graph2vec模型的方法为:将nfa图中的所有根子图看作文档中的词汇表,通过最大化公式得到所述文档的向量化表示,以及优化目标是最大化每个图中出现的属于它本身的根子图的概率,即最大化其中,d
i
表示第i篇文档的向量化表示,w
j
表示词汇表中在该第i篇文档中出现的第j个单词的嵌入表示,pr(w
j
|d
i
)表示在文档d
i
中单词w
j
出现的条件概率,φ(g)是希望得到嵌入表示的图g的向量化表示,表示图g中以节点n为根的d度根子图的向量化表示。
[0021]
一种状态爆炸型正则表达式的识别系统,其特征在于,包括nfa图转换模块、根子图提取模块、nfa图的嵌入表示生成模块和分类模型;其中
[0022]
所述nfa图转换模块,用于生成正则表达式对应的nfa图,得到该正则表达式对应
的nfa图集合;
[0023]
所述根子图提取模块,用于提取nfa图中的所有根子图;
[0024]
所述nfa图的嵌入表示生成模块,用于使用graph2vec模型训练nfa图中的所有根子图,得到该nfa图的嵌入表示;
[0025]
所述分类模型,用于根据正则表达式中的nfa图的嵌入化表示,判定该正则表达式是否为状态爆炸型正则表达式。
[0026]
本发明首先选用了graph2vec模型作为基本模型,并结合nfa图的特点,加入了nfa中的边信息以优化模型的输入,实现更为正确的分类。以下对本发明的关键技术方案进行介绍:
[0027]
1、graph2vec模型介绍
[0028]
选用的基础模型为graph2vec模型,它是一个无监督表示学习的图神经网络框架,用来学习无向图、有向图以及带权图的嵌入式表示,可作为输入数据用于后续的图分类等任务。graph2vec模型的具体设计如下:
[0029]
(1)提取根子图:首先利用shervashidze提出的wl算法(如算法一所示)提取nfa图中每个节点的d度根子图,并为所有根子图分配一个唯一的标签,则每个nfa图可看作由一组根子图构成,如果把每个图看作一篇文档,则图中的所有根子图对应的是组成该文档的所有单词,如图1所示。
[0030][0031]
(2)训练:wl算法得到所有图的根子图可看作文档中的词汇表,利用doc2vec模型
的思想:由越多相同的单词组成的两篇文档在低维向量空间中的表示应该越接近,则模型的训练目标为最大化在一篇文档中出现的单词的条件概率,最小化未在该文档中出现的单词的条件概率,即通过最大化公式(1)来得到每篇文档的向量化表示,其中d
i
表示第i篇文档的向量化表示,w
j
表示词汇表中在该第i篇文档中出现的第j个单词的嵌入表示,pr(w
j
|d
i
)表示在文档d
i
中单词w
j
出现的条件概率。
[0032][0033]
如果两个图由越多相似的根子图组成,graph2vec模型也希望它们的低维嵌入表示应该越接近,因此其优化目标是最大化每个图中出现的属于它本身的根子图的概率,如公式(2),其中φ(g)是希望得到嵌入表示的图g(由正则表达式生成的nfa图)的向量化表示,sg
n(d)
表示图g中以节点n为根的d度根子图的向量化表示。
[0034][0035]
在模型训练过程中,最大化公式(2)时利用skipgram模型的思想,以及负采样技术,利用随机梯度下降优化算法来得到最终的图嵌入表示。
[0036]
(3)用例:得到每个图的嵌入表示后,可用于后续的分类或聚类任务,例如可以利用svm算法来对图进行二分类,或采用k

means聚类方法来对图进行聚类。
[0037]
2、优化模型数据输入
[0038]
本发明是预测nfa图样本的输出标签,对于需要处理的正则表达式集生成的nfa图集合,注意到nfa图不仅有节点和边结构,其边上的转移信息携带了更多的状态爆炸信息,因此在graph2vec模型的基础上添加了对于边信息的处理。具体设计思路为通过分析节点的出边字符集合,将节点分为三类,作为节点的特征信息:加速状态爆炸的节点,阻碍状态爆炸的节点以及普通节点。
[0039]
(1)加速状态爆炸的节点:若节点n的出边字符集合与正则表达式的前缀有重叠,且该字符集合连续出现了k次(k>1),则节点n会使得正则表达式对应的dfa状态数激增,标记节点n为加速状态爆炸的节点。
[0040]
(2)阻碍状态爆炸的节点:若存在上述描述的加速状态爆炸的节点n,并且在该节点n之前存在节点m,其出边字符集合与节点n的出边字符集合交集为空集,则这类节点m将导致正则表达式对应的dfa状态数增长缓慢,标记节点m为阻碍状态爆炸的节点。
[0041]
(3)普通节点:除上述两类节点外的所有节点标记为普通节点。
[0042]
对nfa中的按上述三种类型进行分类后,可在wl算法中加入节点的分类特征信息,则得到的根子图不仅包含了图的结构信息,也包含了边上的信息,接下来继续利用graph2vec模型训练得到nfa图的嵌入表示。
[0043]
与现有技术相比,本发明的积极效果为:
[0044]
注意到nfa是由边和节点组成的图,并且其中一些特殊的结构会导致生成的dfa状态爆炸,因此在对正则表达式进行二分类时,我们将其转换到图结构上,利用图神经网络(gnn)是以端到端的方式解决与图相关的任务,并提取其嵌入表示的任务特点,来得到每个nfa图的低维嵌入表示,使得具有相似结构的图在向量空间中的表示也接近,以达到我们希望利用图结构的特点来对其进行分类的目的。
[0045]
在实现模型的过程中,我们根据边的信息加入了节点特征,并将一个完整的nfa图分解为若干子图表示,这可以进一步使得拥有相似子结构的图分类结果相同,这两个关键点具体如下所述。
[0046]
加入边的信息:
[0047]
根据thompson构造法生成正则表达式对应的nfa图,该图中边的信息决定了其生成的dfa是否会状态爆炸,即使两个nfa图同构,但若存在两条对应边上的转移信息不同,则这两个nfa也可能会有不同的标签,因此在该模型中需要加入边的信息,并且加入边信息的方法至关重要,它需充分体现出状态爆炸型正则表达式的特点。通过相关文献的调研及实验验证,该模型采取通过分析节点的出边信息,来将节点分为三类,作为节点的特征信息加入到wl算法中,使得提取得到的根子图包含边导致状态爆炸的特征信息。
[0048]
提取根子图:
[0049]
注意到如果两个nfa图由越多相同的子图(包含边上的信息)构成,那么它们大概率会有相同的标签,并且实验验证大多状态爆炸型正则表达式对应的nfa有相似的子结构,因此,在模型训练的过程中,采用wl算法来提取所有图的根子图,将图看作由一组根子图构成,则得到的图嵌入表示更多包含了子图的信息,使得具有相似子图的nfa在嵌入空间中的表示也更接近。
[0050]
具体来说,对于一个正则表达式(snort,l7等正则库中),判断其是否会产生状态爆炸的dfa的过程如下:首先根据thompson构造法生成正则表达式对应的nfa图,并且用gexf文件存储该图的信息,利用融合节点分类的wl算法提取gexf图的所有根子图,然后使用graph2vec模型训练得到该图的嵌入表示,最后用svm分类器处理该嵌入化表示的图得到最终标签:1(爆炸)或

1(非爆炸)。
[0051]
本发明实验的硬件配置如表2:
[0052]
表2实验的硬件配置
[0053]
操作系统centos linux release 7.5.1804内存125gcpuintel(r)xeon(r)cpu e5

2667 v4@3.20ghz
[0054]
实验设计:从正则库clamav_regex_strings_2015,l7_rules_2015以及snort_regex_rules_2015中选取3520条正则表达式,通过thompson构造方法将它们转换为相应的nfa图,训练模型得到每个图的嵌入表示。在svm二分类的过程中,由于svm模型是有监督学习,因此我们利用阈值的方法为每个正则表达式打标签,结果为3520条正则表达式中1570条为正则爆炸型(标签为

1),1720条为非正则爆炸型(标签为1),训练时随机选取70%(3168条)的nfa嵌入表示作为训练集,剩余30%(352条)的nfa嵌入表示作为测试集。分别设置d=3,5,8,得到实验结果如表3所示:
[0055]
表3实验结果对比
[0056]
[0057][0058]
实验结果证明,当设定d=5,即聚合5跳的邻居信息时所能达到的分类准确率最高,为98%。
附图说明
[0059]
图1是graph2vec模型与doc2vec模型思想对比;
[0060]
(a)doc2vec模型思想,(b)graph2vec模型思想;
[0061]
图2为本发明方法流程图;
[0062]
图3为svm二分类示例。
具体实施方式
[0063]
下面结合附图对本发明的优选实例进行详细阐述。
[0064]
本发明的原始输入是正则表达式集合,例如表4中所示的正则表达式:“tra[^a]{3}hl”,则如图2所示,预测正则表达式是否为状态爆炸型的过程分为以下几个阶段:
[0065]
(1)正则表达式生成nfa:首先使用thompson构造法为每一个正则表达式生成其对应的nfa图结构,表4展示了正则表达式“tra[^a]{3}hl”对应的nfa图。
[0066]
表4为wl算法执行过程实例
[0067][0068]
(2)nfa转化成标准图格式数据:首先每个正则表达式通过thompson构造法生成其对应的nfa图,然后使用gexf格式文件来记录nfa图信息,例如存储表4中正则表达式“tra[^a]{3}hl”对应nfa图结构的gexf文件如下所示,其包含了nfa图的节点信息和边信息,其中节点信息包括了节点的id值,边信息包括了每条边的起始节点(source)和终止节点(target),以及边上的转移字符(即出边字符,weight由ascii码值表示),
[0069][0070]
(3)提取nfa的所有根子图:为了便于说明加入边信息后提取根子图的具体过程,设置d=3,即聚合3跳邻域内的节点,以表4中的nfa图为例,wl算法提取该图中每个节点的3度根子图,其中“a b”中的数字a代表第a轮的迭代过程,也代表聚合a跳邻域内的信息,数字b代表聚合得到的根子图标号。第0轮记录的是节点的特征信息,也即由节点的出边信息得到的节点分类结果,其中“1”代表加速状态爆炸的节点,“2”代表阻碍状态爆炸的节点,“0”代表普通节点。举例来说,3号节点标记为“1”是因为它的出边字符集是^a(除a外的所有字符集),在之后连续出现了3次,并且与前缀t有重叠字符t,因此该节点会加速状态爆炸;而2号节点标记为“2”是因为它的出边字符a与之后的字符集^a交集为空,这样的节点会阻碍状态爆炸的产生。括号内的第一个数字代表上一轮该节点的根子图标号,之后是所有出度节点在上一轮的根子图标号,将组合起来的序列映射到新的标号中得到此轮根子图的标号,
最终得到所有节点的3度根子图,则表4中nfa由9个3度根子图构成。
[0071]
(4)得到nfa图的嵌入表示:对每一nfa图执行wl算法后可以得到该nfa图对应的所有根子图的集合,则每个nfa图是由该nfa对应的根子图集合构成,将所有的根子图和根子图与nfa图的对应关系(每个根子图属于哪些nfa图)输入已知的skipgram模型,可训练得到每个nfa图的嵌入表示,即可以用1*1024维(维数为人为设定)的低维向量表示高维的图结构数据。
[0072]
(5)分类预测:将nfa图嵌入到低维向量空间中后,接下来可以用分类模型来对向量化表示的nfa(即上一步得到的nfa图的嵌入表示)进行分类,例如本发明采用的svm(支持向量机)二分类方法,将nfa图的嵌入表示直接输入分类模型,即可得到该nfa图对应的正则表达式的类别(即是否为状态爆炸型正则表达式)。svm的基本思路是求解能够正确划分训练数据集并且几何间隔最大的分离超平面,该超平面分隔开的两部分空间中的点即为对应的两个分类结果,如图3所示。
[0073]
以上所述仅是本发明的一种优选方案,应当指出,对于本技术领域的普通人员来说,在不脱离本发明的原理前提下,还可以做出若干修饰和润色,在不脱离本发明的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书的实施例和附图所公开的内容,本发明的保护范围以权利要求书界定的范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献