「機械学習」に挑戦しよう、と思って最初に多くの人の前に立ちはだかるのは、使用言語の壁でしょう。多くの機械学習モデルは、プログラミング言語に「Python」を採用しているので、Web開発者には馴染みのないケースが多いようです。

しかし、仮にもし、Web開発者が慣れ親しんでいるJavaScriptで、機械学習の操作ができるとしたらどうでしょうか。実は、機械学習機能を取り入れたJavaScriptライブラリは、日々リリースされています。

そこで今回は、「機械学習」の要素を取り入れたJavaScriptライブラリ9選を紹介します。それぞれに得意や苦手がありますが、ご自身が機械学習で取り組んでみたいことと比べてみて、実現可能に思えるライブラリをぜひ手に取ってみてください。

「機械学習」の要素を取り入れたJavaScriptライブラリ9選

1. TensorFlow.js

1.jpg

TensorFlow.jsは、Googleが開発した機械学習ライブラリ「TensorFlow」(テンソルフロー)をベースに、WebGL技術と組み合わせて機械学習モデルを作成することのできるJavaScriptライブラリです。フレキシブルで直感的なAPIを使うことで、難しそうに感じられる機械学習を、フロントエンドエンジニアでも気軽に扱えるようになっています。

もとはdeeplearn.jsとして開発が進められていたライブラリですが、正式にGoogle傘下での開発が決まり、TensorFlowからのリリースとなりました。導入も数行のコードで簡単に行えるだけでなく、すでに存在する機械学習モデルを再教育することも可能です。npmやyarnを使っている人は、それぞれ直接ダウンロードを行うことができます。

2. Brain.js

2.jpg

Brain.jsは、ニューラルネットワークのライブラリの中でも人気のあるBrainと呼ばれるライブラリを、Node.jsや他のブラウザでも利用可能にしたJavaScriptライブラリです。

Brain.jsのデモサイトでは、ニューラルネットワークを用いた色調の学習モデルが公開されています。このライブラリを使うことで、ユーザーがよく行う動作を学ぶことができ、使えば使うほど賢くなっていきます。

3. Synaptic.js

3.jpg

Synaptic.jsは、Node.jsやブラウザを使って、構造にとらわれることのないニューラルネットワークモデルをJavaScriptを使って簡単に構築することができるライブラリです。ニューラルネットワークの一分類である多層パーセプトロン(MLP)などをビルドインとして組み込んでいるので、他のライブラリでは処理の難しいことも比較的簡単に行うことができます。

Synapticでは、ニューラルネットワークの基礎単位を「ニューロン」として、ニューロン同士をつなげたり、既存のニューロンのコネクションに間に割り込んだりさせることができます。Wikiに詳しい使用方法が書いてあります。

4. WebDNN

4.jpg

WebDNNは、東京大学情報理工学系研究科の原田・牛久研究室が公開している、国産のディープラーニング用フレームワークです。WebDNNとはWebブラウザ上で行うディープニューラルネットワーク(DNN)のことで、各エンドユーザー端末を使って機械学習を行うことで、サーバーの計算負荷を分散させることができます。

ニューラルネットワークは、インプットを行う「学習フェーズ」とアウトプットを行う「推論フェーズ」の2段階に分けることができます。WebDNNでは後者の「推論フェーズ」に特化することで、学習済みモデルを積極的に最適化することができます。

WebGLかWebAssemblyを搭載したWebブラウザか、その代わりとなるasm.jsを読み込んだ環境で実行可能です。すべての演算はWebブラウザ上で行われるので、画像などを外部サーバーに送ることもなく、プライバシー上の配慮もクリアできるライブラリだと言えます。

5. compromise

5.jpg

compromiseは、英文の言語解析に強みを持つ自然言語処理用のJavaScriptライブラリです。決して完璧とは言えないライブラリなので「妥協」(コンプロマイズ)という名前が付いていますが、英語学習アプリや添削アプリなど、英語を使うコンテンツを組み込む際にはあると便利な機能が満載です。

また、こうしたライブラリには珍しく、ファイルサイズは200KB以下と、jQuery本体と同じくらいの非常に小さいファイルサイズです。入力した英文から動詞だけを抜き出したり、インプットした文を疑問文に変えたりという機能が、わずか数行で実装できてしまいます。

6. Naetaptic.js

6.jpg

Neataptic.jsは、人工ニューラルネットワークの学習に遺伝的アルゴリズムを用いる「ニューロエボリューション」、および教師あり学習アルゴリズムのひとつである「誤差逆伝播法(バックプロパゲーション)」という手法をWebブラウザやNode.js上で簡単に実行することができるJavaScriptライブラリです。

LSTMやGRUといった主要なネットワークがビルドインで組み込まれているため、複雑な処理も比較的簡単に取り入れることができます。

7. ConvNet.js

7.jpg

ConvNet.jsは、スタンフォード大学の機械計算学部アンドレイ・カルパシー研究室が公開している、ディープラーニングをWebブラウザ上で実行するためのJavaScriptライブラリです。他のソフトウェアに一切依存せず、GPUの負荷もかからない、処理速度に定評のあるライブラリです。npm経由でも利用できます。

デモサイトには、機械学習で定番の、人が書いた数字を学習してどんな数字かを推論する「MNIST」や、画像を使って「車」や「犬」など写真に写っている一般物体の認識を行う「CIFAR-10」といった機械学習はもちろん、画像から特徴を掴んでペイントを行うような実験的なデモも公開されています。

8. Mind

8.jpg

Mindは、Node.jsとブラウザ上で、様々なインプットに対して推論を提供する、シンプルなJavaScriptライブラリです。できることは非常に限られますが、他のライブラリに比べると初心者にも十分扱える、プラグインのような存在です。すでに「学習済み」のため、すぐに使うことができるのも魅力のひとつです。

インプットに対して推論を提供することができるこのライブラリは、ユーザーの好みを学習することでオススメの商品をリコメンドする「あなたへのオススメ」機能の実装に便利です。もちろん、ユーザーが好みを伝えれば伝えるほど、「あなたへのオススメ」の精度は上がります。

9. Natural

9.jpg

Naturalは、英語だけでなくベトナム語や日本語にまで対応した、自然言語処理に特化したNode.js用のJavaScriptライブラリです。npmでは、「npm install natural」というコマンドで簡単にインストールすることができます。

正直なところ、まだまだ簡単な処理しかできません。2つの文の類似性を数値で表したり、文を文節で区切ったりといったことが可能です。使い方を工夫することで、非常に役立つものとなるでしょう。

まとめ

今まで難しそうに思えた「機械学習」も、JavaScriptで書いてみると「意外とシンプルだった」というケースもあるでしょう。これらのライブラリを使えば、Pythonを学ばずとも機械学習を取り入れられ、なおかつフロントエンドで開発も行えます。

今では、大量のデータを扱う職種の多くで、機械学習の技術を取り入れたデータサイエンスが行われています。ぜひこの機会に機械学習の仕組みを自社サービスに取り入れてみてはいかがでしょうか。

参考:
そういうことだったのか!と思わずうなずく「機械学習」超入門