6

Wikipedia Dump のような大きなテキスト ファイルに Spacy NLP (自然言語処理) パイプラインを適用しようとしています。Spacy のドキュメントの例に基づいた私のコードは次のとおりです。

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() 

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

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

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

4

1 に答える 1

7

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

于 2016-04-10T01:33:56.230 に答える