2

Je suis relativement nouveau dans l'apprentissage automatique, j'ai déjà réalisé quelques projets en python. Je cherche des conseils sur la façon d'aborder le problème ci-dessous qui, je crois, pourrait être automatisé. Un utilisateur dans une équipe de qualité des données dans mon organisation a une tâche quotidienne de prendre une liste de noms de sociétés (avec des adresses) qui ont été saisis manuellement, il doit alors chercher une base de données de sociétés pour trouver le résultat correspondant, en utilisant son jugement - c.-à-d. pas de règle dure et rapide.Meilleure approche d'apprentissage automatique pour automatiser l'appariement texte/flou

Un exemple de l'entrée serait:

Nom de la société, Adresse Ligne 1, Pays

de cela, l'utilisateur prend le nom de l'entreprise et il entre dans l'outil de recherche. Où il est présenté avec une liste de résultats et il choisit le meilleur match, mais peut choisir de ne pas choisir n'importe quel match. L'outil de recherche est construit en interne et parle à une API externe, j'ai accès au code source afin que je puisse modifier l'outil de recherche pour capturer l'entrée, la liste des résultats, et je pourrais ajouter une case à cocher pour voir quel résultat a été utilisé , et une case à cocher pour signifier qu'aucun n'a été choisi. Par conséquent, cela deviendrait mes données d'entraînement étiquetées.

Les colonnes utilisées à partir des résultats pour rendre le jugement sont à peu près les mêmes:

Nom de la société, Adresse Ligne 1, Pays

Étant donné un nom de société comme Stack Overflow, les résultats peuvent retourner Stack Overflow Ltd ., Stacking Overflowing Shelves Ltd etc Les données d'entrée est raisonnablement bonne, de sorte que les résultats donnent généralement environ 10 matches, et pour un humain, il est assez évident lequel choisir. Je pense qu'avec suffisamment de données d'apprentissage, je pourrais appeler l'API directement avec le terme de recherche, puis choisir le résultat approprié dans la liste des résultats.

Est-ce quelque chose qui pourrait être atteint grâce à ML? Je me bats avec le fait que les données seront différentes à chaque fois. Les réflexions sur la meilleure façon d'y parvenir sont les bienvenues, en particulier comment structurer les données du modèle et quel type de classifieur utiliser.

+0

Cela ressemble plus à une correspondance floue qu'à une classification de texte. Vous obtiendrez probablement des résultats de classification ML médiocres en raison d'un grand nombre d'étiquettes, ce qui correspond à tous les noms d'entreprise que vous souhaitez associer. – aberger

+0

Merci, j'ai mis à jour la description.Je me demande s'il y a un moyen de donner les résultats d'un match flou en combinaison avec celui qui a été choisi pour l'améliorer. Il y a un peu de logique pour décider quel résultat prendre quand il y a des résultats similaires, ou multiples pour la même entreprise. Par exemple. ils prennent le siège social au-dessus de la branche d'une compagnie quand disponible, ce qui est signifié dans un autre domaine. –

+0

Je suppose que cela peut également être perçu comme un problème de classification binaire, où pour chaque paire de descriptions de sociétés, vous devez répondre si elles correspondent à la même entreprise ou non. Les distances Levenshtein, tfidf ou ngrams peuvent être utilisées comme caractéristiques. Même si la solution est aussi simple que de choisir un seuil dans la distance de Levenshtein, ou d'appliquer une combinaison de mots d'arrêt/stop, il serait toujours bon d'utiliser l'approche ML pour choisir cette valeur seuil et mesurer la qualité de la classification. – Dienow

Répondre

4

Pour encadrer un problème ML, vous pouvez apprendre une fonction de similarité. Au lieu de classer "Acme Corp" comme correspondant à la classe cible "Acme" (classifieur), vous apprendrez plutôt une fonction qui apprendra à dire que "Acme Corp" est similaire à "Acme", mais dissemblable à "ABC" Corp ". Ceci est généralement appelé "Apprentissage par similitude", dans votre cas, peut-être plus précisément "Apprentissage par similitude de classement" puisque votre objectif n'est pas d'apprendre une fonction qui produira une valeur de similarité, mais plutôt de classer les candidats potentiels. Mais avant d'utiliser des algorithmes ML complets, je commencerais par utiliser une métrique de distance de chaîne, par exemple la métrique de distance de Levenshtein (très commune et facile à trouver). Transformez vos données en exemples positifs et négatifs (un exemple positif: Acme correspond à Acme Corp). La fonction d'apprentissage la plus simple consisterait à trouver le seuil Modifier la distance qui maximise votre score. Vous pouvez également ajouter des paramètres comme: "supprimer Corp", "supprimer Ltd", etc. et trouver quelle combinaison fonctionne le mieux.

+0

Salut Pascal, cela ressemble au genre de chose que je suis après, je ne pense pas que vous avez vu un exemple décent de cela n'importe où avez-vous? Aussi, connaissez-vous de bonnes bibliothèques pour l'apprentissage des similitudes. Ta. –

+0

@NickP peut-être que vous n'avez pas besoin de "vraie" ML du tout. Je commencerais par utiliser une métrique de distance de corde, par exemple la métrique de distance de Levenshtein (très commune et facile à trouver). Transformez vos données en exemples positifs et négatifs (un exemple positif: Acme correspond à Acme Corp). La fonction d'apprentissage la plus simple consisterait à trouver le seuil Modifier la distance qui maximise votre score. Vous pouvez également ajouter des paramètres comme: "supprimer Corp", "supprimer Ltd", etc. et trouver quelle combinaison fonctionne le mieux. Vous n'avez probablement pas besoin de ML complet ici. –

+1

@NickP jetez un oeil à la [vue d'ensemble de la bibliothèque dedupe] (https://dedupe.readthedocs.io/en/latest/How-it-works.html) pour une description de la façon d'utiliser ML pour ce problème – fgregg