IBM Research

これからのプログラミングを助けるAI

記事をシェアする:

2021年12月6日から14日まで、機械学習(AI)のトップ国際学会のひとつである Conference on Neural Information Processing Systems(略称:NeurIPS)が開催されました。IBMは、今年も多数の興味深い研究成果を発表しています。こちらのウェブサイトから検索・閲覧できますので、興味を持たれましたら、ぜひ、アクセスしてください。

東京基礎研究所からも、若い研究者たちによる 2件の発表がありました。ひとつは、宮口 航平さん“Asymptotically Exact Error Characterization of Offline Policy Evaluation with Misspecified Linear Models”。もうひとつは、和地 瞭良さんが海外の研究者と共著した ”Safe Policy Optimization with Local Generalized Linear Function Approximations”。これらについては、本人たちから日本語で紹介してもらう機会を作りたいと考えていますので、楽しみにしていてください。

他に注目していただきたい研究発表として、「CodeNet」と呼ばれる、コンピューター・プログラムの自動変換や自動生成を行うAIの学習を目指したものがあります。CodeNetは2021年5月に発表されていますが、その詳細を正確に説明した論文が、国際学会では初めて発表されました。補遺も含めると 31ページという、盛りだくさんの内容です。この記事では、NeurIPS 2021での発表内容について紹介していきます。


CodeNetとは、コンピューター・プログラムと、コンピューター・プログラムが解いている問題についての情報を、アノテーションとして付随させた大量のデータセットです。CodeNetは、「レガシー・システムの近代化」、「開発者によるプログラミングの支援」、そして、将来的には、「AIによるプログラムの自動生成」などを実現する技術の開発を活性化するものと期待されています。

今日、私たちが日常生活の中で何かを実行した時に、その背後では、古いプログラミング言語が動いている可能性が高いです。それも、デスクトップ・コンピューターや、インターネット、VHSビデオテープが発明されるよりも前の、とても古いプログラム言語が、です。

たとえば、「銀行口座の確認」、「クレジットカードの使用」、「病院への来院」、「航空券の手配」、「税金の支払い」、「店頭での購入」といった行動の際には、COBOL (Common Business Oriented Language) と呼ばれるプログラミング言語を用いたシステムを利用している可能性が高いです。COBOLは、60年以上前に実装された言語であり、世界中の数多くのミッションクリティカルなビジネスシステムが採用しました。そして、現在でも、約80%の財務処理でCOBOLが使われていますし、例えば、アメリカの社会保障局では6千万行のCOBOLプログラムを使っています。

COBOLを書いていたプログラマーや開発者が引退し始めていることから、COBOLプラグラムで構築されているシステムを、常時稼働が当たり前のインターネットを前提とする利用環境向けに近代化したり、継続して運用を続けることに、企業や官公庁など組織は困難を感じ始めています。

ただ、COBOLは一例にすぎません。現代のプログラマーたちが快適にプログラミングすることができる言語とは異なるプログラム言語は、他にもたくさんあります。

プログラミング言語の翻訳(他のプログラミング言語への変換)は、今年5月に初めて公開したCodeNetで私たちが取り組もうとしている多くの問題のうちの一つです。CodeNetは、本質的には、プログラムを理解・改善する方法の学習に、AIシステムが用いることを可能にする巨大なデータセットです。効率的にプログラマーを支援することや、究極的には、AIシステムが自動的にコンピューターをプログラムすることも可能になるかもしれません。

CodeNetには、約1,400万のプログラム例が含まれています。そして、それらのプログラム例は、55以上の異なる言語による合計約5億行のプログラムで構成されています。具体的には、比較的、近代的なC++、Java、Python、Go、さらに、レガシーな言語であるPascal、FORTRAN、COBOLなどが含まれています。公開からわずか3ヶ月の間に、CodeNetのGitHubレポジトリーは、1,070のスターを集め、135回フォークされました。

CodeNet code composition

Figure 1 : CodeNet code composition

今週行われたNeurIPSで、IBMは CodeNetについての論文を発表しました。論文では、「CodeNetをどのように開発したか」、「CodeNetが類似した他の研究とどのように違うか」、「発表後、リサーチ・コミュニティーで、どのようにCodeNetが利用されているか」を報告しています。

ここ10年で、AIは著しい発展をとげました。注意深く作成されタグづけられたImageNetのようなデータセットの恩恵により、自然言語や画像のAIシステムの研究が進み、物を書く人のために文章を補ったり、医師のために腫瘍を検出したり、数えきれないほどのビジネスやITプロセスを自動化しました。しかし、プログラミング言語に関しては、AIシステムが学習できるようなデータセットを整えることが、課題として残されていました。

CodeNetの最終的な目標は、「既存のプログラムの近代化」、「プログラムの中にある誤りやセキュリティ脆弱性の修正」が行えるシステムの作成を実現することです。この点については、IBMワトソン研究所のRuchir Puriが「コンピューターがコンピューターをプログラムすることは可能か(Can computers program computers?)」というビデオの中で説明しています。

CodeNetを用いた実験

私たちはCodeNetを用いて、コード分類、コード類似性、コード補完についてベースラインとなる実験を行いました。これらの実験結果は、ユーザーが独自の実験を行うときに参考とできます。この実験から示されたことは、CodeNetから学習されたモデルは、CodeNetの高い品質によって他のデータセットへの汎化能力が高いということです。

CodeNetの構築のされ方

CodeNetは4,503の課題に対する合計13,916,868のコード投稿から構成されています。そのうちの53.6% (7,460,588)が「受理」されたコードになっており、これは解くべき課題を解くことができていることを意味しています。そして、29.5%が間違った結果を出力するコードで、その他の残りはランタイムやメモリの要求を満たすことができなかったため、リジェクトされたコードです。

CodeNetで扱われている課題は主に教育的なもので、単純な練習課題から発展的なアルゴリズムが要求される複雑な課題にわたっています。コードを投稿した人は初心者から経験のある開発者までが含まれます。このデータセットは、AIZUとAtCoderという2つのオンラインジャッジ・サイトからスクレイピングされたコードとメタデータから主に構成されています。これらのサイトは、教育コースとコンテストを提供しており、そこではプログラミングの課題が与えられ、投稿されたプログラムは自動的な審査プロセスによってその正確さが審査されます。私たちは公開されている投稿だけを用い、二つのソースから提供されている情報を手作業で結合し、一つの統一的なフォーマットを作成することで一つのデータセットを作成しました。

私たちは二つの異なるデータソースから収集したすべての生データを一貫したUTF-8文字コードでエンコードしました。また、バイトオーダー・マークを削除し、Unixスタイルの改行コードで統一しました。

ここにある課題には何十年も収集されていたために重複がありましたがそれを検査し、ベンチマークデータセットを抽出する際にはデータの独立性が求められるため、ほぼコピーになっているコードサンプルを同定しました。

私たちは主要な言語(C++、Python、Java)についてベンチマークとなるデータセットをユーザーの利便性のために提供しました。それぞれのコードサンプルとその課題には重複がなく、機械学習のモデル入力として変換がしやすいようにいくつかの前処理ツールにかけてあります。ユーザーは、私たちがGitHubで提供しているデータフィルタリングや収集のツールを用いて、独自の目的のためにベンチマークデータセットを作ることもできます。

CodeNetの今後の展開

上述してきた内容は、CodeNetによってAIの世界にもたらされるものの一部にすぎません。冒頭に述べたような、日常的に使用している「古いプログラミング言語で構築されたシステム」の近代化をAIで加速するために、CodeNetがますます広く利用されることを願っています。

そのために、近々、CodeNetデータに基づいたチャレンジを複数立ち上げていきます。最初のチャレンジ は、「あるプログラムと類似した機能を持ったプログラムの特定が可能なAIモデルを開発できるか」というチャレンジです。このチャレンジは、Stanford’s Global Women in Data Science organizationとのパートナーシップによって立ち上げられました。この「プログラムの類似性」というトピックを紹介し、教材を提供するためのワークショップを、複数回にわたって開催しました。AI分野におけるダイバーシティーを促進するために、「プログラムを扱うAI」というエキサイティングなチャレンジに参加したすべてのチームは、半数以上が女性で構成されました。

私たちは、開発者が慣れ親しんだプログラミング言語で、レガシー・システムについての作業を行える未来を思い描いています。私たちが思い描く未来では、開発者はPythonでプログラムを書き、AIシステムが実行可能な形式のCOBOLに完璧に変換することで、レガシー・システムが正しく信頼性を持って動作し続けられます。また、AIシステムが過去の何千ものプログラムを参考にすることによって、開発者のプログラムを評価し、改善方法を提案するようになるでしょう。さらには、もっと効率的なプログラムを、AIシステムが自動的に作成するようになるかもしれません。つまり、コンピューターが、その後を継ぐようなコンピューターのプログラムを書くような将来を描き始めているのです。ただ、まず、CodeNetが成功するためには、私たちが作ったCodeNetを、開発者の皆さんに使い始めていただかなくてはなりません。

CodeNetデータセットについての詳しい情報はこちらのGitHubをご参照ください。


本記事は「 How AI will help code tomorrow’s machines (written by Ruchir Puri)」を抄訳し、日本向けに加筆したものです。


立花 隆輝
監訳・解説:立花 隆輝
東京基礎研究所 AI担当シニア・マネージャー、シニア・テクニカル・スタッフ・メンバー
入所以来、マルチメディア信号処理や音声言語処理などに従事。現在は自然言語処理、画像処理、エッジやロボット関連機械学習応用などを含めたAI関連プロジェクトのマネージメントを行う。
More IBM Research stories
2019年11月21日

気象応用AIアプリケーション開発の勘所——技術者目線のランドスケープ

著者:藤尾 昇平 日本IBM、東京ラボラトリー、ストラテジー&オペレーションズ所属。 入社後、大和研究所に配属、メインフレーム用端末やThinkPadのハードウェア開発に従事。なかでも設計応用・高周波利用のための電磁解析 […]

さらに読む

2019年10月18日

AIプロセッサーの動向とそのソフトウェアの将来を予測

著者:小原 盛幹 IBM東京基礎研究所、コマーシャル・システムズ担当、IBMアカデミー会員、TEC-J バイスプレジデント 現在「AI Hardware Ecosystem」のIBM Research グローバル・リーダ […]

さらに読む

2019年9月1日

なぜ第一生命は「AI活用」に踏み込んだのか?コンタクトセンターの“大改革”の舞台裏

このエントリーをはてなブックマークに追加 第一生命は、コールセンターの業務改善に向けてIBM Watsonを採用。AIコンタクトセンター支援システムを導入した事例と将来の展望について語ります。 ※この記事は2019年8月 […]

さらに読む