des idées sur les algorithmes d'apprentissage automatique pour classer les produits

7

J'ai une liste de produits, y compris des variables telles que le nom du produit (tel qu'il apparaît sur le reçu) et le commerçant où le produit a été acheté.

J'en ai une bonne partie classée manuellement dans un groupe fixe de catégories (par exemple les boissons alcoolisées, les légumes, la viande, etc.).

Les données sont, comme toujours, bruyantes. Dans ce cas, particulièrement bruyant car il provient de reçus scannés et l'OCR sur des scans pas si bons est généralement très bruyant.

Je veux jouer avec des algorithmes pour classer de nouvelles données, en utilisant les deux variables ci-dessus.

Il existe plusieurs sources principales de variation ici:

  • L'OCR, qui signifie qu'un produit (par exemple le poulet) peut être trouvé avec de nombreuses orthographes différentes mais relativement similaires (par exemple le poulet, le poulet, la chicane, ...).
  • Le même produit peut avoir des noms différents, selon le commerçant qui a vendu le produit. Dans ce cas, les noms peuvent être similaires ou complètement différents d'un commerçant à l'autre, mais plutôt similaires chez chaque commerçant.
  • Un même produit peut avoir des noms très différents chez le même commerçant (par exemple, des produits de marque dont le nom sur le reçu est le nom de la marque, par rapport aux noms génériques; boisson non alcoolisée par rapport au coca cola).

J'ai essayé un classificateur (un peu naïf), en utilisant par exemple la distance entre les cordes (qui aborde principalement la première source principale de variation mentionnée ci-dessus), mais je ne suis pas très satisfait des résultats.

Je voulais donc tendre la main ici pour demander des idées sur la façon de résoudre ce problème. Je suppose que beaucoup de gens ont "résolu" ou au moins travaillé beaucoup plus longtemps dans ce genre de problème que moi (quelques heures), donc j'apprécierais vraiment tout conseil ici.

Soit dit en passant, j'utilise principalement R, donc les solutions basées sur R seraient grandement appréciées.

elikesprogramming
la source
Cela peut être largement inexact, mais l'expression qui m'est venue à l'esprit pendant que je lisais ceci est «modèles de sujets structurés». Si cette méthode est tout à fait pertinente, il existe un package R pour cela, appelé stm.
lmo

Réponses:

2

Répondre à vos problèmes un par un:

1) OCR: C'est probablement le plus simple de vos problèmes car il existe de nombreux algorithmes qui fonctionnent bien dans cette tâche. À titre de référence, dans le jeu de données de chiffres manuscrits le plus connu, MNIST , plusieurs algorithmes ont atteint une précision de plus de 99,5% (l'état de l'art étant les réseaux de neurones à convolution). Vous pouvez également trouver de nombreuses solutions prêtes à l'emploi à votre problème; cela aide beaucoup si vos données sont en anglais, car les outils y sont plus avancés. Si vos numérisations sont bruyantes, vous pouvez d'abord essayer de les débruiter .

2) Vous devez effectuer un prétraitement pour ce problème. Je suggère d'abord, si possible, de créer un sac de mots , c'est-à-dire une liste de tous les mots uniques dans votre "corpus". Vérifiez que tous ces mots sont corrects et effectuez une comparaison de la distance des chaînes (par exemple la distance de hamming) pour corriger les fautes de frappe de 1 à 2 lettres. Une autre chose que je ferais serait de calculer les occurrences de chaque terme dans votre sac et de supprimer les moins fréquentes (par exemple, les termes qui apparaissent moins de N fois dans votre corpus sont probablement des fautes de frappe, ou supprimez le M moins fréquent de vos termes). Cela devrait réduire considérablement le bruit dans votre ensemble de données.

3) Afin de résoudre ce problème, vous devez effectuer une sorte d'étiquetage sémantique. Si vous connaissez les ontologies, leur structure hiérarchique peut beaucoup aider ici. Vous pouvez créer des règles comme "coca-cola" est une "boisson gazeuse" qui est un type de boisson, etc.

Je n'ai pas d'expérience en R, mais je suis sûr que vous pouvez trouver des outils pour effectuer tout ce qui précède assez facilement.

Djib2011
la source
0

Il semble que vous devez définir la similitude entre les entités.

Vous disposez de nombreuses sources de similitude. Vous avez mentionné la distance sur les noms (modifier la distance) et l'appartenance à des groupes. Notez que vous pouvez étendre la similitude par groupes à plusieurs groupes et à plusieurs types de similitudes. Les groupes peuvent appartenir à la même recette, vendus par le même marchand, appartenir à la même catégorie, etc. Les types de similarité peuvent être des avions appartenant au même groupe, un poids avec un rapport inverse à la taille du groupe, etc. Sur toutes les utilisations peut utiliser la transitivité. Par exemple, vous pouvez trouver des produits similaires de noms différents en utilisant le fait qu'ils seront utilisés avec les mêmes produits (par exemple, l'épice X` et l'épice X '' seront toutes deux utilisées avec du poulet).

Très bientôt, vous aurez de nombreuses relations de similitude et vous vous demanderez comment les combiner. Voici venir aider l'étiquetage que vous avez déjà fait. Prenez-les comme des paires positives de produits associés. Générez des ensembles de produits distincts (pas dans les paires positives) comme paires négatives. Construisez un ensemble de données dans lequel la positivité est le concept et les similitudes sont les paires. Vous pouvez maintenant utiliser un algorithme d'apprentissage supervisé pour obtenir un modèle qui combine les similitudes en une seule prédiction. Vous pouvez utiliser ce modèle pour prédire l'association entre une nouvelle paire. En prime, vous pourrez évaluer les performances du modèle sur l'ensemble de données (par exemple, l'exactitude, la précision, ...) et y avoir plus de certitude.

DaL
la source