Vamos a resolverlo desde cero. La clasificación (también conocida como categorización) es un ejemplo de aprendizaje supervisado . En el aprendizaje supervisado tienes:
- modelo : algo que se aproxima a la estructura interna de sus datos, lo que le permite razonar al respecto y hacer predicciones útiles (por ejemplo, predecir la clase de un objeto); normalmente el modelo tiene parámetros que desea "aprender"
- conjuntos de datos de entrenamiento y prueba : conjuntos de objetos que usa para entrenar su modelo (encontrar buenos valores para los parámetros) y evaluar más
- algoritmos de entrenamiento y clasificación : primero describe cómo aprender el modelo del conjunto de datos de entrenamiento, segundo muestra cómo derivar la clase de un nuevo objeto dado el modelo entrenado
Ahora tomemos un caso simple de clasificación de spam. Su conjunto de datos de entrenamiento es un corpus de correos electrónicos + etiquetas correspondientes: "spam" o "no spam". El conjunto de datos de prueba tiene la misma estructura, pero está hecho de algunos correos electrónicos independientes (normalmente uno simplemente divide su conjunto de datos y hace, por ejemplo, que 9/10 se utilicen para capacitación y 1/10 para pruebas). Una forma de modelar correos electrónicos es representar cada uno de ellos como un conjunto (bolsa) de palabras. Si suponemos que las palabras son independientes entre sí, podemos usar el clasificador Naive Bayes , es decir, calcular las probabilidades previas para cada palabra y cada clase (algoritmo de entrenamiento) y luego aplicar el teorema de Bayes para encontrar la probabilidad posterior de que un nuevo documento pertenezca clase particular
Entonces, básicamente tenemos:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Ahora tenga en cuenta que representamos nuestros objetos (documentos) como una bolsa de palabras. Pero es la única manera? De hecho, podemos extraer mucho más del texto sin formato. Por ejemplo, en lugar de palabras tal como están, podemos usar sus tallos o lemas , tirar palabras de parada ruidosas , agregar etiquetas POS de palabras, extraer entidades con nombre o incluso explorar la estructura HTML del documento. De hecho, una representación más general de un documento (y, en general, cualquier objeto) es un vector de características . Por ejemplo, para el 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
Aquí la primera fila es una lista de características posibles y las filas posteriores muestran cuántas veces se produce esa característica en un documento. Por ejemplo, en el primer documento no hay palabras "actor", 1 palabra "quemar", 5 sustantivos, 2 adjetivos y 2 textos en negrita. La última columna corresponde a una etiqueta de clase resultante.
Usando el vector de características puede incorporar cualquier propiedad de sus textos. Aunque encontrar un buen conjunto de características puede llevar algo de tiempo.
¿Y qué hay del modelo y los algoritmos? ¿Estamos atados a los ingenuos Bayes? De ningún modo. regresión logística , SVM , árboles de decisión , solo por mencionar algunos clasificadores populares. (Tenga en cuenta que, en la mayoría de los casos, decimos "clasificador" nos referimos a modelos + algoritmos correspondientes para entrenamiento y clasificación).
En cuanto a la implementación, puede dividir la tarea en 2 partes:
- Extracción de características: transformación de textos sin formato en vectores de características.
- Clasificación de objetos: construcción y aplicación del modelo.
El primer punto está bien resuelto en muchas bibliotecas de PNL . El segundo es sobre el aprendizaje automático, por lo que, dependiendo de su conjunto de datos, puede usar Weka o MLlib .