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
machine-learning
text-mining
Salvador Dali
la source
la source
Réponses:
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
1
si ce mot est présent et un0
si 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.
la source