python - tau - seaborn axis label




Python-Wie man Wort von abgekürztem Text mit NLP anzieht? (3)

... Abkürzungen für Wörter, die sich nicht in einem Masterwörterbuch befinden.

Also, du suchst ein NLP-Modell, das mit gültigen englischen Wörtern aufwarten kann, ohne sie vorher gesehen zu haben?

Es ist wahrscheinlich einfacher, ein umfangreicheres Wortverzeichnis zu finden oder vielleicht jedes Wort im existierenden Wörterbuch auf übliche Erweiterungen wie +"es" oder word[:-1] + "ies" .

Ich habe kürzlich an einem Datensatz gearbeitet, der Abkürzungen für verschiedene Wörter verwendet. Beispielsweise,

wtrbtl = water bottle
bwlingbl = bowling ball
bsktball = basketball

Es schien keine Übereinstimmung in Bezug auf die verwendete Konvention zu geben, dh manchmal verwendeten sie Vokale manchmal nicht. Ich versuche, ein Mapping-Objekt wie das obige für Abkürzungen und ihre entsprechenden Wörter ohne einen vollständigen Korpus oder eine umfassende Liste von Begriffen zu erstellen (dh Abkürzungen könnten eingeführt werden, die nicht explizit bekannt sind). Der Einfachheit halber ist es beschränkt auf Dinge, die man in einem Fitnessstudio finden könnte, aber es könnte alles sein.

Wenn Sie nur auf die linke Seite der Beispiele schauen, welche Art von Modell könnte die gleiche Verarbeitung wie unser Gehirn in Bezug auf jede Abkürzung auf das entsprechende Volltext-Label beziehen.

Meine Ideen haben aufgehört, den ersten und letzten Brief zu nehmen und diese in einem Wörterbuch zu finden. Weisen Sie a priori Wahrscheinlichkeiten basierend auf dem Kontext zu. Aber da es eine große Anzahl von Morphemen ohne einen Marker gibt, der das Ende des Wortes anzeigt, sehe ich nicht, wie es möglich ist, sie zu spalten.

AKTUALISIERT:

Ich hatte auch die Idee, ein paar String-Metrik-Algorithmen wie einen Match-Rating-Algorithmus zu kombinieren, um eine Menge verwandter Begriffe zu bestimmen und dann die Levenshtein-Distanz zwischen jedem Wort in der Menge zu der Zielabkürzung zu berechnen. Ich bin jedoch immer noch im Dunkeln, wenn es um Abkürzungen für Wörter geht, die nicht in einem Master-Wörterbuch sind. Im Grunde kann man, aufbauend auf Wortkonstruktionen, ein Naive Bayes Modell helfen, aber ich bin besorgt, dass jeder Fehler in der Präzision, der durch die Verwendung der obigen Algorithmen verursacht wird, jeden Modelltrainingsprozess ungültig machen wird.

Jede Hilfe wird geschätzt, da ich wirklich auf diesem festsitze.


Also habe ich mir ein ähnliches Problem angesehen und bin auf ein fantastisches Paket namens PyEnchant . Wenn Sie die Rechtschreibprüfung verwenden, können Sie Wortvorschläge erhalten, was eine schöne und einfache Lösung wäre. Allerdings wird es nur einzelne Wörter vorschlagen (soweit ich das beurteilen kann), und so die Situation, die Sie haben:

wtrbtl = water bottle

Wird nicht funktionieren.

Hier ist ein Code:

import enchant

wordDict = enchant.Dict("en_US")

inputWords = ['wtrbtl','bwlingbl','bsktball']
for word in inputWords:
    print wordDict.suggest(word)

Die Ausgabe ist:

['rebuttal', 'tribute']
['bowling', 'blinding', 'blinking', 'bumbling', 'alienable', 'Nibelung']
['basketball', 'fastball', 'spitball', 'softball', 'executable', 'basketry']

Vielleicht, wenn Sie wissen, welche Art von Abkürzungen dort sind, können Sie die Zeichenfolge in zwei Wörter trennen, z

'wtrbtl' -> ['wtr', 'btl']

Es gibt auch das Natural Language Processing Kit ( NLTK ), das ist erstaunlich, und Sie könnten dies in Kombination mit dem obigen Code verwenden, indem Sie sich ansehen, wie häufig jedes vorgeschlagene Wort ist, zum Beispiel.

Viel Glück!


Wenn Sie kein vollständiges Wörterbuch finden, können Sie ein probabilistisches Sprachmodell erstellen (oder herunterladen), um Satzkandidaten für Sie zu generieren und zu bewerten. Es könnte ein Charakter-N-Gram-Modell oder ein neurales Netzwerk sein.

Für Ihre Abkürzungen können Sie ein "Rauschmodell" erstellen, das die Wahrscheinlichkeit von Zeichenauslassungen vorhersagt. Es kann aus einem Korpus lernen (man muss es manuell oder halbmanuell beschriften), dass Konsonanten weniger häufig fehlen als Vokale.

Sie können ein komplexes Sprachmodell und ein einfaches Rauschmodell verwenden, um sie mithilfe des Ansatzes für verrauschte Kanäle (siehe z. B. den Artikel von Jurafsky für weitere Details) zu kombinieren, um Kandidatensätze vorzuschlagen.

Aktualisieren . Ich habe mich für dieses Problem begeistert und diesen Algorithmus implementiert:

  • Sprachmodell (Zeichen 5-Gramm trainiert auf dem Herr der Ringe Text)
  • Rauschmodell (Wahrscheinlichkeit, dass jedes Symbol abgekürzt wird)
  • Strahlsuchalgorithmus, für Kandidatensatzvorschlag.

Meine Lösung ist in diesem Python-Notebook implementiert. Mit trainierten Modellen hat es ein Interface wie noisy_channel('bsktball', language_model, error_model) , das übrigens {'basket ball': 33.5, 'basket bally': 36.0} zurückgibt. Wörterbuchwerte sind Punkte der Vorschläge (je niedriger, desto besser).

Mit anderen Beispielen wirkt es schlechter: für 'wtrbtl' gibt es zurück {'water but all': 23.7, 'water but ill': 24.5, 'water but lay': 24.8, 'water but let': 26.0, 'water but lie': 25.9, 'water but look': 26.6} .

Für 'bwlingbl' gibt es {'bwling belia': 32.3, 'bwling bell': 33.6, 'bwling below': 32.1, 'bwling belt': 32.5, 'bwling black': 31.4, 'bwling bling': 32.9, 'bwling blow': 32.7, 'bwling blue': 30.7} . Wenn Sie jedoch auf einem geeigneten Korpus trainieren (z. B. Sportmagazine und Blogs; vielleicht mit Überabtastung von Substantiven) und vielleicht mit einer größeren Breite der Strahlsuche, wird dieses Modell relevantere Vorschläge liefern.





abbreviation