言語処理学会 第25回年次大会 発表論文集 (2019年3月)

ソースコードの文法情報を利用したソースコード要約生成
宮崎 広夢

鶴岡 慶雅

東京大学 工学部電子情報工学科{miyazaki,tsuruoka}@logos.t.u-tokyo.ac.jp

1

はじめに

表 1: ソースコードとそれに対応する要約文
public int TextWidth(string text) {現代社会の高度な情報化に伴い、プログラミングのTextBlock t = new TextBlock();t.Text = text ;return (int)Math.Ceiling(t.ActualWidth);

重要性はますます高まっている。ここで言うプログラ
ミングとは主にソースコードを記述するコーディングを意味する。プログラミングの義務教育への導入も検討されているなど、人々がプログラミングをする機会}は増加傾向にある。それゆえ、プログラミングに際しCompute the actual textwidth inside a textblockて他人の書いたソースコードを読む機会も増加している。しかし、一般に他人の書いたソースコードを読み解くコストは非常に高い。ソースコードそれ自体はあが持ち得る構造的・意味的な情報などを利用していなる目的を達成するための手段に過ぎず、その書き方はいという問題がある。本研究では、ソースコードをエ個人差があり、必ずしも可読性が高いとは言い難いたンコーディングする際にそれらの情報を利用することめである。コメントやドキュメントの充実によりソーを目指す。

スコードをより分かりやすいものにすることは可能だが、それ自体にも決して小さくないコストが伴う。
さて、近年、ニューラルネットワークの登場に伴い、文章の要約や言語間翻訳などといった言語処理に関連する研究が盛んに行われている。様々な言語を対象

2関連研究

2.1

ソースコードの要約にして、様々なアプローチで言語処理を行う試みが多本研究ではソースコードの要約を目標としている

くなされている。その一環として、プログラミングのが、ソースコードの要約は一般的な文章要約タスクとソースコードを対象とした研究も行われている。ソーは異なる。一般的な文章要約タスクでは、ソースの文スコードの特徴としては、自然言語とは大きく異なっとターゲットの文で扱われる言語は同じである。場合た文法規則を持っていることや、質の良いデータを大によっては語彙も共通であることも多い。一方、ソー量に収集するのが自然言語よりも困難であることなど

スコードの要約は、入力であるソースはプログラミンが挙げられる。

グ言語であり、出力は英語である。そのため、要約だソースコードを対象とした研究にも自然言語と同様けでなく翻訳の要素も含まれる。具体例を表 1 に示す。に様々なものが存在している。本研究で対象としてい上段は C#のソースコードであり、下段がそれに対応るソースコードの要約 [4] や、自然言語で表された指示する要約文である。

からソースコードを生成するソースコード生成 [5, 9]、ソースコードのバグ検出 [1, 3] などが挙げられる。
上述した背景を踏まえ、本研究では与えられたソースコードについてそれが何を行うものかを表す自然言語の要約を与えることを目標とする。具体的には、従来手法で提案されたモデルに対して改良を行い、要約性能の改善を図る。従来手法 [4] では、ソースコード

2.2

CODE-NN

Iyer ら [4] はソースコードの要約を行う CODE-NNというモデルを提案した。CODE-NN は、 LSTM とAtttention [6] を利用した図 1 のようなモデルである。
CODE-NN は、エンコーダとデコーダから構成されているが、一般的なエンコーダ・デコーダモデル [2]― 703 ―

Copyright(C) 2019 The Association for Natural Language Processing.
All Rights Reserved.

図 1: CODE-NNとは異なる。エンコーダ側は入力のソースコードを
図 2: Tree-LSTM

Embedding (入力単語を密なベクトルで表現したもの) のベクトル列に直すだけであり、LSTM を利用しない。デコーダはエンコーダによる出力、すなわち前述した Embedding 列を受け取り、Attention でのみ利用する。デコーダ内の各ブロックは LSTM を表しており、一般的な Attention 付きエンコーダ・デコー
ダモデルにおけるデコーダと同様に機能する。最終的に出力する単語の確率分布は、Attention を利用して得られた context vector ct と、デコーダの LSTMからの出力 ht を用いて、式 (1) で得られる。ここで、W 、W1 、W2 はそれぞれ重みであり、yt は出力語彙次元のサイズを持つベクトルである。また、損失関数には Negative Log Likelihood (NLL) を用いており、

図 3: ASTデコーダの出力と正答を比較して損失を計算し、誤差逆伝播法を用いて学習を行う。

yt = Softmax(W tanh(W1 ht + W2 ct ))2.3

LSTM を用いたニューラルネットワークとして表現す(1)ることができる。

3

Tree-LSTM

提案手法

LSTM の 1 種として Tree-LSTM [8] がある。Tree-本研究では、 CODE-NN に対してソースコードが持LSTM は木構造に対して LSTM を利用することがでち得る文法情報を盛り込むことで、精度の向上を図る。

きるモデルである。

ここでいう文法情報とは、具体的にはソースコードの図 2 に Tree-LSTM モデルの構造を簡単に表す。各持つ階層構造性や各トークンの持つ意味属性などを指ブロックは LSTM ブロックを表しており、xi はそのし示す。手続き型言語のソースコードは木構造で表現

LSTM ブロックに対する入力を表している。図 2 にあすることができ、特に AST (Abstract Syntax Tree)

るように、各ブロックは自らの隠れ層の状態 h とセルを利用して抽象木を構成することができる。AST の一c を自分の親のブロックに伝播する。伝搬の順は深さ

例を図 3 に示す。AST はソースコードのトークンや宣優先探索の順に行う。親であるブロックは子のブロッ言などを抽象化したノードで表し、その階層構造を木クからそれらを受け取り、また演算を行い自らの親に構造で表現したものである。抽象化の際に各トークン同様にして伝播する。これにより、木構造をそのままの文脈中の意味属性を表したタグを割り当てることができ、トークンの意味情報も取得できる。また、木構― 704 ―Copyright(C) 2019 The Association for Natural Language Processing.
All Rights Reserved.

造により構造的情報を得ることもできる。ソースコー
表 2: モデルごとの BLEU スコアモデル
BLEU スコア

ドのコンパイルの際にも、一度ソースコードを ASTにパースしてから各種の解釈を行うことが多い。

CODE-NN（ベースライン）

0.052

LSTM に変更し、AST を入力とすることを提案する。

LSTM モデル

0.060

まず、データセットのソースコード（C#）を roslyn

Tree-LSTM モデル

0.056

本 研 究 で は 、CODE-NN の エ ン コ ー ダ を Tree-1というコード解析ライブラリを用いて AST に変換し、その AST を Tree-LSTM に入力することで、文法情報をエンコーディングする。roslyn は C#のコン

4.2評価手法

パイラにも利用されており、ソースコードを AST に評価手法は BLEU スコア [7] を利用した。具体的にパースすることができる。Tree-LSTM の root（最もはテストデータ全体を 1 つの文章とみなしたコーパ親のノード）の隠れ層およびセルの値をデコーダに渡ス BLEU を 4-gram に関してまで計算した。ここで、すとともに、Tree-LSTM 内の全てのノードの隠れ層

BLEU スコアの値域は [0, 1] である。の値を Attention で重み付けして利用する。これにより、前述したようなソースコードの文法情報を有効に4.3活用したエンコーディングが行える。

実験結果

実験結果を表 2 に示す。モデルごとの BLEU スコア

4実験

4.1

実験設定

計算用データにおける BLEU スコアを比較している。

4.4

考察

Iyer ら [4] は StackOverflow 2 という情報技術共有

ベースラインである CODE-NN に比較して、通常サービスを利用して独自のデータセットの作成を行っの LSTM を利用したモデルは BLEU スコアが向上した。StackOverflow は、質問者が主にプログラミングている。これは LSTM によってトークンの語順情報に関連した質問を投稿し、他者がそれに回答するといを扱うことができるようになったほか、デコーダが初うサービスである。特に「特定の動作をするプログラ期隠れ層状態としてエンコーダの最後の隠れ層を受けムを組みたい」という質問に対する回答として簡便な取れたためであると考えられる。

ソースコード断片が投稿されることが多く、これらをエンコーダを Tree-LSTM に変更したモデルについ利用することでデータセットを作成した。投稿されたても、ベースラインのモデルよりは BLEU スコアが質問のタイトルを出力すべき要約文とし、回答内に含わずかに向上しているが、通常の LSTM を利用したまれるソースコードが要約すべきソースであるとした。

モデルよりは低くなった。これにはいくつかの理由が本実験ではデータセットをトレーニング用と BLEU ス考えられる。

コア計算用の 2 つに分割し、トレーニング用のデータ

1 つ目は、今回はエンコーダ側で Tree-LSTM を利数は 43,066、BLEU スコア計算用のデータ数は 5,397用したが、それにより Attention の対象とする隠れ層であった。の数が 200〜350 程度と大きくなってしまったことが本研究では、ベースラインである CODE-NN に加ある。これはソースコードのトークン数は 100 以下のえ、エンコーダ側を通常の LSTM にしたもの、およものに限って学習を行なっているが、AST に変換すび提案手法であるエンコーダ側を Tree-LSTM にしたるとトークン数の 2〜3 倍程度に隠れ層の数が増加しものの 3 つの実装および要約性能の比較を行った。てしまうためである。これにより結果としてデコーダから見た系列長が長くなってしまい、Attention の効果が発揮されにくくなってしまうという問題がある。

2 つ目は、AST が抽象木であるため、ソースコードのトークンそれ自体が持つ情報が抽象化されてしまう
1 https://docs.microsoft.com/ja-jp/dotnet/csharp/roslyn-sdk/
2 https://stackoverflow.com/

ことがある。そのため、要約文生成時に必要な情報が欠落してしまった可能性がある。

― 705 ―

Copyright(C) 2019 The Association for Natural Language Processing.
All Rights Reserved.

5

おわりに

[6] Minh-Thang Luong, Hieu Pham, and Christopher D Manning.

エンコーダに LSTM および Tree-LSTM を利用する

Eﬀective approaches toattention-based neural machine translation. In

ことで、BLEU スコアの向上を確認できた。しかしな

EMNLP, 2015.

がら、そもそも各モデルの BLEU スコアが小さく、また学習時のエポックごとの BLEU スコアの変動も激[7] Kishore Papineni, Salim Roukos, Todd Ward,

しいため、この向上に大きな差異があるとは言い切れ

and Wei-Jing Zhu. BLEU: a method for auto-ない。また、本研究で利用したデータセットはデータ

matic evaluation of machine translation. In ACL,数が 43,000 程度と少ないほか、ドメインが大きく偏っ2002.ているという問題もある。より品質の高いデータセッ
トを大量に集めて再実験をした場合に、結果が変わる[8] Kai Sheng Tai, Richard Socher, and Christopher D Manning. Improved semantic representa-

ことは大いにあり得る。ソースコードの要約自体、要tions from tree-structured long short-term mem-

約と翻訳の両方の要素を兼ね備えており難しいタスク

ory networks. In ACL/IJCNLP, 2015.

であることは疑いようがない。データセットの改良とともに、自然言語の生成型要約タスクや機械翻訳タス[9] Pengcheng Yin and Graham Neubig. A syntac-クにおいて提案されている手法についても応用を考慮

tic neural model for general-purpose code gener-する必要がある。

ation. In ACL, 2017.

参考文献[1] Miltiadis Allamanis, Marc Brockschmidt, andMahmoud Khademi. Learning to represent programs with graphs. In ICLR, 2018.
[2] Kyunghyun Cho, Bart Van Merriënboer, Caglar
Gulcehre, Dzmitry Bahdanau, Fethi Bougares,
Holger Schwenk, and Yoshua Bengio.

Learn-ing phrase representations using RNN encoderdecoder for statistical machine translation. InEMNLP, 2014.
[3] Hoa Khanh Dam, Trang Pham, Shien WeeNg, Truyen Tran, John Grundy, Aditya Ghose,Taeksu Kim, and Chul-Joo Kim.

A deeptree-based model for software defect prediction.
arXiv:1802.00921, 2018.
[4] Srinivasan Iyer, Ioannis Konstas, Alvin Cheung,and Luke Zettlemoyer. Summarizing source codeusing a neural attention model. pp. 2073–2083.
In ACL, 2016.
[5] Wang Ling, Edward Grefenstette, Karl Moritz
Hermann,Tomáš Kočiskỳ,Andrew Senior,Fumin Wang, and Phil Blunsom. Latent predictor networks for code generation. In ACL, 2016.

― 706 ―

Copyright(C) 2019 The Association for Natural Language Processing.
All Rights Reserved.