論

学生論文特集文

深層学習を用いたソースコード分類のための動的な学習用データセット改善手法の提案
藤原裕士† a)

崔

恩瀞††

吉田

則裕†††

井上 克郎†A Dynamic Improvement of a Training Dataset for Source Code Classification Using Deep
Learning
Yuji FUJIWARA† a) , Eunjong CHOI†† , Norihiro YOSHIDA††† , and Katsuro INOUE†

あらまし 近年，深層学習を用いてソースコード分類を行う種々の手法が提案されている．深層学習を用いた手法の分類精度は学習用データセットに大きく影響される．そのため，学習用データセットの構築方法を改善することで，より高い精度のモデルを作成できる可能性がある．そこで本研究では，深層学習を用いたソースコー
ド分類のための動的な学習用データセット改善手法を提案する．提案手法では，まず，学習用データセットを用いてソースコード分類モデルの学習と検証を行う．次に，検証結果に基づいて，学習用データセットを再構築す
る．この学習と再構築を繰り返し，学習用データセットの改善を行うことで高精度のモデルを作成する．評価実験では，提案手法を用いてソースコード分類モデルを学習し，三つのベースライン手法と分類精度を比較した．
その結果，提案手法を用いて学習したモデルの分類精度が最も高いことがわかった．また，提案手法により，モデルの分類精度が 0.64 から 0.96 まで向上することを確認した．
キーワード

ソースコード分類，抽象構文木，グラフ畳み込みネットワーク，学習用データセット

度を示した．

1. ま え が き

一般的に，深層学習モデルの分類精度は学習用デー

ソフトウェア開発を効率良く行うために，開発者はタセットに大きく影響される．深層学習を用いてソー

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

スコード分類を行う既存研究 [6], [7] では，学習時間やスコード分類手法は，あらかじめ用意されたクラスに要求メモリを考慮し，ランダムにデータを抽出してク基づいて，入力として与えられたソースコードがどのラス間のデータ数を揃える手法であるランダムサンプ

クラスに属する既存ソースコードと類似しているかリングが用いられている．

を自動で識別する手法である．開発者は，このソース

しかし，ランダムサンプリングは静的な手法（モデ

コード分類手法を用いることで，再利用対象のソース

ルの学習前に 1 度だけ学習用データセットを修正する

コードを素早く特定することができる．現在まで様々手法）である．一般的にモデルの学習結果を予測するなソースコード分類手法が提案されてきた [3]〜[7]．

ことは困難なため，静的な手法は分類精度の面で非効

特に近年では，TBCNN [6] など，深層学習を用いて率的である可能性がある．そのため，モデルの学習結

ソースコード分類を行う手法が提案され，高い分類精果を用いて動的に何度も学習用データセットの改善を行うことで，より高い精度のモデルを作成できる可能† 大阪大学，吹田市

性がある．

Osaka University, 1 Yamadagaoka, Suita-shi, Osaka, 565–0871 Japan†† 京都工芸繊維大学，京都市

そこで本研究では，深層学習を用いたソースコード

Kyoto Institute of Technology, Hashikami-cho, Matsugasaki, Sakyo-ku, Kyotoshi, Kyoto, 606–8585 Japan††† 名古屋大学，名古屋市案する．提案手法では，実際に深層学習モデルの学習

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

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

分類のための動的な学習用データセット改善手法を提を行った後，モデルの検証結果に基づいて学習が正確に進んでいないクラスに類似ソースコードを追加する．

No. 4 pp. 275–284 © 一般社団法人電子情報通信学会 2021275

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

これにより，そのクラスの学習が正確に進み，低下していたモデルの分類精度が向上する．

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

評価実験では，オープンソースソフトウェアに含ま

Network，以降 GCN）[8] とは，グラフの隣接ノードをれる 20 種類の類似メソッドから，三つのベースライ

畳み込んでいくことによってノードやエッジ，グラフ

ン手法と提案手法をそれぞれ用いて学習用データセッ

全体の特徴を抽出するニューラルネットワークである．

トを構築し，ソースコード分類モデルの学習を行い，グラフの学習を行う際，深層学習モデルの入力形式に

分類精度の比較を行った．その結果，各クラス間のメ合わせて元のグラフを変形することがある [6] が，GCN

ソッド数または抽象構文木（Abstract Syntax Tree，以ではグラフの変形は不要である．そのため，グラフの降 AST）のノード数を揃えて学習させたベースライン

構造情報が欠落しないという利点がある．これにより，手法と比べて提案手法は高い精度でメソッド分類がでグラフを変形する必要があるモデルに比べ，グラフにきることを確認した．また，提案手法を用いてモデル

含まれる情報をより正確に利用した学習を行うことがの学習と類似ソースコードの追加を繰り返すことで，できる．GCN の畳み込み層の例を図 1 に示す．図 1

分類精度が向上することを確認した．
以降，2. で本研究の背景について述べる．3. で本研

右上のグラフの中央のノード 0 のベクトル表現を計算する手順について説明する．ノード 0 の畳み込み n + 1

究で提案する手法について述べる．4. で本研究の評価

層目におけるベクトルは，隣接ノードの n 層目におけ実験について述べる．5. で妥当性の脅威について述べるベクトルと各エッジ（ingoing，outgoing，self-loop）

る．6. で関連研究について述べる．最後に，7. でまとの重みから中間ベクトルを計算し，エッジごとの中間めと今後の課題について述べる．

ベクトルを全て足し合わせたベクトルを ReLU などの

2. 背

景

活性化関数（ネットワークの出力を補正する関数）に入力することで得られる．このように GCN では，ノー2. 1 ソースコード分類

ド 0 に隣接しているノード 1，2，3 のベクトル表現を本研究におけるソースコード分類手法とは，既存加味してノード 0 のベクトル表現が計算される．

ソースコードが分類された n 個の クラス C1 . . . Cn に対して，入力として与えられたソースコードを，類似

2. 3 類似ソースコード作成を目的とした
ミューテーション

ソースコードが含まれるクラス Ci (1 ≤ i ≤ n) に自動

ソースコードに対するミューテーションとは，あらで分類する手法である．この手法を用いることでソフ

かじめ定めておいたルールに基づいてソースコードを

トウェアを効率的に開発することができる．例えば，

変更することである [9], [10]．一般的に，ミューテー

ソースコードを自動で機能ごとに分類できる場合，大ションはテストケースの評価に用いられている [9]．

規模なソフトウェアリポジトリに新たに登録された

Roy らは，ミューテーションを利用して類似ソース

ソースコードに対して機能に関するタグを自動で付与

コードを作成することで，類似ソースコード検出ツー

することができる．このように，ソースコード分類手

ルの精度を評価する手法を提案している [10]．この手法を用いることで，開発者にとって必要な機能をもっ法では，類似ソースコードを作成する際のソースコー

たソースコードの検索や，既存ソースコードの再利用

ドの変更ルールをミューテーションオペレータと呼び，がより簡単になり，ソフトウェア開発の生産性の向上が期待できる．
ソースコード分類に関する研究では，現在まで，記述言語による分類 [3]，コンポーネント間の依存関係
による分類 [4]，プログラムの意味（機能性）による分類など，多様な手法が提案されている．また，プログ
ラムの意味によるソースコード分類は様々な粒度で取り組まれており，ソフトウェア単位の分類手法 [5] や，
メソッド単位の分類手法 [7] などが存在する．
特に近年，深層学習を用いることで高い精度でソー
スコード分類を行う手法が提案されている [6], [7]．
276

図 1 GCN の畳み込み層の例

論文／深層学習を用いたソースコード分類のための動的な学習用データセット改善手法の提案

以下の 14 種類のミューテーションオペレータを定義

具体的には，データ数が多いクラスのデータを削除ししている．

たり，データ数が少ないクラスに新たなデータを追加

mCW 空白の数を変更する．

したりしている．特に，データ数が多いクラスからラmCC コメントを変更する．

ンダムにデータを削除してクラス間のデータ数を揃え

mCF 改行などのコーディングスタイルを変更する．

る手法はランダムサンプリングと呼ばれる．深層学習

mSRI 変数名などのユーザ定義名，変数の型などを規を用いてソースコード分類に取り組んだ多くの既存研則的に変更する．

究 [6], [7] では，このランダムサンプリングが用いられ

mARI 変数名などのユーザ定義名，変数の型などを不ている．

規則的に変更する．

しかし，既存の学習用データセット改善手法は静的

mRPE 変数単体の式を別の式に置き換える．

な手法である．本研究において静的な手法とは，各クmSIL ある文にわずかな挿入を行う．

ラスのデータの重みを均等にすることを目的とし，モmSDL ある文の一部を削除する．

デルの学習結果を用いずに学習用データセットを 1 度

mILs 一つ以上の文を挿入する．

だけ修正する手法である．一般的にモデルの学習結果

mDLs 一つ以上の文を削除する．

を予測することは困難なため，1 度しか学習用データ

mMLs 一つ以上の文を修正する．

セットを修正しない静的な手法は分類精度の面で非効

mRDS 宣言文を並べ替える．

率的である可能性がある．そのため，モデルの学習結

mROS 宣言文以外の文を並べ替える．

果を用いて動的に何度も学習用データセットの改善を

mCR if 文などの制御構造を別のものに置き換える．

行うことで，より高い精度のモデルを作成できる可能

図 2 は，ミューテーションオペレータ mSDL をソー
スコードに適用した例である．図 2 (a) の 6 行目の文を削除することで，元のソースコードと構文的に類似性がある．

3. 提 案 手 法

したソースコード（図 2 (b)）が作成された．本研究で本研究では，深層学習を用いたソースコード分類のは，Roy らが定義したミューテーションオペレータをための動的な学習用データセット改善手法を提案する．

利用し，類似ソースコードを作成する．

データセットの構築方法は深層学習モデルの学習結果

2. 4 学習用データセットの改善手法に大きな影響を与えるため，より適切なデータセット

一般的に，深層学習において学習用データセットのを構築することで，モデルの分類精度の向上が期待で構築方法はモデルの分類精度に大きな影響を与える．

きる．

そのため，学習用データセットを改善するための手法

提案手法は 2. 4 で説明した既存の学習用データセッが提案されている [11]．深層学習を用いた分類モデル

ト改善手法と異なり，ソースコード分類モデルの学習の精度を低下させる原因の一つに不均衡データ問題が結果に基づいた動的な学習用データセットの再構築がある．不均衡データ問題とは，クラス間でデータ数に大きな特徴である．一般的に深層学習の学習結果を予

不均衡が存在するため，あるクラスに関して学習が正測することは困難なため，提案手法では実際に深層学確に進まず，モデルの分類精度が低下するという問題

習モデルの学習を行った後，その学習結果に基づいてである．Yan ら [11] は，この不均衡データ問題を解消

データセットを再構築する．

することで学習用データセットの改善を図っている．

3. 1 用語の定義
類似ソースコードセット 構文的に互いに類似している
ソースコードの集合を類似ソースコードセット S と定義する．クラス数を n とする場合，本研究で扱うソースコードは類似ソースコードセット S0 . . . Sn−1 のいず
れか一つにのみ分類される．類似ソースコードセット

Si (0 ≤ i ≤ n − 1) に属するソースコードは互いに類似している．また，S j , Sk (0 ≤ j ≤ n−1, 0 ≤ k ≤ n−1, j , k)の二つの類似ソースコードセットから一つずつ抽出し
図 2 ミューテーションオペレータ mSDL の例

た二つのソースコードは互いに類似していない．
277

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

類似ソースコードセット ID 本研究では，n 個の各類

STEP A1 STEP T (3. 2. 1) の手順に基づいて，学習用

似ソースコードセットに対して固有のインデックス

データセットをソースコード分類モデルに学習させる．

0 . . . n − 1 を割り当て，モデルにそのインデックスを予STEP A2 ソースコード分類モデルが学習用データ

測させることでソースコード分類モデルを実現していセットを正確に学習できているか検証するため，STEPる．ここで，各類似ソースコードセットに対して割りC (3. 2. 2) の手順に基づいて，学習済みモデルを用い当てられる固有のインデックス 0 . . . n − 1 を類似ソーて学習用データセット中のソースコードを分類する．

スコードセット ID と定義する．

その結果，モデルによって，各ソースコードに対す

学習用データセット モデルの学習に使用するソース

る類似ソースコードセット ID の推測結果が出力さコード群を学習用データセットと定義する．

れるので，正しい ID が出力されたソースコード (true

評価用データセット モデルの分類精度の評価に使用

classification) と，間違った ID が出力されたソースコー

するソースコード群を評価用データセットと定義する．

ド (false classification) に分割する．

3. 2 動的な学習用データセット改善手法

STEP A3 間違った ID が出力されたソースコードにまず，本研究で提案する動的な学習用データセット

対して 2. 3 のミューテーションを適用し，一定数の類改善手法を STEP A（Adjustment）と定義する．STEP

似ソースコードを作成する．本研究では，一つの類似

A では，ソースコード分類モデルの学習及び学習用

ソースコードを作成する際，AST に変更を加えないオ

データセットへのソースコードの追加を，モデルの分ペレータである mCW，mCC，mCF を除いた 11 種類

類精度が向上しなくなるまで繰り返す．このとき，初のオペレータのうちいずれか 1 種類をランダムに選択

期状態の学習用データセットは，ランダムサンプリン

して適用する．

グで構築する．

STEP A4 ミューテーションにより作成された類似ソー

本研究では，2. 2 で紹介した GCN を用いたソース

スコードに対して，元のソースコードに割り当てられ

コード分類手法を利用する．このソースコード分類手ていた類似ソースコードセット ID と同じ ID を付与し法は．AST をそのまま学習データとして利用することた後，一定数を学習用データセットに追加する．

ができる．そのため，深層学習を用いた既存手法と異STEP A5 以上の STEP A1〜A4 におけるモデルの学

なり AST を入力形式の都合によって変化させないの習と類似ソースコードの追加を，false classification ので，プログラムの構造情報が欠落しないという利点が数が減少しなくなるまで繰り返す．

ある．この分類手法は，モデルの学習を行う STEP T

3. 2. 1 GCN を用いたソースコード分類（Training）と学習済みモデルを用いてソースコードのモデルの学習手順 (STEP T)

分類を行う STEP C（Classification）の二つの手順で構成されている．

STEP T では教師あり学習によってソースコード分類モデルを作成する．STEP T の概要を図 4 に示す．

STEP A の概要を図 3 に示す．

STEP T1 学習対象のソースコードから類似ソースコー
ドセットを構築し，各類似ソースコードセットに対して固有の類似ソースコードセット ID を付与する．

STEP T2 各ソースコードの構文解析を行い，AST に変換する．

STEP T3 各 AST を，隣接行列と特徴行列の形式に変換する．

STEP T4 隣接行列と特徴行列を説明変数，類似ソー
スコードセット ID を目的変数として，教師あり学習による GCN の学習を行い，ソースコード分類モデルを作成する．

3. 2. 2 学習済みモデルを用いたソースコード
分類手順 (STEP C)

STEP C では，STEP T で作成した学習済みのモデル
図 3 STEP A の概要

278を利用してソースコード分類を行う．STEP C の概要

論文／深層学習を用いたソースコード分類のための動的な学習用データセット改善手法の提案
表1
OS
CPU
GPU
ライブラリ

実験環境

Ubuntu 16.04.6 LTS
Intel(R)Xeon(R) CPU E5-2623 v4 2.60GHz
NVIDIA Tesla V100 32GB 1.53GHz
Tensorflow 1.13.1（注 3）

まれるメソッドが，モデルによって正しく分類される割合とする．また本評価実験では，分類対象のソース
コード単位はメソッドとし，メソッド名や引数は利用せず，メソッド本体の記述を基に分類を行った．評価
実験でメソッドを分類対象にした理由は，メソッドは一つの機能のまとまりであるため，再利用対象になりやすいからである．本評価実験では，STEP T2 におけるメソッドの AST 変換は ANTLR（注 1）を使用し，その文法ファイルには CPP14.g4（注 2）を使用した．また，

GCN の実装は Kipf らの実装 [12] を使用した．本評価
図 4 STEP T の概要

実験を行った環境を表 1 に示す．

4. 1 データセット
評 価 実 験 で は ，オ ー プ ン ソ ー ス ソ フ ト ウ ェ ア

OpenSSL（注 4）のバージョン 0.9.1 から 1.1.1 までの 13バージョンにおいて，バージョン間で編集が行われた

20 文以上のメソッドを利用した．本実験では，同じ
図 5 STEP C の概要

プロジェクトの各バージョンにおいて，ファイルパス
を含め同じ名称をもつメソッドは同じ機能をもち，異なる名称をもつメソッドは異なる機能をもつという仮を図 5 に示す．

定の下で類似ソースコードセットを作成した．まず，

STEP C1 分類対象のソースコードの構文解析を行い，学習や評価に使用する類似ソースコードセットを選択

AST に変換した後，隣接行列と特徴行列の形式に変換した．具体的には，バージョン間で編集が行われていする．

る同一名称をもつメソッドを集めた類似ソースコード

STEP C2 隣接行列と特徴行列をソースコード分類モ

セットを作成した．ここで，メモリ容量の都合上，作成

デルに入力する．

した類似ソースコードセットをランダムに 20 個を選STEP C3 分類対象のソースコードに対する類似ソー

択して使用した．次に，各類似ソースコードセットかスコードセット ID の推測結果が出力される．

ら学習用データセットと評価用データセットを作成しSTEP C4 分類対象のソースコードを，出力された類似た方法を図 6 に示す．まず，類似ソースコードセット

ソースコードセット ID が示す類似ソースコードセッに含まれる最も古いバージョン以外のメソッドを評価

トとして分類する．

用データセットに追加した．このとき，バージョン間

4. 評 価 実 験で記述に差分のあるメソッドだけを追加した．この結果，本評価実験における評価用データセットのメソッ

提案手法が学習用データセットの改善に有効である

ド数は 166 個となった．次に，類似ソースコードセッ

ことを確認するために評価実験を行った．評価実験でトに含まれる最も古いバージョンのメソッドにミュー

は，3 種類のベースライン手法と提案手法，計四つのテーションを適用することで類似メソッドを一定数作

手法をそれぞれ用いて学習用データセットを構築し，構築した各学習用データセットを学習させた各モデルの分類精度を比較した．本評価実験における分類精度
は，4. 1 に従って作成される評価用データセットに含（注 1）：https://www.antlr.org/（注 2）：https://github.com/antlr/grammars-v4/tree/master/cpp（注 3）：https://www.tensorflow.org/（注 4）：https://www.openssl.org/

279

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

各手法で構築したデータセットの詳細

手法
Method-oriented-50
Method-oriented-500
Node-oriented
提案手法

表3
図6

学習用 評価用 割合
1000
166
6:1
10000
166 60:1
6461
166 39:1
1360
166
8:1

類似メソッド分類の精度

手法
Method-oriented-50
Method-oriented-500
Node-oriented
提案手法

学習用・評価用データセット作成方法の概要

成し，学習用データセットに追加した．ここで，一つ

分類精度
0.64
0.81
0.90
0.96

の類似メソッドを作成する際，AST に変更を加えないミューテーションオペレータである mCW，mCC，た，20 種類の類似ソースコードセットを使用するた

mCF を除いた 11 種類のオペレータのうちいずれか 1

め，Method-oriented-n における学習用データセットの種類をランダムに選択して適用する．また，作成及びメソッド数は n ∗ 20 個である．

追加する類似メソッドの数は 4. 2 のデータセット構

Node-oriented AST ノードの総数が各類似ソースコー

築手法に依存する．これを選択した 20 個の類似ソードセットにつき約 15000 個になるように，ミューテー

スコードセットに対して適用し，学習用データセット

ションを適用して作成したメソッドを学習用データと評価用データセットを作成した．以上のようにデーセットに使用する．この結果，Node-oriented におけるタセットを作成することで，構文的に一致しているメ

学習用データセットのメソッド数は 6461 個となった．

ソッドが学習用データセットと評価用データセットの提案手法 Method-oriented-50 の状態から学習を開始

両方に含まれることを避けた．これにより，未学習のし，3. 2 STEP A4 では 10 個のメソッドを新たに追加

メソッドに対する深層学習モデルの分類精度を評価すする．したがって，Method-oriented-50 は提案手法のることができる．

初期状態である．また，提案手法を用いて学習用デー

しかし，ミューテーションが適用されて作成されたメソッドは元のメソッドと異なる類似ソースコード

タセットを改善した結果，最終的な学習用データセッ
トのメソッド数は 1360 個となった．

セットに属する可能性がある．この問題を解決するた

また，各手法におけるデータセットの詳細を表 2 にめに，本論文の第一著者は 20 種類の類似ソースコード

示す．ここで，“学習用” は学習用データセットに含まセットを全て目視で確認し，異なる類似ソースコード

れるメソッド数，“評価用” は評価用データセットに含

セットに属するメソッド間には，実現機能に大きな差まれるメソッド数，“割合” は，“学習用” と “評価用”

異があることを確認した．また，ミューテーションオの比である．

ペレータを適用する際，変更する行数の割合をメソッ
ド全行数の 5% 以下に制限した．以上の目視確認と変4. 3 実 験 手 順
本評価実験は以下の手順で行う．

更行数割合の制限により，ミューテーションによって(1) 4. 2 で説明した四つの手法に基づいて，4. 1 のとお機能がわずかに変わったメソッドを作成した場合でもりに選択した類似ソースコードセット 20 個から，学元のメソッドと類似しているため，元のメソッドと同習用データセットを構築する．

じ類似ソースコードセットに含まれる．

(2) 手順（1）で構築した 4 種類の学習用データセット

4. 2 データセット構築手法

をそれぞれ用いて学習を行い，四つのソースコード分

3 種類のベースライン手法と提案手法の詳細は以下

類モデルを作成する．

のとおりである．

(3) 評価用データセットを用いて，各ソースコード分

Method-oriented-n ミューテーションを適用して作成

類モデルの分類精度を評価する．

されたメソッドを各類似ソースコードセット ID につ4. 4 実 験 結 果

き n 個ずつ学習用データセットに使用する．本評価実

各データセット構築手法の分類精度を表 3 に示す．

験では n = 50, 500 の 2 通りについて実験を行う．ま

この表から分かるように，提案手法で構築したデータ

280

論文／深層学習を用いたソースコード分類のための動的な学習用データセット改善手法の提案

セットを学習させたモデルの分類精度が最も高い．次提案手法が有効であることが明らかになった．また，に Node-oriented で構築したデータセットを学習させ

図 7 において，分類精度が低下する場合がある．これたモデルの分類精度が高い．Method-oriented-500 で構

は，STEP A4 において類似ソースコードを学習用デー

築したデータセットを学習させたモデルの分類精度はタセットに追加する際，追加前よりも追加後の方が理3 番目に高く，Method-oriented-50 で構築したデータ

想的な学習データ数の比率から離れてしまったことにセットを学習させたモデルの分類精度が最も低いことよるものだと考えられる．

が分かった．

次に，本評価実験では学習用データセットの類似

また，3. 2 の STEP A5 によってモデルの学習と類似

ソースコードの個数を単調に増加させたが，逆に類似

ソースコードの追加が繰り返されたときの分類精度のソースコードの個数を減少させる手法も考えられる．

変化を図 7 に示す．この図より，STEP A5 によって

ただし，本評価実験においては効率的ではない．まず動的に類似ソースコードの追加を行った結果，ソース

図 7 のとおり，本評価実験では初期状態の分類精度がコード分類モデルの分類精度は 0.64 から 0.96 まで向

0.5 を超えており，20 クラス分類モデルとしてある程

上することが確認できた．

度高い精度である．そのため，学習用データセットを

4. 5 考察大胆に変更する必要性は低く，微調整を行うべき段階

評価実験では，学習用データセットを改善するためであると考えられる．また，分類結果について調べたのベースライン手法三つと提案手法の計四つの手法で結果，正しく分類できた類似ソースコードセットの方構築した学習用データセットを学習させた各ソースが多いことを確認した．そのため，類似ソースコード

コード分類モデルの分類精度を比較した．その結果，を増加させる手法のほうが学習用データセットの修正

表 3 から分かるように，提案手法の学習用データセッ

量が少なく済み，学習用データセットの微調整に適しトを学習させたモデルの分類精度が最も高いことがている．そのため，分類精度が 0.5 以上の場合は類似分かった．分類結果を確認したところ，ベースライン

ソースコードの個数を増加させる手法が効率的だと考手法では，評価用データセットに含まれるメソッドがえられる．反対に分類精度が 0.5 より低い場合には類全く分類されない類似ソースコードセットが存在し似ソースコードの個数を減少させる手法も視野に入れた．その反面，提案手法では評価用データセットに含るべきである．

まれるメソッドが全く分類されない類似ソースコード

また，提案手法によって改善された後の学習用デー

セットは存在しなかった．このように，提案手法を用タセットのメソッド数と AST ノード数の詳細を表 4いることで分類精度を向上させられることが明らかにに示す．この表から分かるように，提案手法を用いてなった．

構築した学習用データセットにはメソッド数と AST

また，図 7 から分かるように，モデルの学習結果にのノード数に各類似ソースコードセット間の不均衡が基づいた類似ソースコード追加 (STEP A5) を繰り返す存在する．しかし，本研究における評価実験では，提ことで，分類精度を向上させることができた．この結案手法を用いて構築したデータセットを学習させたモ果からも，学習用データセット改善手法の一つとして

デルの分類精度が最も高かった．このように，ベースライン手法のようにクラス間のデータ数を揃えることで構築したデータセットより，最終的にメソッド数やノード数が不均衡だったとしても，ソースコード分類
モデルの学習結果に基づいて動的に再構築した学習用
データセットの方がより正確な深層学習モデルの学習

表4

図7

繰り返し回数と分類精度提案手法による改善後のデータセットの詳細
統計量
類似ソースコードセットの個数
メソッド数の最大値
メソッド数の最小値
セット合計ノード数の最大値
セット合計ノード数の最小値

値
20
110
50
20717
4462

281

電子情報通信学会論文誌 2021/4 Vol. J104–D No. 4を実行できることが分かった．

5. 妥当性の脅威
本研究の妥当性の脅威として，3 点を挙げることができる．

響について調査することがこの評価実験の目的である．
この評価実験の結果，本研究で用いた分類手法に該当する手法（文献 [13] 表 4 の “BoW・識別子名正規化”）の分類精度は 0.79 を記録した．本研究の提案手法の評価実験結果と比べて分類精度は 0.17 だけ低下して一つめは，評価実験において，提案手法を適用したいるものの，OpenSSL と異なるソフトウェアから収集対象が “GCN を用いたソースコード分類手法” のみでした類似ソースコードに対する分類精度としては十分ある点である．この点に関しては，提案手法を用いるに高く，過学習の影響は小さいと考えられる．

目的が “深層学習を用いたソースコード分類の際に必要となる学習用データセットの改善” であるため，提案手法を適用する対象となるソースコード分類手法に

6. 関 連 研 究
6. 1 不均衡データの効率的な学習ついての議論は主眼ではないと考えられる．しかし，

2. 4 で説明したとおり，学習用データセットのクラ他のソースコード分類モデルに対して提案手法を適用

ス間にデータ数の不均衡が存在するとモデルの学習結した場合に同様の効果が得られることは不明なため，果や効率に悪影響を及ぼす可能性がある．そのため，

今後検証する必要がある．

不均衡データの効率的な学習に多くの研究者が取り組二つめは，評価実験で用いた類似ソースコードセッんでいる．

トが 20 個と，比較的少ない点である．実験に使用す

Yan ら [11] は，オーバサンプリングやダウンサンプ

る類似ソースコードセットの個数を増やす場合，デーリングを用いて学習用データセットを構築すること

タの不均衡が大きくなり，分類精度が向上するまでにで，不均衡データに対応した分類モデルの学習手法を更に繰り返し回数が必要になると考えられる．3. 2 の提案している．この手法は学習用データセットを静的STEP A を繰り返すごとに，図 7 のように分類精度は向に改善することで不均衡データ問題に対処している．

上すると予想されるため，提案手法の有効性は損なわ

また，Yan ら [14] は，ブートストラップ法を畳み込みれないと考えられるが，今後，用いる類似ソースコー

ニューラルネットワーク（CNNs）に組み込むことで，ドセットの数を増加させた評価実験を行うことで検証

マルチメディアデータセットの不均衡データ問題に対する必要がある．

処した分類モデルの学習手法を提案している．Chen

三つめは，本研究で用いた分類手法では，ミューと Shyu [15] は，k 平均法を用いて，不均衡データに対テーションによって作成された類似メソッドをモデ応した分類手法を提案している．これら二つの手法はルの学習に使用するため，過学習が発生している可能

学習アルゴリズムを静的に修正することで不均衡デー性があるという点である．この点について，筆者の文タ問題に対処している．本研究の提案手法は，学習用

献 [13] の 5. において評価実験を行った．この評価実

データセットを動的に改善する点でこれらの既存手法

験ではまず，本研究の提案手法で OpenSSL を用いたとは異なる．

学習用データセットを作成した．次に，OpenSSL の派

6. 2 深層学習によるソースコード分類

生ソフトウェアである BoringSSL（注 5）と LibreSSL（注 6）

近年，深層学習を用いてソースコード分類を行う研から，学習用データセットのメソッドと同じメソッド
名をもつメソッドを評価用データセットに追加した．

究が発表されている．

Mou ら [6] は，AST を 2 分木に変形した後，AST

更に OpenSSL と無関係なソフトウェアの一つであるノードのベクトル表現を教師なし学習で作成し，ツApache httpd（注 7）から，学習用データセットのメソッド

リーベースの畳み込みカーネルを AST 全体に対してと類似したメソッド名をもつメソッドを評価用データ

スライドすることで AST 全体の特徴を捉える TBCNN

セットに追加した．このように学習用データセットにというモデルを提案し，このモデルをソースコード分

利用するソフトウェアと評価用データセットに利用す類に適用している．Zhang ら [7] は，ソースコードのるソフトウェアを異なるものにすることで過学習の影

AST をステートメントレベルに分割してそれぞれベ（注 5）：https://boringssl.googlesource.com/（注 6）：https://www.libressl.org/（注 7）：https://httpd.apache.org/（Bi-GRU）[16] にステートメントベクトルのストリー

クトル化してから Bi-directional Gated Recurrent Unit

282

ムを入力することでソースコードをベクトル化する

論文／深層学習を用いたソースコード分類のための動的な学習用データセット改善手法の提案

ASTNN という深層学習モデルを提案し，このモデル
をソースコード分類に適用している．

文[1]

leveraging implicit references in a web search interface for pro-

以上の既存手法はモデルの入力形式に合わせて AST

grammers,” Proc. UIST 2007, pp.13–22, New York, NY, USA,を変形するが，本研究で利用したソースコード分類手法は，GCN を使うことにより，AST の構造をそのま献

R. Hoﬀmann, J. Fogarty, and D.S. Weld, “Assieme: Finding andOct. 2007. DOI:10.1145/1294211.1294216[2]

ま学習できることが特徴である．

K.T. Stolee, S. Elbaum, and D. Dobos, “Solving the search forsource code,” ACM Trans. Softw. Eng. Methodol., vol.23, no.3,
pp.26:1–26:45, June 2014. DOI:10.1145/2581377

7. む す び[3]

G. Kavita and F. Romano, “C# or java? typescript or javascript?
machine learning based classification of programming languages,”

本研究では，深層学習を用いたソースコード分類のための動的な学習用データセット改善手法を提案した．

https://github.co/2Jif7Sg, 2019.
[4]

relationship based classification for software components,” Proc.

提案手法では，ソースコード分類モデルの学習を行った後，学習用データセットを用いてモデルの分類精度

R. Yokomori, N. Yoshida, M. Noro, and K. Inoue, “UseQuASoQ 2018, pp.59–66, Nara, Japan, Dec. 2018.

[5]

S. Kawaguchi, P.K. Garg, M. Matsushita, and K. Inoue, “Mud-を検証する．そして，正しく分類できなかった学習用

ablue: An automatic categorization system for open source repos-

データセットのソースコードに対してミューテーショ

itories,” J. Systems and Software, vol.79, no.7, pp.939–953, 2006.

ンを行い，作成された類似ソースコードを学習用デー
タセットに追加する．

DOI:10.1016/j.jss.2005.06.044[6]neural networks over tree structures for programming language

評価実験では，オープンソースソフトウェアを対象

processing,” Proc. AAAI 2016, pp.1287–1293, Phoenix, Arizona,
USA, Feb. 2016. DOI:10.5555/3015812.3016002に，ベースライン手法と提案手法の計四つのデータセット構築手法で構築した各学習用データセットを[7]

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

度を比較した．その結果，提案手法を用いて構築した

2019. DOI:10.1109/ICSE.2019.00086[8]

lutional networks,” Proc. ESWC 2018, pp.593–607, Heraklion,を用いてモデルの学習と類似ソースコードの追加を繰

Crete, Greece, June 2018. DOI:10.1007/978-3-319-93417-4_38[9]•

不均衡データ問題を解決するための既存手法と提no.5, pp.649–678, Sept. 2010. DOI:10.1109/TSE.2010.62[10]matic framework for evaluating code clone detection tools,”

本研究の GCN を用いたソースコード分類手法とProc. ICSTW 2009, pp.157–166, Denver, CO, USA, April 2009.

提案手法を適用し，提案手法の有効性を評価する．

DOI:10.1109/ICSTW.2009.18[11]法の有用性を評価する．

IRI 2014, pp.561–568, Redwood City, CA, USA, Aug. 2014.
DOI:10.1109/IRI.2014.7051939[12]

grés Neptune, Toulon, France, April 2017.
[13]

研究科修士学位論文，Feb. 2020. http://sel.ist.osaka-u.ac.jp/

提案手法の初期状態が分類精度に与える影響について調査する．

•藤原裕士，“抽象構文木とグラフ畳み込みネットワークを用いた類似ソースコード検索，” 大阪大学大学院情報科学

評価実験を行い，提案手法の汎用性を評価する．

•

T.N. Kipf and M. Welling, “Semi-supervised classification withgraph convolutional networks,” Proc. ICLR 2017, Palais des Con-

評価実験の結果が OpenSSL に特化している可能性がある．そのため，他のソフトウェアに対して

Y. Yan, Y. Liu, M.-L. Shyu, and M. Chen, “Utilizing concept
correlations for eﬀective imbalanced data classification,” Proc.

学習させる類似ソースコードセットの数を増加させた，より大規模なデータセットに対する提案手•

C.K. Roy and J.R. Cordy, “A mutation/injection-based auto-

案手法の分類精度を比較する．
は異なる，既存のソースコード分類手法に対して•

Y. Jia and M. Harman, “An analysis and survey of the developmentof mutation testing,” IEEE Trans. Software Engineering, vol.37,

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

•

M. Schlichtkrull, T.N. Kipf, P. Bloem, R. Van Den Berg, I. Titov,and M. Welling, “Modeling relational data with graph convo-

スコードを分類することを確認した．また，提案手法
り返すことで，分類精度が向上することを確認した．

J. Zhang, X. Wang, H. Zhang, H. Sun, K. Wang, and X. Liu, “Anovel neural source code representation based on abstrace syntax

用いてソースコード分類モデルの学習を行い，分類精
データセットで学習したモデルが最も高い精度でソー

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

lab-db/Mthesis/contents.ja/150.html[14]

Y. Yan, M. Chen, M.-L. Shyu, and S.-C. Chen, “Deep learning

STEP A4 におけるソースコードの追加個数が，学

for imbalanced multimedia data classification,” Proc. ISM 2015,

習用データセット改善の過程や最終的な分類精度

pp.483–488, Miami, FL, USA, Dec. 2015.

にどのような影響を与えるか調査する．
謝 辞

本 研 究 は JSPS 科 研 費 JP19K20240，

JP18H04094 の助成を受けた．

DOI:10.1109/ISM.2015.126[15]

C. Chen and M.-L. Shyu, “Clustering-based binary-class classification for imbalanced data sets,” Proc. IRI 2011, pp.384–389, Las
Vegas, NV, USA, Aug. 2011. DOI:10.1109/IRI.2011.6009578

283電子情報通信学会論文誌 2021/4 Vol. J104–D No. 4[16]

D. Tang, B. Qin, and T. Liu, “Document modeling with gatedrecurrent neural network for sentiment classification,” Proc.
EMNLP 2015, pp.1422–1432, Lisbon, Portugal, Sept. 2015.
DOI:10.18653/v1/D15-1167（2020 年 5 月 18 日受付，8 月 27 日再受付，
12 月 1 日早期公開）

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

崔

恩瀞

（正員）

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

吉田 則裕

（正員）

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

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

284