parallel parLapply Setup

8

Ich versuche, Teil der Rede Tagging von den openNLP / NLP-Paketen parallel zu verwenden. Ich brauche den Code, um auf jedem Betriebssystem zu arbeiten, also benutze ich die parLapply -Funktion parallel (aber bin offen für andere OS-unabhängige Optionen). In der Vergangenheit habe ich tagPOS function aus dem openNLP-Paket in parLapply ohne Probleme ausgeführt. Das Paket openNLP enthielt jedoch einige Änderungen, die tagPOS eliminierten und einige flexiblere Optionen hinzufügten. Kurt war so freundlich, mir dabei zu helfen, die Funktion tagPOS aus den Tools des neuen Pakets neu zu erstellen. Ich kann die lapply Version zum Funktionieren bringen, aber nicht die parallele Version. Es sagt weiter, dass die Knoten mehr Variablen benötigen, die an sie übergeben werden, bis sie schließlich nach einer nicht exportierten Funktion von openNLP fragen. Das scheint merkwürdig, es würde immer wieder nach immer mehr Variablen fragen, die mir sagen, dass ich die parLapply falsch aufstelle. Wie kann ich das tagPOS so einrichten, dass es parallel und unabhängig vom Betriebssystem arbeitet?

%Vor%

BEARBEITEN: nach Steves Vorschlag

Beachten Sie, dass openNLP brandneu ist. Ich habe ver 2.1 von einem tar.gz von CRAN installiert. Ich bekomme den folgenden Fehler, obwohl diese Funktion existiert.

Bibliothek (openNLP); Bibliothek (NLP); Bibliothek (parallel)

%Vor%     
Tyler Rinker 21.08.2013, 12:45
quelle

1 Antwort

5

Da Sie für die Cluster-Worker Funktionen von NLP aufrufen, sollten Sie sie vor dem Aufruf von parLapply auf jeden der Worker laden. Sie können dies von der Worker-Funktion aus tun, aber ich neige dazu, direkt nach dem Erstellen des Cluster-Objekts clusterCall oder clusterEvalQ zu verwenden:

%Vor%

Da as.String und Maxent_Word_Token_Annotator in diesen Paketen enthalten sind, sollten sie nicht exportiert werden.

Beachten Sie, dass ich beim Ausführen Ihres Beispiels auf meinem Computer festgestellt habe, dass das Objekt PTA nicht funktioniert, nachdem es auf die Arbeitscomputer exportiert wurde. Vermutlich befindet sich etwas in diesem Objekt, das nicht sicher serialisiert und unserialisiert werden kann. Nachdem ich dieses Objekt auf den Arbeitern erstellt habe, die clusterEvalQ verwenden, wurde das Beispiel erfolgreich ausgeführt. Hier ist es, mit openNLP 0.2-1:

%Vor%

Wenn clusterEvalQ fehlschlägt, weil Maxent_POS_Tag_Annotator nicht gefunden wird, laden Sie möglicherweise die falsche Version von openNLP auf die Worker. Sie können bestimmen, welche Paketversionen Sie für die Worker erhalten, indem Sie sessionInfo mit clusterEvalQ ausführen:

%Vor%

Dadurch werden die Ergebnisse der Ausführung von sessionInfo() für jeden der Cluster-Worker zurückgegeben. Hier sind die Versionsinformationen für einige der Pakete, die ich verwende und die für mich arbeiten:

%Vor%     
Steve Weston 21.08.2013, 13:33
quelle

Tags und Links