ソフトウエア開発へのAI適用の波
2013年にオックスフォード大学のオズボーン准教授は、「雇用の未来」(※1)という論文で多くの仕事がAIによって代替され、多くの人が失職する可能性があると発表し、世界に衝撃を与えました。この論文では、多くの職業が失職すると書かれていたものの、ソフトウエア開発に関してはその可能性が低いとも書かれています。しかし、ここ数年アカデミックを中心にソフトウエア開発についてもAIを適用しようという流れがあります(図1)。
図1:ソフトウエア開発へのAI適用
図1でご紹介した技術のほとんどは研究開発レベルであり、すぐ実用化するものではありません。また仮に実用化されたとしてもソフトウエア開発のタスクの一部が自動化されるだけのため、ソフトウエア開発者が失職するというよりも、むしろソフトウエア開発者の仕事が楽になるような技術です。
一方でいくつかの技術は実用化した時に、ソフトウエア開発者の失職、もしくは大幅なスキルセットの見直しが必要になりそうな技術もあります。それは、プログラム自動修正とプログラム合成です。今回はプログラム合成についてご紹介します。
プログラミングへのAI適用 ~プログラム合成~
現在のソフトウエア開発者の多くは、要件や仕様をもとに何らかのプログラミング言語でプログラムを作成することに多くの時間を割いています。プログラム合成は、このプログラミングする部分を丸々代替してしまうような技術です。
プログラム合成にはいくつかアプローチがありますが、入出力を人が例示するだけでプログラムを自動生成するアプローチがホットです(図2)。
図2:プログラム合成のアプローチ
このアプローチのプログラム合成で最も成功した例は、MicrosoftのExcel2013から実装されているFlashFillです(図3)。
図3:FlashFillの仕組み(※2より引用し、注釈を追記)
FlashFillはExcelの文字列操作を自動化する機能で、以下のような仕組みです。
(1)入力列に対して望ましい出力例を何個か与える、(2)既知の関数の組み合わせを試して、入出力例に合致するプログラムを「合成」する、(3)合成したプログラムを使って、残りの入力列に対応する出力を計算する。
従来は(2)で試す組み合わせが膨大になってしまうため、実用的ではないと考えられてきました。しかし最近では基になる関数の数を絞り込んだり、組み合わせの優先順位付けに機械学習の結果を適用させたりすることで、実用的なプログラムを合成できるようになってきました。まだまだ発表されている研究の多くは、データ分析の前処理などニッチな領域への適用が主ですが、今後は別の領域についてもプログラム合成ができていくことになるでしょう。
今後この技術がメインになったなら、ソフトウエア開発者はプログラミングをするのではなく、入力に対する望ましい出力例を考え出す役割を受け持つことになるでしょう。その日に備えて、プログラミング言語習得とは異なる観点でのスキルを習得しておくべきかもしれません。
https://www.oxfordmartin.ox.ac.uk/downloads/academic/The_Future_of_Employment.pdf
https://www.microsoft.com/en-us/research/blog/deep-learning-program-synthesis