プログラミング言語と自然言語間の統計的変換

札場寛之 (1551094)


コンピュータを効率的に扱う需要は高まっているが、これを達成するためにはプログラミング言語の習得をする必要がある。 しかしプログラミング言語の習得は困難である。 一方で、多くの人間は同じ言語である自然言語をひとつ以上習得している。 このため、自然言語を介してコンピュータを扱うことができれば、コンピュータを扱う際に手助けとなると考えられる。

本論文では Tree-to-String 翻訳モデルを用いてプログラミング言語から自然言語の擬似コード自動生成を行い、プログラミング初学者の教育を支援する。 プログラミング教育の現場で擬似コードを用いてソースコードの理解を促す試みがなされているが、通常ソースコードには擬似コードがついていないため、 人手でこれを用意する必要があり負担である。 本研究では小田らの手法を用いて擬似コードを自動生成し、生成された擬似コードを提示することでプログラミング初学者の理解が高まったことを実験で確認した。

またそれとは逆に、String-to-Tree 翻訳モデルを用いて自然言語からプログラミング言語へ変換し、プログラミングを補助する手法を提案する。 どちらの変換もデータに基づく統計モデルを用いて行うため、人手で変換のためのルールを作成する必要がないというメリットがある。 特にソースコード生成では、プログラミング言語の厳密な構文を満たすソースコードを生成するため、String-to-Tree 翻訳モデルを用いてプログラミング言語の抽象構文木を生成し、それをルールに基づきソースコードへと変換する。 String-to-Tree 翻訳モデルはデータから目的言語側の文法を学習し、これを満たすような文を生成するモデルである。 しかしプログラミング言語の抽象構文木の文法はプログラミング言語の文法と一対一対応ではないため、そのままではソースコードを生成することができない。 抽象構文木の文法に制約を加えることで高精度で構文的に正しいソースコードの生成ができることを実験で確認した。

A Skill to use computers efficiently is becoming more and more important. However, it requires us to learn programming languages, and learning programming languages is sometimes difficult. In other hands, many of us can use natural languages fluently. Thus, if we could communicate with computer through natural language, it will be helpful.

In this paper, we help programming beginners by generating natural language pseudo-code from source code using Tree-to-String translation model. In an educational situation, pseudo-code is often used to aid programming beginners. However, source code usually do not have corresponding pseudo-code, and thus it requires man a tedious work to write it. We propose a method to aid programming beginners/learners using automatically generated pseudo-code with a method proposed in (Oda, 2015). We show that by doing this learner improved understandings of code by reading pseudo-code and source code at once.

And vice versa, we support users by generating source code from natural language using String-to-Tree translation model. Both method is data driven statistical model, so there are no need of managing hand made rules. Especially in the research of source code generation, we use String-to-Tree model to generate abstract syntax tree of programming language. Then we convert this abstract syntax tree to an actural source code with small rules.

String-to-Tree translation model learns the syntax of target side language from data, and it is a model that generates a sentence which satisfies the syntax. However, syntax of abstract syntax tree is not one-to-one correspondence to syntax of programming language, so naive application does not work. We solve these problems by restricting syntax of abstract syntax tree, which results in high accuracy of generating syntactically correct source code.