Plusieurs étiquettes dans l'algorithme d'apprentissage supervisé

10

J'ai un corpus de texte avec un sujet correspondant. Par exemple "A rapper Tupac was shot in LA", il a été étiqueté comme ["celebrity", "murder"]. Donc, fondamentalement, chaque vecteur d'entités peut avoir plusieurs étiquettes (pas la même quantité. Le premier vecteur d'entités peut avoir 3 étiquettes, la seconde 1, la troisième 5).

Si je n'avais qu'une seule étiquette correspondant à chaque texte, j'essaierais un classificateur Naive Bayes , mais je ne sais pas vraiment comment procéder si je peux avoir plusieurs étiquettes.

Existe-t-il un moyen de transformer Naive Bayes en problème de classification multi-étiquettes (s'il existe une meilleure approche - veuillez me le faire savoir)?

PS peu de choses sur les données que j'ai.

  • environ 10 000 éléments dans l'ensemble de données
  • le texte est d'environ 2-3 phrases
  • maximum 7 étiquettes par texte
Salvador Dali
la source
@fordprefect Multinomial Naive Bayes utilise une distribution multinomiale pour les probabilités d'une caractéristique donnée une classe: . L'OP souhaite qu'un classificateur gère plusieurs sorties comme décrit TheGrimmScientist. p(fi|c)
Robert Smith

Réponses:

6

Pour commencer, Naive Bayes n'est probablement pas approprié ici. Il suppose l'indépendance parmi les entrées (d'où le "naïf") et les mots d'une phrase sont très dépendants.

Mais, en supposant que vous vouliez vraiment exécuter NB comme algorithme pour démarrer votre expérimentation, il y a deux options que j'envisagerais:

Ingrat: beaucoup de classificateurs NB

Ce serait une approche alternative. Faites un corupus de tous les mots observés comme vecteur d'entrées. Faites un corpus de toutes les balises observées comme vecteur de sorties. Un classificateur NB avec plusieurs sorties est l'équivalent d'avoir plusieurs classificateurs NB avec une sortie chacun (il en va de même pour ce qui est plus facile à implémenter dans le cadre logiciel que vous utilisez). Traitez chaque élément comme un échantillon d'apprentissage où une entrée donnée (un mot) est un 1si ce mot est présent et un 0si ce mot ne l'est pas. Utilisez le même schéma binaire pour la sortie.

Cette brute force l'application du classificateur NB à vos données et vous laisse trouver un sens en essayant toujours d'exploiter l'énorme ensemble de classificateurs qui vous restera.

Plus gracieux: traitez vos données

C'est l'approche que je recommanderais si vous souhaitez exécuter un classificateur NB à plusieurs classes.

Votre objectif ici est de comprendre comment mapper chaque ensemble de balises à une seule classe. Je suis sûr qu'il existe une sorte de schéma de clustering ou d'analyse de réseau (peut-être que ["célébrité"] liée à ["meurtre"] pourrait devenir un segment ["débauche"]) qui mappera sensiblement vos balises à un seul cluster. Si vous traitez les balises comme des nœuds et deux balises données ensemble comme des liens, alors vous voudrez examiner les algorithmes de détection de la communauté (c'est là que je commencerais). Mais, si vous voulez juste que quelque chose fonctionne, alors une sorte de piratage des balises qui convertit une liste de balises en la balise la plus courante dans votre ensemble de données suffira.

Cette méthode charge en amont le travail de nettoyage de vos données et rendrait la sortie du classificateur NB plus facile à comprendre.

TheGrimmScientist
la source
merci pour votre contribution, si vous avez une idée de ce qui serait mieux que NB, veuillez me le faire savoir.
Salvador Dali
1
la section "solutions existantes" de ce jeu de diapositives contient tout ce que je sais pour répondre, et plus encore (en supposant que vous n'avez pas besoin spécifiquement d'un classificateur et que vous voulez juste un moyen d'utiliser des balises). J'espère que cela vous est utile.
TheGrimmScientist
@TheGrimmScientist Ne serait-il pas raisonnable d'utiliser la première approche? Si vous avez un vecteur d'entités f1, f2, f3 et disons, 3 étiquettes pour ce vecteur, nous pouvons le partitionner en 3 vecteurs (contenant tous les mêmes caractéristiques f1, f2, f3) avec des étiquettes différentes en sortie. Ensuite, il est possible d'utiliser Naive Bayes comme d'habitude. Je ne sais pas si c'est ce que vous aviez en tête.
Robert Smith,