En la clasificación automática de documentos, ¿cómo trato con categorías en conflicto?

Dos pensamientos:

  1. Su enfoque parece un poco el aprendizaje automático a mano. Es genial tener la intuición y la capacidad de obtener resultados bastante buenos de esta manera, pero muchas personas han trabajado en la clasificación de documentos. Usar su trabajo le ahorrará mucho tiempo y dolores de cabeza. Parece que estás usando Python, por lo que te recomiendo scikit-learn: aprendizaje automático en Python. Puede cargar sus datos, estableciendo los recuentos de palabras como las variables X y la categoría como Y, y ver cómo funcionan los diversos algoritmos de aprendizaje supervisado en su tarea. No me sorprendería si un SVM lineal funciona bastante mejor.
  2. Los pesos de características a veces pueden ser muy importantes. Si está utilizando el recuento de palabras, considere cambiarlo a TF-IDF. Es posible que, dado que el “juego” se utilizará en muchas categorías diferentes y, por lo tanto, en muchos documentos, tendrá un bajo peso con TF-IDF. Eso alentará al algoritmo de aprendizaje a mirar otras palabras para obtener su información, lo que puede facilitar la clasificación si está utilizando ciertos tipos de clasificadores. Con otros tipos, esto no hará ninguna diferencia.

Honestamente, recomendaría transformar su corpus en un formato legible por Weka, MALLET o un clasificador SVM y probarlo en algunos algoritmos de aprendizaje automático estándar. Para MALLET, puede colocar cada documento en una línea, con una etiqueta de clase, y el clasificador hará el resto. Para Weka, sería necesaria una transformación de datos más complicada.

Además de eso, su selección de funciones es por frecuencia, que es demasiado simple. No sé si está utilizando una lista de palabras vacías, pero este es un paso de preprocesamiento extremadamente útil para filtrar palabras como of, the, that, do , etc.

En lugar de usar la frecuencia, sugeriría algún tipo de odds ratio o algo similar. Esto contrastaría las palabras probabilidad en una clase dada con la probabilidad en las otras clases.

Quizás calcular:

[matemática] Puntuación (w_i, clase \, j) = log {{Pr (w_i \ en clase \, j) \ over Pr (w_i \ in \ overline {class \, j})}} [/ math], donde [matemáticas] w_i [/ ​​matemáticas] es una palabra en el corpus.

Luego, podría sumar todos los puntajes de un documento individual, clasificarlos y elegir la clase que tenga el puntaje más alto. Hay varios problemas con este enfoque, uno de los cuales es que no hay ponderación.

Un mejor enfoque usaría n-gramos.

Sin embargo, como dije al principio, lograrás resultados mucho mejores simplemente usando un algoritmo de clasificación existente, quizás usando n- gramos como características. Sé que MALLET lo hará automáticamente, y el clasificador de Stanford (The Stanford NLP (Natural Language Processing) Group) probablemente también lo haga. (No lo recuerdo)

La respuesta está en los resultados de la prueba. ¿Qué tan grave es este problema? Lo que ha enumerado aquí es solo un problema de precisión y cualquier algoritmo de aprendizaje automático definitivamente tiene problemas de precisión.

La pregunta es si una solución para este documento específico es importante, y si es así, me temo que con la evidencia proporcionada aquí, la solución puede ser un exceso.