Estou construindo um categorizador de texto para frases curtas. Além de dizer ao usuário "a categoria do texto digitado é C", quero poder explicar por que tomei essa decisão, de uma maneira curta e compreensível. Por exemplo, não quero dizer ao usuário "Coloquei sua frase em uma complexa rede neural de três camadas e essa é a resposta que obteve a melhor pontuação"; Quero explicações como "Sua sentença contém as palavras U, V e W, características desta categoria, devido a sentenças como X, Y e Z que apareceram nos dados de treinamento".
Minha pergunta é: quais algoritmos de classificação são mais adequados para essa aplicação?
k-vizinhos mais próximos parece ser um bom candidato, porque posso dizer ao usuário "Sua sentença tem a categoria C porque é semelhante às sentenças X, Y e Z que têm a mesma categoria. Mas é conhecido por seu desempenho em problemas de categorização de texto. Estou à procura de uma classificação que equilibre desempenho com capacidade de explicação.
EDIT: Depois de passar muito tempo procurando por um classificador, comecei a construir uma biblioteca de aprendizado de máquina chamada limdu , que permite que os classificadores expliquem suas decisões. Ainda está em desenvolvimento, mas já me ajudou a explicar a mim e aos meus colegas por que nossos classificadores falham com tanta frequência ...
O objetivo do aprendizado de máquina é que você não se importa com o que acontece oculto, apenas se preocupa com o desempenho. A outra abordagem falhou, e é por isso que hoje em dia todo mundo usa essas abordagens estatísticas opacas - elas são muito melhores.
@Yuval Eu discordo completamente de que as outras abordagens falharam. Eles não são ótimos, mas ainda alcançam o objetivo de automatizar tarefas de classificação bem acima do que um ser humano tem a capacidade ou paciência para fazer. Caixas-pretas opacas não são a única maneira de efetivamente fazer aprendizado de máquina, especialmente em situações como essa em que o desempenho não é a única consideração. Seja um pouco mais aberto sobre as diversas metas por trás das tarefas de aprendizado de máquina.
Embora ele tenha um desempenho ruim nas tarefas de classificação de texto, se você desejar uma explicação clara do raciocínio de classificação, uma árvore de decisão seria sua melhor opção, pois fornece regras claras sobre como uma instância é classificada. Um rastreamento da árvore forneceria os valores determinantes e, analisando as instâncias próximas ao nó raiz, você poderá determinar quais atributos foram mais significativos na classificação.
Outra opção seria usar um classificador Naive Bayes , que funciona melhor em tarefas de mineração de texto e forneceria um esquema de avaliação compreensível com base nas probabilidades que você poderia usar para gerar o "porquê" que está procurando, fornecendo até uma indicação de quais valores de atributo foram mais importantes que outros na determinação.
As Máquinas de Vetor de Suporte , especificamente a Otimização Mínima Sequencial (SMO), parecem funcionar bem com essas tarefas e também fornecem indicação dos valores usados ​​para fazer a classificação na forma de pesos de atributo e vetores de suporte, mas acho que você pode ter mais dificuldade explicitando como esses pesos e vetores influenciaram a decisão geral de classificação.
Boa sorte com seu projeto! Parece muito interessante.
Obrigado. Também descobri que classificadores on-line, como perceptron e winnow, são muito bons nessa tarefa (pelo menos no meu cenário), e é fácil explicar a decisão observando o valor absoluto que cada recurso agrega à classificação. Para cada amostra, classifico os recursos de acordo com o valor absoluto de (recurso * peso) e mostro os primeiros.
Lembro-me vagamente de que Peter Norvig teve uma implementação do MYCIN , um sistema especialista em diagnóstico médico , escrito em LISP em seu livro Paradigmas de Programação de Inteligência Artificial: Estudos de Caso em Common Lisp , que fez exatamente isso.
Talvez seja um bom lugar para começar sua pesquisa. Você encontrará o código-fonte on - line, juntamente com uma base de regras , no entanto, recomendo a leitura do texto e não tente entendê-lo apenas a partir do código-fonte.
Você também pode ir diretamente à página da Emycin (minha ênfase),
Emycin é um shell de sistema especialista , uma estrutura para criar programas que registram o conhecimento de especialistas em domínio e usam esse conhecimento para ajudar usuários não especialistas a resolver problemas. Ele fornece uma interface que ajuda os especialistas a definir tipos e regras de dados, um algoritmo de raciocínio de cadeia reversa (semelhante ao Prolog, mas com diferenças importantes), um mecanismo para lidar com a incerteza e facilidades para introspecção que permitem aos usuários aprender o que o sistema sabe e o que está fazendo .
Há uma razão pela qual os sistemas especialistas não são mais muito populares, porém, é difícil codificar todas as regras.