ShoheiTaiさんのつぶやきで思い出しました。
以前、こんな議論を見かけました。
最近、ソフトウェア特許を専門に扱っている弁理士の先生と話していて「AIによる自動プログラミングが近いうちに現実的になる」という話がある旨を聞きました。
しかし、正直、現実的ではないような気がして仕方がありませんが、決めつけるのも危険な気がしてます。
本当にAIによるプログラミングの自動化は現実的なところまで来ているのでしょうか?
30年前、大学で人工知能を少し研究してました。(勉強と言った方が近いのですが、一応卒論テーマでしたので。)
当時は人工知能の春と呼ばれていた時期でした。人間の知的活動を自動化する研究ですから、うまく行けばこんなバラ色の未来が見えてくると言われてました。嘘ではないです。でも、見渡せば分かるようにそれは少なくとも30年は未来の話でした。
当時、prologue(プログラミング言語の1つ)による自動プログラミングの論文を読みました。
prologueで書かれたプログラム自動生成プログラムが、yesかnoかの質問を多量に問うてきます。それに回答していくといつかはprologueで書かれたプログラムが完成すると言うものでした。その論文は当時注目されていたものの1つでした。
それから30年経過し、今はどうなっているのでしょうか?
プログラムを開発するということは、クライアントから要求仕様を聞き出し、不足する仕様を自分が持つ業務知識で補って具体化し、設計仕様に落とし込んだ上で開発するものと考えています。
設計仕様に落とし込んだ後の自動化は既に様々なツールがでてますね。今後もどんどん進歩すると思いますが、あまり人工知能の出る幕はないように感じます。きっちり論理的な部分なのでファジーとかニューロとか使えないと思います。
なので、設計仕様に落としこむ部分が人工知能に期待されると思うのですが、そのためには業務知識、および、常識についてのセンスを必要とします。
そのようなレベルに現在の人工知能が近づいているとはとても思えないのです。(自動翻訳も同様なセンスを必要とするのでその精度を見て強く感じてます。)
もし、自動プログラミングに関する人工知能研究についての現状をご存知の方がいらっしゃいましたら、現状のレベルについて教えて頂けないでしょうか?
【追記】
なかなか人工知能の現状についての回答が付かないです。
やはりプログラム開発できる人工知能の出現はまだ夢の話ということかも知れませんね。
でも、意外にそうでもないという可能性も残っていると思いますので、当質問は今しばらくオープンとさせて下さい。
【更に追記】
Mr_Robotoさんからアドバイス頂き追記です。
自動プログラミングに関する人工知能研究についての現状について知っているわけではなくても、雰囲気、もしくは、現状はここまでだろうという推測でもよいので、ご意見頂ければありがたいです。(気持ちを強く持ちたいとの思いも少しあるのです。)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/20 00:57
回答8件
0
ベストアンサー
現役で人工知能を勉強している学生です。
仕事の何もかもが機械に置き換わるというバラ色の未来というのはまだまだ遠い未来の話かもしれませんが,
目的を絞れば,人間がやる単調作業を機械に任せるというのは十分可能になっています。
しかしながら自動プログラミングという点に関してChironianさんが勉強されていた昔からある手法で,実際に命令セットを与えて自動でアルゴリズムを作成していく遺伝的アルゴリズム(Prologueのアルゴリズムとの関連はわかりません)というものがありますが,こちらは現在も手法は改良がなされているもののloop文,条件分岐文などを作成するのさえかなり難しく,フィボナッチ数列を解くプログラムを完成させる確率は最近まで30%に満たないという現状でした。部分的な問題では可能という程度です。
ディープラーニングとプログラムのコードを結びつけるモデルもまだほとんど世に出ていないので,なにかブレイクスルーが起きない限りは,入力と出力だけを与えて完全な自動プログラミングを行うのは厳しいでしょう。
というのもディープラーニングは入力に対して出力が1対1に対応する問題にたいしては,強いのですが,確率的に最も高いものに絞り込むだけなのでどうしてその入力に対してそういう答えが出たのかを人間が解釈するのは難しく,自動アルゴリズム作成というより,自動ブラックボックス関数生成といったものに近いからです。
明確にアルゴリズムの挙動が解る遺伝的アルゴリズムの精度が,たかが知れているのでまだまだそういう時代はこないと思っています。最近は遺伝的アルゴリズムの手法にディープラーニングを組み込めないかという試みもなされているようです。
(2042年までにとんでもないブレイクスルーが起こる(技術的シンギュラリティ(特異点)とかいうやつです)と予言はされているので,研究者の間では現状がひっくり返ることが起きる根拠が何かあるのかもしれませんが)
言語の解析に関しては未だかつてないほどのブレイクスルーが起きています。商用化などはされていませんが,未知の言語に対する文節を解析できるアルゴリズムや,特徴を推測する(極論すれば文章からどんな人物像かを当てられる)アルゴリズム等,データとモデル設計さえ妥当であれば,数値上かなりの高い確率で当ててしまうアルゴリズムさえ出てきています。
WatsonしかりCortanaしかりSiriしかり,入力に対する出力がある程度決まっているQ&Aのような入力と答えをマッチさせるような問題を解くことに関しては,ディープラーニングや関連手法はすごい性能を達成しています。
ただディープラーニングでも難しい球拾いをこれからも人間はやり続けていくとおもいます。
他画像処理や音声信号処理などでも人工知能が使われるようになりましたが,こちらは毛色が少し違う話題になってしまうので,省略します。
現状まとめると,人工知能は局所ケースの問題に関してものすごい性能を発揮しますが,その局所的な問題を解くための設計をすることは,苦手です。あまりにも複雑すぎる問題は人工知能で解くことは難しいのですが,人間がある程度簡単な問題(理論的に解けると証明できる問題)まで落とし込んでやれば人工知能がいろんな問題を解決できることがわかったっていう感じになったのが7年前くらい(googleの猫認識)だと思います。
(追記:あまりにも複雑すぎる問題は解けないと書いていますが,ここでいう複雑性とは,人間が考えても答えを出せない問題という意味ではありません。例えば,数種類の項目があるデータがあって,できるだけ似ているものを均等の個数に分かれるようにグループにしたい,という問題は(基本的に)人間には解けません(必要な特徴が解らないなど)が機械は解けます(グループ分けに関係あると思われる特徴まで目星をつけられる)。このように人間が答えを機械に与えられなくてもデータから答えを当てるようなアルゴリズム(教師なし学習)などもあります。ここでいう複雑性とは,入出力が1対多で隠れた条件分岐が複数あったりするような問題のことです。そのような構造を把握するように問題設計するのは不可能ではないもののモデルとして複雑度が増し上手く解きづらい問題になります。ここでいう簡単な問題に落とし込むという作業は,こうした複雑度をできるだけ取り除き綺麗に設計するという意味になります。ディープラーニングは入力と出力を与えれば,そういう複雑すぎる問題にも数の暴力で一定の答えを出してくれますが,入れるデータと出てくるデータの関係性を考えずにデータを突っ込んでも,実データで答え合わせした時に全く意味のない予測を機械がしている可能性などがあります。ただ,何も考えずにデータを突っ込んでも入力と出力のデータに因果関係があれば,答えを当ててしまう可能性があるのもディープラーニングが強力すぎる所以です。)
なので,現在も人間側が機械が問題を解けるようにするための設計(よくチューニングやモデリングと呼ばれます)を行う人は今後も働き続け,その需要は高まり続けるとおもいます。(といっても,実はこのチューニングを自動化する手法を研究する分野もあり,こちらも限定された問題に対してはうまくいくという研究結果が出ています。)
この問題設計が高度な数学的な専門知識を要し,難しいため,データサイエンティストという人たちの必要が叫ばれるようになったって感じですね。
参考になりましたでしょうか?
追記
そういえば最近NodeRedのような結線プログラミングが流行っていますが,あのような形式であれば,Nodeを組み合わせて,プログラムを作るような自動プログラミングはある程度できるんじゃないかなぁと思いました。(loopノードを人間が用意できるため)自動プログラミングに限らずいろいろ面白そうな話題はあるので,調べられてみると面白いと思います。
投稿2016/08/21 17:51
編集2016/08/21 18:51退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/22 01:21 編集
2016/08/22 13:44
退会済みユーザー
2016/08/23 00:37 編集
2016/08/23 00:43
退会済みユーザー
2016/08/23 14:58 編集
0
人工知能系京大発ベンチャーを営んでいる者です。
以下、
ソフトウェア開発 = 仕様策定 + プログラミング
と捉えて、回答します。
本当にAIによるプログラミングの自動化は現実的なところまで来ているのでしょうか?
プログラミングの自動化はまだ現実的なところまで来ていません。
しかし、一部のプログラミング工程の自動化はすでに実現されています。プログラミングには、テスト・リファクタリングといった工程が含まれます。
最近、プログラミングの自動化を目指すDiffBlueという企業が22,000ドルの投資を受けたことで取り上げられていました。
オックスフォード大学の教授が立ち上げたスタートアップで、現在はテストコードの自動生成やソースコードのリファクタリング(外部から見たプログラムの振る舞いは変えないで、内部構造を整理すること)をAIが自動で行なってくれる製品を提供しているようです。今後は、プログラミングの自動化を目標にしているそうです。
DiffBlueに関しては、次の記事が参考になると思います。
プログラミングは人口知能(AI)で自動化されるのか。オックスフォード大発のDiffblueがやばいサービスを出したらしい。
DiffBlueが役に立つかどうかは試したことがないのでわからないですが、一部の工程が自動化されつつあるのは事実です。
当時、prologue(プログラミング言語の1つ)による自動プログラミングの論文を読みました。
prologueで書かれたプログラム自動生成プログラムが、yesかnoかの質問を多量に問うてきます。それに回答していくといつかはprologueで書かれたプログラムが完成すると言うものでした。その論文は当時注目されていたものの1つでした。
それから30年経過し、今はどうなっているのでしょうか?
ソースコードの自動プログラミングの現状はあまりよく知りませんが、調べたことと私の意見を概説します。
単に自動プログラミングと言っても、IDEの自動補完やスニペット展開のような非常に小さいプログラム生成から、仕様を策定すれば自動で完全なプログラムを生成するものまであります。本回答では、後者について言及します。
例えば、Full-Automatic Implementation of Protocol Programs for OSI Application Protocols over ROSEという論文では、プロトコル(プログラム間の通信方式)の仕様から完全なプログラムを自動生成する方法について論じられています。
この論文では、次のようなアプローチをとっています。
- プログラムを自動生成するためには仕様記述言語によって、プログラムの仕様を決定する。
- その仕様を満たすプログラムが自動で生成される。
自動プログラミングの現実的な方法は、この論文のように仕様記述言語によって仕様を記述することであるように思われます。ただし、このアプローチではAIは出てきません。
ところで、一般的にある仕様を満たすプログラムの書き方は一意ではありません。つまり、ある仕様を満たすプログラムの書き方は複数通り存在します。プログラムの書き方によって、実行速度やメモリ効率が変わってきます。ここにAIが入り込む余地があるのではないかと考えます。
仕様記述による自動プログラミングは決定的な(確率的ではない)プロセスをとりますが、例えば強化学習(より良い結果を選択するように学習する機械学習手法)のような確率的なアプローチをとって、なるべくパフォーマンスの高い実装を選択ようにするといった工夫をすれば、より役に立つ自動プログラミングが可能になるのではないかと思います。
なので、設計仕様に落としこむ部分が人工知能に期待されると思うのですが、そのためには業務知識、および、常識についてのセンスを必要とします。
私は、ソフトウェア開発の中で、設計仕様に落とし込む部分が人工知能に期待されるとは考えていません。また、設計仕様に落とし込む部分を人工知能がこなすのは、まだ難しいと思います。私は、プログラミングが自動化されることが期待されると考えています。
また、プログラミングが自動化されることによってソフトウェア開発の敷居が低くなると思います。その結果、今までは外注がされていたようなソフトウェア開発の一部が、社内でも低コストで実施可能になる可能性があるのではないかと思います。
もし、自動プログラミングに関する人工知能研究についての現状をご存知の方がいらっしゃいましたら、現状のレベルについて教えて頂けないでしょうか?
DiffBlueの参考記事の中にもあるように
また、2017年2月28日には、マイクロソフトがケンブリッジ大学の技術者と協力し、コードを自動生成する「DeepCoder」を開発しているとのこと。ただ、現状は5行分のコードを書くことで精一杯とのこと。
AIによる自動プログラミングはまだまだ難しいようです。
しかし、DiffBlueのようにテストやリファクタリングなどの一部の工程を自動化することはある程度可能になって来ているというのが現状です。
また、人工知能とは関係ありませんが、仕様を記述すれば完全なソースコードを生成できるという話もあります。
より最先端の技術に関して知りたければ、「Automatic Programming」や「Automatic Program Generation」で調べればたくさん情報が出てきますよ。
追記
AIは自律的に何をすればいいか考えられるわけではないので、結局どんなプログラムがほしいのかを人間が教えてあげる必要があります。そのためには仕様を作成する必要があり、その部分を自動化するのは現状難しいと思います。
また、仕様からプログラムを生成するのに必要な技術はAIではないと思います。必要な技術はすでに揃っているように思われます。事実、特定の分野では上の論文のように自動プログラミングが実現されています。ではなぜ自動プログラミングが普及しないのかと思いますが、その答えを私は知りません。一つの可能性としては、仕様記述言語の標準化が進んでいないことに原因があるのかもしれません。何か新しくわかったことがあれば、またその時に追記します。
投稿2017/10/12 22:51
編集2017/10/12 23:16総合スコア229
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/13 00:04
0
久しぶりにこの質問が上がっていたので、最近見たニュースを貼り付けておきます。
ソースまでちゃんと辿っていないので、実際にどんなものなのか不明ですが、記事を見る限りは仕様の確認から、コーディングまで出来て楽しそうです。
投稿2017/10/12 23:48
退会済みユーザー
総合スコア0
0
今さらですが興味のあるテーマなので、多少意見を書かせていただきます。
設計仕様に落としこむ部分が人工知能に期待されると思うのですが、
そのようなレベルに現在の人工知能が近づいているとはとても思えないのです。
ご質問で仰るとおり、自動プログラミングはいまだに実現できておりません。
コードを自動生成するツールならすでにありますが、
それが要求する仕様書は実質的な日本語プログラミングになります。
結局、その仕様書自体は自動生成できずに人間が書くのです。
現在の人工知能というのは、
流行のディープラーニングも含めたニューラルネットのように
規則があるか(猫と犬の画像など、明確に判定できる違いがある)、
遺伝的アルゴリズムのように
基準があるか(コストなど解を評価できるスコアがある)、
エキスパートシステムのように、
枠組があるか(チェスや将棋のように問題が限定されている)、
いずれにしろ、1の基盤があって、2、3……と増やせても、
人間のような0を1にする、無からの創造性はありません。
言い換えると、人工言語(機械語)が扱える問題であれば、
解ける速度や領域は加速度的にどんどん広がっていますが、
一方で人工言語と自然言語の溝はぜんぜん埋まっていません。
これは、チューリングマシンの停止性問題やフレーム問題など、
無限が絡む扱いをどう処理するかの問題が根底にあると考えます。
ですからもしかりに、人間並みの人工知能が実現できるとしたら、
たとえばハードウェアにバイオテクノロジーが使われるだとか、
少なくとも現在のノイマン型のチューリングマシンに還元できない、
まったく別の新しいシステムではないかと個人的に考えています。
なお、本回答は否定的な印象になってしまったかもしれませんが、
WatsonにはPrologも(部分的ですが)使われているらしいです。
メディアではディープラーニングだけが注目されていますが、
その点で前世紀のAIの冬を越えて進歩した部分も確実にあります。
(顧客の)自然言語から要件定義の全体を直接作成するのは無理でも、
エキスパートシステムを部分的に適用できる箇所は出るかもしれません。
たとえば、過去の事例を参照して自動で見積もりするとか、いろいろ。
そうかんたんにシンギュラリティまで実現できないと思いますが、
数十年先は誰も予想できないので、可能性はあるのかもしれません。
投稿2016/09/03 19:41
総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/04 01:49
2017/10/12 23:51
0
私的に学んでいるだけの素人ですが私も同意見です。
非現実的な夢物語だとしか思えません。
技術的には可能なのは確かでしょうが人工知能に人間相当の知能を持たせるためのリソースを誰が用意できるのか疑問です。
言語を扱う人工知能のように、正しい知識を網羅的に集めた辞書と、言語がどう扱われるかをしめす物語があれば学習も可能でしょう。
しかし、プログラムの一覧が載っている辞書なんてありませんし、作ろうと思っても辞書のように体系的にまとめられるのはごく限られた分野だけでしょう
また、プログラムが何を求められ、どのように作られ、どう扱われているか、プログラムが用いられる文脈を人工知能に入力するのは至難の技だと思います。
学習材料さえあれば、その知識の中から人間の質問や要望に適した答えを返すのは人工知能なら簡単だと思いますが
人間相当の知能になるまで学習できるリソースを収拾するためにはあと10年くらいはかかりそうな気がします。
投稿2016/08/19 14:14
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/19 14:35
退会済みユーザー
2016/08/20 02:34
2016/08/20 13:24
2016/08/21 11:46
0
ちなみに「日本語設計書からプログラムソースを100%自動生成」できる商品があるようです。
FUJITSU Software Interdevelop Designer
投稿2016/08/18 03:12
総合スコア2160
0
画像デザインからHTMLを自動生成するのは既に出来ています
https://ledge.ai/pix2code-on-floydhub/
最新のVisual Studioは行単位でコード生成してくれます
https://forest.watch.impress.co.jp/docs/news/1218129.html
昨年の2020年にOpenAIのGPT-3がプログラムの自動生成に使えるのではと話題になっています
https://techtarget.itmedia.co.jp/tt/spv/2010/26/news03.html
投稿2021/01/31 00:24
編集2021/01/31 00:38総合スコア11
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/31 07:51
0
▼プログラミングするプログラム -自動プログラム作成最前線-
http://id.nii.ac.jp/1001/00160296/
では現在の動向が簡潔に、6ページでまとまっています。
本文PDFは情報処理学会の会員でなければ648円必要になりますが
実用になった FlashFill や自然言語を用いた AnyCode 等が紹介され、
Chironian さんの要求にはよく合った文献だと思われます。
投稿2017/01/06 03:52
総合スコア12
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/06 04:41
2017/01/06 05:54 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。