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