Deep Learning for Source Code Modeling and Generation Models, Applications and Challenges

Deep Learning for Source Code Modeling and Generation: Models, Applications and Challenges

一篇对源代码建模的综述。

传统的源代码建模方法.

  1. Domain-specific language guided models

    基于特定的编程语言来进行建模,不同的编程语言其语法结构还是不同的。 这种建模方法能够捕捉程序的结构信息,但是需要详细的规则来对程序进行解析表示。

  2. Probabilistic grammars(概率语法?)

    有两种语法规则,一种是Context-Free Grammars(CFGs) 上下文无关的语法。通过这种方法可以生成语法树。但是通过这种方法生成的语法树会有二义性,即同一个句子会有不同的意思。为了减少这种歧义,提出了一种Probabilistic Context-Free Grammar(PCFG),即在所有能生成的语法树中选择一个概率最大的一种。

  3. Tree Substitution Grammar(TSG)

    这个不太理解,应该是自然语言处理中的相关处理方法

  4. n-gram

    对于长序列的依赖问题不能很好的解决。向量空间的稀疏表示,造成语料库很大。

  5. simple neural program models

    用神经网络来进行词嵌入。

    用深度学习模型来建模的优势,a.自动学习特征;b.捕捉长序列依赖;c.端到端的;d.泛化性强。现有的深度学习都是为了在这四者之间进行权衡。

通过encoder-decoder 框架进行建模

  1. 循环神经网络

    RNN

    LSTM

    GRU

    BLSTM

  2. 非循环神经网络

    CNN+RNN

    CNN

    BERT

    Transformer

  3. 注意力机制

  4. 记忆增强神经网络(Memory-augmented neural networks)

  5. 集束搜索(beam search)

输入的建模方式

  1. one-hot
  2. real-valued(Word2vec)
  3. 用预训练的NLP的模型来对下游任务进行再次训练

深度学习建模方式

  1. 序列建模方式,直接将代码按照序列来处理

    但是有这些不足,

    ①代码中的句法结构不能很好的表示。代码结构可以看做是一个多维特征,而序列可以看做是一维特征,因此不能有效地表达其结构信息。

    ②语料库很大,而且很可能会出现有不在语料库的情况,这些都会影响模型的泛化性能。

    ③用循环网络时,其隐藏状态所包含的信息十分有限,即长序列的前后依赖问题。

  2. 结构化建模方式。

    2.1 抽象语法树。

    对于解析抽象语法树的方式有很多种。

    ①可以直接通过深度遍历的方式来解析;

    ②通过深度学习模型比如RNN,Tree-LSTM、CNN来处理;

    ③分解一个个代码语句组成的子树;

    ④用AST的路径来表示;(code2vec 、code2seq)

    2.2 图结构

    ①GGNN

  3. 可变的语料库模型

    对于源码中有很多用户自定义的标识符,这些不可能完全被语料库所包括。因此,往往存在有新的token不在语料库中的情形,即OoV(Out-of-Vocabulary 集外词)。

    Karampatsis提出了一种open-vocabulary neural language model(Maybe Deep Neural Networks are the Best Choice for Modeling Source Code. arXiv preprint arXiv:1903.05734 (2019))这是对那些罕见词进行sub-Word的建模,将罕见词进行切分成子串进行建模。

    还可以基于字符级别进行建模( Character-Aware Neural Language Models,AAAI16 )

    还可以基于图的结构(Open vocabulary learning on source code with a graph-structured cache)

  4. 注意力机制

    注意力机制也可以解决OoV问题。

    Learning Python Code Suggestion with a Sparse Pointer Network(arxiv 2016)用的pointer network

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
practical poissonian-gaussian noise modeling and fitting for single-image ra(单幅图像的实用泊松-高斯噪声建模和拟合)是一种用于处理数字图像的方法。图像通常会受到各种噪声的干扰,其中泊松与高斯噪声是最常见的。 泊松噪声是由于光子在相机的图像传感器上随机到达的数量不稳定而产生的。这种噪声的特征是其值在整个图像中有明显的空间相关性,并且通常会在边缘和细节部分更为显著。泊松噪声建模通常通过对每个像素的信号强度建模来实现,可以使用最大似然估计方法来估计泊松参数。然后,可以根据该模型对图像进行降噪处理。 高斯噪声则是由于无法避免的电子噪声、传输噪声和其他干扰因素引起的。这种噪声的特征是其值在整个图像中呈现出随机分布,且无空间相关性。高斯噪声建模可以通过对噪声标准差进行估计来实现,这可以通过图像的局部特性进行参数优化和拟合。 将泊松噪声与高斯噪声结合起来建模和拟合是处理单幅图像噪声的实际需求。这种方法可以最大限度地减少噪声对图像质量的不利影响,并提高图像的清晰度和细节。为此,可以使用适当的算法和技术,如小波去噪、图像增强和傅里叶变换等方法,对噪声进行建模和拟合。 值得注意的是,实际的泊松-高斯噪声建模和拟合需要考虑到图像的特性、噪声的分布特征以及算法的复杂度等因素。这种方法在许多图像处理应用中具有广泛的应用,如医学图像处理、无损图像压缩和计算机视觉等领域,可以改善图像质量,提高图像分析和识别的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值