5月25日

2011/5/25作成

lintは、遅い。6時間で100件くらいしか進んでない。明らかに遅くなってる。うーん、テストデータでは顕著に効果が出たのになぁ。本番データで効果が出ないなら意味無いからコードを元に戻すか。ということで戻した。また1年バージョンだよ。ていうか、バグ修正で重たくなってるから1年以上だな。

なんとかしなきゃということで、今更ながら形態素解析を行う方法を検討する。形態素解析と言えばMeCabだろ、ということくらいは知ってる。 MeCab使ったことないけど。

ということでインストール。と思ったけど、Windows版はあるもののPerlモジュールは無いのね。 ActiveStateも配布してない。そうか、それでNamazuの人が独自に配布してるのか。しかし、Namazu版はPerl5.8なんでパス。とりあえずFreeBSD環境の方に構築して、そっちでテストをしてみてから。

しかし、形態素解析を使うと精度が落ちるんだよなぁ。まあ、現状の全マッチは誤検出のノイズもあるから、一概に悪くなるとも言えんのだけど。余力があれば、ウィキペディアのテキストに対応したユーザ辞書とか作って配布できたりするといいんだけど、まあそれは先の話として。

ということでcpanからMeCabをインストールしてみたけど、なぜかuse出来ない。は?仕方が無いのでportsから入れてみる。ちょっと苦労したけど、なんとかインストールできた。やっぱり、そのOSの作法にのっとった方法の方が安全なんかな。

ということでMeCabを使って形態素解析してみたんだけど、形態素解析だと分解されすぎてしまうなぁ。記事名って単語というよりも合成語の方が多そうだしな。あんまり役に立たんかもしれん。

とりあえず出来たんで速度計測。テストデータでは6分が5分に縮まった。一応速くなったけど、思ったよりは速くない。形態素解析自体も重いからな。しかし、予想ではデータが大きくなるほどMeCab版の方が有利になるので、それに期待して本番データを走らせてみる。15時10分開始。

3時間ほど走らせてみたところ、大体6000件ほど処理できてた。2000件/時間。ということは147万件だと、約30日。随分速くはなったけど、それでもまだ非現実的な時間。うむぅ。まだ頭をひねらないとダメか。

MeCabを標準でインストールしたので文字コードがEUC-JPになってる。UTF-8と変換するコストがあるから、最初からUTF-8を扱うようにコンパイルしなおそうと思って困った。configureのオプションで指定するんだけど、portsの場合どうするんだ?調べたら、 Makefile.localというファイルを作って、そこにCONFIGURE_ARGS+=xxxと書くのね。ううむ。知らんかった。

で、UTF-8で処理するようにしたつもりなんだが、なんかうまくいかない。まず速度がかえって遅くなった。あと、レポートの件数が減った。なんかまずったのか。わからん。とりあえず元に戻しておくか。

MeCabのドキュメントを眺めていると、MeCab自身は内部処理を全てUNICODEで行っているそうなんで、やっぱり文字コードをEUC-JPに変換しているのは無駄だと思うんだけど、さてどうしたらいいんだろう。

いくつか気がついた点を修正して少しは速くなったようなので、またしても本番データ投入実験。開始は22時20分。さーて、明日の朝にどこまで進んでいるか。

ところで、最初のフル機能版って、確か1件10分かかっていたから、147万件を処理するには、、、約28年掛かる予想になるかな。計算合ってるかな。それが夕方の時点で1ヶ月だから300倍速になったわけか。まあ、頑張ったことは頑張ったけど、最初に書いたコードが遅すぎって話もあるわなぁ。まあ、まずは動くこと優先で作っていくもんなんだけど。

1時間経過。約3000件。1.5倍速か。速くはなったけど、まだまだだなぁ。ただ、ちょっと解せないのは、CPUは100%占有しているようなのに、プロセスタイムが20分くらいしか進んでない。残りの40分はどこに行ったんだ?システムコールでそんなに使わないと思うんだが。でもメモリを確保・解放しまくってたら、それくらいいくか?これを全部処理にまわせるようになれば、3倍速くなるんだけど。

とりあえずrenice -20してみたけど、こういう対処で合ってるんだろうか。あーUNIXの知識が乏しいのが恨めしいぃ。あとVMwareにプロセスの優先順位の設定があったんで、とりあえず「高」にしておいた。でも、これにしてもniceにしても、他にプロセスがなければCPUを占有できるはずだよなぁ。

reniceして1時間経過したけど、やっぱり1/3くらいしか占有してない模様。わからんけど、しばらく立ち上げっぱなしだったから、試しにリブートしてみる。開始時刻は0時半。


あおやぎのさいと2.0 新人うぃきめでぃあん日記