なぜ機械学習にはPythonなのか
~NumPyを核に形成された科学技術計算のエコシステム
いま「機械学習」でググると「python」が関連キーワードとしてサジェストされるほど、AIや機械学習を扱うならPythonは定番の言語だ。2011年にIEEEが発行した雑誌には「科学技術計算においてPythonはデファクトスタンダード」と記述されている。
その理由を示すべく、石本氏が歴史を紐解いた。Pythonが最初にリリースされたのが1991年でPython 0.9.1994年にPython 1.0となり、後を追うように画像処理のPILやnumeric(現在のNumPy)もリリースされる。石井氏は「この頃はGitHubがない時代でしたが、数値計算のライブラリが多くリリースされました」と話す。2000年頃にはEnthoughtがPython関連のパッケージ化したものを販売するようになるなど、Python周辺はすでに盛り上がりを見せていた。
2000年を過ぎるとPyLex、Cython、Matplotlibなどが出て、ビッグデータがはやり出すとScikit-learnも出てきた。石本氏は「2010年ごろまでには現在使っているものは出そろってきました」と話す。
なぜPython周辺で科学計算ライブラリが増えたのか。主な理由として石本氏は3つ挙げる。NumPyがエコシステムの核だったこと、Pythonからのサポートがあったこと、C拡張ライブラリの作りやすさがあったことだ。
NumPyの元をたどるとPythonと無関係ではなく、Pythonの数値演算パッケージとして開発が進められたのがはじまり。Pythonコミュニティリードも関与し、NumPyはPythonでは「公式」なものとして、いずれは標準パッケージに採り入れられる予定だった。そのためあえて対抗する勢力もなく、関係者はライブラリはNumPyやSciPyに合流するように開発していた。そのため暗黙の了解のもとに安定的なエコシステムが形成されていった。
そうした状況だったため、PythonもNumPyに配慮して開発が進められた。例えば1996年にPython 1.4がリリースされた時にNumPyで行列を参照する簡略的な表記「L[i,j,k]」が追加された。これにとどまらず、NumPyのための機能拡張は以後も度々追加されてきた。それはPythonコミュニティがNumPyを使いやすくなるよう、パフォーマンスが出せるように配慮していたためだ。
さらに石本氏は「Pythonではライブラリとして利用するC拡張の作りやすさがあります。それゆえに20年前のライブラリでも、そのままコンパイルして利用できるほど安定しています。開発もメンテナンスもしやすいです。こうした特徴はパフォーマンスが重要な数値演算処理では重要になってきます」と理由を説明する。
こうしたことから、Pythonは長らく数値計算処理ではデファクトスタンダードとして君臨しており、さらに近年では機械学習で強みを発揮している。エンジニアのナレッジサイト「Stack Overflow」では2012年以降徐々に「Python」が頻出するようになり、つい最近ではついにトップのJavaScriptに追いついた。
石本氏が管理人を務めているpython.jpでも2012年は月間ユニークユーザーは約5000だったところ、最近では1万7~8000と3倍に伸びていると言う。