情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)

言語モデルによるソースコードの「自然さ」を利用した自動生成ファイルの特定
土居 真之1,a)

肥後 芳樹1,b)

有馬 諒1,c)

下仲 健斗1,d)

楠本 真二1,e)

受付日 2018年4月6日, 採録日 2018年11月7日

概要：ソースコードの解析において，解析対象のソースファイルの中には自動生成ファイルが含まれていることがある．自動生成ファイルの存在が解析に悪影響を及ぼす場合があるため，多くの場合自動生成
ファイルは除外して解析する必要がある．自動生成ファイルを除外する方法として，ソースコードが自動生成ファイルであるかを目視で判定するという方法がある．しかしこの方法は時間的コストが大きくなってしまうといった問題がある．他にも自動生成ファイル内に存在する特有のコメント文を文字列検索する
ことにより特定するという方法があるが，この方法に関しても，自動生成ファイル特有のコメント文が消された場合に，自動生成ファイルを自動的に特定できないといった問題がある．そこで本研究では，自動生成コードとしての「自然さ」と人が作成したコードとしての「自然さ」を比較することで任意の自動生
成ファイルを自動的に特定する手法を提案する．コードの自然さ，すなわち，自動生成あるいは人が生成したコードとしてもっともらしい度合いは，確率的言語モデルである N-gram 言語モデルによって数値化する．この提案手法を評価するために，4 つの自動生成プログラムから生成された自動生成ファイル群を対象に実験を行った．その結果，高い精度で自動生成ファイルを特定できた．
キーワード：自動生成コード，N-gram 言語モデル，ソースコード解析

Identification of Auto-generated Files
Using Naturalness of Source Code by Language Model
Masayuki Doi1,a)Yoshiki Higo1,b)

Ryo Arima1,c)Kento Shimonaka1,d)Shinji Kusumoto1,e)Received: April 6, 2018, Accepted: November 7, 2018

Abstract: In source code analysis, target source ﬁles include auto-generated ﬁles in some cases. However,auto-generated ﬁle may adversely aﬀect the source code analysis, and so it is often necessary to exclude theauto-generated ﬁles before analyzing. A way of excluding auto-generated ﬁles is visually determining whether
each source ﬁle is an auto-generated ﬁle or not, but it takes too much time to see source ﬁles manually. Another way is searching special comments which are included in the auto-generated ﬁle, An issue of the way
is when such special comments have deleted for some reasons, the ﬁle cannot be identiﬁed automatically.
Therefore, in this technique, we propose a way to automatically identify auto-generated ﬁles by comparing“naturalness” as an auto-generated ﬁle and as a handwritten ﬁle. The naturalness of the ﬁles, that is, thedegree that is likely to be auto-generated or handwritten code, is quantiﬁed by a N-gram language model
which is a probabilistic language model. In order to evaluate the proposed techinique, experiments wereconducted on datasets which are groups of generated ﬁles from four auto-generated Java ﬁles, handwritten
Java ﬁles, JavaScript ﬁles translated from TypeScript ﬁles and JavaScript ﬁles. As a result, we were able toidentify auto-generated ﬁles with very high accuracy.
Keywords: auto-generated code, N-gram language model, source code analysis

1a)

大阪大学大学院情報科学研究科
Graduate School of Information Science and Technology,
Osaka University, Suita, Osaka 565–0871, Japan
m-doi@ist.osaka-u.ac.jp

c 2019 Information Processing Society of Japan


b)
c)
d)
e)

higo@ist.osaka-u.ac.jp
r-arima@ist.osaka-u.ac.jp
s-kento@ist.osaka-u.ac.jp
kusumoto@ist.osaka-u.ac.jp642

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)

1. まえがきN-gram 言語モデルとは，既存のコードの字句の並びからモデルを生成することにより，未知のファイルのモデル

近年，ソースコード解析に関する研究がさかんに行われに対する自然さ，すなわちモデルらしさを数値として出力ている．たとえば，コードクローンに関する研究*1 や，リする統計的言語モデルである．提案手法では自動生成ファ

ポジトリマイニングに関する研究*2 などが行われている．

イルだと判明しているソースファイル，および自動生成でソースコード解析において，解析対象のソフトウェアに含ないファイルと判明しているソースファイルをそれぞれ収まれるソースコードファイルのなかには自動生成ファイ集する．収集したソースファイルから，自動生成ファイル

ルが含まれており，ソースコード解析を行う際に自動生の言語モデルと自動生成でないファイルの言語モデルを

成ファイルが弊害となることがある．たとえば，コードク生成する．それらを用いて未知のソースコードの自動生成

ローン検出結果を分析して開発プロセスに対する知見をファイルとしての自然さと自動生成でないファイルとして得ようとする場合，自動生成ファイルの存在が弊害となの自然さをそれぞれ求め，これらを比較することによってる．多くの場合，自動生成ファイルから検出されたコード

自動生成ファイルかどうかを判定する．

クローンは，分析対象とはしない．これは自動生成ファイ

提案手法を評価するために，4 種類の自動生成 Java ファ

ルから検出されるコードクローンは自動生成ツールによりイルと JavaScript に変換した TypeScript ファイルによる生成されたコードであり，コピーアンドペーストによって評価実験を行った．実験の結果，高い精度で自動生成ファ

生成されたコードではないためである．したがって，UCI

イルを特定できることを確認した．

データセット*3 のような自動生成ファイルを含んだ複数のソフトウェアを対象としてコードクローン検出を行うと，

2. 準備

開発者の書いたソースファイルに存在するコードクローン

本章では，自動生成ファイルの定義，収集および特定方が目立たなくなってしまうことが知られている [11], [14]．

法について述べる．自動生成ファイルとは，プログラムに実際に既存研究ではライブラリ化可能なコードクローンをよって自動的に生成されたソースファイルのことである．

検出する研究で自動生成ファイルを対象から手動で除去しソースファイルを自動で生成するプログラムは多数存在て実験している [13]．また，リポジトリマイニングにおいする．そのなかでも本研究では比較的収集が容易であるては，ソースコードを追跡する際に自動生成部分の追跡に

パーサジェネレータによって生成された Java ファイルと，

よって解析時間が増加してしまう [10]．したがって，ソーJavaScript に変換された TypeScript を対象とする．

スコード解析において自動生成ファイルは除外すべき存在
である．
通常，自動生成ファイルにはそれ自身が自動生成ファイ
ルであると明示するためのコメント文が残されている．ゆ研究の準備段階において，著者らがパーサジェネレー
タ生成ファイルに対して目視による調査を行ったところ，
ソースコードにおいて以下のような特徴があることが分かった．

えに，そのようなソースコードに対しては grep コマンド

• 変数宣言文が連続して出現することが多い．

を用いれば特定および除去することができる．しかしソー• 似た条件式が連続して出現することが多い．

スコードを修正していく過程でそのコメント文が消され自動生成ファイルのソースコードの一部を図 1 に示す．

てしまう場合がある．その場合 grep コマンドによる特定

このように，人が書いたソースコードとプログラムによっは難しく，またコメント文が消された自動生成ファイルをて自動的に生成されたソースコードには視覚的な差異が存目視などで特定するのは時間的コストが大きい．したがっ在するため，目視によって自動生成ファイルを特定するこて，そのようなコメント文が消された場合も含めて自動生
成ファイルを自動的に特定することが必要となる．
コメント文が消された自動生成ファイルを自動的に特定するためには，自動生成ファイルにおける何らかの特徴を用いる必要がある．しかし任意の自動生成ファイルに共通する特徴を目視などで発見するのは困難である．そこで本
研究では，N-gram 言語モデルを用いて，コメント文の有無にかかわらず自動生成ファイルか否かを自動的に判定する手法を提案する．
*1*2*3

International Workshop on Software Clones （IWSC），
https://iwsc2018.github.io/
Mining Software Repositories（MSR），https://conf.researchr.
org/home/msr-2018
http://www.ics.uci.edu/∼lopse/datasets/c 2019 Information Processing Society of Japan

図 1

自動生成ファイルの例

Fig. 1 An example of auto-generated code.

643

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)とは可能である．しかし，目視によって自動生成ファイル

表 1を特定すると時間的コストが大きくなってしまう．

Table 1 Ratio of noise data in making data set.

通常，自動生成ファイルにはそれ自身が自動生成ファイ
ルであると明示するためのコメント文が記述されている．
自動生成ファイルのコメント文の例を図 1 の上部に示す．
このようなコメント文を文字列検索することにより，自動生成ファイルを自動的に特定することができる．しかし，機能追加やバグ修正などの過程においてコメント文が削除

データセット作成時におけるノイズデータ含有率

ファイル群

チェックしたノイズデータ

ファイル数

含有率

ANTLR 生成ファイル群

1,000

0.0%

JavaCC 生成ファイル群

1,006

0.6%

JFlex 生成ファイル群

1,010

1.0%

SableCC 生成ファイル群

1,004

0.4%

自動生成でないファイル群

1,032

3.0%

されてしまう場合があるため，このコメント文検索だけでは特定できない自動生成ファイルが存在する．また，コメ

SableCC 生成ファイル，自動生成でないファイルがそれぞ

ント文が残っていた場合でも grep コマンドの引数としてれ 1,000 ファイルずつ存在するデータセットを作成した．

適切な文字列を与えなければ特定することはできない．

この 1,000 ファイルを収集する過程でファイル群に含まれていたノイズデータの割合を表 1 に示す．コメント文検

2.1 ソースファイルの収集

索により人が書いたのに自動生成ファイルと判定されてい自動生成ファイルを特定するためのデータセットとした要因としては，キーワードとして用いたコメント文が文て，自動生成ファイル群と自動生成でないファイル群が必

字列リテラルとしてソースコード中に存在していたことが要である．そこで本研究では，著者らが過去の研究で作成あげられる．

した Java ファイルのデータセット [12] と，今回新しく作成した JavaScript のデータセットを用いた．
まず Java ファイルのデータセット [12] について説明する．Java ファイルのデータセットは 4 種類のパーサジェネ
レータ（ANTLR，JavaCC，JFlex，SableCC）により生成

次に JavaScript ファイルのデータセットについて説明する．JavaScript ファイルのデータセットは，JavaScript に変換された TypeScript のファイル群と JavaScript のファ
イル群からなる．

TypeScript ファイルの収集は Github から拡張子検索された 4 つの自動生成ファイル群と自動生成でないファイにより行った．その後収集したファイルを tsc コマンド

ル群からなる．

で JavaScript へ変換することで，JavaScript に変換され自動生成ファイルの収集は GitHub [5] からコメント文検

た TypeScript ファイルを生成した．JavaScript ファイル

索し，jsoup [9] を用いたウェブスクレイピングにより自動も同様に Github から拡張子検索により収集した．収集しで行った．自動生成でないファイルの収集は大規模なソー

た JavaSript ファイルには TypeScript が JavaScript に変スファイルの集合である Apache リポジトリ*4 からソース換されたファイルが存在する可能性がある．そのためノイファイルをランダムに収集した．

ズデータの除去を行った．

収集した自動生成ファイル群および自動生成でないファこれにより JavaScript に変換された TypeScript ファイ

イル群の中には，誤って自動生成ファイルと見なしている

ルと JavaScript ファイルがそれぞれ 1,000 ファイルずつ存もの，もしくは誤って自動生成でないファイルと見なして在するデータセットを作成した．

いるもの（これらをノイズデータと呼ぶ）が存在している可能性がある．そこで，ノイズデータを除去するために目

2.2 ファイル名検索による自動生成 Java ファイルの特定

視確認を行った．しかし，すべてのソースファイルを目視

コメント文検索以外の自動生成ファイル特定手法とし確認するのは時間的コストが膨大であるため，4 種類の自て，ファイル名による検索がある．通常，自動生成ファイ

動生成ファイル群，および自動生成でないファイル群に対ルのファイル名には，自動生成プログラムごとに定められ

し，以下の処理を行った．

ている生成規則がある．たとえば SableCC では，以下の( 1 ) 各 1,000 ファイルずつランダムに抽出する．

ようなものが定められている [3]．

( 2 ) 目視確認によりノイズデータを除去する．
( 3 ) 除去したソースファイルの数だけ，再度ランダムに抽出する．

( 4 ) ( 3 ) で抽出したソースファイルに対して目視確認によりノイズデータを除去する．
上記の ( 3 ) および ( 4 ) を繰り返し行い，ANTLR 生成
ファイル，JavaCC 生成ファイル，JFlex 生成ファイル，*4

Apache Source code repository, http://svn.apache.org/
repos/asf/

c 2019 Information Processing Society of Japan• AXxx.java• TXxx.java
ただし，X は大文字の任意のアルファベット，x は小文字の任意のアルファベットを表す．2.1 節で作成したデータセットを用いて，ファイル名検索による自動生成ファイルの特定を行った．4 つの自動生成プログラムごとのファイ
ル名生成規則を表 2 に示す．
表中の ClassName は Java ファイルのクラス名を表す．
正規表現を用いて，これらの生成規則にマッチするものを644

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)

表 2 自動生成プログラムのファイル名生成規則

Table 2 Filename generation rule of auto-generated file.
自動生成プログラム

生成規則

ANTLR

[ClassName]Lexer.java，[ClassName]Parser.java，[Class-

JavaCCJJT[ClassName]State.java，[ClassName]Constants.java，Node.java，

Name]Listener.java，[ClassName]BaseListener.java
ParseException.java，SimpleCharStream.java，SimpleNode.java，Token.java，TokenMgrError.java，ASTPerl.java，ASTPython.java，[ClassName]TreeConstants.java，[ClassName]Visitor.java
Yylex.java，[ClassName].java

JFlex
SableCC

Lexer.java，LexerException.java，Parser.java，ParserException.java，DepthFirstAdapter.java，Analysis.java，Switch.java，Switchable.java，TXxx.java，
Token.java，AXxx.java，Start.java，Node.java，State.java
表 3

ファイル名検索による自動生成ファイル特定の結果

Table 3 result of identification auto-generated file by filename search.
自動生成プログラム

特定した自動生成ファイル数特定した自動生成でないファイル数

ANTLR

894

986

JavaCC

767

989

JFlex

79

1,000

SableCC

867

965

自動生成ファイルとして特定する．また，これらの生成規2.4 N-gram 言語モデルと自然さ則にマッチしないものを自動生成でないファイルと見なす．

人が書いたソースコードとプログラムによって自動的に

ファイル名検索による自動生成ファイル特定の結果を生成されたソースコードには字句の並びに視覚的な差異が

表 3 示す．ANTLR 生成ファイル群，JavaCC 生成ファイ存在するため，目視では容易に特定することが可能である．

ル群，SableCC 生成ファイル群においては 1,000 ファイル

ソースコードの視覚的な差異は，そこに存在している構文

中約 800 ファイルの自動生成ファイルをそれぞれ特定できの違いによるものであるため，字句の並びにより自然さをているのに対し，JFlex 生成ファイル群は 79 ファイルと求める N-gram 言語モデル [2] を利用することにより，高極端に少なくなっていることが分かる．これは，JFlex のい精度で自動生成されたソースコードを特定できると著者

ファイル名生成規則の数が少ないことが要因と考えられらは考えた．N-gram 言語モデルとは，大規模なテキスト

る．このことから，ファイル名生成規則だけでは自動生成

データを統計的に解析し，直前の N − 1 個の単語列から次ファイルを特定するのに十分ではないことが分かる．

の単語への遷移確率を与えるモデルである．この N-gram
言語モデルによって求まる値を自然さと呼ぶ．自然さは，

2.3 機械学習を利用した自動生成ファイルの特定コメント文検索とファイル名による検索以外の自動生成

式 (1)，(2) で計算される [8]．
なお式 (1)，(2) における W は入力となるテキストデー

ファイル特定手法として，機械学習を用いて特定する手タであり，出力として自然さ P (W ) を得る．また W を単法がある [12]．これは自動生成ファイルと自動生成でない語に分解した場合の i 番目の単語が wi であり，c(w) は単

ファイルの構文情報の出現回数を学習データを用いてモデ語 w の出現回数である．

ルを構築し，このモデルによって自動生成ファイルか否かを判定する手法である．この手法を 2.1 節で述べたデータ|W |+1

P (W ) =p(wi |w0 . . . wi−1 ) =合の適合率の最大値と最小値は 99.9%，82.7%，再現率の最大値と最小値は 99.9%，78.4%である．
またファイルサイズが 10 kB 以下の小さいファイルに対して適用した場合，精度が悪くなるといった課題がある．
したがってファイルサイズに依存せず高精度で自動生成
ファイルを特定する手法が必要であり，これが本論文の研究動機である．

c 2019 Information Processing Society of Japanp(wi |w0 . . . wi−1 )

(1)

i=1

セットに対して 4 種類の機械学習アルゴリズム（Decision

Tree，Naive Bayes，Random Forest，SVM）を用いた場

c(wi−n+1 . . . wi )c(wi−n+1 . . . wi−1 )(2)

この自然さを用いることで自動生成ファイルの特定を行う．

3. 提案手法
本研究では，N-gram 言語モデルを利用し，自動生成ファ
イルを自動的に特定する手法を提案する．提案手法の概要

645

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)を図 2 に示す．

スファイルに対して Step1 で作成した 2 つの言語モデルを本研究における提案手法の入力は，学習データ，すなわ

適用する．よって Step2 における入力はテストデータであち自動生成ファイル群および自動生成でないファイル群

り，出力はテストデータが自動生成ファイルか否かの判定と，テストデータ，すなわち自動生成ファイルか判定した結果である．まずテストデータを Step1 と同様に字句解析

いファイルである．また出力はテストデータが自動生成を行い，その結果を言語モデルに適用し，得られた自然さファイルか否かの判定結果である．

を比較することで自動生成ファイルか否か判定する．すな

提案手法は次の 2 ステップから構成される．Step1 では，わち，自動生成ファイルとしての自然さの方が高ければ自学習データから自動生成ファイルと自動生成でないファイ

動生成ファイル，そうでないならば自動生成でないと判定

ルそれぞれの言語モデルを構築する．Step2 では，Step1

する．

で構築した各言語モデルに対して自動生成ファイルかどうかを判定したいテストデータを適用し，得られた自然さの4. 実装
本章では提案手法の実装方法について述べる．

比較を行う．以降，各ステップについて詳細に説明する．

Step1：言語モデルの構築

4.1 字句解析

Step1 では，学習データから字句の並びを取得し，言語Java ファイルの字句解析には Eclipse JDT 4.5.2 *5 を用

モデルを構築する．よって Step1 における入力は学習デー

いて AST 解析を行った結果を用いる．Eclipse JDT 4.5.2

タであり，出力は学習データの各ファイル群より生成されでは 92 種類の AST ノードが定義されているが，そのうちた自動生成ファイルの言語モデルと自動生成でないファイ

3 つはコメント文に関するノードであるので，本研究ではルの言語モデルである．まず学習データの各ファイル群にコメント文に関するノードを除いた 89 種類のノードから対して字句解析を行い字句の並びを取得する．この字句のなる AST を構成する字句列を抽出して，その字句の並び並びから N-gram 言語モデルを構築することによって自動から自然さの計測を行う．

JavaScript ファイルの字句解析にはパーサジェネレータ

生成ファイルの言語モデルと自動生成でないファイルの言である ANTLR を用いて AST 解析を行った結果を用いる．

語モデルを得る．

ANTLR の JavaScript 文法ファイルには 110 種類の AST
Step2：言語モデルの適用
Step2 では，自動生成ファイルであるか判定したいソー

ノードが定義されているが，そのうち 4 つはコメントに関するトークンであるため，コメントに関するトークンを除いた 106 種類のノードからなる AST を構成する字句列を抽出して，その字句の並びから自然さの計測を行う．
字句解析および自然さの計測の例を図 3 に示す．

4.2 N-gram 言語モデルの構築と適用
N-gram 言語モデルの構築と適用には KenLM [6] を用いる．なお N-gram 言語モデルは学習データ中に存在しない

N-gram がテストデータで出現した場合，自然さが 0 になってしまうという問題がある．これを避けるためにスムージングを行う．スムージングの方法としていくつか種類があるが，KenLM では実験的に良いとされている modiﬁed

Kneser-Ney smoothing を用いられている [7]．

5. 評価実験
本章では，提案手法を評価するために行った実験と，その実験結果について述べる．
提案手法の評価を行うために，実験を行った．その概要を以下に示す．
実験 1 Java を対象に提案手法の精度を交差検証により評価した．
図 2 提案手法の概要

Fig. 2 Overview of the proposed technique.

c 2019 Information Processing Society of Japan

*5

Eclipse Java development tools（JDT），http://www.eclipse.
org/jdt/646

Vol.60 No.2 642–650 (Feb. 2019)

情報処理学会論文誌

表 4 交差検証による精度評価の結果

Table 4 Precision and recall of our technique and Shimonaka’s one with leave-one-out
method.
自動生成プログラム
提案手法

ANTLR

JavaCC

JFlex

SableCC

MIX

適合率

再現率

適合率

再現率

適合率

再現率

適合率

再現率

適合率

再現率

100.0%

100.0%

99.6%

99.3%

99.8%

99.7%

100.0%

99.9%

98.7%

99.7%

Decision Tree

99.9%

99.9%

97.0%

97.0%

99.4%

99.4%

96.3%

96.2%

95.3%

95.3%

下仲らの

Naive Bayes

98.8%

98.8%

88.0%

85.7%

99.5%

99.5%

82.7%

78.4%

85.3%

80.6%

手法 [12]

Random Forest

99.9%

99.9%

97.3%

97.3%

99.7%

99.7%

96.1%

96.1%

96.8%

96.8%

SVM

99.8%

99.8%

95.7%

95.7%

99.6%

99.6%

86.8%

84.5%

85.2%

79.1%

再現率 実際に自動生成ファイルであるもののうち，自然さを比較して自動生成ファイルと判定されたものの割合

5.3 実験 1
まず収集した各自動生成ファイル群と MIX ファイル群
から言語モデルを構築した．同様に自動生成でないファイル群からも言語モデルを構築し，計 6 種類の言語モデルを得た．なお本実験では N-gram 言語モデルのオーダーは 5として構築した．構築された計 6 種類の言語モデルの性能を評価するために交差検証による検証を行った．
交差検証では，まずデータセットを N 個のブロックにランダムに分割する．分割したブロックのうち，N − 1 個のブロックを学習データとし，残りの 1 個のブロックをテス
トデータとして評価を行う．この処理を，すべてのブロックが 1 度テストデータとなるようブロックを変化させな
図 3

がら N 回行い，それらの精度の平均をとる．本実験では字句解析と自然さ計測の例

Fig. 3 Calculating naturalness from unknown file.

N = 10 として言語モデルの評価を行った．またその結果を下仲らによる機械学習の 4 種類のアルゴリズム（Decision

Tree，Naive Bayes，Random Forest，SVM）を用いた手実験 2 Java を対象に提案手法の精度をブートストラッ
プ法により評価した．
実験 3

JavaScript に変換された TypeScript を対象に提案手法の精度を交差検証により評価した．
実験 4

JavaScript に変換された TypeScript を対象に法と比較した [12]．その結果を表 4 に示す．
提案手法ではすべての場合において適合率，再現率ともに 98%を超える精度になっていることが分かる．また機械学習による判定結果と比較すると，すべての場合において精度が同じもしくは提案手法の方が精度が高くなっている

提案手法の精度をブートストラップ法により評価した．

ことが分かる．

5.1 実験対象

5.4 実験 2

学習データとして，2.1 節で述べたデータセットを用い実験 1 では，言語モデルの性能を交差検証により評価た．加えて，4 種類の Java 自動生成ファイル計 4,000 ファ

した．一方，交差検証は実際の精度に近い精度をだすとさイルの中から 1,000 ファイルをランダムで抽出した．このれているが，データセットからブロックを作成する際に，

ソースファイル群を MIX ファイル群と定義する．

データの偏りが生じて実験結果の分散が大きくなるといっ

5.2 評価尺度

ブートストラップ法による検証を行った．ブートストラッ

た問題がある [1]．その問題を回避するため，実験 2 では実験の評価尺度として，適合率と再現率を用いる．以下，それぞれの尺度の定義について説明する．
適合率

プ法では，まずデータセットからデータセットと同じ数だ
けのファイルをランダムに抽出し，抽出したファイルで新自然さを比較して自動生成ファイルと判定されしいデータセットを作成することを繰り返して複数のデーたファイルのうち，実際に自動生成ファイルであるもののタセットを得る．この複数のデータセットにおける精度の割合

c 2019 Information Processing Society of Japan


647

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)

表 5 ブートストラップ法による精度評価の結果

Table 5 Precision and recall of our technique derived from bootstrapping method.
自動生成プログラム
提案手法

表 6

ANTLR

JavaCC

JFlex

SableCC

MIX

適合率

再現率

適合率

再現率

適合率

再現率

適合率

再現率

適合率

再現率

99.99%

99.98%

99.86%

99.75%

99.97%

99.86%

100.0%

99.92%

99.42%

99.84%JavaScript と TypeScript の交差検証による精度評価の結果

Table 6 Precision and recall of our technique to JavaScriptwith leave-one-out method.

提案手法

適合率

再現率

98.1%

98.1%

表 7 JavaScript と TypeScript のブートストラップ法による精度評価の結果

Table 7 Precision and recall of our technique to JavaScriptwith bootstrap method.

提案手法

適合率

再現率

98.12%

98.74%

平均を計算することで，元のデータセットの評価を行う．
ブートストラップ法における必要な繰り返し回数は 50 回
から 2,000 回で十分とされているため，本実験では 2,000個のデータセットを作成し評価を行った [4]．その結果を表 5 に示す．
提案手法では適合率，再現率ともに 99%を超える精度になっていることが分かる．

5.5 実験 3

図 4

自動生成ファイル誤判定された自動生成でないファイルの一部

Fig. 4 Two examples that our technique misjudged.

実験 1，2 では，パーサジェネレータで生成された Java
ファイルを対象に実験した．一方で Java 以外にも自動生成ファイルは存在するため，実際には Java 以外の自動生成
ファイルに対しても高い精度を出す必要がある．そこで実験 3 では JavaScript と TypeScript を対象に実験を行った．
すなわち，人が作成した JavaScript ファイルと TypeScript

6. 考察
本章では，5 章で述べた評価実験，および提案手法における有用性について考察を行う．

ファイルを変換して生成された JavaScript ファイルに対交差検証の結果において，誤判定されたファイルを調べして適用できるか交差検証を行った．この結果を表 6 にた．誤判定されたファイルの一部を図 4 に示す．その結示す．

果，自動生成ファイルと誤判定された自動生成でないファ提案手法では適合率，再現率ともに 98%を超える精度になっていることが分かる．

イルの特徴として，以下のことがあげられる．

• シグネチャが類似したメソッドが多数ある．
• case 文が多い．

5.6 実験 4

これらは，2 章で述べたように自動生成ファイルの特徴で実験 4 では 5.4 節で述べた交差検証の問題を回避するたあるので，それらが誤検出の要因であると考えられる．まめブートストラップ法により提案手法の精度の評価を行った，下仲らの手法と比較して精度が向上した要因としては，た．データセットの作成は実験 3 で対象とした JavaScript

小さいファイルに対しても本手法が適用できるためと考えと TypeScript に対して，実験 2 と同様 2,000 回行った．精られる．下仲らの手法ではファイルサイズが 10 kB 以下の度の評価結果を表 7 に示す．

小さいファイルに対して適用した際に誤検出してしまう傾提案手法では適合率，再現率ともに 98%を超える精度になっていることが分かる．

向があったが，提案手法においてその傾向はみられなかっ
た．したがって，データセットに存在する 10 kB 以下の小さいファイルに関しても正しく判定ができたため精度が向c 2019 Information Processing Society of Japan

648

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)

上したと考えられる．なお下仲らの手法が小さいファイル

成ファイルを特定できていることを確認した．加えて別種で誤検出しやすい要因は要素数が少ないためとしている．

類の言語の自動生成ファイルを特定できるかの評価実験を一方，本手法で用いている N-gram 言語モデルでは直前の行った．その結果，適合率，再現率ともに 98%以上と，高N − 1 個の字句の並びに基づいて局所的に解析するため，

い精度で TypeScript から生成された JavaScript を特定でファイルサイズが小さくても誤検出されなかったと考えらきていることを確認した．

れる．
また単一種類の自動生成ファイル群での実験結果と MIX
自動生成ファイル群での実験結果を比較すると MIX 自動生成ファイル群の適合率が低下していた．これは複数種類

今後は任意の自動生成ファイルにおいてより高精度で特定できる手法とするため，改善していく予定がある．
謝辞 本研究は，科学研究費補助金基盤研究（B）（課題
番号：17H01725）の助成を得て行われた．

の自動生成ファイル群を混ぜたことによって，自動生成
ファイルの種類ごとに存在する特有の特徴が目立たなく参考文献なったためと考えられる．

[1]

また実験 3 と実験 4 によって，Java だけでなく Type-

Script でも精度高く検出できたので，特定の言語に依存した手法ではないと思われる．
[2]

7. 妥当性への脅威
本章では，評価実験に含まれる妥当性への脅威について
述べる．

[3]

本研究では，自動生成でないコードを Apache リポジト
リから収集した．その際，自動生成でないことを目視確認をしているが，この目視確認が間違っている可能性がある．

[4]

そのため，本来自動生成ファイルであるものを自動生成でないファイルと見なしている可能性がある．
本実験で対象とした自動生成ファイルは，Java で記述さ

[5]
[6]

れた 4 種類のパーサジェネレータで生成されたファイルとTypeScript から JavaScript に変換されたファイルである．
そのため特定の種類や言語によらず自動生成ファイルを特定できると考えられるが，実際に他の種類の自動生成ファ[7]イルを用いた場合や，他の言語で記述された自動生成ファ
イルを用いた場合では，本実験とは異なる結果が得られる可能性がある．

[8]

8. あとがき本研究では，N-gram 言語モデルを用いて自動生成ファ
イルを自動的に特定する手法を提案した．提案手法では，

[9]
[10]

自動生成ファイル特有のコメント文の有無にかかわらず，
自動生成ファイルか否かを判定するために，自動生成ファ
イルと自動生成でないファイルそれぞれのソースコードの字句の並びを抽出し，それらを学習データとして自動生成[11]

ファイルの言語モデルと自動生成でないファイルの言語モ
デルを構築した．

[12]

4 種類の自動生成ファイルを収集し，それらを対象に評
価実験を行った．その結果，すべての場合で適合率，再現[13]率ともに 99%以上と，高い精度で自動生成ファイルを特定できていることを確認した．また 4 種類の自動生成ファ
イルを混ぜた場合の評価実験も行った．その結果に関しても，適合率，再現率ともに 98%以上と，高い精度で自動生

c 2019 Information Processing Society of Japan[14]

Bengio, Y. and Grandvalet, Y.: No Unbiased Estimator of the Variance of K-Fold Cross-Validation, J. Mach.
Learn. Res., Vol.5, pp.1089–1105 (2004) (online), available from http://dl.acm.org/citation.cfm?id=1005332.
1044695.
Brown, P.F., de Souza, P.V., Mercer, R.L., Pietra,
V.J.D. and Lai, J.C.: Class-based N-gram Models of Natural Language, Comput. Linguist., Vol.18, No.4, pp.467–
479 (1992) (online), available from http://dl.acm.org/
citation.cfm?id=176313.176316.
Chakraborty, P.: Object-Oriented Compilers: A Review,
IUP Journal of Information Technology, Vol.13, No.1,
p.36 (2017).
Efron, B.: Bootstrap methods: Another look at the jackknife, Breakthroughs in Statistics, pp.569–593, Springer(1992).
GitHub, available from http://github.com/.
Heaﬁeld, K.: KenLM: Faster and Smaller Language
Model Queries, Proc. 6th Workshop on Statistical Machine Translation, WMT ’11, pp.187–197, Association
for Computational Linguistics (2011) (online), available from http://dl.acm.org/citation.cfm?id=2132960.
2132986.
Heaﬁeld, K., Pouzyrevsky, I., Clark, J.H. and Koehn,
P.: Scalable Modiﬁed Kneser-Ney Language Model Estimation, ACL, No.2, pp.690–696, The Association for
Computer Linguistics (2013).
Hindle, A., Barr, E.T., Gabel, M., Su, Z. andDevanbu, P.: On the Naturalness of Software, Vol.59,
No.5, pp.122–131, ACM (online), DOI: 10.1145/2902362(2016).
jsoup: Java HTML Parser, available from http://jsoup.
org/.
MacLean, A.C., Pratt, L.J., Krein, J.L. and Knutson,
C.D.: Trends that aﬀect temporal analysis using sourceforge data, Proc. 5th International Workshop on Public Data about Software Development (WoPDaSD ’10 ),p.6 (2010).
Koschke, R. and Weinig, M.: Generated Code in Studies
on Clone Rates, 2018 IEEE 11th International Workshop on Software Clones (IWSC ), pp.16–22 (2018).
下仲健斗，鷲見創一，肥後芳樹，楠本真二：機械学習を用いた自動生成コードの特定，電子情報通信学会技術研究
報告，Vol.115, No.419, pp.165–170 (2016).
石原知也，堀田圭佑，肥後芳樹，井垣 宏，楠本真二：
大規模なソフトウェア群を対象とするメソッド単位でのコードクローン検出，情報処理学会論文誌，Vol.54, No.2,
pp.835–844 (2013).
大田崇史，井垣 宏，堀田圭祐，肥後芳樹，楠本真二ほ
か：ソフトウェア開発におけるコピーアンドペーストに

649

情報処理学会論文誌

Vol.60 No.2 642–650 (Feb. 2019)

よって生じたコード片に対する調査，研究報告ソフトウェ，Vol.2014, No.22, pp.1–6 (2014).
ア工学（SE）

楠本 真二 （正会員）
昭和 63 年大阪大学基礎工学部情報工学科卒業．平成 3 年同大学大学院博土居 真之

士課程中退．同年同大学基礎工学部助

平成 30 年大阪大学基礎工学部情報科

教授．平成 14 年同大学大学院情報科学科卒業．同年より同大学大学院情報学研究科助教授．平成 17 年同教授．

科学研究科コンピュータサイエンス専

博士（工学）．ソフトウェアの生産性や品質の定量的評価，

攻博士前期課程在学中．

プロジェクト管理に関する研究に従事．IEICE，JSSST，

手．平成 8 年同講師．平成 11 年同助

IEEE，JFPUG，PM 学会，SEA 各会員．

肥後 芳樹 （正会員）
平成 14 年大阪大学基礎工学部情報科学科中退．平成 18 年同大学大学院博士後期課程修了．平成 19 年同大学院
情報科学研究科コンピュータサイエン
ス専攻助教．平成 27 年同准教授．博士（情報科学）．ソースコード分析，特にコードクローン分析やリファクタリング支援に関する研究に従事．電子情報通信学会，日本ソフトウェア科学会，

IEEE 各会員．

有馬 諒
平成 29 年大阪大学基礎工学部情報科学科卒業．同年より同大学大学院情報科学研究科コンピュータサイエンス専
攻博士前期課程在学中．

下仲 健斗
平成 28 年大阪大学基礎工学部情報科学科卒業．平成 30 年同大学大学院情報科学研究科コンピュータサイエンス
専攻博士前期課程修了．在学時ソース
コード分析に関する研究に従事．

c 2019 Information Processing Society of Japan

650