Zusammenfassung der praktischen Fähigkeiten zur Textklassifizierung (Tricks)

Verzeichnis

 

Vorwort

Über Tokenizer

Über chinesische Zeichen Vektor

Wenn der Datensatz sehr verrauscht ist

Wählen Sie CNN oder RNN als Basislinie? Folgt die Route CNN oder RNN?

Wo wird Dropout hinzugefügt?

Über die zweite Kategorie

Informationen zur Klassifizierung mehrerer Etiketten

Was tun, wenn die Kategorie nicht ausgewogen ist?

Sei nicht zu verwirrt

Ich benutze immer noch keine Tricks, aber ich möchte nur ein gutes Ergebnis erzielen.


Vorwort

Vor einem Jahr stellte Xiao Xi Zhihu eine solche Frage

Gibt es Tricks bei der Textklassifizierung, die in Artikeln selten erwähnt werden, aber einen wichtigen Einfluss auf die Leistung haben?
Link: https://www.zhihu.com/question/265357659/answer/578944550

Zu dieser Zeit habe ich eine interessantere Aufgabe gebürstet und festgestellt, dass seltsame Tricks viele Leistungsvorteile bringen können. Um eine kleine Idee zu verifizieren, habe ich außerdem eine Reihe von Datensätzen zur Klassifizierung von öffentlichem Text ausgeführt. Obwohl die Idee nicht sehr gut war, habe ich viele Tricks gesammelt und untersucht, um die Leistung zu verbessern. ( ̄ ▽  ̄ ””) ╭ Dann klein Im Follow-up habe ich diese Tricks verwendet, um viele verwandte Spiele zu bürsten (auch wenn es sich um ein spezielles Problem bei der Textklassifizierung handelt, z. B. beim Textabgleich). Ich habe festgestellt, dass die Grundlinie + eine Reihe von Tricks + die einfache Integration beiläufig in die Top 10 eines Wasserwettbewerbs zur Textklassifizierung gepinselt werden können. top3, ich spüre die Wichtigkeit von Tuning und Tricks. Ran Ge, ich hatte lange Zeit nicht das grundlegende Problem der Textklassifizierung. Ich habe das Gefühl, dass ich es fast vergessen habe. Während ich noch ein wenig vages Gedächtnis habe, werde ich es klären und mit allen teilen. Geben Sie Hilfe oder Inspiration. Lassen Sie uns zunächst zu dem Schluss kommen, dass Tricks gut angewendet werden und die Abstimmung wunderbar ist. TextCNN kann auch die meisten Schnickschnack des Deep-Modells aufhängen. Tricks sind nutzlos und das SOTA-Modell hat auch eine schlechte Leistung, was Sie an Ihrem Leben zweifeln lässt. Es hat keinen Sinn im Folgenden, es gibt keine Logik, um diesen Artikel scharf zu starten.

Über Tokenizer

Unabhängig davon, ob es sich um Chinesisch oder Englisch handelt, müssen Sie beim Aufnehmen des Datensatzes unbedingt prüfen, ob Sie eine Wortsegmentierung durchführen möchten (einige Freunde sind der Meinung, dass der englische Datensatz überhaupt keine Wortsegmentierung verwendet, was sehr frustrierend ist). Es ist im Begriff, mit der Wahl des Tokenizers zu kämpfen.

Passant C: Unsere Fabrik verfügt über eine vollständige Palette von Tokenizern, an denen alle Arten von Open-Source-Tokenizern hängen.
Xiao Xi: Nun, Sie können untergehen

Zuallererst gibt es eine Frage. ** Ist es wirklich so, dass die Leistung der nachgelagerten Aufgabe umso besser ist, je weiter der Algorithmus fortgeschritten ist? ** Viele Leute werden eine Sache ignorieren, wenn sie zu diesem Schritt kommen, ** Wortvektor! ! ! ** Im Vergleich zum fortgeschrittenen Grad des Wortsegmentierungsalgorithmus selbst ist es im Kontext neuronaler Netze, die vorab trainierte Wortvektoren verwenden, ** wichtiger, sicherzustellen, dass die Token-Granularität zwischen dem Wortsegmentierer und der Wortvektortabelle tatsächlich übereinstimmt! ** Selbst wenn Ihre Wortbewertung gut ist, wird sie, sobald sie nicht in der Wortvektortabelle enthalten ist, zu OOV, und es wird sogar die beste Bewertung verwendet (unless ( ̄ ▽ "" ") ╭ (es sei denn, Sie haben nicht zu viel Mühe Schreiben Sie einen Code, um eine spezielle Verarbeitung für die OOV in Bezug auf die Wortvektortabelle durchzuführen. Ich finde ihn normalerweise problematisch (╮ (╯ ▽ ╰) ╭), daher gibt es hier zwei Fälle. 1. **** Die Tokenizer bekannter vorab trainierter Wortvektoren wie die offizielle Veröffentlichung von vorab trainierten Wortvektoren wie word2vec, glove und fasttext veröffentlichen die Informationen des entsprechenden Trainingskorpus, einschließlich Vorverarbeitungsstrategien wie Wortsegmentierung usw. Dies ist tatsächlich der Fall Es könnte nicht besser sein, keine Verstrickung, wenn Sie sich entscheiden, einen bestimmten Wortvektor zu verwenden, dann verwenden Sie den Wortunterbrecher, der zum Trainieren des Wortvektors verwendet wurde! Die Leistung dieses Tokenizers bei nachgelagerten Aufgaben ist besser als bei anderen kriegführenden Tokenizern. 2. **** Kennen Sie den Tokenizer des vorab trainierten Wortvektors nicht. Dann müssen Sie den Tokenizer "erraten". Wie kann man raten? Nachdem Sie die vorab trainierte Wortvektortabelle erhalten haben, suchen Sie zunächst nach bestimmten Wörtern wie Websites, Postfächern, Redewendungen, Namen usw., die auch in englischer Sprache verfügbar sindn'tWarten Sie, sehen Sie, welche Granularität der Trainingswortvektor verwendet, um sie zu teilen, und führen Sie dann einige Tokenizer aus, um festzustellen, welche Granularität ihm am nächsten liegt. Wenn Sie sich keine Sorgen machen, fügen Sie sie in die nachgelagerte Aufgabe ein. Lauf und schau zu. Die ideale Situation besteht natürlich darin, die Wortsegmentierung zu bestimmen, die für den aktuellen Aufgabendatensatz am besten geeignet ist, und dann die vorab trainierten Wortvektoren zu verwenden, die durch dieselbe Wortsegmentierung erzeugt werden. Leider gibt es im Internet nicht so viele Versionen offener Wortvektoren zur Auswahl. Daher ist es offensichtlich förderlicher, Ihre eigenen Wortvektoren auf dem nachgelagerten Aufgabentrainings-Set oder einer großen Anzahl identisch verteilter unbeaufsichtigter Korpora zu trainieren, um die Leistung des Modells weiter zu beeinträchtigen. Es reicht jedoch aus, einen nützlichen Wortvektor für die aktuelle Aufgabe vorab zu trainieren, um einen Artikel zu schreiben. . Ich werde hier nicht darüber sprechen. Ich werde es später schreiben ~ (Ich habe Xiao Xis Aufmerksamkeit nicht beachtet!) Zusätzlich zum Tokenizer und der Wortvektortabelle müssen Sie natürlich auch den Fallvektor und die Definition von OOV abgleichen. Tabellenübereinstimmung. Wenn Sie eine Wortvektortabelle verwenden, bei der die Groß- und Kleinschreibung beachtet wird, aber auch alle Wörter in nachgeschalteten Aufgaben in Kleinbuchstaben geschrieben werden, denken Sie nicht darüber nach, die absolute Leistung verliert mehr als N Prozentpunkte.

Über chinesische Zeichen Vektor

Passant: Es ist mühsam, ich kenne keine Wörter, ich werde
Wortvektoren verwenden. Xiao Xi: Lauf nicht weg ( ̄∇ ̄)

Wenn Sie Char-Level wirklich als Hauptkraft verwenden, vergessen Sie nicht, chinesische Wortvektoren vorab zu trainieren! Denken Sie daran, das Fenster während des Vortrainings größer zu öffnen . Verwenden Sie die Fenstergröße auf Wortebene nicht direkt. Andere Hyperparameter vor dem Training können einfach angepasst werden. Dies ist definitiv besser als zufällig initialisierte Wortvektoren.

Wenn der Datensatz sehr verrauscht ist

Es gibt zwei Fälle, in denen das Geräusch stark ist. Für den Datensatz D (X, Y) ist eines, dass X viel internes Rauschen aufweist (zum Beispiel wird der Text von der Mehrheit der Internetnutzer gesprochen oder erzeugt), und das andere ist, dass Y sehr laut ist (einige Beispiele sind durch offensichtliche Fehler gekennzeichnet). Für einige Sampler ist es schwierig zu definieren, zu welcher Kategorie sie gehören, selbst wenn die Kategorie nicht eindeutig ist. Für die erstere Art von Rauschen besteht eine natürliche Idee darin, ein Sprachmodell oder eine Textkorrektur basierend auf dem Bearbeitungsabstand zu verwenden. Aufgrund des Vorhandenseins von Eigennamen und "falschem Rauschen", das in der tatsächlichen Gans unvorstellbar ist, ist es jedoch in tatsächlichen Szenen häufig wirksam. Nicht sehr gut. Im Allgemeinen gibt es hier zwei Ideen für Xiao Xi: Eine besteht darin, die Eingabe des Modells direkt auf Zeichenebene (die Granularität des Wortes auf Chinesisch) zu ändern und dann von Grund auf neu zu trainieren (ohne vorab trainierte Wortvektoren zu verwenden), um sie mit der Wortebene zu vergleichen Wenn nun der offensichtliche Effekt des Char-Levels gut ist, dann in kurzer Zeit, direkt basierend auf dem Char-Level, um die Modellgrube zu machen ~ Wenn die Leistung nicht zu schlecht ist oder der Char den Kopf bereits erreicht hat, möchten Sie das Word-Level machen? ? Keine Sorge, helfen Sie Xiao Xi zuerst beim Kauf eines Lutschers ( ̄∇ ̄). Eine sehr Arbeit, aber anscheinend finden nicht viele Leute einen Trick darin, einen speziellen Hyperparameter FastText zu verwenden, um einen Wortvektor zu trainieren. Warum ist es etwas Besonderes? Im Allgemeinen nimmt die Fenstergröße von char ngram in Fasttext in Englisch im Allgemeinen einen Wert von 3 bis 6 an. Wenn wir jedoch Chinesisch verarbeiten und das Rauschen in der Eingabe entfernen möchten, können wir dieses Fenster auf 1 bis 2 beschränken. Diese Art von kleinem Fenster ist hilfreich für das Modell, um Tippfehler zu erfassen (stellen Sie sich vor, wenn wir ein falsches Wort eingeben, erhalten wir normalerweise eines der Wörter zu einem anderen Wort mit derselben phonetischen Form), z. B. das kürzlich von word2vec gelernte Wort "scheint" Es mag "wie" sein, aber die "scheinbaren" Wörter, die der Fasttext im kleinen ngram-Fenster gelernt hat, sind wahrscheinlich Wörter, die interne Tippfehler enthalten, wie z. B. "Yihu", so dass die Wörter, die aus nicht zu vielen Tippfehlern bestehen, plötzlich sind Kommen Sie bis zu einem gewissen Grad wieder zusammen, um dem vom Tokenizer erzeugten Rauschen entgegenzuwirken (schneiden Sie ein Wort in mehrere Wörter). Wenn der Datensatz sehr sauber ist, kann das Trainieren des Wortvektors natürlich gg sein. Und für den letzteren Fall von Lärm(Das heißt, das Rauschen in Y), eine sehr einfache Idee ist das Glätten von Etiketten, aber Xiao Xi hat es im tatsächlichen Kampf viele Male verwendet, um festzustellen, dass der Effekt nicht zu offensichtlich ist. Die letzte Zusammenfassung des Tricks besteht darin, zuerst dieses Rauschen zu ignorieren, das Modell so gut wie möglich gewaltsam zu trainieren und dann das trainierte Modell den Trainingssatz und den Entwicklungssatz ausführen zu lassen, die falschen Proben im Trainingssatz und die im Entwicklungssatz mit hoch zu entfernen Proben, die mit Zuversicht falsche Entscheidungen treffen (z. B. eine Probe mit einer Kennzeichnung von 0 bis 1 mit 99% iger Sicherheit vorhersagen) und dann die Analyse dieser schlechten Fälle durchführen. Wenn sich herausstellt, dass die falsche Kennzeichnung eine starke Regelmäßigkeit aufweist, dann direkt Verwenden Sie ein Skript, um Stapelkorrekturen vorzunehmen (stellen Sie nur sicher, dass die korrekte Rate des korrigierten Etiketts erheblich höher ist als vor der Korrektur). Wenn es keine Regelmäßigkeit gibt, aber festgestellt wird, dass die meisten Proben mit hohem Vertrauen in das Modell falsch beschriftet sind, löschen Sie diese Proben direkt. Oft können Sie auch eine kleine Leistungsverbesserung erzielen, schließlich ist der Testsatz manuell Kommentierte, schwierige Proben und falsch gekennzeichnete Proben werden nicht zu viele sein.

Wählen Sie CNN oder RNN als Basislinie? Folgt die Route CNN oder RNN?

Verwickle dich nicht wirklich in dieses Problem bei der Textklassifizierung. Ich persönlich bevorzuge CNN hauptsächlich, weil ich schnell laufe. . . Es ist gut, noch ein paar Experimente durchzuführen. Die tatsächliche Erfahrung zeigt, dass das grundlegende CNN-Modell wie TextCNN nicht nur besonders einfach zu implementieren ist, sondern auch leicht zu einer starken Basislinie für einen Datensatz wird (es sei denn, diese Klassifizierungsaufgabe ist schwierig). Die Erstellung der Basislinie dauert ein oder zwei Stunden Es ist nicht zu spät, andere Modelle herzustellen. Es hilft auch, die allgemeine Richtung frühzeitig zu korrigieren. Wenn Sie über objektives Denken und Entscheiden sprechen möchten, nehmen Sie sich eine Stunde Zeit, um sich den Datensatz genauer anzusehen. ~ Wenn Sie der Meinung sind, dass viele starke Ngramme im Datensatz direkt dazu beitragen können, die richtige Entscheidung zu treffen, startet CNN. Wenn Sie der Meinung sind, dass in vielen Fällen ein Satz oder sogar zwei- oder dreimal gelesen werden muss, um das richtige Tag zu erhalten, beginnt RNN. Wenn die Daten groß sind und eine Grafikkarte vorhanden ist, können Sie natürlich auch Transformer ausprobieren. Wenn Sie mehr Zeit haben, können Sie auch die CNN- und RNN-Modelle ausführen und integrieren.

Wo wird Dropout hinzugefügt?

Nach der Worteinbettungsschicht, nach der Poolschicht und nach der FC-Schicht ** (vollständig verbundene Schicht) **, oh. Die Ausfallwahrscheinlichkeiten im Anfangsstadium bleiben gleich, und es ist besser, die Zeit alleine zu optimieren (diesmal gab es noch nie). Was die Wort-Dropout-Strategie betrifft, die manchmal von einigen Leuten angepriesen wird (maskieren Sie einige Token zufällig auf [PAD] oder 0. Beachten Sie, dass dieser Vorgang nicht dem Hinzufügen von Dropout zur Einbettungsebene entspricht), und versuchen Sie es schließlich, wenn Sie Zeit haben, pro test Wenn der Ausfall eingestellt ist, spielt er im Allgemeinen keine große Rolle.

Über die zweite Kategorie

Das binäre Klassifizierungsproblem muss Sigmoid als Aktivierungsfunktion der Ausgabeschicht verwenden. Natürlich nicht, versuchen Sie Softmax mit zwei Kategorien. Es kann sein, dass es noch einen Zweig mit etwas mehr Informationen gibt. Obwohl letzterer in Form der Mathematik etwas hässlicher ist, bringt er in der Praxis oft einige Verbesserungspunkte mit sich. Er ist auch metaphysischer.

Informationen zur Klassifizierung mehrerer Etiketten

Wenn eine Stichprobe mehrere Beschriftungen gleichzeitig hat und sogar die Beschriftungen auch eine DAG (gerichteter azyklischer Graph) darstellen, machen Sie sich keine Sorgen, verwenden Sie zuerst die Binärkreuzentropie, um eine Basislinie zu trainieren (dh jede Kategorie in eine binäre Klassifikation umzuwandeln) Problem, dieses Multi-Label-Klassifizierungsproblem von N Kategorien wird zu N binären Klassifizierungsproblemen. Schließlich hat dies eine vorgefertigte API im Tensorflow, nämlich tf.nn.sigmoid_cross_entropy_with_logits. Daher sind die Implementierungskosten sehr gering. Dann können Sie auch angenehm überrascht sein, wenn Sie feststellen, dass das Multi-Label-Problem nach Abschluss der Baseline nicht groß ist und das DAG-Problem im Grunde genommen von selbst gelöst wurde (obwohl die Modellebene dieses Problem nicht speziell behandelt), und Sie es dann mit Zuversicht tun können. Was? Ist das Problem gelöst? Überprüfen Sie die Papiere ╮ ( ̄ ▽  ̄ ””) ╭Xi Xi wurde keinem Datensatz ausgesetzt, der in dieser Hinsicht zu schwierig ist.

Was tun, wenn die Kategorie nicht ausgewogen ist?

Verwenden Sie, wie das Internet sagte, schnell verschiedene Upsampling- und Downsampling-Boosting-Strategien, um es zu verwenden? Nono, wenn das Verhältnis von positiven und negativen Stichproben nur 9: 1 beträgt, fahren Sie mit Ihrem Tiefenmodell fort, um Ihre Hyperparameter anzupassen. Nach Fertigstellung des Modells werden Sie feststellen, dass dieses Ungleichgewicht für das Modell nicht erwähnenswert ist und die Entscheidungsschwelle völlig unnötig ist Handverstellung. Aber! Ja! Wenn Sie feststellen, dass eine Charge häufig eine Stichprobe derselben Kategorie ist oder eine Stichprobe einiger Kategorien nach vielen Chargen schwer zu finden ist, ist ein Gleichgewicht sehr, sehr notwendig. Portal für Ungleichgewichtsprobleme in Kategorien-> [Xiao Xi ausgewählt] So lösen Sie das Problem der Ungleichgewichtsklassifizierung elegant und stilvoll

Sei nicht zu verwirrt

  1. Machen Sie sich keine Gedanken darüber, ob die Länge des Textabschneidens 120 oder 150 beträgt

  2. Lassen Sie sich nicht zu sehr auf die geringe Leistungssteigerung des Entwicklungssatzes ein, die durch leistungsunempfindliche Hyperparameter verursacht wird

  3. Seien Sie nicht zu verwirrt, ob die Einbettung nicht registrierter Wörter auf alle Nullen initialisiert oder zufällig initialisiert wird. Teilen Sie die Einbettung nicht mit PAD.

  4. Lassen Sie sich nicht zu sehr darauf ein, ob der Optimierer Adam oder MomentumSGD verwendet. Wenn die Beziehung zu SGD nicht tief ist, gibt es kein Gehirn, Adam, und verwenden Sie MomentumSGD schließlich, um einige Male auszuführen.

Ich benutze immer noch keine Tricks, aber ich möchte nur ein gutes Ergebnis erzielen.

BERT verstehen. Über. Dies ist, woran ich mich vorerst erinnerte. Die verbleibenden Tricks, an die ich mich erinnerte, werden auf Zhihu, Portal, aktualisiert:

https://www.zhihu.com/question/265357659/answer/578944550

Mit anderen Worten, Xiao Xi hat so viele Tricks mit Ihnen geteilt, liebe Freunde. Gibt es geheime Tricks, die Sie mit Xiao Xi im Kommentarbereich teilen können ( ̄∇ ̄)?

Veröffentlicht 45 Originalarbeiten · erntete Lob 2 · Aufrufe 5228

Ich denke du magst

Origin blog.csdn.net/xixiaoyaoww/article/details/105460364
Empfohlen
Rangfolge