2

Ich bin relativ neu zu maschinelles Lernen, ich habe ein paar Projekte in Python gemacht. Ich suche Ratschläge, wie ich das unten stehende Problem angehen könnte, von dem ich glaube, dass es automatisiert werden könnte.Der beste maschinelle Lernansatz, um Text/Fuzzy-Matching zu automatisieren

Ein Benutzer in einem Datenqualitätsteam in meiner Organisation hat eine tägliche Aufgabe, eine Liste von Firmennamen (mit Adressen) zu nehmen, die manuell eingegeben wurden, er muss dann eine Datenbank von Unternehmen durchsuchen, um das übereinstimmende Ergebnis zu finden, mit seinem Urteil - dh keine feste Regel.

Ein Beispiel für die Eingabe wäre:

Firmenname, Adresse Zeile 1, Land

Davon nimmt der Benutzer den Namen des Unternehmens und trägt sie in das Suchwerkzeug. Wo er mit einer Liste von Ergebnissen präsentiert wird und er wählt die beste Übereinstimmung, aber kann wählen, kein Match auszuwählen. Das Suchtool ist intern erstellt und kommuniziert mit einer externen API, ich habe Zugriff auf den Quellcode, so dass ich das Suchwerkzeug modifizieren kann, um die Eingabe zu erfassen, die Liste der Ergebnisse und ich könnte ein Kontrollkästchen hinzufügen, um zu sehen, welches Ergebnis verwendet wurde und ein Kontrollkästchen, um anzuzeigen, dass keine ausgewählt wurde. Daher würde dies meine beschrifteten Trainingsdaten werden.

Die Spalten aus den Ergebnissen verwendet, um das Urteil zu machen, sind in etwa gleich:

Firmenname, Adresse Zeile 1, Land

ein Firmenname wie Stack-Überlauf gegeben, kehren die Ergebnisse können Stack-Überlauf Ltd ., Stacking Overflowing Shelves Ltd. usw. Die Eingabedaten sind relativ gut, so dass die Ergebnisse in der Regel etwa 10 Übereinstimmungen ergeben, und für einen Menschen ist es ziemlich offensichtlich, welche man auswählt.

Mein Gedanke ist, dass ich mit genügend Trainingsdaten die API direkt mit dem Suchbegriff aufrufen und dann das entsprechende Ergebnis aus der Liste der Ergebnisse auswählen kann.

Ist das etwas, das durch ML erreicht werden könnte? Ich kämpfe mit der Tatsache, dass die Daten jedes Mal anders sein werden. Gedanken über den besten Weg, dies zu erreichen, sind willkommen, insbesondere, wie die Daten für das Modell zu strukturieren sind und welche Art von Klassifikator etc. zu verwenden ist.

+0

Dies klingt eher wie Fuzzy-Matching als Textklassifizierung. Sie erhalten wahrscheinlich schlechte ML-Klassifikationsergebnisse aufgrund einer großen Anzahl von Labels, bei denen es sich um alle möglichen Firmennamen handelt, die Sie abgleichen möchten. – aberger

+0

Danke, ich habe die Beschreibung aktualisiert.Ich frage mich, ob es eine Möglichkeit gibt, die Ergebnisse eines Fuzzy-Matches zu geben, in Kombination mit dem, welches ausgewählt wurde, um es zu verbessern. Es gibt ein bisschen Logik, die verwendet wird, um zu entscheiden, welches Ergebnis zu treffen ist, wenn es ähnliche Ergebnisse gibt, oder mehrere für dasselbe Unternehmen. Z.B. Sie nehmen die Zentrale über die Filiale eines Unternehmens, wenn diese verfügbar ist, was in einem anderen Bereich angezeigt wird. –

+0

Ich denke, dass dies auch als ein binäres Klassifizierungsproblem wahrgenommen werden kann, wo Sie für jedes Paar von Firmenbeschreibungen beantworten müssen, ob sie der gleichen Firma entsprechen oder nicht. Levenshtein distance, tfidf oder ngrams können als Features verwendet werden. Selbst wenn die Lösung so einfach ist wie die Wahl eines Grenzwerts in Levenshtein-Abstand oder die Anwendung einer Kombination von Stemming-/Stopp-Wörtern, wäre es trotzdem nett, den ML-Ansatz zu wählen und die Qualität der Klassifizierung zu messen. – Dienow

Antwort

4

Um es als ein ML-Problem einzurahmen, könnten Sie eine Ähnlichkeitsfunktion lernen. Anstatt "Acme Corp" als übereinstimmend mit der Zielklasse "Acme" (Klassifizierer) zu klassifizieren, würden Sie stattdessen eine Funktion lernen, die lernt zu sagen, dass "Acme Corp" ähnlich wie "Acme" ist, aber nicht mit "ABC" übereinstimmt Corp ".

Dies wird normalerweise "Similarity Learning" genannt, in Ihrem Fall vielleicht spezifischer "Ranking Ähnlichkeit Lernen", da Ihr Ziel ist nicht eine Funktion zu lernen, die einen Ähnlichkeitswert ausgibt, sondern stattdessen potenzielle Kandidaten.

Aber bevor ich volle ML-Algorithmen einsetze, würde ich zuerst mit einer String-Distanz-Metrik beginnen, zum Beispiel die Levenshtein-Distanz-Metrik (sehr häufig und leicht zu finden). Transformieren Sie Ihre Daten in positive und negative Beispiele (ein positives Beispiel: Acme ist eine Übereinstimmung mit Acme Corp). Die einfachste Lernfunktion wäre es, den Schwellenwert für Edit Distance zu finden, der Ihre Punktzahl maximiert. Sie können auch Parameter wie "Entfernen Corp.", "Remove Ltd" usw. hinzufügen und herausfinden, welche Kombination am besten funktioniert.

+0

Hallo Pascal, das klingt nach der Art von Dingen, nach denen ich suche. Ich nehme an, du hast nirgendwo ein anständiges Beispiel gesehen, oder? Sind Ihnen auch gute Bibliotheken zum Lernen von Ähnlichkeiten bekannt? Ta. –

+0

@NickP vielleicht brauchst du überhaupt keine "echte" ML. Ich würde zuerst mit einer String-Distanz-Metrik beginnen, zum Beispiel mit der Levenshtein-Distanz-Metrik (sehr häufig und leicht zu finden). Transformieren Sie Ihre Daten in positive und negative Beispiele (ein positives Beispiel: Acme ist eine Übereinstimmung mit Acme Corp). Die einfachste Lernfunktion wäre es, den Schwellenwert für Edit Distance zu finden, der Ihre Punktzahl maximiert. Sie können auch Parameter wie "Entfernen Corp.", "Remove Ltd" usw. hinzufügen und herausfinden, welche Kombination am besten funktioniert. Sie brauchen hier wahrscheinlich keine volle ML. –

+1

@NickP werfen Sie einen Blick auf die [Übersicht der Deduplizierungsbibliothek] (https://dedupe.readthedocs.io/en/latest/How-it-works.html) für eine Beschreibung der Verwendung von ML für dieses Problem – fgregg

Verwandte Themen