Je construis un catégoriseur de texte pour les phrases courtes. En plus de dire à l'utilisateur "la catégorie du texte que vous avez entré est C", je veux pouvoir expliquer pourquoi j'ai pris cette décision, de manière courte et compréhensible. Par exemple, je ne veux pas dire à l'utilisateur "J'ai mis votre phrase dans un réseau neuronal complexe à 3 couches et c'est la réponse qui a obtenu le meilleur score"; Je veux des explications telles que "Votre phrase contient les mots U, V et W, qui sont caractéristiques de cette catégorie, à cause des phrases telles que X, Y et Z qui sont apparues dans les données d'entraînement".
Ma question est: quels algorithmes de classification conviennent le mieux à une telle application?
k-plus-voisins semble être un bon candidat, car je peux dire à l'utilisateur "Votre phrase a la catégorie C car elle est similaire aux phrases X, Y et Z qui ont la même catégorie. Mais ses performances sur les problèmes de catégorisation de texte sont connues de être pauvre. Je cherche un classifie qui équilibre la performance avec la capacité d'explication.
EDIT: Après avoir passé beaucoup de temps à chercher un tel classificateur, j'ai commencé à construire une bibliothèque d'apprentissage automatique appelée limdu , qui permet aux classificateurs d'expliquer leurs décisions. Il est encore en cours de développement, mais il m'a déjà aidé à m'expliquer ainsi qu'à mes collègues pourquoi nos classificateurs échouent si souvent ...
la source
Réponses:
Bien qu'il exécute mal les tâches de classification de texte, si vous voulez une explication claire du raisonnement de classification, un arbre de décision serait votre meilleure option car il fournit des règles claires pour la façon dont une instance est classée. Une trace de l'arborescence fournirait les valeurs déterminantes et en analysant les instances proches du nœud racine, vous pourriez même être en mesure de déterminer quels attributs étaient plus importants dans la classification.
Une autre option serait d'utiliser un classificateur Naive Bayes , qui fonctionne mieux pour les tâches d'exploration de texte et vous donnerait un schéma d'évaluation compréhensible basé sur des probabilités que vous pourriez utiliser pour générer le "pourquoi" que vous recherchez, même en fournissant une indication de quelles valeurs d'attribut étaient plus importantes que d'autres dans la détermination.
Les machines à vecteurs de support , en particulier l'optimisation minimale séquentielle (SMO), semblent bien fonctionner avec ces tâches et fournissent également une indication des valeurs utilisées pour effectuer la classification sous la forme de poids d'attributs et de vecteurs de support, mais je pense que vous pouvez avoir plus de mal expliciter comment ces poids et vecteurs ont influencé la décision de classification globale.
Bonne chance pour votre projet! Cela semble très intéressant.
la source
Je me souviens vaguement que Peter Norvig avait une mise en œuvre de MYCIN , un système expert de diagnostic médical , écrit en LISP dans son livre Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp , qui a fait exactement cela.
C'est peut-être un bon endroit pour commencer vos recherches. Vous trouverez le code source en ligne, ainsi qu'une base de règles , cependant, je recommande fortement de lire le texte et de ne pas essayer de le comprendre uniquement à partir du code source.
Vous pouvez également vous diriger directement vers la page pour Emycin (mon accent),
la source