Technique d'apprentissage automatique pour l'apprentissage des modèles de cordes

11

J'ai une liste de mots, appartenant à différentes catégories auto-définies. Chaque catégorie a son propre motif (par exemple une a une longueur fixe avec des caractères spéciaux, une autre existe de caractères qui n'apparaissent que dans cette catégorie de "mot", ...).

Par exemple:

"ABC" -> type1
"ACC" -> type1
"a8 219" -> type2
"c 827" -> type2
"ASDF 123" -> type2
"123123" -> type3
...

Je recherche une technique d'apprentissage automatique pour apprendre ces modèles par elle-même, sur la base de données de formation. J'ai déjà essayé de définir certaines variables prédictives (par exemple la longueur des mots, le nombre de caractères spéciaux, ...) par moi-même, puis j'ai utilisé un Neural-Networks pour apprendre et prédire la catégorie. Mais ce n'est vraiment pas ce que je veux. Je veux une technique pour apprendre le motif de chaque catégorie par elle-même - même pour apprendre des motifs auxquels je n'ai jamais pensé.

Je donne donc l'algorithme des données d'apprentissage (consistant en des exemples de catégories de mots) et je veux qu'il apprenne des modèles pour chaque catégorie afin de prédire plus tard la catégorie à partir de mots similaires ou égaux.

Existe-t-il une manière de le faire de pointe?

Merci de votre aide

chresse
la source
De mon point de vue, vous pouvez faire un smth comme celui-ci cistrome.org/cr/images/Figure4.png , mais au lieu d'ACGT, vous pouvez utiliser des modèles tels que "nombre, majuscule, minuscule, espace", etc.
German Demidov
@GermanDemidov merci pour votre commentaire. j'ai déjà pensé à quelque chose comme ça. Mais je veux en fait que l'algorithme d'apprentissage le fasse seul et détecte les modèles. (Je ne sais pas si c'est possible pour ML).
chresse
en fait, ces modèles sont l'apprentissage automatique. Bien sûr, vous pouvez le faire avec l'apprentissage automatique, mais une personne doit d'abord extraire une fonctionnalité avant de la donner comme entrée à l'algorithme ML. Quelles fonctionnalités extrairez-vous de ces exemples? Je peux penser aux fonctions de hachage, mais cela fonctionnera assez mal pour les chaînes de longueur inégale. Donc, puisque vous trouverez un moyen d'extraire des fonctionnalités, vous pourrez utiliser des méthodes ML. Vous pouvez également faire un smth comme la distance de Levenshtein entre les symboles de différentes classes, les regrouper et utiliser la distance minimale aux centroïdes pour la classification.
Demidov allemand
@chresse, vous souhaiterez peut-être ajouter la balise d' apprentissage non supervisé à votre question. Pour ce faire avec des réseaux de neurones, ce document LeCun pourrait être intéressant. Comme je n'ai pas beaucoup d'expérience avec l'exploration de texte ou les réseaux de neurones, je ne peux pas dire à quel point cette approche pourrait être bonne.
GeoMatt22
1
Transformez donc vos vecteurs en utilisant les fonctionnalités que vous utilisez naturellement (u - majuscules, l - minuscules, n - nombre, s - espace), de sorte que vos vecteurs seront "ABC" - "uuu", "a8 219" - "lnsnnn" et ainsi sur. Ensuite, vous devez introduire une mesure de distance, par exemple, en utilisant cet algorithme: en.wikipedia.org/wiki/Smith –Waterman_algorithm. Après cela, vous pourrez effectuer une classification / clusterisation / visualisation de vos données.
Demidov allemand

Réponses:

6

Votre problème pourrait-il être reformulé comme voulant découvrir les expressions régulières qui correspondront aux chaînes de chaque catégorie? Il s'agit d'un problème de «génération de regex», un sous-ensemble du problème d' induction grammaticale (voir également le site Web d'Alexander Clark ).

Le problème de l'expression régulière est plus facile. Je peux vous indiquer le code frak et RegexGenerator . Le RegexGenerator ++ en ligne contient des références à leurs articles académiques sur le problème.

noircit
la source
5

Vous pouvez essayer des réseaux de neurones récurrents, où votre entrée est une séquence de lettres dans le mot et votre sortie est une catégorie. Cela correspond à vos besoins, de sorte que vous ne codez aucune fonctionnalité à la main.

Cependant, pour que cette méthode fonctionne, vous aurez besoin d'un ensemble de données d'entraînement assez volumineux.

Vous pouvez vous référer à l' étiquetage de séquences supervisées avec des réseaux de neurones récurrents par Alex Graves chapitre 2 pour plus de détails.

Ceci est un lien vers la préimpression

Arun Jose
la source
1
Pourriez-vous ajouter une citation complète pour votre référence finale, au cas où le lien "preprint.pdf" se briserait à l'avenir? (Je crois que c'est le chapitre pertinent?)
GeoMatt22