IBMは5月11日(現地時間)、AIによるプログラム・コードの理解と変換を可能にするオープンソースのデータセット「Project CodeNet」を公開した。
約1400万のコードサンプル、5億行のコード、55のプログラミング言語で構成される大規模なオープンソース・データセットで、これを利用することにより、問題のあるソースから適切なソースへの変換や、レガシーな言語のプログラムから最新の言語で書かれたプログラムへの移行などに役立てることができる。あるいは、4000種あるコーディングに関わる問題のいずれかを解決可能という。
またProject CodeNetは、画像処理分野の発展に大きく貢献した画像データセット「ImageNet」とよく似た特徴(大規模性、多様性など)を備えるという。IBMは、「ImageNetがコンピュータビジョンにもたらしたものを、AIによるコード開発にもたらすことを目的にしている」と意欲を語っている。
Project CodeNetは、主に次の3つのユースケースが想定されている。
コードの検索
COBOLなどのレガシー言語から別の言語へのコードの自動変換
コードの類似性
異なるコード間の重複と類似性の特定
コードの制約
開発者の固有のニーズとパラメータに基づく各種制約のカスタマイズ
またGitHub上のProject CodeNetの説明では、以下のようなユースケースが挙げられている。
・コードの検索やクローンの検出
・正常なコードか、または問題のあるコードかの区別・判定
・問題のあるコードから正常なコードへの修正の過程を追跡できるため、コードの自動修正の検討に利用できる
・各コードサンプルには、CPU実行時間とメモリ使用量がラベル付けされているため、回帰研究や予測に利用できる
・多様な言語のプログラムを含めため、コード変換のベンチマークに利用できる
最近、「AI for Code」と呼ばれる、プログラムの開発やデバッグ、メンテナンスなどにAI技術を適用する取り組みが進んでいる。この背景には、産業・社会の至るところでソフトウェアが適用され、より高い開発生産性や品質が求められていることに加えて、企業や社会の基盤を形成しているソフトウェアの老朽化の問題がある。そこへAIを適用し、プログラム開発・保守全体のプロセスを劇的にモダナイズしようというのがAI for Codeである。
Project CodeNetもAI for Codeの取り組みの1つだが、Project CodeNetは、プログラミング判定サイトの「AIZU Online Judge」と「AtCoder」で得られた膨大なデータを基に開発された点が大きな特徴である。
またIBMでは、次のような点も特徴として挙げている。
・コードサンプルには55種類のプログラミング言語が含まれる。主な言語は、C++、C、Python、Java。
・コードサンプルには、コードサイズ、メモリ使用量、CPU実行時間、承認やエラーの種類を示すステータスなどが注釈として付けられている。また90%以上の問題に、入出力フォーマットの仕様を含む問題の説明が付いている。
・問題によっては、説明文から入力/出力のサンプルを抽出し、データセットの一部として提供している。ユーザーはこれを利用したり、追加のメタデータの抽出やAIモデルの出力の検証を行える。
以下は、Project CodeNetに収録されているコードの言語と比率である。
言語 | サンプルコード数 |
---|---|
C++ | 8008527 |
Python | 3286314 |
Java | 712153 |
C | 754058 |
Ruby | 250403 |
C# | 235107 |
Rust | 127210 |
Go | 99125 |
Haskell | 56292 |
Kotlin | 47030 |
JavaScript | 58395 |
PHP | 41932 |
D | 33438 |
Scala | 27283 |
Nim | 20852 |
OCaml | 12879 |
Perl | 14481 |
Fortran | 15059 |
Lisp | 10523 |
Julia | 10779 |
Awk | 9595 |
Pascal | 8727 |
TypeScript | 7647 |
Bash | 17257 |
Lua | 5518 |
Swift | 6562 |
F# | 4568 |
Crystal | 5026 |
Bf | 3966 |
Scheme | 3546 |
dc | 3489 |
Sed | 2336 |
Cython | 2515 |
Octave | 2388 |
Visual Basic | 2116 |
Objective-C | 1379 |
COBOL | 1277 |
Vim | 1061 |
Clojure | 847 |
Standard ML | 468 |
Prolog | 289 |
MoonScript | 298 |
Unlambda | 278 |
Elixir | 458 |
Dart | 539 |
bc | 253 |
Ada | 135 |
Text | 1724 |
Dash | 81 |
Haxe | 107 |
Racket | 60 |
Erlang | 69 |
Zsh | 41 |
Forth | 25 |
Ceylon | 383 |
合計 | 13916868 |
[i Magazine・IS magazine]