4 Stimmen

Einteilung der englischen Wörter in selten und häufig

Ich versuche, eine Methode zu entwickeln, mit der eine bestimmte Anzahl englischer Wörter in zwei Gruppen eingeteilt werden kann - "selten" und "häufig" - je nachdem, wie häufig sie in der Sprache verwendet werden.

Die Zahl der Wörter, die ich klassifizieren möchte, ist begrenzt - sie liegt derzeit bei etwa 10.000 und umfasst alles von Artikeln bis hin zu Eigennamen, die aus anderen Sprachen entlehnt sein könnten (und daher als "selten" eingestuft würden). Ich habe eine Häufigkeitsanalyse innerhalb des Korpus durchgeführt und habe eine Verteilung dieser Wörter (von 1 Verwendung bis zu maximal etwa 100).

Meine Intuition für ein solches System war die Verwendung von Wortlisten (z. B. BNC-Wortfrequenzkorpus, wordnet, interne Korpushäufigkeit) und die Zuweisung von Gewichten für das Vorkommen eines Wortes in einer dieser Listen.

So kann beispielsweise ein Wort, das im Korpus eine mittlere Häufigkeit aufweist (z. B. 50), aber in einer Wortliste W vorkommt, als häufig angesehen werden, da es zu den häufigsten in der gesamten Sprache gehört. Meine Frage war - wie kann ich am besten eine gewichtete Bewertung für so etwas erstellen? Sollte ich diskret oder kontinuierlich vorgehen? Welches Klassifizierungssystem würde sich in jedem Fall am besten eignen?

Oder empfehlen Sie eine andere Methode?

Danke!


EDIT:

Um die Frage von Vinko nach dem Verwendungszweck der Klassifizierung zu beantworten -

Diese Wörter werden aus einer Phrase (z.B. Buchtitel) tokenisiert - und das Ziel ist es, eine Strategie zu finden, um eine Suchanfrage für die Phrase zu generieren und einen Textkorpus zu durchsuchen. Der Abfrage-String kann mehrere Parameter unterstützen, wie z. B. Nähe usw. - wenn also ein Wort häufig vorkommt, können diese Parameter angepasst werden.

Um die Frage von Igor zu beantworten -

(1) Wie groß ist Ihr Korpus? Derzeit ist die Liste auf 10k Token begrenzt, aber das ist nur ein Trainingssatz. Es könnte bis zu ein paar 100k gehen, sobald ich anfange, es auf dem Testset zu testen.

2) Haben Sie eine Art erwarteten Anteil an häufigen/seltenen Wörtern im Korpus? Hmm, das habe ich nicht.

2voto

Igor Krivokon Punkte 9967

Vorausgesetzt, Sie haben eine Möglichkeit, die Klassifizierung zu bewerten, können Sie den "Boosting"-Ansatz des maschinellen Lernens verwenden. Boosting-Klassifikatoren verwenden eine Reihe von schwachen Klassifikatoren, die zu einem starken Klassifikator kombiniert werden.

Nehmen wir an, Sie haben Ihren Korpus und K externe Wortlisten, die Sie verwenden können. Wählen Sie N Häufigkeitsschwellenwerte. Sie könnten zum Beispiel 10 Schwellenwerte haben: 0.1%, 0.2%, ..., 1.0%. Erstellen Sie für Ihren Korpus und jede der externen Wortlisten N "Experten", einen Experten pro Schwellenwert pro Wortliste/Korpus, insgesamt N*(K+1) Experten. Jeder Experte ist ein schwacher Klassifikator mit einer sehr einfachen Regel: Wenn die Häufigkeit des Wortes höher ist als sein Schwellenwert, betrachtet er das Wort als "häufig". Jeder Experte hat eine Gewichtung.

Der Lernprozess läuft folgendermaßen ab: Weisen Sie jedem Experten das Gewicht 1 zu. Für jedes Wort in Ihrem Korpus lassen Sie die Experten abstimmen. Addieren Sie ihre Stimmen: 1 * Gewicht(i) für "häufige" Stimmen und (-1) * Gewicht(i) für "seltene" Stimmen. Wenn das Ergebnis positiv ist, markieren Sie das Wort als häufig.

Der Grundgedanke ist nun, die Klassifizierung zu bewerten und die Gewichtung der Experten, die richtig lagen, zu erhöhen und die Gewichtung der Experten, die falsch lagen, zu verringern. Dann wiederholen Sie den Vorgang so lange, bis Ihre Bewertung gut genug ist.

Die Einzelheiten der Gewichtsanpassung hängen von der Art und Weise ab, wie Sie die Klassifizierung bewerten. Wenn Sie zum Beispiel keine Bewertung pro Wort haben, können Sie die Klassifizierung trotzdem als "zu viele häufige" oder "zu viele seltene" Wörter bewerten. Im ersten Fall befördern Sie alle Experten, die für "seltene" Wörter sind, und stufen alle Experten, die für "häufige" Wörter sind, zurück, oder umgekehrt.

1voto

af. Punkte 141

Ihre Verteilung ist höchstwahrscheinlich eine Pareto-Verteilung (eine Obermenge des oben erwähnten Zipfschen Gesetzes). Ich bin schockiert, dass das häufigste Wort nur 100-mal verwendet wird - einschließlich "a" und "der" und ähnlicher Wörter? Sie müssen einen kleinen Korpus haben, wenn das der Fall ist.

Wie auch immer, Sie müssen einen Grenzwert für "selten" und "häufig" festlegen. Eine mögliche Wahl ist der Mittelwert der erwarteten Anzahl von Auftritten (siehe den oben verlinkten Wiki-Artikel zur Berechnung des Mittelwerts). Aufgrund des "dicken Schwanzes" der Verteilung wird eine relativ kleine Anzahl von Wörtern über dem Mittelwert liegen - diese sind die "häufigen". Der Rest ist "selten". Dies hat zur Folge, dass viel mehr Wörter selten als häufig sind. Ich bin mir nicht sicher, ob das Ihr Ziel ist, aber Sie können den Cutoff-Wert einfach nach oben oder unten verschieben, um die gewünschte Verteilung zu erhalten (z. B. alle Wörter mit einem Erwartungswert von mehr als 50 % sind "häufig").

0voto

Yuval F Punkte 20547

Dies ist zwar keine Antwort auf Ihre Frage, aber Sie sollten wissen, dass Sie hier ein Rad erfinden. Experten für Information Retrieval haben Methoden entwickelt, um Suchbegriffe nach ihrer Häufigkeit zu gewichten. Eine sehr beliebte Gewichtung ist TF-IDF die die Häufigkeit eines Wortes in einem Dokument und seine Häufigkeit in einem Korpus verwendet. TF-IDF wird auch erklärt aquí .

Eine alternative Bewertung ist die Okapi BM25 die ähnliche Faktoren verwendet.

Siehe auch die Lucene-Dokumentation zur Ähnlichkeit wie TF-IDF in einer beliebten Suchbibliothek implementiert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X