woped / WoPeD

WoPeD Rich Client
https://woped.dhbw-karlsruhe.de/
GNU Lesser General Public License v3.0
21 stars 18 forks source link

Literaturrecherche: Stanford Parser vs. Core NLP #54

Closed KanBen86 closed 4 years ago

OrlandoJae commented 4 years ago

Die bisher verwendete StanfordNLP-Version wird im Code als "stanford-parser-2010-08-16.jar" bezeichnet. Die zu diesem Datum aktuellste Version des Stanford Parsers war 1.6.3. (Siehe https://nlp.stanford.edu/software/lex-parser.shtml#History) Die Version, welche wir aktuell nutzen, ist 3.9.2, allerdings nicht des Stanford Parsers, sondern der Stanford CoreNLP.

Beides scheinen unterschiedliche Softwarepakete zu sein, sie werden zumindest hier getrennt aufgeführt: https://nlp.stanford.edu/software/ (Rechts unter "Core" Punkt 1 (CoreNLP) und Punkt 3 (Stanford Parser). Auch die Versionshistorie ist nicht deckungsgleich (vgl. https://nlp.stanford.edu/software/lex-parser.html#History und https://stanfordnlp.github.io/CoreNLP/history.html).

Beides hängt zwar zusammen, aber ist nicht deckungsgleich. So kamen mit Version 1.6.6 (im Jahr 2011) des Parsers folgende Änderungen: Internal code and API changes (ArrayLists rather than Sentence; use of CoreLabel objects) to match tagger and CoreNLP.

Falls wir das möchten, könnten wir es mit der neuesten Version des ursprünglichen Parsers versuchen (4.0.0). Dieser ist nämlich auch in dem aktuellen Branch von uns, welcher die CoreNLP verwendet, immernoch auf dem Stand von 2010, laut Dokumentenname (siehe https://sourceforge.net/p/woped/code/ci/T2P_19/tree/WoPeD-Text2Process/NLPTools/StanfordParser/)

Vielleicht übersehe ich etwas, aber einen genaueren Versionsvergleich von unterschiedlicher Software scheint mir nicht sinnvoll.

tfreytag commented 4 years ago

Das ist korrekt, der bis 2018 benutzte Parser ist relativ alt. CoreNLP wurde danach von Stanford forciert weiterentwickelt mit dem Ziel, als universelle Toolbox nutzbar zu sein, also insbesondere POS-Tagger und Parser-Funktionen zu inkludieren. Parallel dazu wurde aber wohl auch der Tagger/Parser als Einzel-Tool weiterentwickelt.

Es lohnt sich sicherlich, diese Weiterentwicklung (Version 4.x) auszuprobieren, ob sie unser Problem löst. Der Branch T2P_19 ist aber bereits auf CoreNLP umgestellt, der enthält wohl nur noch als Relikt den Parser.

Die "alte" Schnittstelle, die auch derzeit unter woped.dhbw-karlsruhe.de:8080/t2p verlinkt und zusammen mit dem aktuellen WoPeD-Binary 3.7.1. die "korrekteren" Ergebnisse liefert, ist, findet sich in den Quellen vom Branch RELEASE3_7_1: https://sourceforge.net/p/woped/code/ci/RELEASE3_7_1/tree/WoPeD-Text2Process/

Daraus müsste man den Stand rekonstruieren können (und zum Testen dann einfach mit der neuen Springboot-Schnittstelle einbinden), ggfs. dann mit der neueren Parser-Version.

OrlandoJae commented 4 years ago

Das war mir so nicht klar, danke für den Hinweis!

Folgendes konnte ich finden: Bei einigen Sätzen kann die vom Standalone-Parser ausgegebene Parse-Baumstruktur und die von der CoreNLP-Pipeline ausgegebene Baumstruktur unterschiedlich sein. Grund dafür ist, dass die CoreNLP-Pipeline, wenn die CoreNLP-Pipeline mit den standart anootators ausgeführt wird, vor der Ausführung des Parsers einen POS-Tagger (Part of Speech) ausführt. Wenn dieser Parser für einen bereits mit POS-Tags versehenen Satz ausgeführt wird, betrachtet er die POS-Tags als fixiert und ignoriert die Wörter im Satz. Man könnte den POS-Tagger der CoreNLP deaktivieren, indem man die liste der annotators ändert: -annotators "tokenize,ssplit,parse,lemma,ner,dcoref" (Quelle: https://nlp.stanford.edu/software/parser-faq.html#corenlpdiff)

KanBen86 commented 4 years ago

Ergänzung: Der Parser ist ebenfalls in aktuellen Versionen erhältlich und wurde via Maven in das Projekt eingebunden. Es muss zu Wiederherstellung der Funktionalität auf den ursprünglichen Parser von 2010 zurückgegriffen werden. Problem: Der Parser ab Version 2.0.2 enthält keine generische Sentence Klasse mehr. Von dieser Klasser erbt die Klasse T2PSentence. Die Dependencies sind bereits in die POM eingetragen, sodass jederzeit mit der Umstellung begonnen werden kann. Es müssen nur die entsprechende Stellen auskommentiert werden.