2016-04-08 18 views
3

私はSpacy NLP(Natural Language Processing)piplineをWikipedia Dumpのような大きなテキストファイルに適用しようとしています。ここに私のコードは、スペイシーのdocumentation例に基づいている:スパイシーパイプを使用したマルチスレッドNLP

from spacy.en import English 

input = open("big_file.txt") 
big_text= input.read() 
input.close() 

nlp= English()  

out = nlp.pipe([unicode(big_text, errors='ignore')], n_threads=-1) 
doc = out.next() 

スペイシーは、一度POSタグ付け、Lemmatizingとなど、すべてのように、すべてのNLP操作を適用します。これは、NLPのパイプラインのようなもので、必要なものすべてをワンステップで処理します。パイプメソッドを適用すると、パイプラインの高価な部分をマルチスレッド化することで、プロセスを大幅に高速化することになっています。しかし、スピードの大幅な向上は見られず、CPU使用率は約25%です(4コアのうち1つだけが動作します)。私はまた、複数のチャンクでファイルを読み込み、入力テキストのバッチを増やそうとしました。

out = nlp.pipe([part1, part2, ..., part4], n_threads=-1) 

しかし、それでも同じパフォーマンスです。プロセスをスピードアップする方法はありますか? OpenMP機能を有効にしてSpacyをコンパイルして、マルチスレッド機能を有効にする必要があると思います。しかし、Windows上でそれを行う方法に関する指示はありません。

+0

'n_threads'とは何ですか? 0未満に設定した理由はありますか? –

+0

使用するスレッドの数を設定します。私は-1それは自動的に指定され、それに特定の番号を強制しないことを意味すると思います –

+0

それに正の数を設定しようとしましたか? –

答えて

4

私は問題が何かを考え出しました。 OpenMPは、spacy pipe()メソッドのマルチスレッド実装に使用されるパッケージです。このオプションは、MSVCコンパイラではデフォルトで無効になっています。 openmpサポートでソースコードをコンパイルした後、それはうまく動作します。私はまた、pull requestを作成して次のリリースでこれを有効にしました。したがって、0.100.7(最新版)以降のリリースでは、pipe()を使用したマルチスレッドは問題なくWindows上で動作するはずです。

関連する問題