Ich versuche, Spacy NLP (Natural Language Processing) Pipline auf eine große Textdatei wie Wikipedia Dump anwenden. Hier ist mein Code basiert auf documentation Beispiel des Spacy:Multi-Threaded NLP mit spacy Rohr
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 wendet alle nlp Operationen wie POS-Tagging, Lemmatizing und etc alles auf einmal. Es ist wie eine Pipeline für NLP, die sich in einem Schritt um alles kümmert, was Sie brauchen. Die Anwendung der Pipe-Methode soll den Prozess durch Multithreading der teuren Teile der Pipeline sehr viel schneller machen. Aber ich sehe keine große Geschwindigkeitsverbesserung und meine CPU-Auslastung beträgt etwa 25% (nur einer von vier Kernen arbeitet). Ich habe auch versucht, die Datei in mehreren chuncks zu lesen und die Partie der Eingabetexte erhöhen:
out = nlp.pipe([part1, part2, ..., part4], n_threads=-1)
aber immer noch die gleiche Leistung. Gibt es trotzdem etwas, um den Prozess zu beschleunigen? Ich vermute, dass die OpenMP-Funktion aktiviert werden sollte, um Spacy zu kompilieren, um die Multi-Threading-Funktion zu verwenden. Aber es gibt keine Anweisungen, wie man es unter Windows macht.
Was macht 'n_threads'? Gibt es einen Grund, warum du es auf weniger als 0 gesetzt hast? –
Es legt die Anzahl der Threads fest, die verwendet werden sollen. Ich denke, -1 bedeutet, dass es automatisch angegeben wird und keine bestimmte Nummer erzwingt –
Haben Sie versucht, eine positive Zahl zu setzen? –