TweetsのProlog化を高速で処理する

集めた1億1千万のツイートサンプルを全部、prologの宣言文にしたい。それが、日本語wikipediaの本文全文のprolog化よりも何倍も深刻なものだとわかった。wikipediaと同じアルゴリズムでやろうとすると、core_i9のlinuxを動かし続けても、50日くらいかかる。動かせば良いというのはそうなのだが、そうすると途中でミスやバグに気づいても、もうやり直すリスク異常に高くなる。

長いこと悩んだが、最適な解決方法がわかった。それは、一番、時間コストがかかっている構文解析のknpを高速化することだ。knpは、それまで使っていたCabochaと比べるととてつもなく時間をかけて解析する。それで、カテゴリなどの面白い結果を出してくるのだから仕方がないと思っていたのだが、もう、ここを高速化するしかないと思って調べると、

-dpnd-fast -no-ne

の二つのオプションをつけると高速化することがわかった。knpを供給していただいているサイトには、

-dpnd-fast: 精度を犠牲にした高速な係り受け解析,高速に固有表現認識を行いたい場合などに用いる
-no-ne: 固有表現認識を行わないオプション,-dpnd-fastと合わせて使うことで高速に係り受け解析を行える

と解説されている。そもそも固有表現認識が何かわかっていないのだが、カテゴリなどのこちらの必要としているものが犠牲にならないならば、問題ないと試みてみた。すると、立ち上がり時間も含めて、3倍早くなった。しかし、我々の場合、サーバーモードだから、立ち上がりのオーバーヘッドは考慮しなくて良い。それで、実際やってみた印象では、10倍から20倍早くなる!!

これでやってみると、というか、現在やらせているのだが、およそ二日で計算を終える勘定だ。

1スレッドで80万ツイートを処理すべく、ファイル単位で処理するため、短い処理しか必要がない場合もあり、180スレッドくらいを立ち上げる。

途中で、停電などのアクシデントがないことを願うばかりだ。cpuは、12コア24スレッドの並列処理を3.5Gのクロックスピードで実行する。実質、切り替えをやっているので、オーバーヘッドが発生するが、実行スレッドを小さくすると、CPUの稼働率が大きく下がってしまうので、かなり無理させている。CPU温度は、どのコアについても70度を超えることがないことがわかっているので、なんとかなるだろうと思っている。何しろ30数万円もの金をかけたコンピュータだ、それくらい、働いてもらわないと困る。