VOL. J104-D NO. 8
AUGUST 2021
本PDFの扱いは、電子情報通信学会著作権規定に従うこと。
なお、本PDFは研究教育目的（非営利）に限り、著者が第三者に直接配布することができる。著者以外からの配布は禁じられている。

論

文

深層学習を用いたソースコード分類手法の比較調査
藤原 裕士† a)

崔

恩

††

吉田 則裕†††

井上 克郎†

Comparing Deep Learning-based Approaches for Source Code Classification
Yuji FUJIWARA† a) , Eunjong CHOI†† , Norihiro YOSHIDA††† , and Katsuro INOUE†

あらまし 近年，深層学習を用いてソースコード分類を行う種々の手法が提案されている．これらの手法では，
ニューラルネットワークにソースコードのトークン列などを学習させることでソースコード分類を行う．そのとき，ソースコード分類に有効でないニューラルネットワークやソースコード表現を学習に利用すると学習効率が低下するため，適切なニューラルネットワークやソースコード表現を選定する必要がある．しかし，どのニュー
ラルネットワークやソースコード表現の組合せが高精度なソースコード分類手法の実現に有効かは明らかになっていない．本研究では，深層学習を用いたソースコード分類手法の比較調査を行う．まず，既存研究で広く利用されているニューラルネットワークを三つ選択した．次に，ニューラルネットワークにソースコードのトークン
列または抽象構文木を学習させた計 6 種類のソースコード分類手法の精度を比較した．その結果，ソースコードのトークン列を学習した再帰型ニューラルネットワークの精度が最も高いことを確認した．また，深層学習と非深層学習の手法のソースコード分類精度を比較し，深層学習の手法の分類精度が高いことを確認した．
キーワード 深層学習，ソースコード分類，順伝播型ニューラルネットワーク，再帰型ニューラルネットワー
ク，グラフ畳み込みネットワーク

実現されている．しかし，ニューラルネットワークや

1. ま え が き

ソースコード表現がどのようにソースコード分類のソフトウェア開発を効率良く行うために，開発者は精度に影響し，どのニューラルネットワークやソース

既存のソースコードを頻繁に再利用する [1], [2]．ソー

コード表現を利用することで高精度なソースコード分

スコード分類手法は，あらかじめ用意されたクラスに類の実現ができるかは明らかになっていない．また，基づいて，入力として与えられたソースコードがどの深層学習を用いた既存のソースコード分類モデルは複クラスに属する既存ソースコードと類似しているか雑な構造であるため，どのニューラルネットワークやを自動で識別する手法である．開発者は，このソース

ソースコード表現が高精度なソースコード分類に有効

コード分類手法を用いることで，再利用対象のソースかを把握することが難しい．

コードを効率的に特定することができる．

そこで本研究では，高精度なソースコード分類に有現在まで多くのソースコード分類手法が提案されて効なニューラルネットワークとソースコード表現の組

きた [3]〜[9]．特に近年では深層学習を用いてソース

合せについて調査するために，深層学習を用いたソーコード分類を行う手法が提案され，高い分類精度を

スコード分類手法の精度を比較する．本研究を行うに示した [6], [7]．これらの既存手法は様々なニューラル

あたり，リサーチクエスチョン（以降，RQ）を設定

ネットワークにソースコード表現を学習させることでした．

RQ 高精度なソースコード分類を実現できるニュー† 大阪大学，吹田市

Osaka University, 1–1 Yamadaoka, Suita-shi, 565–0871 Japan

ラルネットワークとソースコード表現の組合せは†† 京都工芸繊維大学，京都市

Kyoto Institute of Technology, Matsugasakihashikami-cho, Sakyo-ku, Kyoto-shi,

何か

606–8585 Japan††† 名古屋大学，名古屋市

Nagoya University, Furo-cho, Chikusa-ku, Nagoya-shi, 464–8601 Japana) E-mail: y-fujiwr@ist.osaka-u.ac.jp
DOI:10.14923/transinfj.2020JDP7068

622

電子情報通信学会論文誌 D Vol. J104–D

この RQ に回答するためにまず，既存のソースコー
ド分類手法でよく用いられるニューラルネットワー
クである，順伝播型ニューラルネットワーク，再帰型
No. 8 pp. 622–635 © 一般社団法人電子情報通信学会 2021

論文／深層学習を用いたソースコード分類手法の比較調査

ニューラルネットワーク，グラフ畳み込みネットワー
クの三つを選択した．次に，選択したニューラルネッ
トワークにソースコードのトークン列または抽象構文

7. でまとめと今後の課題について述べる．

2. 背

景

木（Abstract Syntax Tree，以降，AST）を学習させ，計2. 1 ソースコード分類

6 種類のソースコード分類手法の精度を比較した．

本研究におけるソースコード分類手法とは，既存その結果，再帰型ニューラルネットワークにソース

ソースコードを構文的及び意味的類似ソースコードご

コードのトークン列を学習させた手法の分類精度が最とに分割した n 個の クラス C1 . . . Cn に対して，入力も高いことが分かった．

として与えられたソースコードを，入力ソースコード

以上の調査によって，深層学習を用いたソースコーの構文的及び意味的類似ソースコードが含まれるクラド分類手法の中で最も分類精度が高い手法が明らかにス Ci (1 ≤ i ≤ n) に自動で分類する手法である．このなった．しかし，深層学習を利用せずに高精度なソー手法を用いることでソフトウェアを効率的に開発する

スコード分類が実行できる可能性がある．この前提をことができる．例えば，ソースコードを自動で機能ご確認するために，深層学習を用いるソースコード分類とに分類することで，大規模なソフトウェアリポジト

手法と深層学習を用いないソースコード分類手法の精リに新たに登録されたソースコードに対して機能に関度の比較を行った．その結果，深層学習を用いる手法

するタグを自動で付与することができる．開発者はこの方が分類精度が高く，深層学習はソースコード分類のタグを用いることで，必要な機能をもった既存ソーに有効であることが明らかになった．

スコードの再利用を容易に行うことができる．このよ

本研究の貢献は以下の点である．

うにソースコード分類手法を活用することで，ソフト•既存研究で広く利用されている 3 種類のニューラ
ルネットワークに対してソースコードのトークン列または AST を学習させ，計 6 種類のソースコー
ド分類手法の精度比較を行うことで，どのソースコード分類手法の精度が高いかを調査した．その結果，再帰型ニューラルネットワークにソース
コードのトークン列を学習させる手法の分類精度が最も高いことが分かった．

•

深層学習を用いたソースコード分類手法と用いない手法の精度比較を行った．その結果，深層学習を用いたソースコード分類手法の方が精度が高く，深層学習はソースコード分類に有効であることが分かった．
以降，2. では，比較調査の背景として，ソースコー

ウェア開発の生産性の向上が期待できる．
ソースコード分類手法は類似ソースコード検索に応用することができる．まず，検索対象のソースコード
を類似ソースコードごとのクラスに分割し，検索クエ
リのソースコードに対してソースコード分類を行う．
そして，分類されたクラスに含まれるソースコードに，
検索クエリソースコードとの類似度に応じたランキン
グを付与し，このランキングに従って，分類されたクラスに含まれるソースコードを検索結果として出力する．また，同じクラスに分類されたソースコードを
コードクローン（ソースコード中に存在する互いに一致または類似部分をもつコード片）として検出することで，ソースコード分類手法をコードクローン検出に応用することができる．
ソースコード分類に関する研究では，現在まで，記ド分類と，ソースコード分類に用いられる代表的な述言語による分類 [3]，コンポーネント間の依存関係

ニューラルネットワークについて述べる．3. では，深による分類 [4]，プログラムの意味（機能性）による分

層学習を用いたソースコード分類手法の比較調査の説類など，多様な手法が提案されている．また，プログ

明と結果の考察を行い，高精度なソースコード分類をラムの意味によるソースコード分類は様々な粒度で取実現することができるニューラルネットワークとソー

り組まれており，ソフトウェア単位の分類手法 [5] や，

スコード表現の組合せについて述べる．4. では，深層メソッド単位の分類手法 [6]〜[9] などが存在する．近学習を用いる手法と用いない手法の分類精度の比較を

年，深層学習を用いることで高い精度でソースコード

行い，深層学習を用いる手法が高い精度を示すか確認

分類を行う手法が提案されている [6], [7]．これらの手

する．5. では，本研究の妥当性の脅威について述べる．

法で作成される深層学習モデルは，入力ソースコード

6. では，関連研究として，深層学習を用いてソースに対してクラスごとに分類確率を計算し，最も確率がコード解析を行う既存研究について述べる．最後に，高いクラスを出力する．
623

電子情報通信学会論文誌 2021/8 Vol. J104–D No. 8

2. 2 ソースコード分類に用いられる代表的なニューラルネットワーク
一般的に深層学習とは，多くの層を利用し非線形情報の処理を行うことで，対象の特徴抽出や特徴変換，
パターン分析，分類などのタスクを解決する機械学習の手法の一つである [10]．ニューラルネットワークの場合，1 層以上の隠れ層を利用することで非線形情報の処理を行うことが可能である [11]．そのため，本研
究では，入力層と出力層に加えて 1 層以上の隠れ層を

図 1 順伝播型ニューラルネットワークの例

利用するニューラルネットワークを深層学習の手法と定義する．以降，本節ではソースコードの分類に用いられる代表的なニューラルネットワークについて説明する．

2. 2. 1 順伝播型ニューラルネットワーク
順伝播型ニューラルネットワーク（Feedforward Neu-ral Networks，以降，FNN）[12] とは，ネットワークに
ループ構造が含まれない標準的なニューラルネット
ワークである．最初期は入力層と出力層のみからなる
機械学習の手法だったが，隠れ層を増やすことで線形分離不可能な問題を解くことができる深層学習の手法として研究に利用されている．このニューラルネット
ワークは，ニューロンと呼ばれる，単純なベクトル計

図 2 再帰型ニューラルネットワークの例

算を行うための要素を接続することで構成されている．
ソースコードのメトリクスを並べるなどの方法でソー入力として与えられ，入力ベクトルの値だけでなく，スコードをベクトル化することで，FNN をソースコー

入力ベクトルの順番にも出力が影響されるニューラル

ド分類に利用することができる [13]〜[15]ネットワークである．ソースコードはトークン列など

図 1 は 8 個のニューロン n11 〜n32 で構成される，3層の FNN の例である．FNN の入力と出力はともにベの系列で表現することが可能なため，RNN はソース
コード分類に用いられている [7], [16], [17]．

クトルであり，そのベクトルの次元はネットワーク構

RNN の例を図 2 に示す．この図から分かるように，造に依存する．図 1 の例では入力が 3 次元，出力が 2

RNN は FNN と違いネットワークにループ構造が含ま次元のベクトルである．また，ネットワークの機能は，れている．RNN では入力ベクトル系列に含まれるベ

各ニューロン間の接続に設定されている重みとバイア

クトルが一つずつ順に入力されるたびに計算が行われスと呼ばれる，学習によって調整される値に依存する．

る．RNN における i 回目 (1 ≤ i ≤ n) の計算では，i 番

FNN の学習では，入力ベクトルと出力ベクトルの組を目のベクトル xi と同時に，i − 1 番目のベクトルを入FNN に与え，入力ベクトルを FNN に与えた際に対応力した後のニューラルネットワークの隠れ層 yi−1 がする出力ベクトルが出力されるように FNN の内部パ

RNN に入力される．この二つの入力を用いて RNN のラメータを調整する．これにより，FNN は入力ベクト隠れ層 yi と出力 zi の計算が行われる．このような手

ルと出力ベクトルを対応づけることが可能になる．

順で計算が行われるため，1〜i 番目の全ての入力ベク

ソースコード分類の既存研究 [6] で比較対象に選択され，高い分類精度を示していることから，本研究でも FNN を比較対象に選択した．

トルの値や入力順序が RNN の出力に影響する．
また，代表的な RNN の一つに，LSTM（長・短期記憶再帰型ニューラルネットワーク，Long-Short Term

2. 2. 2 再帰型ニューラルネットワーク

Memory recurrent neural network）[18] がある．LSTM

再帰型ニューラルネットワーク（Recurrent Neural

は RNN の隠れ層を LSTM block に置き換えることに

Networks，以降，RNN）[12] とは，ベクトルの系列がよって，一般的な RNN と比べて更に長期的な依存関624

論文／深層学習を用いたソースコード分類手法の比較調査

係の学習が可能になったニューラルネットワークである．ソースコード分類の既存研究 [7] で比較対象に選択され，高い分類精度を記録しているため，本研究でも LSTM を比較対象に選択した．

2. 2. 3 グラフ畳み込みネットワーク
グラフ畳み込みネットワーク（Graph Convolution

Networks，以降，GCN）[19] とは，グラフの隣接ノードを畳み込んでいくことによってノードやエッジ，グ
ラフ全体の特徴を抽出するニューラルネットワークである．ソースコードは AST などのグラフで表現するこ

図 3 GCN の畳み込み層の例とができるため，GCN はソースコードの分類に利用されている [20]．GCN はグラフを学習可能なニューラルを利用したソースコード分類に関する既存研究

ネットワークの中でも比較的新しいニューラルネット[6], [7], [17], [20] は近年増加しているため，分類精度

ワークである．GCN が提案される前にまず，GCN のの調査を行う必要がある．また，GCN はグラフに適前身となる技術として，グラフニューラルネットワー

用するニューラルネットワークの中で比較的新しいたク（Graph Neural Networks，以降，GNN）[21] が提案

め，高い精度の分類が期待できる．よって，本研究でされた．GNN は，グラフ構造に対して深層学習を行は GCN を比較対象に選択した．

うために開発されたニューラルネットワークである．
その後，画像認識の分野で畳み込みを利用したニュー
ラルネットワークが高い精度を示していることから，グラフにも畳み込みを適用することで精度が高くなると考えられ，GCN が提案された．

3. 深層学習を用いたソースコード分類
手法の精度比較調査
近年，深層学習を用いてソースコード分類を行う
種々の手法が提案されている [6], [7]．これらの手法に深層学習を用いてソースコード分類を行う既存研

おける深層学習モデルは複雑な構造をしており，様々

究 [6], [7], [17] では，グラフの学習を行う際，ニューなニューラルネットワークやソースコード表現を利

ラルネットワークの入力形式に合わせて元のグラフを用する．しかし，これらのニューラルネットワークや変形する．しかし，GCN ではグラフの変形は不要でソースコード表現がどの程度ソースコード分類の精度あるため，グラフの構造情報が欠落しないという利点に影響を及ぼすかは明らかになっていない．そこで本がある．したがって GCN を用いることで，グラフを研究では，既存研究で広く利用されているニューラル

変形する必要があるニューラルネットワークに比べ，

ネットワークとソースコード表現を用いたソースコー

グラフに含まれる情報をより正確に利用した学習を行ド分類手法の精度の比較を行う．この比較を行うこと

うことができる．GCN の畳み込み層の例を図 3 に示

で，高い精度でソースコード分類ができるニューラル

す．図 3 は，右上のグラフの中央のノード 0 のベク

ネットワークとソースコード表現の組合せについて調トル表現を計算する手順について説明している．ノー査する．本研究では以上の調査を行うにあたって，1.

ド 0 の畳み込み n + 1 層目におけるベクトルは，隣接で述べた RQ を設定した．

ノードの n 層目におけるベクトルと他ノードからの3. 1 ベンチマーク

エッジ（ingoing，outgoing），ノード 0 にループする

本研究では，ソースコード分類のベンチマークとし

エッジ（self-loop）の重みから中間ベクトルを計算し，て，BigCloneBench [22] を用いた．BigCloneBench とエッジごとの中間ベクトルを全て足し合わせたベクト

は，Java で開発されたオープンソースソフトウェアか

ルを ReLU などの活性化関数（ネットワークの出力をらメソッド単位でソースコードを収集したベンチマー

補正する関数）に入力することで得られる．このようクである．BigCloneBench の開発者らによって収集さに GCN では，ノード 0 のベクトル表現及びノード 0

れたメソッドは，そのメソッドが実現する機能に基づに隣接しているノード 1，2，3 のベクトル表現に基づ

き，43 種類の機能クラスに分類されている．そのた

いて，ノード 0 のベクトル表現が計算される．

め，BigCloneBench はソースコード分類手法の評価に

グラフ の学習 が可 能な ニ ュ ー ラ ル ネ ッ ト ワ ー ク

用いることが可能である．BigCloneBench は開発者ら
625

電子情報通信学会論文誌 2021/8 Vol. J104–D No. 8

が約 6 万個のメソッドを目視確認して作成した信頼性

クンの並び順に意味があるため，単語の前後関係を踏の高い大規模ベンチマークであるため，本研究ではこまえ，系列全体のベクトル化を行うことが可能な手法のベンチマークを利用する．

を利用する必要がある．よって本手法では Doc2Vec を

3. 2 比較対象のソースコード分類手法利用してメソッドをベクトル化する．

2. 2 では，ソースコード分類手法に広く利用されて具体的にはまず，学習データセット（3. 3 参照）にいる三つのニューラルネットワークについて説明した．

含まれるメソッドを，javalang（注 2）を用いてトークン列

本研究では，それぞれのニューラルネットワークに対にする．次に，そのトークン列を文書，トークンを単して二つのソースコード表現（ソースコードのトーク語として扱い，Doc2Vec を用いてメソッドをベクトルン列または AST）の各々を学習させ，計 6 種類のソー化する．Doc2Vec ベクトルの次元数は 300，FNN の隠

スコード分類手法の精度を比較する．そのため，本節

れ層は 4 層，隠れ層のノード数は 128 とした．

ではその 6 種類のソースコード分類手法について説明

3. 2. 2 FNN+AST
本手法は，学習させるソースコード表現以外の設定

する．
ソースコード表現には，トークン列と AST の他に制は 3. 2. 1 で説明した FNN+Token と同じである．本手

御フローグラフやデータフローグラフなどがある．こ法では，2. 2. 1 で説明した FNN に，Doc2Vec により生の二つのソースコード表現を生成するためにはソース成した AST のベクトルを学習させる．具体的にはまコードのコンパイルが必要である．しかし，3. 1 で説ず，学習データセット（3. 3 参照）に含まれるメソッ

明したように BigCloneBench はオープンソースソフト

ドを，Eclipse JDT（注 3）の ASTParser を用いて AST に変ウェアからメソッド単位でソースコードを収集したベ換する．次に，AST ノードを深さ優先探索順に並べたンチマークであるため，BigCloneBench に含まれてい列を文書，AST ノードを単語として扱い，Doc2Vec をる個々のソースコードをコンパイルすることが困難で用いてメソッドをベクトル化する．

ある．そのため，本研究ではコンパイルが必要なソー3. 2. 3 LSTM+Token

スコード表現である制御フローグラフやデータフロー

本手法では，メソッドのトークン列を学習データ

グラフを利用しない．
本研究で利用した深層学習フレームワークは Py（注 1）とすることで，2. 2. 2 で説明した LSTM にトークンの順序関係を学習させる．メソッドのトークン列は，各ニューラルネットワークで用いる活

javalang を用いて生成する．LSTM の埋め込み層の次性化関数は ReLU，損失関数は CrossEntropy，最適化

元数は 300，LSTM の隠れ層のノード数は 128 である．

Torch1.5.0

アルゴリズムは Adam である．各手法で用いるニュー

3. 2. 4 LSTM+AST

ラルネットワークの隠れ層の層数とノード数は，グ

本手法では，学習させるソースコード表現以外の

リッドサーチによって適切な値を決定した．グリッド

設定は 3. 2. 3 で説明した LSTM+Token と同じである．

サーチとは，ハイパーパラメータ群の候補を規則的に本手法は，学習させるソースコード表現を AST ノー

決め，各ハイパーパラメータの組合せを順番に探索し，ドの深さ優先探索順列にすることで，LSTM に AST

適切なハイパーパラメータを決定する手法である．ま

ノードの順序関係を学習させる．AST ノードの深さ優

た，単語埋め込みベクトルは，次元数を増やすほどベ

先探索順列は Eclipse JDT の ASTParser を用いて生成クトルの質は良くなり次元数が 300 を超えるとベクトする．

ルの質の変化が少なくなる傾向がある [23] ため，本研
究ではニューラルネットワークに入力する埋め込みベ
クトルの次元数を 300 に設定した．

3. 2. 5 GCN+Token
本手法では，2. 2. 3 で説明した GCN にメソッドのトークン列を学習させる．GCN でトークン列を学習

3. 2. 1 FNN+Token

させるためにはトークン列をグラフで表現する必要が本手法では，2. 2. 1 で説明した FNN に，Doc2Vec [24]あるため，今回はトークン列に含まれる各トークンをにより生成したトークン列のベクトルを学習させる．

ノードとして扱い，前後のトークンをエッジでつない

Doc2Vec は教師なし学習によって文書のベクトルを生だ 1 直線のグラフを扱う．GCN の実装には PyTorch

成する手法である．ソースコードのトークン列はトー（注 1）：https://pytorch.org/

626

（注 2）
：https://github.com/c2nes/javalang（注 3）：https://www.eclipse.org/jdt/

論文／深層学習を用いたソースコード分類手法の比較調査

図 4 Top-k 算出方法の概要

Geometric（注 4）を利用する．本手法におけるトークン列

ソースコードが含まれる．そのため本手法では，生成のグラフは無向グラフとみなし，エッジの重みは全てにソースコードのコンパイルが不要な AST を対象に同じとする．ノードのベクトル化は Word2Vec [25] をする．

用いて行う．具体的には，トークン列を文書，トーク

3. 3 調 査 方 法

ンを単語として扱い，Word2Vec を適用して各トーク

本研究では，ソースコード分類手法の評価尺度とンのベクトルを生成し，各トークンに対応するノード

して Top-k を用いる．本研究における Top-k とは，各に，生成したベクトルを割り当てる．メソッドのトー

ソースコード分類手法が，評価データセットに含まれクン列は javalang を用いて生成する．Word2Vec で生る各メソッドに対して機能クラスごとの分類確率を計成するノードベクトルの次元数は 300，GCN の畳み込算し，その確率が高いクラス順にランキングにしたとみ層は 4 層，GCN の隠れ層のノード数は 128 とする．

き，正解クラスが k 位以内に含まれている割合である．

3. 2. 6 GCN+AST

ここで正解クラスとは，各メソッドがもつ機能に基づ

本手法では，学習させるソースコード表現以外の設いて，3. 1 で説明した BigCloneBench によって定めら

定は 3. 2. 5 で説明した GCN+Token と同じである．本
手法は，学習させるソースコード表現をメソッドのAST とする．これにより GCN は，ある AST ノードの周辺にどんなノードが出現するかを学習することができる．本手法における AST は無向グラフとみなし，エッジの重みは全て同じとする．AST ノードのベク
トル化は Word2Vec [25] を用いて行う．具体的には，

AST ノードを深さ優先探索順に並べ，各ノードを単語とみなし，Word2Vec を適用する．また，メソッドのAST は Eclipse JDT の ASTParser を用いて生成する．
ソースコードをグラフで表現する方法は AST の他に制御フローグラフやデータフローグラフがある．しかし，制御フローグラフやデータフローグラフを生成するにはソースコードのコンパイルが必要であり，3. 1
で説明した BigCloneBench にはコンパイルが困難なれた機能クラスである．

Top-k の算出手順を図 4 に示す．Top-k の算出は以下の五つの手順に従って行う．

STEP A1
3. 1 で説明した BigCloneBench のメソッドを機能
クラスごとに分割し，各機能クラスに固有の IDを割り当てる．

STEP A2
各機能クラスのメソッドを 8:2 の割合でランダムに分割し，8 割を学習データセット，2 割を評価
データセットとする．

STEP A3
学習データセットのメソッドからソースコード
表現を生成し，ニューラルネットワークに学習させる．

STEP A4（注 4）：https://github.com/rusty1s/pytorch_geometric

学習データセットのメソッドを学習したニューラ
627

電子情報通信学会論文誌 2021/8 Vol. J104–D No. 8

ルネットワークを用いて，評価データセットに含では主に Top-1 の高い手法を採用するのが望ましいた

まれる各メソッドの分類を行う．

め，本研究の調査結果からは，Top-1 の精度が最も高い

LSTM+Token が最も優れたソースコード分類手法であSTEP A5
分類結果から Top-k を算出する．
本研究では，3. 2 で説明した 6 種類のソースコード
分類手法に対して，以上の手順に従って Top-1，Top-3，

Top-5，Top-10 をそれぞれ算出し比較する．ただし，手順の 2 番目では各機能クラスのメソッドの分割をランダムに行うため，分割の試行ごとに分類精度が変わる
可能性がある．本研究では，6 種類の分類手法で同じ
データセットを用いて学習と評価を行うために，共通のランダムシード値を用いて各機能クラスの分割を行う．これにより，高精度なソースコード分類を実現できるニューラルネットワークとソースコード表現の組
合せについて調査する．

3. 4 調査結果と考察
各ソースコード分類手法の精度を表 1 に示す．この表では Top-k で最も高い数値を太字で表している．表 1 から分かるように，各分類手法の中では，LSTM+Token がTop-1，Top-3，Top-5 で分類精度が最も高く，GCN+AST
が Top-10 で分類精度が最も高いという結果になった．
ソースコード分類では，Top-1 が優れていることが重要だと考えられる．2. 1 で挙げている機能タグの自動付与を実現するために，表 1 における LSTM+Token と同
じ精度である「Top-1 が 0.943」の分類手法と，Top-10
が極端に高い「Top-10 が 1.0」の分類手法のどちらかを選択する必要があると仮定する．前者は，ソースコー
ドに機能タグを 1 個だけ付与し，そのタグが 94.3% の確率で正しい手法で，後者は，ソースコードに機能タ
グを 10 個付与し，正しいタグがその中に必ず一つ存在する手法である．前者の「Top-1 が 0.943」である
手法の方が間違ったタグを付与する可能性が非常に低いため，タグを自動で付与することによって既存ソースコードの再利用を容易にするという目的に適していると考えられる．以上の理由からソースコード分類
表 1 各分類手法の分類精度
分類手法
深層学習 Top-1 Top-3 Top-5 Top-10
FNN+Token○ 0.575 0.766 0.830
0.911
FNN+AST○ 0.644 0.803 0.853
0.922
LSTM+Token○ 0.943 0.980 0.985
0.991
LSTM+AST○ 0.939 0.977 0.981
0.991
GCN+Token○ 0.772 0.927 0.967
0.989
GCN+AST○ 0.803 0.948 0.972
0.993
FaCoY
× 0.840 0.940 0.950
0.958
Siamese× 0.848 0.897 0.908
0.925

628

り，LSTM+AST や GCN+AST も比較的優れたソース
コード分類手法であることが分かった．
また，分類精度は，学習させるソースコード表現よりも用いるニューラルネットワークに大きく影響されることが分かった．LSTM を用いた手法は，学習させるソースコード表現にかかわらず分類精度が平均的に高かった．GCN を用いた手法は，Top-1 が LSTM を用いた手法に大きく劣り，Top-3，Top-5 は LSTM を用いた手法と比べるとやや劣るが，Top-10 は LSTM を用いた手法と同じくらいの分類精度であり，FNN を用いた手法と比べると平均的に分類精度は高かった．

FNN を用いた手法は，他のニューラルネットワークを用いた手法と比べると分類精度は低かった．よって，

LSTM が最も高精度なソースコード分類を実現可能な
ニューラルネットワークであることが分かった．
次に，ニューラルネットワークとソースコード表現の組合せ方法について考察する．まず，FNN を用いた手法では，FNN+Token よりも FNN+AST の方が分類精度が高かった．このような結果になった原因はDoc2Vec にあると考えられる．Doc2Vec は n-gram の考え方をベースにした教師なし学習アルゴリズムで文書をベクトル化する．よって，トークン列の学習を行う際，括弧やセミコロンなど，ソースコードに頻繁に出現するトークンが Doc2Vec の学習のノイズになり，生成されるソースコードベクトルがソースコードの特徴をうまく表現できていなかったと考えられる．その一方で，AST の深さ優先探索順列には，学習のノイズになり得るノードなどの要素がトークン列より少ない
ため，トークン列に比べてソースコードの特徴を表現
する良いソースコードベクトルを生成できたと考えられる．
次 に ，LSTM を 用 い た 手 法 で は ，わ ず か に

LSTM+Token の方が分類精度が高かった．LSTM+AST
において，AST を LSTM に学習させるためには AST
を何らかの系列に変換する必要があるため，今回はAST の深さ優先探索順列を学習させている．しかし，
AST の深さ優先探索順列からソースコードを完全に復元することはできないため，元のソースコードの情報はわずかに欠落しており，その分だけ分類精度が低下したと考えられる．その一方で，LSTM+Token
ではトークン列を学習するため，空白やインデントな論文／深層学習を用いたソースコード分類手法の比較調査

どのフォーマット情報を除き，ソースコードをそのま

4. 1. 1 FaCoY

ま学習可能である．また，LSTM は Doc2Vec と異な

FaCoY [8] は，深層学習を用いない意味的類似ソーり，トークンの長期的な依存関係を学習することがで

スコード検索手法である．この手法は，開発者向け

きる．そのため，LSTM の学習は，括弧やセミコロン

Q&A サイト StackOverflow（注 7）を用いて類似したソーなどの頻出トークンにあまり影響されないと考えられスコードを検索する手法である．具体的に FaCoY はる．よって，AST よりもトークン列の方が LSTM と

まず，入力として与えられたコード片に類似したソーの相性が良いと考えられる．

スコードが含まれる回答文を，ソースコードの類似

GCN を 用 い た 手 法 で は ，GCN+Token よ り も度が高い順に ns 個だけ StackOverflow から検索する．

GCN+AST の方が分類精度が高かった．トークン列

このとき，ソースコードの類似度は，二つのソースから生成したグラフには分岐がないため，グラフを学

コードを TF-IDF（Term Frequency - Inverse Document

習可能なニューラルネットワークの利点を生かすこと

Frequency）[26] でベクトル化したときの二つのベクトができていない．また，Doc2Vec の場合と同様に，頻ル間のコサイン類似度を用いて計算する．次に，検索出するトークンが学習ノイズになっている可能性が考された回答文に対応する質問文をクエリとし，再びえられる．その一方で，AST はグラフ形式の表現であStackOverflow から回答文の検索を行い，検索結果のるため，変形せずに GCN に学習させることができ，先頭から nq 個の回答文に含まれるソースコードを合学習ノイズになり得るノードがトークン列に比べて少計 nc 個まで検索結果として出力する．このような手ない．よって，トークン列よりも AST の方が GCN と順で，FaCoY は入力として与えたコード片に類似すの相性が良いと考えられる．

るソースコードを検索する．この手法のキーアイデア

以上の結果から RQ の回答は，「LSTM とトークン列

は，“Q&A サイトにおいて類似した質問文に対応するの組合せが最も高精度なソースコード分類を実現でき形で出現するソースコードは意味的に類似している”

る組合せであり，LSTM と AST の深さ優先探索順列

であり，このアイデアによって構文的に類似したソーの組合せや GCN と AST の組合せも比較的高い精度のスコードだけでなく意味的に類似したソースコードもソースコード分類を実現することができる」となった．

検索することができる．この手法では，入力コード片4. 深層学習を用いない分類手法との比較
3. では深層学習を用いる分類手法の精度比較を行い，
LSTM を用いる手法が最も精度が高いことが分かった．

と検索されたソースコードに対して TF-IDF を適用してベクトル化し，二つのベクトル間のコサイン類似度を算出し大きい順に並べることで，検索されたソース
コードのランキングを作成する．

しかし，深層学習を利用せずに高精度なソースコード

FaCoY のコード検索性能に影響するハイパーパラ

分類ができる可能性がある．この前提を確認するためメータには，前段落で述べた ns ，nq ，nc の三つがに，本章では，3. 2 で説明した深層学習を用いるソーある．本研究では，ns = 3，nq = 3，nc = 100 で比スコード分類手法と，深層学習を用いないソースコー

較を行う．この設定は，文献 [8] における FaCoY のド分類手法の中で代表的な手法の精度比較を行う．ま

BigCloneBench に対する適用実験で用いられたものでた，ソースコード分類に深層学習を用いる利点についある．

て考察する．

4. 1 深層学習を用いない分類手法

4. 1. 2 Siamese
Siamese [9] は，深層学習を用いない意味的類似ソー

本節では，深層学習を用いる手法との比較対象としスコード検索手法である．この手法は，n-gram を用て選択した，深層学習を用いないソースコード分類手

いて類似したメソッドを検索する手法であり，Big-法について説明する．これらの手法は，構文的に類似

CloneBench を用いた評価実験で，意味的に類似してしたソースコードだけでなく意味的に類似したソース

いるが構文的な類似度が低いメソッドのペアも高い精コードを検索できる最新手法であり，実装が公開され

度で検索できることが確認されている．この手法では（注 6）ている（注 5）
ため，比較対象として選択した．

まず，メソッドを 4 種類の異なる配列（トークン列，

n-gram の配列，識別子・文字列・型を正規化した後の（注 5）：https://github.com/FalconLK/facoy（注 6）：https://github.com/UCL-CREST/Siamese（注 7）：https://stackoverflow.com/629

電子情報通信学会論文誌 2021/8 Vol. J104–D No. 8

n-gram の配列，括弧・セミコロン以外を正規化した後の n-gram の配列）で表現する．次に，検索対象メソッ
ドと入力メソッドの組において，それぞれの表現方法に対してトークンや n-gram の出現頻度を考慮したス
コア θ （0〜100%）を算出する．最後に，しきい値 T
よりもスコア θ が高いメソッドの組を類似メソッドとして出力する．

Siamese のコード検索性能に影響するハイパーパラ
メータには，n-gram を用いる際の n の値と前段落で述べたしきい値 T の二つがある．本研究では Siameseのデフォルト値である n = 4，T = 10% で設定し，比較を行う．

4. 2 比 較 方 法
4. では，深層学習を用いない意味的類似ソースコー
ド検索手法をソースコード分類に適用し，3. で用いた6 種類のソースコード分類手法と精度を比較する．4.
で利用するベンチマーク及び評価尺度は，3. の比較調査と同様である．
本研究で選択した二つの意味的類似ソースコード検
索手法において，検索クエリのソースコードと検索結果として出力されたソースコードは意味的に類似している．また，2. 1 で説明した本研究のソースコード分類の定義では，意味的に類似したソースコードは同じクラスに分類される．そのため本研究では，検索クエリのソースコードが，検索結果のソースコードが属するクラスに分類されるとみなすことで，意味的類似ソー
スコード検索手法をソースコード分類に適用する．また，検索結果のソースコードは，検索クエリとの類似
度順にランキング化されて出力される．そこで本研究
では，ランキングに含まれる検索結果のソースコード
を，そのソースコードが属するクラスに置き換えることで，意味的類似ソースコード検索手法によって出力されたランキングをもとに，3. 3 で説明した Top-k を算出するためのランキングを作成する．

図 5 意味的類似ソースコード検索手法を用いてランキングを作成する手順

選択した意味的類似ソースコード検索手法をソースコード分類に適用し，3. 3 で説明した Top-k の算出に必要なランキングの作成手順を図 5 に示す．ランキン
グ作成は以下の四つの手順に従って行う．ここで，以下の手順に出現する機能クラス ID は 3. 3 の STEP A1

で説明した BigCloneBench によって定められた機能ク
ラスの ID である．

STEP B1

で BigCloneBench によって定められた機能クラスに

評価データセットに含まれる各メソッドを検索

対して割り当てた ID であり，学習データセット，評

クエリに設定し，学習データセットに対して類似

価データセットは 3. 3 の STEP A2 で作成したデータセットである．また，図 5 の正解クラス ID は，評価
データセットの各メソッドがもつ機能に基づいて，3. 1630

ソースコード検索を実行する．

STEP B2
検索結果が出力される．このとき FaCoY の場合

論文／深層学習を用いたソースコード分類手法の比較調査

は，検索結果のソースコードがランキング形式でが低くなった可能性がある．

出力される．Siamese の場合は，検索クエリの類

以上のように，LSTM を用いた分類手法は，本研究似ソースコードがスコアとともに出力されるので，で選択した深層学習を用いない既存手法よりも高精出力された類似ソースコードをスコアが高い順に度なソースコード分類を行うことができることが分並べることでランキングを作成する．

かった．

STEP B3
STEP B2 で得られたランキングに含まれる各ソー
スコードを，そのソースコードが属する機能クラスの ID に置き換える．

STEP B4

5. 妥当性の脅威
本研究の妥当性の脅威として 4 点を挙げることができる．
一つ目は，比較対象に設定したニューラルネット

3. 3 の STEP A4 で作成される分類結果では，同ワークの種類が少ない点である．本研究では広く利用

じ機能クラス ID は二つ以上重複して存在しない．

されている三つのニューラルネットワークを調査対象

したがって，Top-k の算出における条件を揃えるとしたが，ソースコード分類に適用可能なニューラル

ために，ランキングで重複した機能クラス ID のネットワークは他にも様々なものが考えられるため，

うち最も高い順位のもの以外を除外することで，今後検証していく必要がある．

再度ランキングを作成する．

二つ目は，ソースコード分類手法の精度比較調査を行う際に，一つのベンチマークを使用したため，調査以上の手順で作成したランキングを用いて Top-k を計

結果が使用したベンチマークに強く依存している可能

算し，深層学習を用いる手法とソースコード分類精度性がある．しかし，本研究で使用した BigCloneBenchを比較する．

は約 6 万のメソッドを開発者らが手作業で確認するこ

4. 3 比較結果と考察とによって作成された非常に大規模なベンチマークで深層学習を用いる分類手法と用いない分類手法の分あり，様々なソフトウェアのソースコードが含まれて類精度を表 1 に示す．この表の下 2 行は深層学習を用いる．そのため，BigCloneBench を用いることでソーいないソースコード分類手法を示している．また，こスコード分類の一般的な評価を行うことができると考の表では Top-k で最も高い数値を太字で表している．

えられるが，今後は他のベンチマークを用いた比較調

表 1 から分かるように，Top-1，Top-3，Top-5，Top-10

査を実施し，本研究と同様の傾向が得られるかを調査の全てで LSTM を用いる手法の精度は深層学習を用いする必要がある．

ない分類手法を上回った．LSTM を用いた手法のソー

三つ目は，今回の調査結果は様々な要因によって変

スコード分類精度が深層学習を用いない手法の分類精わり得る点である．ニューラルネットワークの学習結度より高かった理由として，LSTM で学習可能な情報

果に影響する要因として，隠れ層の数やノード数などであるトークンや AST ノードの順序関係とその長期のハイパーパラメータ，活性化関数，損失関数，最適的な依存関係が BigCloneBench のソースコードを分類

化アルゴリズム，データセットの分割方法が挙げられするのに重要だったことが考えられる．しかし，深層る．また，ソースコードをニューラルネットワークに学習を用いない手法では，トークンやノードの関連性

入力するために実施する前処理の手法も，結果に影響や長期的な依存関係を捉えた分類を行うことは困難でする要因であると考えられる．FNN を使用した手法にある．Siamese は n-gram を用いているため，トークン

おけるメソッドのベクトル化手法や，GCN を使用したの短期的な依存関係を捉えることはできるが，長期的手法におけるノードのベクトル化手法が結果に影響すな依存関係を捉えることはできない．そのため，分類ると考えられる．また，トークン列を学習する手法に精度が低くなったと考えられる．また，FaCoY はソー

ついては，変数名を正規化することによって結果が変スコードの類似性を捉えるために Q&A サイトにおけわると考えられる．AST を学習する手法については，る質問と回答を用いている．類似した回答文に含まれ使用する構文解析器によって出力される AST が異なているソースコードに類似性があることは確かだが，るため，結果が変わると考えられる．本研究では，比この類似性が BigCloneBench のソースコードを分類す

較する分類手法の間で以上の要因を揃えているため，るのに必要な類似性とは異なっていたために分類精度

比較結果に一定の意味はあると考えられる．しかし，
631

電子情報通信学会論文誌 2021/8 Vol. J104–D No. 8

あくまでも本研究の結果は 3. 及び 4. で説明した設定ない既存手法との精度比較を行ったのに加え，ニューのもとでの結果であるため，今後は，本研究で調査しラルネットワークを利用した手法の精度比較を行った．

なかったパラメータ設定や前処理手法についても調査

また，RNN を用いた研究が発表されている．Zhou

する必要がある．

ら [16] は深層学習を用いたソースコード補完手法を四つ目は，サポートベクターマシン（SVM）やラン提案している．この手法では学習するソースコード

ダムフォレスト（RF）など，機械学習の手法との比較表現としてクラス名・メソッド名・トークン列を利用を行っていないため，機械学習の手法が LSTM より優し，トークン列の解析には RNN を用いている．Whiteれた分類精度になる可能性がある点である．この点にら [17] は深層学習を用いた類似ソースコード検出手法

関しては，既存研究 [6], [7] にて既に深層学習を用いたを提案している．この手法ではトークンのベクトル化

ソースコード分類手法と機械学習の手法のソースコー

において RNN を利用し，このベクトルを用いて AST

ド分類精度が比較されていたため，本研究で新たに比のノードをベクトル化することで，AST の類似性を判較を行うことはせず，機械学習を行わずに意味的類似

定している．これら二つの手法は様々なソースコード

ソースコードを検索可能な最新手法である FaCoY と表現を学習することで精度向上を目的としているのにSiamese との比較を行った．ただし，既存研究 [6], [7]対し，本研究では LSTM で学習するソースコード表現

で用いられたデータセットは BigCloneBench ではなを 1 種類に限定することで，ソースコード表現と分類

い．また，比較対象として選択されたのは SVM のみ

精度の関連性調査を目的としている，である．そのため，本研究の実験を行った場合，SVM

また，GCN 以外の方法で AST を学習に用いた研究や RF 等の機械学習の手法の方が優れた分類精度になが発表されている．Mou ら [6] は，AST を 2 分木に変る可能性があるため，今後調査する必要がある．

形した後，AST ノードのベクトル表現を教師なし学6. 関 連 研 究
近年，深層学習を用いてソースコードの解析を行う研究が発表されている．

習で作成し，畳み込みカーネルを AST 全体に対してスライドすることで構文木の特徴を学習する TBCNNという手法を提案し，この手法をソースコード分類に適用している．Mou ら [6] は，SVM，DNN（本研究

まず我々は，過去に FNN を用いて類似コードブロッにおける FNN），RNN と TBCNN の分類精度を比較

クの検索を行う手法を提案した [15]．この研究では，

し，TBCNN のソースコード分類精度が優れているこFNN を用いたソースコード検索において，BoW ととを示している．また，TBCNN を除き，最適なベク

Doc2Vec の二つのソースコードベクトル化手法のど

トル化手法を選択した場合は FNN，SVM，RNN の順

ちらを用いた場合に精度が優れているかを比較してに分類精度が高いという結果も示している．ここで比おり，BoW が高い精度を示している．しかし，Big-較対象に選択されている RNN は木構造に対して用い

CloneBench はソースコード数が非常に多いデータセッ

る再帰型オートエンコーダであり，LSTM とは異なる．

トであるため，本研究で BoW を採用した場合，BoW

それに対して本研究では，精度の高かった FNN に加で生成したベクトルは次元数が膨大になり，学習に非え，Mou ら [6] が比較対象に選択していないニューラ

常に時間がかかる．そのため，本研究では Doc2Vec を

ルネットワークである LSTM と GCN を比較対象とし採用した．また，Saini ら [13] や Nafi ら [14] はソースて選択し，トークン列と AST ノードの深さ優先探索順

コードメトリクスを用いてソースコードをベクトル化

列を学習させた．その結果，LSTM にトークン列を学し，FNN を用いて類似ソースコード検出を行ってい

習させる手法が最も分類精度が高いという結果になっ

る．Saini ら [13] は，深層学習を用いない既存手法とた．Zhang ら [7] は，ソースコードの AST をステート

FNN を用いた提案手法の精度を比較し，提案手法の類

メントレベルに分割してそれぞれベクトル化してから

似ソースコード検出精度が優れていることを示していBi-directional Gated Recurrent Unit（Bi-GRU）[27] にス

る．また，Nafi ら [14] は，生成したベクトルのコサイ

テートメントベクトルのストリームを入力すること

ン類似度を計算する手法と FNN を用いた手法を比較

でソースコードをベクトル化する ASTNN という手法

し，FNN を用いた手法の方が類似ソースコード検出精を提案し，この手法をソースコード分類に適用してい度が優れていることを示している．本研究では，Saini

る．Zhang ら [7] は，LSTM などのニューラルネット

ら [13] や Nafi ら [14] の研究のように深層学習を用いワークを用いた様々な手法や SVM と ASTNN のソー

632

論文／深層学習を用いたソースコード分類手法の比較調査

スコード分類精度を比較している．ニューラルネット

選択したソースコード表現の比較は，Hua ら [20] によっ

ワークを単体で用いた手法や機械学習の手法についてて LSTM を用いた手法の方が GCN を用いた手法よりは，トークン列に対する LSTM，SVM，制御フローグも類似ソースコード検出精度が高いという結果が示さ

ラフに対する GNN の順で分類精度が高いことを示しれていたのみであった．そのため，本研究では 2. 2 でている．GNN は GCN の前身となる，グラフを学習可説明した 3 種類のニューラルネットワークに 2 種類の能なニューラルネットワークである．また，彼ら [7] のソースコード表現を組み合わせた 6 種類のソースコード

研究では，LSTM に対するトークン列や，GNN に対す分類手法の精度を比較した．また，Saini ら [13] と Nafi

る制御フローグラフやデータフローグラフなど，著者

ら [14] の研究では深層学習を用いない既存手法よりもらによって適当だと考えられたニューラルネットワー

FNN を用いた手法の方が類似ソースコード検出精度がクとソースコード表現の組合せが比較対象に選択され高いという結果が示されていたが，本研究の調査結果にている．それに対して本研究では，LSTM にグラフ由

よって，深層学習を用いない分類手法の方が FNN を用

来のソースコード表現を学習させたり，GCN にトーいた手法よりも精度が高い場合があることが分かった．

クン列由来のソースコード表現を学習させるなど，既7. む す び

存研究で比較対象に選択されていないニューラルネッ
トワークとソースコード表現の組合せに対しても比較本研究では，高精度なソースコード分類を実現でき調査を行った．その結果，LSTM とトークン列の組合

るニューラルネットワークとソースコード表現の組合

せなど，一般に既存研究で比較対象に選択されることせについて調査するため，深層学習を用いた 6 種類の多い組合せは，選択されていない組合せに比べて分の手法をソースコード分類に適用し，ベンチマークに類精度が高いことが分かった．

BigCloneBench を，評価尺度に Top-k を用いてソース

また，GCN を用いた研究が発表されている．Hua

コード分類精度を比較した．その結果，LSTM にトーら [20] は，トークン列に LSTM を，AST に Tree-LSTM

クン列を学習させる手法が最も高精度なソースコード

を，制御フローグラフに GCN を適用し，これら三つの分類を実現でき，LSTM に AST の深さ優先探索順列を

ニューラルネットワークを組み合わせることで，高い学習させる手法や GCN に AST を学習させる手法も，精度で類似ソースコード検出を行う FCCA という手法

比較的高精度なソースコード分類を実現できた．それを提案した．そして評価実験では，深層学習を用いなに対し，FNN を用いた手法の分類精度はあまり高くな

い既存手法や深層学習を用いた既存手法と比較して，かった．また，深層学習を用いる手法と深層学習を用

FCCA の類似ソースコードの検出精度が優れているこいない手法のソースコード分類精度を比較した．そのとを示している．また，FCCA は LSTM，Tree-LSTM，

結果，LSTM を用いてソースコードの構造情報を学習

GCN の三つのニューラルネットワークを組み合わせする深層学習の手法は，本研究で選択した深層学習をて利用しているが，これらの三つのニューラルネット

用いない手法よりも高精度なソースコード分類を実現

ワークを個別に用いた場合の精度比較も行っている．

できることが分かった．
今後の課題として以下の点を挙げることができる．

この結果，LSTM，Tree-LSTM，GCN の順に類似ソー
スコードの検出精度が高いことが明らかになっている．

Hua らの研究によって，トークン列と LSTM の組合•

今回用いたもの以外のニューラルネットワークやせの類似ソースコード検出精度が高いことや，制御フ

ソースコード表現に対して分類精度の調査を行う

ローグラフと GCN の組合せの精度が比較的低いこと必要がある．また，SVM や RF 等の機械学習の手が明らかになっているため，本研究では，彼らの研究の比較結果で最も高精度なトークン列と LSTM の組合法に対しても分類精度を調査する必要がある．

•

ソ ー ス コ ー ド 分 類 の ベ ン チ マ ー ク が Big-

せと，比較対象に選択されていない組合せを比較する

CloneBench のみであるため，他のベンチマークをため，トークン列，AST と FNN，LSTM，GCN を総用いた比較を行い，同様の傾向が得られるか調査

当たりで組み合わせてソースコード分類精度の比較をする必要がある．

行った．
以上のように関連研究では，2. 2 で説明した 3 種類のニューラルネットワークの比較や本研究で比較対象に•本研究で調査しなかったパラメータ設定や前処理手法を採用した場合の分類精度を調査する必要がある．
633

電子情報通信学会論文誌 2021/8 Vol. J104–D No. 8

謝 辞

本 研 究 は JSPS 科 研 費 JP18H04094，

ラルネットワークを用いた類似コードブロック検索の試み，” ソフトウェアエンジニアリングシンポジウム 2018 論

JP19K20240，JP20K11745 の助成を受けた．
文[1]

文集，pp.24–33, Tokyo, Japan, Aug. 2018.

献

[16]

mending code snippets with statistical language model,”leveraging implicit references in a web search interface for pro-

Proc. APSEC 2018, pp.79–88, Nara, Japan, Dec. 2018.

USA, Oct. 2007. DOI:10.1145/1294211.1294216

DOI:10.1109/APSEC.2018.00022[17]“Deep learning code fragments for code clone detection,”source code,” ACM Trans. Softw. Eng. Methodol, vol.23, no.3,

Proc. ASE 2016, pp.87–98, Singapore, Singapore, Sept. 2016.
DOI:10.1145/2970276.2970326

G. Kavita and F. Romano, “C# or java? typescript or javascript?

[18]

machine learning based classification of programming languages,”[5]

DOI:10.1162/neco.1997.9.8.1735

R. Yokomori, N. Yoshida, M. Noro, and K. Inoue, “Use-[19]

and M. Welling, “Modeling relational data with graph convo-

QuASoQ 2018, pp.59–66, Nara, Japan, Dec. 2018.

lutional networks,” Proc. ESWC 2018, pp.593–607, Heraklion,

S. Kawaguchi, P.K. Garg, M. Matsushita, and K. Inoue, “MudAn automatic categorization system for open source

Crete, Greece, June 2018. DOI:10.1007/978-3-319-93417-4_38[20]brid code representation for functional clone detection us-

DOI:10.1016/j.jss.2005.06.044

ing attention networks,” IEEE Trans. Rel., pp.1–15, 2020.

L. Mou, G. Li, L. Zhang, T. Wang, and Z. Jin, “Convolutional

DOI:10.1109/TR.2020.3001918[21]

processing,” Proc. AAAI 2016, pp.1287–1293, Phoenix, Arizona,

San Juan, Puerto Rico, May 2016. http://arxiv.org/abs/1511.05493

J. Zhang, X. Wang, H. Zhang, H. Sun, K. Wang, and X. Liu, “A[22]“Towards a big data curated benchmark of inter-project code

tree,” Proc. ICSE 2019, pp.783–794, Montréal, QC, Canada, May

clones,” Proc. ICSME 2014, pp.476–480, Victoria, BC, Canada,
Sept. 2014. DOI:10.1109/ICSME.2014.77

K. Kim, D. Kim, T.F. Bissyandé, E. Choi, L. Li, J. Klein,[23]

role of context types and dimensionality in learning word em-

Proc. ICSE 2018, pp.946–957, Gothenburg, Sweden, 2018.

beddings,” Proc. NAACL 2016, pp.1030–1040, Association for

DOI:10.1145/3180155.3180187

Computational Linguistics, San Diego, California, June 2016.

C. Ragkhitwetsagul and J. Krinke, “Siamese:

scalable andDOI:10.18653/v1/N16-1118[24]

tations,” Empir. Softw. Eng. J., pp.2236–2284, Aug. 2019.

China, June 2014. DOI:10.5555/3044805.3045025

L. Deng and D. Yu, “Deep learning: Methods and applications,”[25]

tributed representations of words and phrases and their composi-2014. DOI:10.1561/2000000039

tionality,” Proc. NIPS 2013, pp.3111–3119, Gardnerville, Dou-

G. Cybenko, “Approximation by superpositions of a sigmoidal

glas, Nevada, USA, Dec. 2013.
[26]

1989. DOI:10.1007/BF02551274
Neural Networks,

vol.61,

pp.85–117,

An
2015.

recurrent neural network for sentiment classification,” Proc.
EMNLP 2015, pp.1422–1432, Lisbon, Portugal, Sept. 2015.
DOI:10.18653/v1/D15-1167

DOI:10.1145/3236024.3236026
K.W. Nafi, T.S. Kar, B. Roy, C.K. Roy, and K.A. Schneider,“Clcdsa: Cross language code clone detection using syntacticalfeatures and api documentation,” Proc. ASE 2019, pp.1026–1037,
San Diego, CA, USA, Nov. 2019. DOI:10.1109/ASE.2019.00099

634

D. Tang, B. Qin, and T. Liu, “Document modeling with gated

V. Saini, F. Farmahinifarahani, Y. Lu, P. Baldi, and C.V. Lopes,
2018, pp.354–365, Lake Buena Vista, FL, USA, Oct. 2018.

[15]

[27]

DOI:10.1016/j.neunet.2014.09.003“Oreo: Detection of clones in the twilight zone,” Proc. ESEC/FSE[14]

G. Salton and M.J. McGill, Introduction to Modern Information
Retrieval, McGraw-Hill, Inc., USA, 1986.

J. Schmidhuber, “Deep learning in neural networks:
overview,”[13]

T. Mikolov, I. Sutskever, K. Chen, G.S. Corrado, and J. Dean, “Dis-Found. Trends Signal Process., vol.7, no.3–4, pp.197–387, Junefunction,” Math. Control Signals Systems, vol.2, pp.303–314, Dec.
[12]

Q. Le and T. Mikolov, “Distributed representations of sentencesand documents,” Proc. ICML 2014, pp.II–1188–II–1196, Beijing,

DOI:10.1007/s10664-019-09697-7[11]

O. Melamud, D. McClosky, S. Patwardhan, and M. Bansal, “Theand Y.L. Traon, “FaCoY: A code-to-code search engine,”

incremental code clone search via multiple code represen-[10]

J. Svajlenko, J.F. Islam, I. Keivanloo, C.K. Roy, and M.M. Mia,novel neural source code representation based on abstrace syntax
2019. DOI:10.1109/ICSE.2019.00086[9]Y. Li, D. Tarlow, M. Brockschmidt, and R.S. Zemel, “Gated graphsequence neural networks,” Proc. ICLR 2016 Poster Presentations,

USA, Feb. 2016. DOI:10.5555/3015812.3016002[8]

W. Hua, Y. Sui, Y. Wan, G. Liu, and G. Xu, “Fcca: Hy-

repositories,” J. Syst. Softw., vol.79, no.7, pp.939–953, 2006.

neural networks over tree structures for programming language[7]

M. Schlichtkrull, T.N. Kipf, P. Bloem, R. Van Den Berg, I. Titov,relationship based classification for software components,” Proc.

ablue:[6]

S. Hochreiter and J. Schmidhuber, “Long short-term memory,” Neural Computation, vol.9, no.8, pp.1735–1780, 1997.

GitHub, https://github.co/2Jif7Sg, accessed Nov. 2020.
[4]

M. White, M. Tufano, C. Vendome, and D. Poshyvanyk,

K.T. Stolee, S. Elbaum, and D. Dobos, “Solving the search for
pp.26:1–26:45, June 2014. DOI:10.1145/2581377[3]

Recom-

R. Hoﬀmann, J. Fogarty, and D.S. Weld, “Assieme: Finding andgrammers,” Proc. UIST 2007, pp.13–22, Newport, Rhode Island,[2]

S. Zhou, H. Zhong, and B. Shen, “Slampa:

藤原裕士，崔 恩 ，吉田則裕，井上克郎，“順伝播型ニュー（2020 年 11 月 7 日受付，2021 年 3 月 25 日再受付，
4 月 5 日早期公開）

論文／深層学習を用いたソースコード分類手法の比較調査

藤原 裕士
平成 29 年大阪大学基礎工学部情報科学科卒，令和元年度大阪大学大学院情報科学研究科博士前期課程了．現在は大阪大学大学院情報科学研究科博士後期課程に在学中．
深層学習を用いたコードクローン分析手法に関する研究に従事．

崔

恩

（正員）

平成 27 年大阪大学大学院情報科学研究科博士後期課程了．同年同大学大学院国際公共政策研究科助教．平成 28 年奈良先端科学技術大学院大学情報科学研究科助教．
平成 30 年より同大学先端科学技術研究科
助教（改組による）．平成 30 年より京都工芸繊維大学情報工学・人間科学系助教．博士（情報科学）．コー
ドクローン管理やリファクタリング支援手法に関する研究に
従事．

吉田 則裕

（正員）

平成 21 年大阪大学大学院情報科学研究科博士後期課程了．同年日本学術振興会特別研究員（PD）．平成 22 年奈良先端科学技
術大学院大学情報科学研究科助教．平成 26
年名古屋大学大学院情報科学研究科附属組
込みシステム研究センター准教授．平成 29年より同大学大学院情報学研究科附属組込みシステム研究セン
ター准教授（改組による）．博士（情報科学）．コードクローン
分析手法やリファクタリング支援手法に関する研究に従事．

井上 克郎（正員：フェロー）昭和 59 年大阪大学大学院基礎工学研究科博士後期課程了（工学博士）．同年大阪大学基礎工学部情報工学科助手．昭和 59
年〜61 年，ハワイ大学マノア校コンピュー
タサイエンス学科助教授．平成 3 年大阪大学基礎工学部助教授．平成 7 年同学部教授．平成 14 年より大阪大学大学院情報科学研究科教授．ソフ
トウェア工学，特にコードクローンやコード検索などのプログ
ラム分析や再利用技術の研究に従事．

635