7

J'ai une base de données dans laquelle je stocke des données basées sur les trois champs suivants: id, texte, {labels}. Notez que chaque texte a été assigné à plus d'un label \ tag \ class. Je veux construire un modèle (weka \ rapidminer \ mahout) qui pourra recommander \ classifier un ensemble de labels \ tags \ classes dans un texte donné.Classification de document multi-étiquettes

J'ai entendu parler de SVM et Naive Bayes Classifier, mais je ne sais pas si elles supportent la classification multi-étiquettes ou non. Tout ce qui me guide dans la bonne direction est le bienvenu!

Répondre

1

SVM est un classificateur binaire par nature, mais il existe de nombreuses alternatives qui permettent de l'appliquer aux environnements multi-étiquettes, essentiellement en combinant plusieurs instances binaires de SVM.

Quelques exemples sont dans l'article SVM Wikipedia dans la section multi-classe. Je ne sais pas si vous êtes intéressé par les détails, mais ils sont inclus dans Weka et Rapidminer. Par exemple, le classificateur SMO est l'une des variantes permettant d'appliquer SVM à des problèmes multilabel. Naive Bayes peut être directement appliqué aux environnements multi-étiquettes.

+0

Je pense que vous confondez la classification multiclasse et multilabel. Dans le premier, chaque échantillon a une classe mais il y a plus de 2 possibilités; dans ce dernier, chaque échantillon peut appartenir à plusieurs classes simultanément. –

+0

OK, alors choisissons NB. Quels devraient être les attributs dans ce scénario? J'ai quelques idées à ce sujet, mais j'aimerais entendre la suggestion de quelqu'un qui a plus d'expérience que moi. – user2295350

+0

@larsmans Exactement. Ce que je demande est la classification multi-étiquettes, c'est-à-dire que chaque échantillon peut appartenir à plusieurs classes simultanément. – user2295350

4

La méthode de classification de base multilabel est un-contre-le-repos (OvR), également appelé pertinence binaire (BR). L'idée de base est que vous prenez un classificateur binaire standard, tel que Naive Bayes ou un SVM, puis créez K instances pour résoudre K des problèmes de classification indépendants. En Python-like pseudocode:

for each class k: 
    learner = SVM(settings) # for example 
    labels = [class_of(x) == k for x in samples] 
    learner.learn(samples, labels) 

Puis au moment de la prédiction, vous courez juste chacun des classificateurs binaires sur un échantillon et recueillir les étiquettes pour lesquelles ils permettent de prédire positif.

(la formation et la prévision peuvent évidemment se faire en parallèle, car les problèmes sont supposés indépendants. Voir Wikipedia pour les liens vers deux packages Java qui font la classification multi-étiquette.)

+1

Il y a beaucoup de possibilités pour aller au-delà une série de problèmes indépendants aussi. Par exemple, avec un classificateur probabiliste (régression logistique, disons), vous pouvez définir une distribution sur l'ensemble d'étiquettes résultant, par ex. un modèle de sujet ou MRF, et optimiser globalement. Je suis sûr que vous pourriez incorporer une idée similaire dans un SVM aussi en utilisant la méthode de Platt, ou un critère global discriminatif direct. –

+0

@BenAllison: bien sûr, mais je ne fais que souligner l'approche de base et un tas de boîtes à outils qui font des choses plus avancées. –

0

Pouvez-vous suggérer des outils qui sont des extensions de weka qui fait la classification multi-étiquette .

  1. MEKA: Une extension multi-étiquette WEKA
  2. Mulan: Une bibliothèque Java pour le multi-label apprentissage

Il y a aussi une extension de lib SVM SVMLib. Si vous êtes satisfait de paquets python, l'apprentissage scikit fournit également un pour Multi-label classification

En outre, cet article récent ICML 2013 « efficace classification multi-étiquettes avec de nombreuses marques » devrait vous aider à la mise en œuvre. Si vous voulez en implémenter un seul.