Trouvons-le à partir de zéro. La classification (également connue sous le nom de catégorisation) est un exemple d' apprentissage supervisé . En apprentissage supervisé, vous avez:
- modèle - quelque chose qui se rapproche de la structure interne de vos données, vous permettant de raisonner à ce sujet et de faire des prédictions utiles (par exemple prédire la classe d'un objet); normalement le modèle a des paramètres que vous voulez "apprendre"
- formation et test des jeux de données - ensembles d'objets que vous utilisez pour former votre modèle (trouver de bonnes valeurs pour les paramètres) et évaluer plus en détail
- algorithmes de formation et de classification - décrit d'abord comment apprendre le modèle à partir d'un ensemble de données de formation, le second montre comment dériver la classe d'un nouvel objet à partir d'un modèle formé
Prenons maintenant un cas simple de classification des spams. Votre jeu de données de formation est un corpus d'e-mails + étiquettes correspondantes - "spam" ou "non spam". Le jeu de données de test a la même structure, mais fait à partir de quelques e-mails indépendants (normalement on divise simplement son jeu de données et en fait, disons, 9/10 pour être utilisé pour la formation et 1/10 - pour le test). Une façon de modéliser les e-mails consiste à représenter chacun d'eux comme un ensemble (sac) de mots. Si nous supposons que les mots sont indépendants les uns des autres, nous pouvons utiliser le classificateur Naive Bayes , c'est-à-dire calculer les probabilités antérieures pour chaque mot et chaque classe (algorithme d'apprentissage), puis appliquer le théorème de Bayes pour trouver la probabilité postérieure d'appartenance à un nouveau document. classe particulière.
Donc, fondamentalement, nous avons:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Notez maintenant que nous avons représenté nos objets (documents) comme un sac de mots. Mais est-ce le seul moyen? En fait, nous pouvons extraire beaucoup plus de texte brut. Par exemple, au lieu de mots tels quels , nous pouvons utiliser leurs tiges ou lemmes , jeter des mots vides , ajouter des balises POS de mots, extraire des entités nommées ou même explorer la structure HTML du document. En fait, une représentation plus générale d'un document (et, en général, de n'importe quel objet) est un vecteur caractéristique . Par exemple pour le texte:
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
Voici la première ligne est une liste des fonctionnalités possibles et les lignes suivantes montrent combien de fois cette fonctionnalité se produit dans un document. Par exemple, dans le premier document, il n'y a aucune occurrence du mot "acteur", 1 occurrence du mot "burn", 5 noms, 2 adjectifs et 2 morceaux de texte en gras. La dernière colonne correspond à une étiquette de classe résultante.
En utilisant le vecteur de fonction, vous pouvez incorporer toutes les propriétés de vos textes. Bien que trouver un bon ensemble de fonctionnalités puisse prendre un certain temps.
Et qu'en est-il du modèle et des algorithmes? Sommes-nous liés à Naive Bayes. Pas du tout. régression logistique , SVM , arbres de décision - pour ne citer que quelques classificateurs populaires. (Notez que nous disons "classificateur" dans la plupart des cas, nous entendons modèle + algorithmes correspondants pour la formation et la classification).
Quant à la mise en œuvre, vous pouvez diviser la tâche en 2 parties:
- Extraction de fonctionnalités - transformation de textes bruts en vecteurs de fonctionnalités.
- Classification d'objets - construction et application d'un modèle.
Le premier point est bien élaboré dans de nombreuses bibliothèques PNL . La seconde concerne l'apprentissage automatique, donc, selon votre jeu de données, vous pouvez utiliser Weka ou MLlib .