2012-10-18 1 views
6

Scikit-learn dispose de modules python conviviaux pour l'apprentissage automatique. J'essaie de former un étiqueteur SVM pour le traitement du langage naturel (PNL) où mes étiquettes et les données d'entrée sont des mots et des annotations. Par exemple. -Of-Speech partie de marquage, plutôt que d'utiliser des données à double/entier comme entrée tuples [[1,2], [2,0]], mes tuples ressembleront cette [['word','NOUN'], ['young', 'adjective']]Comment utiliser des étiquettes de chaînes non entières avec SVM à partir de scikit-learn? Python

Quelqu'un peut-il donner un exemple de la façon dont je peux utiliser le SVM avec tuples de chaîne? le tutoriel/la documentation donnés ici sont pour des entrées entières/doubles.

Répondre

12

processus algorithme La plupart de l'apprentissage automatique des échantillons d'entrée qui sont vecteur de flotteurs tels que un petit (souvent euclidienne) distance entre un paire d'échantillons signifie que les 2 échantillons sont similaire d'une manière qui est pertinente pour le problème à portée de main.

Il est de la responsabilité du praticien de l'apprentissage automatique de trouver un bon ensemble de caractéristiques flottantes à coder. Ce codage est spécifique au domaine. Il n'existe donc pas de manière générale de générer cette représentation à partir des données brutes qui fonctionneraient dans tous les domaines d'application (diverses tâches PNL, vision par ordinateur, analyse du journal des transactions ...). Cette partie du travail de modélisation d'apprentissage automatique est appelée extraction de caractéristiques. Quand cela implique beaucoup de travail manuel, ceci est souvent appelé ingénierie de caractéristiques.Maintenant, pour votre problème spécifique, les tags POS d'une fenêtre de mots autour d'un mot d'intérêt dans une phrase (par exemple pour le marquage de séquence comme la détection d'entité nommée) peuvent être codés de manière appropriée en utilisant DictVectorizer feature extraction helper class de scikit-learn.

+0

+1. Notez que pour le marquage POS, la fenêtre POS ne peut s'étendre que dans une direction. Une fenêtre de mots peut également donner de bonnes caractéristiques (au moins, ils fonctionnent bien pour NER et WSD), ainsi que des affixes de longueur fixe du mot considéré. –

4

Ce n'est pas vraiment une question de scikit ou de python, mais plutôt un problème général avec les SVM.

instances de données dans SVM doivent être représentés en tant que vecteurs de des scalaires sortes, généralement, les nombres réels. Les attributs catégoriels doivent donc d'abord être mappés à des valeurs numériques avant de pouvoir être inclus dans les SVM.

Certains attributs catégoriques se prêtent plus naturellement/logiquement à être mappés sur une certaine échelle (certains "métriques" lâches). Par exemple, un mappage (1, 2, 3, 5) pour un champ Priorité avec des valeurs de ('no rush', 'delivery standard', 'Urgent' et 'Most Urgent') peut avoir du sens. Un autre exemple peut être avec des couleurs qui peuvent être mappées en 3 dimensions chacune pour leurs composantes Rouge, Vert, Bleu, etc.
D'autres attributs n'ont pas de sémantique qui permet un mappage logique même approximatif sur une échelle; les différentes valeurs de ces attributs doivent ensuite recevoir une valeur numérique arbitraire sur une (ou plusieurs) dimension (s) du SVM. De manière compréhensible, si un SVM a beaucoup de ces dimensions arbitraires «non métriques», il peut être moins efficace de classer correctement les éléments, car les calculs de distance et la logique de cluster implicite au fonctionnement des SVM sont moins liés sémantiquement. Cette observation ne signifie pas que les SVM ne peuvent pas être utilisés lorsque les éléments incluent des dimensions non numériques ou non "métriques", mais il est certainement un rappel que la sélection des fonctions et le mappage des fonctions sont des paramètres très sensibles des classificateurs en général et SVM en particulier.

Dans le cas particulier du POS-tagging ... Je crains d'être bloqué en ce moment, sur les attributs du corpus étiqueté à utiliser et sur la façon de les mapper en valeurs numériques. Je sais que SVMTool peut produire des POS-taggers très efficaces, en utilisant des SVM, et aussi plusieurs articles scientifiques décrivent des étiqueteurs basés également sur des SVM. Cependant, je suis plus familier avec les autres approches de marquage (par exemple avec HMM ou Entropie maximum.)

Questions connexes