Assessing the Generalizability of code2vec Token Embeddings

Assessing the Generalizability(普遍性) of code2vec Token Embeddings

Treating code2vec as representative of code embeddings, our study investigates whether it can be successfully used in a variety of software engineering tasks beyond predicting method names.

source code

downstream tasks(下游任务):sentiment analysis(情绪分析), word sense disambiguation(词义消歧), named entity recognition(命名实体识别), and part-of-speech tagging(词性标注)

Are embeddings of source code tokens generalizable for use in tasks that they are not trained for?

PRELIMINARIES

Code embedding model. code2vec
Word embedding model. GloVe :an unsupervised algorithm using token-token co-occurrence statistics
Downstream tasks. code comment generation, code authorship identification and code clones detection

EVALUATION ON DOWNSTREAM TASKS

A. Code Comment Generation
Approach. use the latest approach proposed by Hu et al “Deep code comment generation” . 将这个问题当作一个机器翻译任务来处理。合并并保留AST中的结构信息当将表示方法体的代码片段中的数据预处理为表示AST节点的token序列时。使用基于递归神经网络的Seq2Seq语言模型将这些序列转换为自然语言代码注释。
Preprocessing.
Assessing the Generalizability of code2vec Token Embeddings_第1张图片

  1. 使用Eclipse JDT解析器构造源代码的AST
  2. 采用Hu等人描述的基于结构的遍历(SBT)算法对树进行遍历(这在token中保存了关于AST树结构的信息,并允许从token序列中重新构建AST树。序列中的token由AST节点类型和节点的值(文字或标识符名称)组成。)
  3. 使用OpenNMT训练基于循环神经网络的Seq2Seq语言模型。该模型由编码器-解码器网络组成。

Results
Assessing the Generalizability of code2vec Token Embeddings_第2张图片

Assessing the Generalizability of code2vec Token Embeddings_第3张图片
Table Ⅰ,使用SBT算法预处理
Table Ⅱ,不使用SBT算法预处理
Lowercased: 将提取的AST树中的标识符小写

Findings 从结果来看,使用预先训练的Embeddings并没有改善sequence-to-sequence的模型。性能最好的配置没有使用code2vec或GloVe。然而,在每种设置中,code2vec token 向量的性能都优于GloVe向量,这表明在代码嵌入训练过程中,结构信息可能是有价值的。这些结果表明,生成代码注释的方法不能利用GloVe或code2vec向量中编码的任何语义信息来提高性能。

B. Code Authorship Identification
Approach Abuhamad et al. “Large-scale and language-oblivious code authorship identification” 该网络由2个隐藏的全连接层和1024个节点组成。我们使用dropout进行正则化,并将其设置为0.6。我们使用前1000个TF-IDF特征,通过使用每个特征与作者之间的ANOVA F-value 进行特征选择来确定。

Results
Assessing the Generalizability of code2vec Token Embeddings_第4张图片
LSTM:LSTM神经网络允许可变长度的输入,因此可以将整个代码片段输入到模型中。该神经网络由两个隐藏的LSTM层和一个全连接层组成。
Assessing the Generalizability of code2vec Token Embeddings_第5张图片
Findings 通过比较code2vec和GloVe矢量,GloVe矢量比code2vec矢量精度更高。这意味着GloVe embeddings可能比code2vec token embeddings更好地编码语法关系。然而,GloVe和code2vec token embeddings 都比随机初始化的嵌入集要好。这表明code2vec token embeddings没有泛化到代码作者身份标识的任务。最后,具有TF-IDF特征的模型是实验中性能最好的模型。 使用code2vec token embeddings的糟糕性能表明,他们无法区分代码作者的语法差异以及TF-IDF特性。

C. Detecting Code Clones
Approach used SourcererCC “Sourcerercc: scaling code clone detection to big-code”, a token-based model
Results:
Assessing the Generalizability of code2vec Token Embeddings_第6张图片
在BigCloneBench上评估SourcererCC的结果表明,使用代码嵌入可以提高在语法上不太相似的克隆类型(Type-3和Type-4)上SourcererCC的召回率,但可能会降低Type-1和Type-2克隆上的召回率。然而,目前还不清楚它对精确度的影响。

Assessing the Generalizability of code2vec Token Embeddings_第7张图片
TABLE V Recall值增加,precision降低
TABLE VI 表明词汇表不足的标记并不是我们模型性能差的原因。

Findings 使用Embedding的方法提高了F1的整体得分,但改进很小。Recall小幅度提高,Precision大幅度降低

D. Lessons Learned

  1. From the 3 tasks above, we see that code embeddings cannot be used readily to improve simpler models.
  2. Our findings support the observations by Fu and Menzies that simpler baselines run faster and may
    outperform complex techniques and they should be used as baselines.
  3. Code embeddings may not be a silver bullet to boost the performance of deep learning models; other considerations
    may have more impact. (For example, we found that the pre-processing on the data has large consequences on the
    model’s performance. )
  4. The composition of source code token embeddings requires further investigation.
  5. We find the lack of interpretability of code embeddings to be a source of difficulty in this work.
  6. it may indicate that token embeddings learned over source code may not encode a significant amount of either semantic or syntactic information usable in different downstream tasks.

你可能感兴趣的:(论文)