# 自然言語とソースコード間の対訳コーパス向け Data Augmentation 手法の提案

秋信 有花 ${ }^{1}$ 小原 百々雅 ${ }^{2}$ 梶浦照乃 ${ }^{2}$ 倉光 君郎 ${ }^{2}$
${ }^{1}$ 日本女子大学大学院 理学研究科 2 日本女子大学 理学部
m1616003ay@ug.jwu.ac.jp kuramitsuk@fc.jwu.ac.jp

## 概要

本論文では，自然言語とソースコード間の対訳 コーパス向けの Data Augmentation (DA) 手法と，そ れを実現するDA Dール Multieseを提案する。近年，深層学習ベースのコーディング支援は関心を 集めるテーマとなっているが，学習データとなる NL-code 対訳コーパスの不足は重要な課題である。本研究では，構文木への変換が可能であるという ソースコードの形式的な性質を活用した DA 手法を 新たに提案する。実験では, Multiese によって増強 された NL-code 対訳コーパスを用いることで，自然言語からソースコードを生成するコード生成 AI モ デルを，高い精度で構築可能であることを示した。

## 1 はじめに

社会のデジタル化が進む昨今，プログラミングは より身近な技能へとなってきている。しかし，プロ グラミングは誰もが自由自在にできるものではな く，プログラムの書き方がわからず，挫折してしま う人も少なくない．そこで，我々は，自然言語を用 いたプログラミング支援の実現に向け，日本語記述 から Python コードを生成するニューラル機械翻訳 モデルであるコード生成 AI モデルの構築に取り組 んでいる $[1,2]$. ユーザは，プログラムの書き方が 思い出せない箇所をコード生成 AI モデルに対して 自然言語で与えることで，それに相当する正しい コードを得ることができる.

しかし，コード生成 $\mathrm{AI}$ モデルの学習データとな るソースコードとその対訳をぺアとした NL-code 対訳コーパスのデータ資源は限られている [3]. 先行研究では，ソースコードのデータ資源として， GitHub などのオープンソース上のソースコードが 使われてきたが $[4,5]$ ，これらには対訳などは含ま れていない.ソースコードの対訳は，ソースコード内のコメントとして付与されることもあるが，そ の対訳の粒度はコーダーによって様々である。そ のため，これらのコメントを抽出し，対訳として ソースコードとマッピングするだけでは，NL-code 対訳コーパスとして不十分である。また，整備済み の NL-code 対訳コーパスもいくつか公開されている が，これらのほとんどは人手で対訳が付与されたも のである．そのため，データセット数は数百から数千程度と限られており，深層学習のネットワークモ デルに直接適用することは難しい.

そこで，本研究では，NL-code 対訳コーパスの不足を解消すべく，自然言語とソースコード間の対訳 コーパス向けの Data Augmentation (DA) 手法を提案 する. 我々の DA 手法の特徴は，プログラミング言語の構文に基づくソースコードの合成と DA 記法の 導入による自然言語表現の増強である。我々は，こ の二つの特徴を実現する DA ツール Multiese を実装 し，人手で作成した NL-code 対訳コーパスのデータ セット数を 177 ペアから 14,721 ペアまで増強させる ことができた．また，実験では，Multiese によって 増強された NL-code 対訳コーパスを用いてコード生成 AI モデルを学習し，NL-code 対訳コーパスの合成によるコード生成 $\mathrm{AI}$ モデルの精度の変化を確か めた.

本論文では，NL-code 対訳コーパス向け DA 手法 とDA ツール Multieseを提案し，実験結果とともに 報告する。本論文の残りの構成は以下の通りであ る. 2 節では提案する NL-code 対訳コーパス向け DA 手法について述べる。 3 節では実装した DA ツー ル Multiese について述べる. 4 節では実験について 述べる. 5 節では関連研究を概観し，6節で本論文 をまとめる.

図 1 コード生成 AI モデルと back-translation

## 2 NL-code 対訳コーパス向け DA

Data Augmentation (DA) は，学習データに加工など の処理を部分的に施すことで，データ量を水増しす る手法である. 本節では，本研究で着目したDA 手法の一つである back-translation について概説したの ち, 本研究の提案である NL-code 対訳コーパス向け DA 手法について述べる.

## 2.1 Back-translation

Back-translation は，機械翻訳向けの DA 手法であ る. Back-translation では，目的とする翻訳モデルの ソース言語とターゲット言語を逆にした逆翻訳モ デルを別途学習する. 学習された逆翻訳モデルに対 して，ターゲット言語の単言語コーパスを入力し, ソース言語の対訳を生成することで，擬似的な対訳 コーパスを構築する. コード生成 AI モデルに対し て back-translation をナイーブに適用すると，図 1 に 示すように, Python コードから日本語記述を生成 する back-translation モデルを別途学習することにな る. 一般的な back-translation と異なる点は, 逆翻訳 モデルのソース言語が，木構造への変換が可能なプ ログラミング言語になることである.

## 2.2 NL-code 対訳コーパス向け DA 手法

本研究では，逆翻訳モデルのソース言語がプログ ラミング言語である点に着目し, プログラミング言語の性質を活用した DA 手法を新たに提案する. 図 2 は，NL-code 対訳コーパス向け DA 手法のコンセ プトを示したものである. 提案手法の特徴は, ソー スコードの任意長の expression片に対して与えられ た対訳から，ボトムアップで NL-code 対訳コーパス を合成する点である.

NL-code 対訳コーパス向け DA 手法では，まず人手で複数の日本語訳を付与した NL-code 対訳コーパ スを用意する。このとき，既存の対訳コーパスを再利用することも可能である.

図 2 NL-code 対訳コーパス向け DA 手法

## $\mathrm{x \% \mathrm{n}$}

$x \% 2==0$

$\mathrm{x}$ が偶数かどうか

$\mathrm{x}$ は 2 で割り切れるかどうか

次に，用意した NL-code 対訳コーパスに対して， プログラミング言語の文法に基づくアノテーショ ン記法を導入する. Expression 片の前後に来る可能性のある構文を @enot アノテーションのように与 える。

すると，アノテーションに基づき，表１のように 前後の文言が生成される。提案手法では，最初に与 えられた expression 片からボトムアップで対訳を合成することになるが，木構造のトップに相当する コードまでは生成しない。これは，Transformerなど のネットワークモデルでは, 複雑な木構造を扱うこ とが困難であるという考察に基づいている [6].

提案手法のもう一つの特徴は, DA 記法の導入に よる，自然言語表現の増強である。はじめに用意し た NL-code 対訳コーパスに対して，以下のような記法を追加することで，自然言語の表現を拡張できる ようにしている.

$x \% 2==0$ @@not @@if

@type(x, 変数) が偶数 [かどうか|であるかどうか] $\mathrm{x}$ は 2 で [割り切れる割ることができる]かどうか

上記の例には，二種類の DA 記法を含んでいる.

図 3 Multiese による日本語 Data Augmentation

一つ目は，類義語置換である. [かどうか|であるか どうか]のように定義された複数の類義語を組み合 わせることで，複数の自然言語記述を生成する。二 つ目は，変数名やリテラルに対する型情報の付与で ある. @type(x，変数) のように変数名とその型情報をぺアとして明示することで，変数名の前後に型情報を付与，もしくは付与しないパターンを生成 する. DA 記法を付与する手間はかかるものの，複数のDA 記法を組み合わせることで，様々な表現パ ターンへの拡張が実現できる.

## 3 DA ツール: Multiese

Multiese は，NL-code 対訳コーパス向け DA 手法を 実現するための DA ツールである. 図 3 は, Multiese が NL-code 対訳コーパスを合成するまでの流れを 示したものである。まず，DA 記法を含んだ自然言語記述は，抽象構文木 (AST) へと変換される. その 後，構文木のタグ情報に基づき，複数の自然言語表現をルールベースで生成する. 最後に，それらを元 のソースコードとペアにし， NL-code 対訳コーパス として出力する.

抽象構文木への変換は，PEG (Parsing Expression Grammar)[7] パーザジェネレータ PEGTree[8] と, 形態素解析器 Janome を組み合わせることで実装して いる. PEGTree で DA 記法に基づいた構文木に変換 した後, Janome で品詞タグを付与する. 品詞タグを 付与することで，語順の入れ替えや助詞の一部変更 などの DA 処理を，DA 記法なしに実現している.

## 4 実験

我々は, Multiese によって増強された NL-code 対訳コーパスを用いてコード生成 AI モデルを構築し， コードの生成例やその精度を確かめた。本節では， コード生成 $\mathrm{AI}$ モデル構築の流れとその結果につい表 2 実験に使用したデータセット

てまとめる.

## 4.1 データセットと前処理

我々は 3 種類の人手で作成した NL-code 対訳コー パスを用意し，そのうちの 2 種類に対して NL-code 対訳コーパス向け $\mathrm{DA}$ 手法を適用した. 表 2 は，実験で使用した NL-code 対訳コーパスをまとめたも のである. Euler ${ }^{11}$ は， "Project Euler4" の問題を解く ための Python コードに対し, 人手で日本語対訳が 付与された, Web 上で公開されているデータセット である [9]. AOJ と DS は，コード生成 AI モデルの 学習にあたり, 我々が人手で作成した NL-code 対訳 コーパスである. AOJ は， Aizu Online Judge ${ }^{2}$ に提出 された Python コードのうち，成績上位 100 人の公開コードを全て収集し，expression 単位のコード片 に対して日本語訳を付与したデータセットである。 DS は，データサイエンスに関するテキスト教材か ら，pandas や matplotlib などデータ分析でよく使用 されるライブラリの APIを採取し，人手で対訳を付与したデータセットである. AOJ-DA と DS-DA は， AOJ，DS に対してアノテーションやDA 記法を加 え，Multiese によってデータセット数を増強したも のである.

コード生成 $\mathrm{AI}$ モデル学習前には, トークナイズ と，変数名・リテラルの特殊トークン化への置き換 えを前処理として行った，トークナイザは，日本語 には Janome を使用し, Python コードはカッコやピ リオドなどの記号の前後に空白を挿入した.

## 4.2 コード生成 AI モデルの学習

コード生成 $\mathrm{AI}$ モデルの学習には, Transformer を 使用した. Transformer の各種パラメータは，エン コーダとデコーダの層数をそれぞれ 6 ， ヘッド数を 8，バッチサイズを 128 ，単語エンベッディング次元数と隠れ層次元数をそれぞれ 512 とした. また，損失関数にはクロスエントロピー，オプティマイザに

表 3 コードの生成例

 & $\langle A\rangle=\operatorname{int}($ input ()$)$ & sorted ( $\langle A\rangle$, input ( )) & $x$ \\

は Adam を使用した. 学習回数は, 検証用データの 損失值が最小となった時点で打ち切りとした.

## 4.3 実験結果 (1)：コードの生成例

表 3 は，ホールドアウト法で作成したテストデー タの入力文とその正解コード，コード生成 AI モデ ルによって生成されたコード，それに対する正誤を まとめたものである. はじめに，入力文の自然言語表現を確認すると，AOJ-DA，DS-DA 共に，Multiese によって自然な文章を合成できたことが確認でき る. 次に, 正解コードと生成コードを比べると, DA 適用前の NL-code 対訳コーパスを使用した場合の 生成コードは，API名や構文が間違っているものが 多く含まれる。一方, AOJ-DA や DS-DAを使用した 場合の生成コードは，AOJ やDS と比べると間違い も少なく, 様々な種類の Python 構文の生成を害現 した.

## 4.4 実験結果 (2) : コードの正解率

表 4 はコード生成 AI モデルから生成されたコー ドの BLEU スコアと正解率をまとめたものである.正解率は，コード生成 $\mathrm{AI}$ モデルから生成された コードと正解コードを比較し，構文的にも解釈的 にも正しいコードを人手によって検証し, その比率を示している. テストデータが多い場合は， サ ンプリングによる統計的解析を行っている. AOJ と AOJ-DA, DS と DS-DAを比較すると, Multiese に よって増強した NL-code 対訳コーパスを使用するこ とで，高い精度のコード生成 AI モデルの構築を実現できたことが確認できる.

## 5 関連研究

Data Augmentation は，深層学習モデルの精度向上 に向けて，学習データを水増しする手法である．DA は, 元々画像処理の分野で研究されてきた手法で あったが $[10,11]$, 近年では, 自然言語処理や音声処理などの様々な分野でも取り入れられている [12].表 4 生成されたコードの正解率

自然言語処理における DA 手法の先行研究とし て，低頻度語や，対訳コーパスのソース文とター ゲット文の両方に含まれる語彙を，別の単語で置き 換える手法が提案されている. 我々の提案手法の特色は，DA 手法をソースコードに対して適用した点 と，自然言語表現を多様化するためのルールベース の DA 記法を取り入れた点である. 我々の手法は， ソースコードの木構造に変換可能な点を活かした新 たなアプローチであるといえる.

## 6 むすびに

本研究では，NL-code 対訳コーパスの不足を解消 すべく，自然言語とソースコード間の対訳コーパス 向けの Data Augmentation (DA) 手法を提案した. 提案手法を用いることで，人手で作成した NL-code 対訳コーパスのデータ数を 177 ペアから 14,721 ペア までに増強させた。また，増強された NL-code 対訳 コーパスを用いることで，高い精度のコード生成 AI モデルの構築を実現した.

今後は，大きく分けて二つの課題に取り組んでい きたいと考えている。一つ目は，DA 記法を必要と しない DA 処理の実現である．類義語などの定義が 必要となる部分を，自動で置換可能なアーキテク チャを目指す. 二つ目は，ソースコードの構文の多様化である. 現状では, 最初に与えた expression 単位のコーパスとアノテーション記法に依存している ため，考えられるソースコードの記述パターンに対応しきれない。自然言語記述とソースコード両方を 拡張可能な新たな手法を探究していきたい.

## 参考文献

[1] 秋信有花, 梶浦照乃, 小原百々雅, 倉光君郎. 自然言語 を用いたコーディング支援の実現に向けたニュー ラル機械翻訳ベースのコード生成. 情報処理学会第 136 回プログラミング研究発表会 (PRO136), 2021.

[2] Yuka Akinobu, Momoka Obara, Teruno Kajiura, Shiho Takano, Miyu Tamura, Mayu Tomioka, and Kimio Kuramitsu. Is neural machine translation approach accurate enough for coding assistance? In Proceedings of the 1st ACM SIGPLAN International Workshop on Beyond Code: No Code, BCNC 2021, p. 23-28, New York, NY, USA, 2021. Association for Computing Machinery.

[3] Antonio Valerio Miceli Barone and Rico Sennrich. A parallel corpus of python functions and documentation strings for automated code documentation and code generation. In Proceedings of the Eighth International Joint Conference on Natural Language Processing (Volume 2: Short Papers), pp. 314-319, Taipei, Taiwan, November 2017. Asian Federation of Natural Language Processing.

[4] Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harri Edwards, Yuri Burda, Nicholas Joseph, Greg Brockman, Alex Ray, Raul Puri, Gretchen Krueger, Michael Petrov, Heidy Khlaaf, Girish Sastry, Pamela Mishkin, Brooke Chan, Scott Gray, Nick Ryder, Mikhail Pavlov, Alethea Power, Lukasz Kaiser, Mohammad Bavarian, Clemens Winter, Philippe Tillet, Felipe Petroski Such, Dave Cummings, Matthias Plappert, Fotios Chantzis, Elizabeth Barnes, Ariel Herbert-Voss, William Hebgen Guss, Alex Nichol, Alex Paino, Nikolas Tezak, Jie Tang, Igor Babuschkin, Suchir Balaji, Shantanu Jain, William Saunders, Christopher Hesse, Andrew N. Carr, Jan Leike, Josh Achiam, Vedant Misra, Evan Morikawa, Alec Radford, Matthew Knight, Miles Brundage, Mira Murati, Katie Mayer, Peter Welinder, Bob McGrew, Dario Amodei, Sam McCandlish, Ilya Sutskever, and Wojciech Zaremba. Evaluating large language models trained on code. 2021.

[5] Luis Perez, Lizi Ottens, and Sudharshan Viswanathan. Automatic code generation using pre-trained language models. arXiv preprint arXiv:2102.10535, 2021.

[6] Zeyu Sun, Qihao Zhu, Yingfei Xiong, Yican Sun, Lili Mou, and Lu Zhang. TreeGen: A tree-based transformer architecture for code generation. Proceedings of the AAAI Conference on Artificial Intelligence, Vol. 34, pp. 89848991, 042020.

[7] Bryan Ford. Parsing expression grammars: A recognitionbased syntactic foundation. In Proceedings of the 31st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL '04, pp. 111-122, New York, NY, USA, 2004. ACM.

[8] Kuramitsulab/pegtree: A peg parser generator with tree annotation. https://github.com/KuramitsuLab/ pegtree. (Accessed on 01/09/2021).

[9] Hiroyuki Fudaba, Yusuke Oda, Koichi Akabe, Graham Neubig, Hideaki Hata, Sakriani Sakti, Tomoki Toda, and Satoshi Nakamura. Pseudogen: A tool to automatically generate pseudo-code from source code. In
2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE), pp. 824-829. IEEE, 2015.

[10] Connor Shorten and Taghi M Khoshgoftaar. A survey on image data augmentation for deep learning. Journal of Big Data, Vol. 6, No. 1, pp. 1-48, 2019.

[11] Agelos Kratimenos, Kleanthis Avramidis, Christos Garoufis, Athanasia Zlatintsi, and Petros Maragos. Augmentation methods on monophonic audio for instrument classification in polyphonic music. In 2020 28th European Signal Processing Conference (EUSIPCO), pp. 156-160. IEEE, 2021.

[12] Steven Y Feng, Varun Gangal, Jason Wei, Sarath Chandar, Soroush Vosoughi, Teruko Mitamura, and Eduard Hovy. A survey of data augmentation approaches for nlp. arXiv preprint arXiv:2105.03075, 2021.
 秋信 有花 ${ }^{1}$ 小原 百々雅 ${ }^{2}$ 梶浦照乃 ${ }^{2}$ 倉光 君郎 ${ }^{2}$ ${ }^{1}$ 日本女子大学大学院 理学研究科 2 日本女子大学 理学部 m1616003ay@ug.jwu.ac.jp kuramitsuk@fc.jwu.ac.jp  