Tokenizer trennt häufig Sätze auf

Mir ist bei den deutschen Sätzen immer wieder aufgefallen, dass diese unvollständig sind. Teilweise enden sie mir Worten wie “ggf.” oder “Dr.” etc., teilweise fangen sie unvermittelt an, beispielsweise mit “Platz belegten…”.

Die Beispiele machen deutlich, dass der Tokenizer anscheinend mit Worten oder Abkürzungen, die mit einem Punkt enden, klarkommt.

Ist euch das auch schon aufgefallen? Wie soll ich beim Einsprechen darauf reagieren?
Soll ich diese Sätze als grammatikalischen Fehler melden oder trotzdem einsprechen?

Zur technischen Seite: so weit ich den Quellcode verstehe, könnte man für den tokenizer einige Abkürzungen in die Positivliste schreiben.
Würde das an der Stelle helfen?

Danke euch für eure Hilfe!

1 Like

@mkohler und ich arbeiten gerade an einem neuen Rulefile für Deutsch: https://github.com/common-voice/cv-sentence-extractor/pull/157

Du kannst gerne deine Ideen einbringen. Die abbreviation_patterns bedeuten, dass Sätze, die diese Abkürzungen enthalten, nicht verwendet werden und der Satz nicht zerschnitten wird.

Ich würde sagen nicht einsprechen und melden. Man kann einem neuronalen Netz natürlich auch Abkürzungen beibringen, aber das sind dann weitere Sonderregeln, die es lernen muss. Die offizielle Regel ist, alles was gesagt wird, muss auch ausgeschrieben dastehen. Wir haben zufälligerweise gestern “ggf.” hinzugefügt und wollen damit bald einen neuen Wikipedia Export mit den neu angelegten Artikeln seit dem letzten Export machen.

2 Likes

Perfektes Timing, ich versuche mich gerne einzubringen.

Heißt das, dass der gesamte Satz entfernt wird oder nur das Lemma aus dem Satz?

In der aktuellen Liste würden mir noch Dr. fehlen, ergänze ich in GitHub. Möchtest du das als Kommentar oder als Pull Request auf dein Repo oder auf das Haupt Repo?

Ich melde die Sätze und spreche sie nicht ein, wollte nur sichergehen, dass das so gewünscht ist.

2 Likes

Ja wirklich gutes Timing :slight_smile: Ich denke am besten schreibst Du das im Pull Request.

2 Likes

Mache ich gern, Danke @stergro

Nach dem durchschauen des Sample Files sieht es für mich so aus, als ob das Lemma aus dem Satz entfernt wird. Das erklärt, warum manche Sätze dann etwas holprig werden.

1 Like

Der Satz wird nicht verwendet, wenn eine der abbreviation_patterns Regeln zutrifft.

@stergro Der Satz wird trotzdem zerschnitten. Das passiert bevor die Regeln angewendet werden. Aber damit können wir wenigstens einige rausfiltern.

1 Like

Danke! Das heißt, dass alle Sätze mit “problematischen” Abkürzungen ganz rausfallen. Ist vermutlich die einfachste Lösung.

Wisst ihr, welcher tokenizer intern verwendet wird?

1 Like

Dort konnte ich nur kommentieren, kein File Change Proposal machen. Daher habe ich in deinen Fork einen PR erstellt: https://github.com/stefangrotz/cv-sentence-extractor/pull/1

1 Like

Natürlich :slight_smile: Momentan verwenden wir rust-punkt. Führt aber oft zu Problemen. Es gibt neuerdings jedoch auch die Möglichkeit andere Segmenter zu verwenden, siehe https://github.com/Common-Voice/cv-sentence-extractor#using-a-different-segmenter-to-split-sentences.

2 Likes

Klar, was eine dumme Frage. :man_facepalming:t2: Ich kenne Punkt nur in der Python Implementierung, es kann sein, dass die ein vortrainiertes Modell mitbringt oder herunterlädt. Ich meine nltk macht so Sachen.

Ich kann Mal schauen, ob Python Punkt das in Deutsch besser kann.

1 Like

Definitiv keine dumme Frage :slight_smile: NLTK könnte durchaus besser funktionieren. src/segmenter.rs hat ein Beispiel. Wäre super, wenn du die expliziten Abkürzungen aus dem DE rules file entfernen könntest und zu analysieren ob das mit NLTK besser funktioniert.

Die nächsten Tage bin ich nicht immer erreichbar, könnte daher eine Weile dauern, wenn du Fragen für mich hast. Unterstütze hier aber gerne.

2 Likes

Moin!
Ich habe es jetzt erst geschafft, mich Mal damit zu beschäftigen.
Das Projekt läuft jetzt soweit, ich würde gerne nur ein paar kleine Tests durchführen. Gibt es eine Möglichkeit, Dateien vom Wiki Extractor zu erstellen, ohne direkt das ganze Wiki dump File zu brauchen? Laut des File Formats ist das ja nicht so kompliziert, aber eine Beispiel Datei, die der Sentence Extractor braucht wäre hilfreich

Danke!

1 Like

Also ich habe jetzt gelernt, dass der Wiki Extractor nicht komplett laufen muss, damit der Sentence Extractor arbeiten kann. Und dass json als Input Format gebraucht wird.
Wenn ich komplett durchsteige, schreibe ich vielleicht noch ein zwei Zeilen dazu in die README.

Wunderbar. Ich werde mir den Pull Request später genauer anschauen. Danke für deine Hilfe!

Jap. Die automatische “Sample Extraction” für Pull Requests verwendet das selbe Konzept. Da wird der WikiExtractor für 30 Sekunden ausgeführt, und dann der Sentence Extractor. So kommen einige Sätze zusammen, in einem relativ akzeptablen Zeitrahmen.

Der WikiExtractor kann auch auf Teil-Dateien vom Dump ausgeführt werden, z.B. https://dumps.wikimedia.org/dewiki/latest/dewiki-latest-pages-articles1.xml-p1p297012.bz2, dann sind’s nur ca. 500MB, die man runterladen muss. Das wäre wohl gut zu erwähnen im ersten Schritt hier: https://github.com/Common-Voice/cv-sentence-extractor#extract-wikipedia . Momentan klingt’s danach, als müsse man den gesamten Dump runterladen.

Analog wohl am besten in Schritt zwei von https://github.com/Common-Voice/cv-sentence-extractor#extract-wikipedia. Würde einen PR dazu gerne reviewen :slight_smile:

1 Like

Danke dir für die Infos und das Angebot!
Ich werde es noch Mal mit eigenen Sätzen testen, die die Abkürzungen enthalten, jetzt wo ich weiß, wie die Dateien aussehen müssen.

Der Job auf GitHub ist leider fehlgeschlagen, ich verstehe den Grund nicht. Der Rust Installationsprozess scheint Dateien laden zu wollen, was aber fehlschlägt. Scheint mir nicht an meinen Änderungen zu liegen.

Wäre super, wenn du die Datei in einem Kommentar im Pull Request verlinken könntest.

Schaue mir das gleich an, werde im Pull Request antworten.

1 Like

Danke für dein schnelles Feedback! Ich werde die Testdatei auch verlinken und die Kommentare womöglich morgen bearbeiten.