TBCNN

article/2025/9/23 3:23:52
    • TBCNN – 基于树的卷积神经网络

      TBCNN: A Tree-Based Convolutional Neural Network for Programming Language Processing

      • 一种用于编程语言处理的基于树的卷积神经网络

      • Abstract:

        • 由于当前还没有将深度神经网络应用于编程语言处理, 提出TBCNN模型来对基于ASTs的编程语言进行建模, 提取丰富的信息
        • 在模型中首先通过基于ASTs的编码准则来预训练获得program vector, 然后通过树型卷积来捕捉树的一些有用特征, 并且引入了三路池化(3-way pooling)和连续二叉树(continous binary tree)来处理不同形状大小的ASTs
        • 通过与基准方法对比, 这个方法可以更好更快地完成程序分类任务, 同时预训练出来的program vector也能提高训练的速度
      • Introduction:

        • 编程语言和自然语言的区别: 程序包含丰富而明确的结构信息, 编程语言中的源代码往往遵循固定僵化的语法结构, 而且通过复杂的控制流和数据流, 批次之间的代码块之间可能存在依赖关系
          1. 提出“编码准则”学习ast中每个节点的向量表示,作为预训练阶段;
          2. 提出了基于树的卷积方法提取程序的局部结构特征;
          3. 引入“连续二叉树”和“三路池化”的概念,使模型适用于不同结构和大小的树;

      整体模型

      jQp8zQ.png

      • Pretraining

        • 对于一个节点 p p p 和它的所有孩子 c 1 , c 2 , . . . , c i c_1, c_2,...,c_i c1,c2,...,ci ,用一下式子来表示 p p p 的coded vector

          v e c ( p ) ≈ t a n h ( ∑ i l i W c o d e , i v e c ( c i ) + b c o d e ) vec(p)\approx tanh(\sum_il_iW_{code,i}vec(c_i)+b_{code}) vec(p)tanh(iliWcode,ivec(ci)+bcode)

        • 定义 v e c ( p ) vec(p) vec(p) p p p 的 coded vector 的距离的平方

          d = ∣ ∣ v e c ( p ) − t a n h ( ∑ i l i W c o d e , i v e c ( c i ) + b c o d e ) ∣ ∣ 2 2 d=\left|\left|vec(p)-tanh(\sum_il_iW_{code,i}vec(c_i)+b_{code}) \right|\right|_2^2 d=vec(p)tanh(iliWcode,ivec(ci)+bcode)22

        • 同时, 通过将一个随机一个节点( p p p 或者 p p p 的某一个孩子) 换成一个随机的symbol 来完成负采样, 把这个负样本和其coded vector之间的距离计为 d c d_c dc

        • 目标: m i n i m i z e W c o d e l , W c o d e r , b c o d e m a x ( d − d c + △ ) minimize_{W^l_{code}, W^r_{code},b_code} max(d-d_c+\triangle) minimizeWcodel,Wcoder,bcodemax(ddc+)

      • Coding layer

        • 对于非叶子结点, p = W c o m b 1 v e c ( p ) + W c o m b 2 t a n h ( ∑ i l i W c o d e , i v e c ( x i ) + b c o d e p =W_{comb1}vec(p)+W_{comb2}tanh(\sum_il_iW_{code,i}vec(x_i)+b_{code} p=Wcomb1vec(p)+Wcomb2tanh(iliWcode,ivec(xi)+bcode
      • Tree-based consolution layer

        jQp1JS.png

        用固定深度的树型卷积核划过整个树结构, 假定对应节点的向量表示是 x 1 , x 2 , . . . x n x_1, x_2, ... x_n x1,x2,...xn, 那么这个卷积层的输出是

        y = t a n h ( ∑ n W c o d e , i ∗ x i + b c o d e ) y=tanh(\sum_nW_{code,i}*x_i+b_{code}) y=tanh(nWcode,ixi+bcode)

        而由于孩子节点的数量不固定并且树的形状和大小不固定, 这一步需要同时用zero-paddings和连续二叉树的概念

        • 连续二叉树 continuous binary tree

          把目标子树看作是一个二叉树(无论原本是什么形状和大小), 使用三个基本的权重矩阵 W c o n v l e f t , W c o n v r i g h t , W c o n v t o p W^{left}_{conv}, W^{right}_{conv}, W^{top}_{conv} Wconvleft,Wconvright,Wconvtop.

          对于子树中的某一个节点 x i x_i xi, 其权重矩阵 W c o n v W_{conv} Wconv 是这三个基本权重矩阵的线性组合

      • Three-way pooling

        jQp3Rg.png

        卷积层之后会得到一个形状和大小不变的新树, 因此不能直接接到hidden layer和output layer

        用三路池化讲特征池化成三个部分

      • SGDM 优化器算法

        • 向后传播算法
      • Hiden layer and output layer — softmax

        归一化 s o f t m a x i = e i ∑ j e j softmax_i =\frac{e^i}{\sum_je^j} softmaxi=jejei

      • 实验和实验结果
        • 向量表示成功地捕获了AST节点的有意义特征
        • 神经编程语言处理, 对程序进行分类是有效可行的

http://chatgpt.dhexx.cn/article/frISX5q0.shtml

相关文章

Nbtscan.exe工具分析

Nbtscan.exe 这是一款用于扫描Windows网络上NetBIOS名字信息的程序。该程序对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地…

内网安全攻防读书笔记(5)——探测域内存活主机和端口扫描

实际探测可以在白天和晚上分别进行探测。 1.利用NetBIOS快速探测内网 nbtscan工具已经上传到我的资源,大家可以下载。此工具用于扫描本地或远程TCP/IP网络上开放NetBIOS名称服务器。有Windows和Linux两个版本,将其上传到目标服务器就可以直接使用。使用…

nbtscan局域网扫描的原理

本文出处:http://blog.csdn.net/xizhibei 相信搞网络的应该都听说过nbtscan这个工具,当我们处于局域网中,想查询同处一个局域网的主机时,它就是个不错的工具(比如追踪ARP诈骗源) 它也很好用,在…

nbtscan在windows和linux下编译

nbtscan在windows和linux下编译 windows下载编译 linux下载编译 参考文章 windows 下载 http://unixwiz.net/tools/nbtscan-source-1.0.35.zip解压之后,修改nbtscan.c的66行include "getopt.i"为include "getopt.h" 修改nbtscan_common.h为li…

内网探测(主机存活、端口、Web资产)

内网探测(主机存活、端口、Web资产) 当我们能访问到目标内网任何资源之后,我们就可以对目标内网进行更深层次的信息搜集,比如:主机收集、IP 段搜集、端⼝开放服务、Web资产数量、漏洞类型 0x01. nbtscan 介绍&#xff…

入侵检测——nbtscan(扫描篇)

目录 环境介绍工具简介数据包规则 环境介绍 NAT模式: kali攻击方win7受害者Metasploitable受害者 工具简介 一个在本地或远程TCP/IP网络上扫描开放的NETBIOS名称服务器的命令行工具。它基于Windows系统的nbtstat工具的功能实现,但它可在许多地址上运…

delphi生成一个随机序列号

varFGuid: TGUID;beginCreateGUID(FGuid);edit1.Text : GUIDToString(FGuid);edit1.Text : edit1.Text IntToStr(Length(edit1.Text));edit1.Text : Copy(GUIDToString(FGuid), 2, 36);end; 测试通过

delphi2007 注册码

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 执行 Setup.exe 文件安装 Delphi 2007 for…

linux 磁盘序列号修改,一个小程序:Linux下取得硬盘的序列号

最近给朋友帮忙,遇到一个问题:如何在Linux取到硬盘的序列号?目前网上说的方法大都是Windows 下用Delphi、C#等工具开发的。如何用ANSI C来实现呢?其实C在做这种底层事情方面比Delphi和C#都要容易的。下面这个函数就是取得硬盘序列…

win7读取linux硬盘序列号,Windows 下获取硬盘序列号

只获取序列号 以下任意一条命令都可以: wmic diskdrive get serialnumber wmic path win32_physicalmedia get SerialNumber wmic path Win32_DiskDrive get SerialNumber 运行结果: 获取硬盘的更多信息 wmic diskdrive get Name, Manufacturer, Model, InterfaceType, Media…

Delphi dbgrideh序号

数据库里面的数据没有序号的数据,在dbgrideh上新增一列自定义其字段,例如:id 在编码的开头定义i,为integer 在dbgrideh控件上的‘OnDrawColumnCell’事件下写下代码 procedure TForm1.number(Sender: TObject; const Rect: TRect;…

安装delphi 10.4 社区版

事先说明:由于delphi的服务器是在国外的,所以,有条件的你懂的 下载安装程序 去 https://www.embarcadero.com/cn/products/delphi/starter 下载安装程序 点击 get community edition free 填写信息,注册账号,成功之后它将会把免费使用的序列号发送到你所填写的邮箱里面,之后会…

Delphi7安装及补丁安装详解

在学习Delphi之前,我们要先安装开发环境,博主这里以Delphi7镜像作为安装实例,希望在Delphi学习之路上能给予大家一点帮助。接下来就让我们一起来走一遍这个安装过程。 ⑴双击Delphi7镜像文件,镜像文件会在DVD驱动器中打开 ⑵ 双击…

nginx Proxy 代理

1、代理原理 反向代理产生的背景: 在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担…

python-proxy

代码: # -*- coding: utf-8 -*- # Time : 2020/4/15 17:44 # Author : Oneqq # File : 11.proxy.py # Software: PyCharmfrom urllib.request import Request, urlopen from fake_useragent import UserAgent from urllib.request import ProxyHandler, build_open…

but was actually of type 'com.sun.proxy.$Proxy7'

but was actually of type ‘com.sun.proxy.$Proxy7’ 标签(空格分隔): spring 二月 11, 2018 12:24:02 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.…

Ubuntu Proxy

2019年3月5日15:52:14(3[▓▓] 晚安Ubuntu 环境下的代理配置 在公司有代理的情况下上网,很多时候需要给一些命令单独设置代理。# 注:这里假设 10.111.10.18:80 为你的上网代理ip设置基本代理 1、打开Settings -> Network -> Network Proxy 设置为…

Linux--Configure Proxy

ProxyChains遵循GNU协议的一款适用于linux系统的网络代理设置工具。强制由任一程序发起的TCP连接请求必须通过诸如TOR 或 SOCKS4, SOCKS5 或HTTP(S) 代理。支持的认证方式包括:SOCKS4/5的用户/密码认证,HTTP的基本认证。允许TCP和DNS通过代理隧道&#x…

proxy(代理)用法

1、什么是Proxy? Proxy 也就是代理,可以帮助我们完成很多事情,例如对数据的处理,对构造函数的处理,对数据的验证,说白了,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必…

什么是 Proxy ?

一、写在前面 Proxy的意思是代理,我们可以把它理解为一个拦截器,就是当我们操作对象时,它都会对对象的操作进行拦截,从而进行监测和改写。 为什么要存在Proxy? 因为在ES6之前,我们使用Object.defineProperty()来设置监…