Vamos trabalhar a partir do zero. A classificação (também conhecida como categorização) é um exemplo de aprendizado supervisionado . No aprendizado supervisionado, você tem:
- modelo - algo que aproxima a estrutura interna dos seus dados, permitindo que você raciocine sobre ele e faça previsões úteis (por exemplo, prever a classe de um objeto); normalmente o modelo possui parâmetros que você deseja "aprender"
- conjuntos de dados de treinamento e teste - conjuntos de objetos que você usa para treinar seu modelo (encontrar bons valores para parâmetros) e avaliar melhor
- algoritmos de treinamento e classificação - primeiro descreve como aprender o modelo a partir do conjunto de dados de treinamento, o segundo mostra como derivar a classe de um novo objeto, dado o modelo treinado
Agora vamos dar um exemplo simples de classificação de spam. Seu conjunto de dados de treinamento é um conjunto de e-mails + marcadores correspondentes - "spam" ou "sem spam". O conjunto de dados de teste tem a mesma estrutura, mas é produzido a partir de alguns emails independentes (normalmente, um deles apenas divide seu conjunto de dados e faz, por exemplo, 9/10 deles para uso em treinamento e 1/10 - para teste). Uma maneira de modelar e-mails é representar cada um deles como um conjunto de palavras. Se assumirmos que as palavras são independentes umas das outras, podemos usar o classificador Naive Bayes , ou seja, calcular probabilidades anteriores para cada palavra e cada classe (algoritmo de treinamento) e aplicar o teorema de Bayes para encontrar a probabilidade posterior de um novo documento pertencer a classe particular.
Então, basicamente, temos:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Agora observe que representamos nossos objetos (documentos) como um saco de palavras. Mas é o único caminho? De fato, podemos extrair muito mais do texto bruto. Por exemplo, em vez de palavras como é, podemos usar suas hastes ou lemas , lançar palavras barulhentas , adicionar tags POS de palavras, extrair entidades nomeadas ou até explorar a estrutura HTML do documento. De fato, a representação mais geral de um documento (e, em geral, qualquer objeto) é um vetor de recurso . Por exemplo, para texto:
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
Aqui a primeira linha é uma lista de recursos possíveis e as linhas subseqüentes mostram quantas vezes esse recurso ocorre em um documento. Por exemplo, no primeiro documento, não há ocorrências da palavra "ator", 1 ocorrência da palavra "queimadura", 5 substantivos, 2 adjetivos e 2 partes de texto em negrito. A última coluna corresponde a um rótulo de classe resultante.
Usando o recurso vector, você pode incorporar quaisquer propriedades dos seus textos. Embora encontrar um bom conjunto de recursos possa levar algum tempo.
E o modelo e algoritmos? Estamos ligados a Naive Bayes. De modo nenhum. regressão logística , SVM , árvores de decisão - apenas para mencionar alguns classificadores populares. (Observe que dizemos "classificador" na maioria dos casos, queremos dizer modelo + algoritmos correspondentes para treinamento e classificação).
Quanto à implementação, você pode dividir a tarefa em 2 partes:
- Extração de recursos - transformando textos brutos em vetores de recursos.
- Classificação de objetos - construindo e aplicando modelo.
O primeiro ponto é bem elaborado em muitas bibliotecas de PNL . O segundo é sobre aprendizado de máquina; portanto, dependendo do seu conjunto de dados, você pode usar o Weka ou o MLlib .