2010年01月15日

websocketでpipelineをすると、感動的に早い!!

WebsocketMeetsMeCab
昨日、Webkit & Opera/HTML5勉強会で紹介したwebsocket&MeCabによる「坊ちゃん」への自動ルビ(ふりがな)振りデモですが、よくよく考えたら「pipelineってことは、解析リクエストの結果が返るのを待ってたらダメじゃん」ってことで、こちらのデモをwebsocket pipelineに替えてみました。

すなわち、文単位の解析依頼をとにかく送りつづけて(解析結果が返ってくるのを待たずに)、どれぐらい高速化するか見てみようというわけです。そもそも、websocketは、好き勝手に送受信できるプロトコルなので、pipeline処理にはうってつけだよね!ってことで。

あと、テキストマイニングと言えば、「やっぱり基本はわかちでしょ」ということで、websocket pipelineを使ったわかち書きのサンプルも作って見ました。

コードは、http://code.google.com/p/websocket-sample/wiki/samples?ts=1263487925&updated=samples にcommit済み。
  • auto-ruby : /html/pub/mecab/ruby.html & /python/pub/mecab/ruby_wsh.py

  • wakachi : /html/pub/mecab/wakachi.html & /python/pub/mecab/wakachi_wsh.py

それぞれのサンプルで、"via websocket"をクリックすれば websocket pipeliningで処理されますし、"via xhr"であればパラレルにxhrを張って処理されます。

で、結果ですが、
websocket pipelining ちょーーー早い!!
localhost環境でも xhrのparallel処理と比べると10倍ぐらい早いです。NW経由で比較すれば、その差は更に大きくなると思います。多分。

テキストマイニング環境のセットアップって何気にめんどくって、例えば「共有の形態素解析サーバー立てると楽だよなぁ・・・」というのはここ最近のテーマだったのです。なんですが、なにせRESTで立てちゃうとオーバーヘッドコストが高すぎて(遅すぎて)使い物にならなかったというのが実状。

テキストマイニング屋さんって、平気で1万文書ぐらいは軽く解析しちゃう(これぐらいが最低ライン)んで、例えば1文書に1secとかかかっちゃうと、解析終わるのに大体3時間待たなきゃなんない。。。これが10万文書とかだと・・・まぁやってられないわけです。それがwebsocket pipelining使えばローカル環境と同等の快適さをリモート環境で実現可能。スバラシすぎです。しかもwebsocketのクライアントライブラリは、python, ruby, phpとサンプルがありますので、クライアントでのソケットコーディングも不要。最高ですね。

あと、webアプリとテキストマイニングを組み合わせるハードルも劇的に下がりますね。これだけのスピードが出せるんであれば、積極的に活用しようって気になれます。

こういったケースは、テキストマイニングだけの話ではないはずで、そういったユースケースがたくさん出てきてくれるといいなぁと期待しています。

ちなみに、比較のためのxhr用に
/html/pub/mecab/do.py
を使っています。上のファイルをmod_pythonで動かすために、httpd.confで
<Directory /home/komasshu/www/pub/mecab>
  AddHandler mod_python .py
  PythonHandler mod_python.publisher
  PythonDebug On
</Directory>
といった設定をして下さい。

ほんとは、HTTP pipelineと比較したかったのですが、Ajax.Request()でHTTP pipelineをどう実装すれば良いか分からなかったので(普通のブラウザだとデフォルトHTTP pipelineはオフに設定されてるし),パラレルにAjaxで処理するというアルゴリズムで書いています。ブラウザは同一サーバーに対して、最大2〜6?(実装依存。なにげにIETFでも答えが出ていないはず)のコネクションしか張れないんで、HTTPベースで並列処理しても、あまりパフォーマンスが出せないっていうのが、結構足を引っ張っています。この辺のしばりに左右されないwebsocketはほんとに使いやすいですね。

あと、MeCab(python bingings含む)のインストールも必要です。 以前書いたMeCabインストールEntry

人気ブログランキングへ
kotesaki at 02:44│Comments(0)TrackBack(0)clip!html5 | webkit

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔