読者です 読者をやめる 読者になる 読者になる

Screaming Loud

研究・プログラミングなど気づいたことをメモをしています

scalaNLPに含まれているライブラリを調べてみる

scala プログラミング

Scalaにもnumpy, scipyのような数値計算ライブラリがあります。

ScalaNLPというレポジトリで登録されています。
github.com

では、どんなものがあるか調べてみます。

breeze

Breezeは、数値計算ライブラリです。
numpyのようなもので、行列計算などを操作するためのライブラリがメインです。

他のライブラリの基盤ともなっています。

  1. breeze.linalg: breezeで扱う行列など型を定義しています。
  2. breeze.io: CSVからの読み込みなどを行うIOの関数を定義しています。
  3. breeze.numerics: absやsin, cosなど基本的な関数を定義しています。
  4. breeze.signal: デジタル信号の関数を定義しています。
  5. breeze.stats: 乱数生成のライブラリです。

例えば、標準正規分布に基づく乱数であれば、以下の様に出力することができます。

import breeze.stats.distributions._
val mu = 0
val sigma = 1
println(Gaussian(mu, sigma).draw)

nak

Nakは、機械学習のためのライブラリです。

k-meansとロジスティック回帰、SVMがオリジナルで実装されています。
またbreeze-learnからの移植で、ナイーブベイズニューラルネットもあります。

breeze-viz

グラフなどplotして可視化するライブラリです。
いわゆるmatplotlib的なものですね。

このライブラリは、breezeに戻したようです。
他にも以下の様なビジュアライゼーションライブラリもあります。
sameersingh/scalaplot · GitHub

また以下ライブラリは、ScalaNLPには含まれていませんが、wikiにて紹介されているものです。

Epic

Epic形態素解析器です。
PythonのNLTKのようなものです。
日本語はもちろん作られていないので、MeCabを使うのが無難でしょう。

Junto

parthatalukdar/junto · GitHub
Label Propagationのアルゴリズムが実装されています。

ただしこちらは最後のコミットが2014年の3月なので、全然メンテされていないですね。。

やはりRやPythonに比べると、ライブラリの充実度は圧倒的に低いですね。。
Scalaの場合は、Javaの資産をそのまま使えますが、kそれでも劣っているように感じます。