「あんちべさんと一緒に Rakuten MA で形態素解析」はてなニュース連動企画 第二弾!

今回のはてなニュース連動企画について

2015-1-8

パソコン工房ECサイトへのご来店、誠にありがとうございます。 一号です。

某日、パソコン実験工房の第一回の「word2vec実験」でお世話になった株式会社はてなさんから「RakutenMAというツールが熱いですよ」という情報を頂きました。
「何ですかそれ?」
全然知りませんでした。
毎回、私達とは異なる視点から情報を頂けてありがたいです。
詳しく話を聞くと処理に結構時間がかかるという事で、今回も連動企画で実験する事になりました!

RakutenMAとは

RakutenMAは、楽天技術研究所から2014年8月にリリースされたJavaScriptによる中国語と日本語に対応した形態素解析器です。
単語の切出しのみではなく、品詞の付与ができる事と学習器が付いている為、ユーザーの手により特定分野に絞った形態素解析精度を向上させることが特徴になります。
実行環境面としてはJavaScriptベースの為、ユーザーはお手軽にブラウザ上でプログラムを実行する事ができて、サーバサイドとしても負荷を掛けずにサービスを公開する事が可能というのがメリットになります。

ゲスト紹介

今回はプロの統計屋「あんちべさん」のお力を貸して頂き、処理に必要なハードスペックを調べるという実験を行います。
あんちべさんは
「自然言語処理の最新手法"word2vec"で艦これ加賀さんから乳を引いてみる」
「進撃の巨人を読んだことない人がデータだけでキャラを推測してみる」
等、本来お堅いジャンルであるはずの統計分析を仕事以外の身近な題材で楽しく紹介する事が出来てしまうというまさにプロ中のプロというお方です。

○あんちべさんのブログ
http://antibayesian.hateblo.jp/
○twitter(@AntiBayesian)
https://twitter.com/antibayesian

今回の企画連動のブログもアップしてくださいました!
○RakutenMAによる形態素解析入門
http://antibayesian.hateblo.jp/entry/2015/01/08/085741

実行プログラムの概要

私達に頂いたお題は「形態素解析を実行した後、学習器を利用して形態素解析の精度を高める」という処理をローカルで実行する為のPCの検証です。

実際に頂いたファイルは以下の通りです。

rakutenma.js : RakutenMA本体
model_ja.json : RakutenMAが用意しているモデル。これを元にして学習データを追加して独自モデルを作る
lang_all.js : 学習用コーパス
training_lang.js : 学習を実行するためのスクリプト。lang_all.jsの学習結果をmodel_ja.jsonに追加する
naivebayes.js : ナイーブベイズ分類器。与えたテキストを用意したカテゴリに分類
akitumaru.js : RakutenMAのテキストマイニング用ラッパー。分かち書きやワードカウントなどを行う

手元のパソコンにNode.jsをインストールしてこれらのプログラムをローカルで実行してゆきます。

連動企画のソフト面のアプローチの詳しくははてなニュースの「あんちべさんと一緒に Rakuten MA で形態素解析」で紹介されておりますので、是非そちらをご覧ください。

コンピュータシステムの準備

今回の使い方の場合はJava Scriptのプログラム一本をNode.JSでローカル実行するという事で、シングルスレッドでの処理となります。
従いまして、CPUはクロック差とそのコスパという判断になりますので、Corei7とi5での速度差計測の確認までとしました。
学習部分が長時間の処理なので念のため、SSDとHDDによる影響、メモリーのシングルとデュアルチャネルによる帯域幅の影響についても確認してみます。
OSはあんちべさんの指定によりUbuntuを使用しています。

各考察で選定した実験に関係する部分の詳細は以下の通りです。

CPU:
Intel Core i7-4790K(4.0GHz/TB4.4GHz Core4/HT8)とIntel Core i5-4590(3.3GHz/TB3.7GHz Core4/HT4)

Memory:
DDR3 16GB(8GBx2 Dual-Channel)とDDR3 8GB(8GBx1 Single-Channel)

Storage:
HDD=東芝 DT01ACA100[1TB 7200rpm SATA 6Gbps]とSSD=CFD CSSD-S6T128NHG6Q[128GB SATA 6Gbps]

OS:Ubuntu14.04.01
Node.js:v0.10.26

実験概要

あんちべさん指定の各処理を一通り実行して確認したところ、training_lang.jsによる学習の処理以外はそれほど時間が掛かりませんでしたので、速度や負荷に関する実験はtraining_lang.jsの実行で行います。
学習用コーパスの準備は自然言語処理と言語学の知識を要しますので、あんちべさんの用意された学習用コーパスのlang_all.jsを無加工でそのまま使わせて頂きました。
学習フェーズの時間はデータのサイズと行数、反復回数により異なるとの事ですが、lang_all.jsは4.41MB、241,485行のデータで、反復回数は6回に設定されています。
ちなみに反復回数は試行錯誤の結果6回になったとの事です。

では実際に実行して行きましょう。
プログラムの置いてあるフォルダに移動して、「node△プログラム名」で実行します。

time node traning_lang.js

※先頭のtimeはLinuxのコマンドで、指定したプログラムの実行時間を図るものです。

それぞれ下記のような内容になります。

real:プログラムの呼び出しから終了までにかかった時間(実時間)
user:ユーザーモードとなっていた時間
sys:カーネルモードとなっていた時間

userは1スレッドベースの結果です

実験①:CPUによる時間差を確認

まずはCore i7-4790KとCore i5-4590での速度差を測ります。 CPUリソースの消費状況も確認したいと思います。

さあLet’s Go!
01
プログラムが走り始めました。

あとは待つのみなのですが、裏ではどうなっているのかシステムモニターで確認してみます。
02
マルチコアに処理分散されずコアの一つにリソースが集中しているのが分かります。
メモリーは常時1.3~1.4GB程度とこちらもあまり消費していませんので大容量メモリーは不要です。

しばし待って集計完了
03
realで1時間53分程度となりました。

次にCore i5-4590で計測します。
CPU以外の環境は同じです。
04
realで2時間12分程度となりました。
約20分と結構、差がつきましたね

実験②:SSDとHDDの差を確認

SSDとHDDでの差を確認します。
CPUはCore i7-4790Kに戻しています。
05
realで1時間52分程度となりました。

今回の処理では1,2分程度は同一環境でもずれる誤差になりますので、HDDからSSDへの変更による速度差はないという事になります。
メモリーは消費しておらず、ディスクスワップも起きていなかったので当然といえば当然の結果ですね。

実験③:メモリー帯域による差を確認

メモリーがデュアル/シングルチャネルで差が出るのかも試してみました。
8x2=16GBから 8x1=8GBにしてみます。
06

07
realで1時間54分程度となりました。

こちらも影響なしという結果です。

結果について

今回のクライアントPC上でNode.jsを使って対象のJava Scriptを実行するというシュチュエーションに絞った場合は、SSDやメモリーを強化する事による性能向上は得る事ができませんでしたし、GPUも特に使用しませんので、とにかく1コアあたりのCPUクロック数に対して投資しましょうという結果となりました。

一番お伝えしたいのが何かというと「“ワークステーション”と名乗っているものであれば投資金額に比例してどんな処理でも早くなるというものではありません」という事です。

具体例としてはImpress 連動企画「4K動画をネイティブ編集できる PC を考える」で活躍したCore i7-5960X(通常3.0GHz/TB3.5GHz)やXeon E5-2687Wv3(通常3.1GHz/TB3.5GHz)ベースのマシンではなく、それよりも安価なCore i7 4790K(通常4.0GHz/TB4.4GHz) ベースのマシンを選んだほうが今回のケースでの処理時間は早くなります。 アプリケーションの仕様やプログラミングの方法等がハードウェアのどのような機能を使うかというのがポイントになりますので、ご留意くださいませ。

あんちべさんにお渡ししたテスト機

結果を踏まえ、あんちべさんには弊社のPro seriesより「PRO Advanced Z97M-Sカスタム」を検証機として送り出しました。

CPUを1クロックでも早くという事でCore i7-4790Kにして、メモリーはCENTURY MICROカスタムにしています。

Core i7搭載PRO Advanced Z97M-S

PRO Advanced Z97M-S カスタム

CPU Intel(R) Core i7-4790K(4.0GHz/TB4.4GHz Core4/HT8)
M/B Intel(R) Z97 Express チップセット [ASUS]
Memory DDR3-1600 8GB×2(計16GB) [CENTURY MICRO]
Storage HDD 1TB 7200rpm 3.5インチ Serial-ATA
ODD 24倍速DVDスーパーマルチドライブ
VGA Intel(R) HD Graphics 4600(CPU統合グラフィックス)
Power 500W 80PLUS GOLD認証 ATX電源
OS なし(Ubuntu14.04.01インストール)

行ってらっしゃい!

ちなみにですが、このような統計向けを名乗るモデルでなければ分析処理は絶対に出来ないという事ではありません。
弊社で扱っておりますその他のタワー型PC※でも今回位の集計処理なら、よほどの連続使用やパソコンとって宜しくない室内環境でない限りは問題なく実行できますのでご安心ください。
※超小型とか薄型とかノートPCは除きます(未検証です)

PRO Advancedは「大量の集計処理により長時間にわたり高負荷を掛け続ける環境で、故障率を下げてダウンタイムの発生を出来るだけ回避したい」というお客様の為に高品質なパーツを採用しているというのが特徴です。
例えば今回採用したメモリーメーカーのCENTURY MICRO社はこのようなこだわりで製造されています。
「CENTURY MICRO (センチュリーマイクロ) - DIMM製作へのこだわり」
どうでしょうか!?高品質を名乗るパーツはどのような部分に差があるかをご理解頂けたかと思います。

目的やご予算に応じてご検討くださいませ。

おすすめのパソコンはこちらです。

※表示されているのは基本構成です。

サンプルサイトの公開

なんと!?
あんちべさんが形態素解析を応用するとどんなサービスやシステムを作成できるのかイメージ出来るようなサンプルプログラムを2本作成してくださいました。
パソコン工房のサイトで公開しますので、皆さんもサンプルを参考にRakutenMAを用いたオリジナルのサービスを是非作成してみてください!
※ブラウザの種類やバージョンで動作しない場合があるかもしれません

サンプル1 : ワードクラウド工房

入力したテキストからワードクラウドを作成するサンプルです。
画像はダウンロードすることも出来ます。

ワードクラウドこちらから

ワードクラウドのイメージ(「吾輩は猫である」の冒頭部分で生成しました)
09

サンプル2 : エディタ判定器

「ナイーブベイズ」というテキストをカテゴリに自動で分類する手法を用いたサンプルです。
twitterから「Emacs」と「Vim」に関するツイートを収集し、各エディタの特徴を抽出しました。
この特徴を用いて入力したテキストがどちらのエディタに属するかを判定します。
あなたの入力したテキストがEmacsとVim、どちらに判定されるか試してみて下さい。
皆さん色々遊んでみてください。

エディタ判定器はこちらから

例)「小指が痛い」と入力→Emacsと判定されます。

私はEmacs使った事ないのですが・・・・小指が痛いのですか??


パソコン工房のPCで遊ぼう第2弾! あんちべさんと一緒に Rakuten MA で形態素解析
RakutenMAによる形態素解析入門

執筆:パソコン実験工房 職人1号