Apache Mahout(リンク)プロジェクトは、拡張性の高い機械学習に関するライブラリのセットであるが、先日初めてのパブリック・リリース(リンク)を発表した。InfoQではMahoutの共同設立者でありLucid Imagination(リンク)における技術スタッフでもあるGrant Ingersoll氏とプロジェクトについて、及び機械学習全般について話をした。
Mahoutの詳細について尋ねたところ、Ingersoll氏は以下のように答えた。
MahoutはApacheライセンスで拡張性のある機械学習用のツールを提供することを目的としたライブラリです。最終目標はユーザと貢献者による健全で活動的なコミュテニティの生成と実用的で、拡張性が高く、すぐに製品として使える機械学習アルゴリズムを構築することです。ただし、クラスタリングや分類、協調フィルタリングの用途に限定されるものではありません。多くの実装についてその拡張性を担保するためにHadoopを使っていますが、それだけに頼っている訳ではありません。多くの機械学習アルゴリズムは単純にMapReduceモデルに合致する訳ではありませんので、他に適切な方法があればそれを採用しています。
個人的な見解ですが、Apache LuceneやSolrが検索の分野に貢献したようにMahoutは機械学習の分野に貢献できればいいと思っています。すなわち、LuceneとSolrによって誰でも拡張性の高い検索アプリケーションの構築が可能となったようにMahoutによって誰でも簡単に必要に応じたスケールで商用品質の人工知能アプリケーションを作れるようにしたいということです。この点ではまだまだ道半ばですが、0.1のリリースはこの方向へ向けたいい一歩だと思います。
機械学習とは何かについてIngersoll氏はEthem Alpaydin氏(リンク)の著書Ingersoll quoted Introduction To Machine Learning(リンク)を引用し"機械学習とはサンプルデータや過去の経験に基づいて性能を最適化するようにプログラミングすることである"と説明した。
Mahoutの初期リリースに含まれる主要な機能は以下の通りである。
- Tasteによる協調フィルタリング(リンク) - Mahoutに取り込まれたTasteプロジェクト(リンク)に基づく。実装例やデモ・アプリケーションを含む。
- 分散クラスタリングの実装(リンク) - k-Means、Fuzzy k-Means、Dirchlet、Mean-ShiftやCanopyといったいくつかのクラスタリング・アルゴリズムがサンプルやそれぞれの使い方と一緒に提供される。
- 単純ベイズの実装(リンク) - 古典的なベイズ理論と補完的なベイズ理論に基づく分類の実装が含まれている。
- Watchmaker(リンク)に対する分散機能の実装 - Watchmakerライブラリを使った分散処理に対応した適応度関数の実装とそのサンプル。
- Apache Hadoop(リンク)との統合 - 多くの機能が拡張性を確保するためにHadoop上に構築されている。
- 基本的な行列とベクトル用のツール(リンク) - 行列とベクトルの両方に対する疎行列・密行列の実装が含まれる。
完全な機能リスト(リンク)はこちらから。
いくつかのアルゴリズムについてサンプル・アプリケーションの説明を頼んだところ、Ingersoll氏はまずTasteによるフィルタリングとはお勧め映画(リンク)のように、ユーザの嗜好に基づいてお勧めの情報を提供するようなものだと示した。クラスタリングは任意のデータを似たような要素ごとのカテゴリにグループ化するのに使われる。似たようなニュースをグループ化するのがいい例である。統計的分類というのはまた別の手法で調度メールが迷惑メールかそうでないのかを分類するというのが一般的な例だろう。Amazon Elastic MapReduce(リンク)というクラウド上でMahoutを使うことにも言及し、Ingersoll氏はクラウド上でのMahoutの利用について現在進行中(リンク)でMahoutはクラウドの性質に合致するものであると説明した。
検索やソーシャル・ネットワーキングの分野の先駆者たちは自分たちのアプリケーションを運用するために既にMapReduce(やその他の分散的な手法)と機械学習を使っています。長い目で見ればMahoutは、機械学習の仕組みとノウハウを入手するためのライセンス費用に絡む初期費用を抑えることでこれらのアプリケーションをより簡単により安く構築することを可能にするでしょう。さらに、誰でも歓迎されるコミュニティを構築することで長期に渡ってこれに専念できると考えています。
Mahoutの計画についてIngersoll氏は以下のように述べた。
まず最初に一番大事なことですが、Mahoutを広く知ってもらうことです。そうすれば多くの人が試用して改善のためのフィードバックをくれるでしょう。オープンソースなので多くの思いがけない素晴らしいアイディアが登場することもあり、この先どんなことが起こるのかを知るのは難しいですが、私の個人的な希望を挙げます。
- デモとドキュメント、とりわけEC2での実行方法に関する情報を充実させる。
- アルゴリズムを増やす。とくに回帰分析とニューラル・ネットワークの実装に期待しています。なぜならこれらが多くの人に親しまれているからです。
- APIを確定する。これによって利用者が自身のコードに大幅な変更を加えることなく安心してアップグレード出来るようにするための1.0のリリースに向かうこと出来るようになります。
- 利用者が自分達の実装の際に見たいと思うだろう性能評価のメトリックスの種類を増やす。