读论文系列(二)Convolutional Neural Networks over Tree Structures for Programming Language Processing

该文章探讨了利用机器学习技术进行自动化软件漏洞检测的方法。文章介绍了一个基于抽象语法树(AST)的整体架构,其中AST节点通过分布式向量表示。通过连续二叉树模型解决了非叶节点子节点数量不一致的问题,使用树卷积神经网络(TBCNN)在AST上滑动提取结构信息,并结合动态池化处理。实验结果显示,这种方法能有效地提取AST的结构特征,适用于软件漏洞检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

读论文系列(一)Automated software vulnerability detection with machine learning



Keywards


抽象语法树(AST)
树卷积神经网络(TBCNN)Tree-Based Convolutional Neural Network
连续二叉树

Overall Architecture(整体架构)


在这里插入图片描述
AST节点首先被表示为一个分布式实值向量
tree-based convolution kernel 基于树的卷积核,在AST上滑动提取提取程序的结构信息
通过dynamic pooling来收集信息
加上一个隐藏层
输出层最后使用softmax

Representation Learning for AST Nodes


Vector representations(embeddings) 向量表示的大致过程


在这里插入图片描述
对于每个非叶节点p及其直接子节点 c1 …cn
在这里插入图片描述
叶子节点ci的权重矩阵
在这里插入图片描述
偏执bias
在这里插入图片描述
li是叶节点的权重系数
在这里插入图片描述

连续二叉树的提出


原因:非叶节点的子节点数目不同,导致叶子节点的权重矩阵不同
为了克服这一问题,引出连续二叉树
只有两个权重矩阵作为模型参数
在这里插入图片描述
Wi 是两个参数矩阵根据节点位置的线性组合

Coding Layer


在对所有的特征进行预训练后,将其丢进模型进行训练
对于叶子节点,只是将预训练阶段学习的向量表示
对于非叶节点p,它有两种表示法:在预训练阶段学习的表示法
编码的表示法
其公式如下
在这里插入图片描述

组合参数
在这里插入图片描述

Tree-based Convolutional Layer


在这里插入图片描述
我的理解是:
这个虚线三角形是一个特殊的卷积核,通过在树上滑动来提取特征(一般卷积是个矩阵的kernel,但在该模型中,则表示为树的深度,如图,深度设置为2)
滑动到底层没有那么多的节点的时候,就填0
输出
在这里插入图片描述
在这里插入图片描述 维数为卷积核的个数
在这里插入图片描述

Dynamic Pooling


在卷积之后,提取AST中的结构特征,并生成新的树。新树的形状和大小与原始树完全相同,但在不同的程序中有所不同。因此,提取的特征不能直接输入到固定大小的神经层。动态池用于解决这个问题。


最简单的方法可能是将所有特征汇集到一个向量中。我们称之为单向池。具体来说,每个维度的最大值取自基于树的卷积检测的特征。我们还提出了一种替代方案,即三向池,根据特征在AST中的位置,将特征池分成三个部分:顶部、左下方和右下方(图2b)。正如我们将从实验结果中看到的,简单的单向池和三向池一样有效。因此,我们在实验中采用了单向池。
合并后,特征完全连接到隐藏层,然后馈送到输出层(softmax)进行监督分类。通过动态池过程,整个AST的结构特征以短路径到达输出层。因此,可以通过反向传播有效地训练它们。

The “Continuous Binary Tree” Model


在我们的模型中,我们将任何子树视为“二叉”树,无论其大小和形状如何。也就是说,我们只有三个权矩阵作为卷积的参数,两个用于编码。我们称之为连续二叉树。

直接贴图
卷积的三个参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Wconv 和三个参数的系数关系
参数计算

在这里插入图片描述
所有参数
在这里插入图片描述

Experiments

关于数据集部分,论文原文给了明确解释

result

在这里插入图片描述
在这里插入图片描述

### 回答1: 卷积神经网络 (Convolutional Neural Networks, CNN) 是一种常用于文本分类的深度学习模型。它通过卷积和池化层来提取文本中的特征,并使用全连接层来进行分类。 CNN 的一个优点是能够处理变长的输入,并且不需要对文本进行预处理。 ### 回答2: 卷积神经网络是一种深度学习方法,用于对文本进行分类。在训练过程中,这种网络可以自动学习输入数据的特征表示。卷积神经网络中的卷积层可以识别输入中的局部模式,这些局部模式组合起来形成更高级别的特征,最终帮助分类器确定类别。对于文本分类问题,卷积神经网络的输入是文本的词嵌入向量,可以从先验知识中自动学习特征。 在一些文本分类任务中,卷积神经网络已经取得了很好的表现。文本分类任务通常被分为两种类型:元分类和多分类。元分类任务是指将数据分为两类,例如垃圾邮件和非垃圾邮件。多类分类任务是指将数据分为多类,例如新闻分类。在这两种任务中,卷积神经网络都能够进行有效的分类。 对于元分类任务,卷积神经网络可以使用一个输出节点,并使用 sigmoid 激活函数将输入映射到 0 到 1 之间的概率。对于多分类任务,卷积神经网络可以使用多个输出节点,每个节点对应一个类别,并使用 softmax 激活函数将输入映射到 0 到 1 之间,并且所有输出节点的和为 1。 要训练卷积神经网络进行文本分类,需要对模型进行三个主要的训练步骤。首先,需要构建词嵌入矩阵,该矩阵将文本中的每个词都映射到一个向量。然后,需要将文本数据转换为卷积神经网络所需的格式。最后,需要对模型进行训练,并根据测试数据进行评估。 总之,卷积神经网络已经被证明是一种强大的工具,可以用于文本分类等任务。在处理文本数据时,卷积神经网络可以自动学习输入数据的特征表示,并使用这些特征来确定文本的类别。 ### 回答3: 卷积神经网络(CNN)是一种深度学习模型,它在图像识别、计算机视觉和自然语言处理中表现出色。最近几年,CNN 在句子分类中也获得了很大的成功。 CNN 句子分类模型的输入是一个序列,输出是类别标签。与传统的 RNN 模型不同之处在于,CNN 可以使每个神经元只能捕获一个固定大小的区域的特征,从而加快模型的训练和降低了模型的复杂度。 CNN 句子分类模型的基本架构包括词嵌入层、卷积层、池化层和全连接层。词嵌入层将输入的文本转化为向量表示。卷积层通过滑动窗口对输入的序列进行卷积操作,提取出局部特征。池化层在每个滑动窗口上提取出一个最大值或平均值,进一步降低维度。最后,全连接层将提取出的特征传递到输出层进行分类。 CNN 句子分类模型的优点在于它可以处理不定长的文本序列,并在仅有少量特征的情况下表现出色。但是,CNN 模型的缺点在于不善于处理长期依赖关系,例如情感分析中的Irony识别。为了解决这个问题,可以引入 RNN 或 Transformer 等模型。 总的来说,CNN 模型为句子分类问题提供了一个简单有效的解决方案。在实践中,需要根据具体的任务选择合适的模型结构和参数设置,才能取得最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值