Frage

Hintergrund:

Dokumente, die einkamen, sowie das Trainingsset haben Apache Tika mit Tesseract für Inline -Bilder durchlaufen. Das funktioniert gut, außer wenn dies nicht der Fall ist. Viele Dokumente sind alte, gescannte Bilder und was Tika -Extrakte kaugisch sind.

Verwenden Sie Spark auf Hadoop und entweder ML oder MLLIB (ich habe mich nicht niedergelassen, obwohl ich ML besser mag).

Bisher werden die besten Ergebnisse aus einer Pipeline mit naiven Bayes erzielt, die Stoppwörter, Tokenizes und CountVectorizes Features (No TF-IDF) entfernt, token und countVectorizes. Gesamtbeutel der Wörter. Als nächstes wird ML verwendet, um mit IDF und in logisticregression withlbfgs zu tokenisieren.

Wie auch immer, der Gedanke kam mir, dass das Modell viele Dokumente verwendet, die Junk sind. Buchstäblich nur Kauderschnüre wie "mmmmmmmm AaannnamMmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr.

Das ist nicht gut, aber da ich in Skala operiere, ist es genau das, was passiert ist. Sicherlich könnte ich 10.000 Trainingsdokumente auswählen und die schlechten Beispiele entfernen, aber es muss einen einfacheren Weg geben. Gibt es?

Der Titel dieser Frage glaubt in meinem Brainstorming, dass es möglicherweise eine Möglichkeit gibt, Token, die von einem Wörterbuch nicht erkennbar sind, zu ergeben, unten zu ignorieren. Gibt es?

Offen für alle Ratschläge oder Ansätze, um aus diesem Modell eine bessere Präzision herauszuholen.

Vielen Dank

War es hilfreich?

Lösung

Normalerweise sind diese nicht anerkannten Wörter nicht problematisch, da sie in ein oder zwei Dokumenten erscheinen und Menschen normalerweise nur Wörter mit solchen niedrigen Frequenzen filtern.

Kannst du das nicht tun? Oder erscheinen Ihre nicht anhaltenden Worte so viel?

Wie auch immer, Ihr Vorschlag ist das, was die Menschen verwenden:

Ignorieren Sie Token, die von einem Wörterbuch nicht erkennbar sind. Gibt es?

Exakt. Es gibt keine magische Möglichkeit zu wissen, ob ein Wort Englisch ist oder nicht. Die Textverarbeitungsprozessoren ist, ein Wörterbuch zu verwenden, wie Sie selbst vorgeschlagen haben.

In Python können Sie vor dem Stamm basierend darauf filtern pyenchant.

import enchant
d = enchant.Dict("en_US")
d.check('hello')  # True
d.check('mmmmmmmm')  # False

Ich wette, das wäre gut genug.

Wenn es jedoch viele falsche Negative gibt, können Sie das Wörterbuch um die ähnlichsten Wörter bitten und dann ein Wortentfernungsmaß anwenden. Hier werde ich verwenden Levenshtein -Entfernung wie implementiert in Python:

>>> r = d.suggest('helo')
>>> r
['hole', 'help', 'helot', 'hello', 'halo', 'hero', 'hell', 'held', 'helm', 'he lo', 'he-lo', 'heel', 'loathe', 'Helios', 'helicon']
>>> min([LD('helo', w) for w in r])
1

Die Entfernung ist für die nicht anerkannten Wörter, die Sie vorgeschlagen haben, höher:

>>> d.suggest('mmmmmmmm')
['mammogram', "Mammon's"]
>>> min([LD('mmmmmmmm', w) for w in d.suggest('mmmmmmmm')])
5
>>> min([LD('aaannnammmmrrr', w) for w in d.suggest('aaannnammmmrrr')])
12
>>> min([LD('hdhhdhhhhhjjj', w) for w in d.suggest('hdhhdhhhhhjjj')])
10

Zusammenfassung:

  1. Filter Wörter, die in weniger als 3 Dokumenten erscheinen
  2. Wenn das nicht ausreicht oder keine Möglichkeit für Ihren Anwendungsfall ist, verwenden Sie ein Wörterbuch

Ich denke, dieser letzte Vorschlag, Levenshtein Distanz zu den englischen Wörtern zu verwenden, ist übertrieben.

Wenn Ihre Dokumente viele städtische Wörter oder Hip -Begriffe umfassen, können Sie auch basierend auf der Anzahl der Google -Ergebnisse filtern, anstatt ein gemeinsames Wörterbuch zu verwenden. Dein Wort hdhhdhhhhhjjj, Zum Beispiel gibt mir beispielsweise nur zwei Google -Ergebnisse, von denen eines dieser Stackkexchange ist. Bei der Datenwissenschaft geht es darum, kreativ zu sein. :)

Es gibt wahrscheinlich Heuristiken oder Statistiken, die auf der Anzahl der Konsonanten in einem Wort und Buchstabenkombinationen basieren, die Sie verwenden könnten, um das Wörterbuch Ihrer Dokumente zu verkleinern, aber ich würde nicht dorthin gehen. Es wird zu viel Arbeit und sehr spröde sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top