Estoy trabajando en un proyecto de clasificación de textos en el que tenemos cientos de clases (desequilibradas). Algunas características de los datos:
- Tenemos ejemplos de documentos "malos". Básicamente, documentos que no llenan ninguna otra clase. Podemos eliminarlos.
- Los documentos son pequeños (< 100 caracteres).
- Los documentos son muy similares dentro de la misma clase, pero muy diferentes entre las distintas clases. La única excepción es la clase "mala", que contiene documentos aleatorios con un vocabulario muy diverso.
- La clase más frecuente tiene alrededor de 30k observaciones (es la clase "mala") y otras podrían tener menos de un centenar. La mayoría de ellas en los miles
- Las frecuencias de las clases son para todos los datos (330k observaciones), pero no están etiquetadas. Hemos estimado estas frecuencias con la agrupación.
El modo de proceder fue tomar una muestra de observaciones de cada grupo y etiquetarlas. Las muestras son proporcionales al tamaño del cluster. Así, obtuvimos 133 clases, donde la clase más frecuente tiene 3k observaciones y la clase minoritaria tiene 10 observaciones.
Esto supuso un rendimiento muy reducido para las clases minoritarias, incluso teniendo en cuenta que tienen un vocabulario propio muy específico (f1-micro 0,79, f1-macro 0,23).
He visto en otros hilos algunos consejos que no parecen aplicables a mi caso. A saber:
- Sobremuestreo, submuestreo, smote : No estoy utilizando OvA ni OvO, sino una regresión logística multinomial. La razón más importante es que tengo demasiadas clases para esos métodos. Pero incluso si pudiera utilizar estos enfoques, eso significaría cambiar la distribución de las etiquetas en el conjunto de entrenamiento. Veo que en el caso de la clasificación binaria podemos ajustar el umbral de predicción, pero no veo cómo funcionaría eso para las clases múltiples.
- Cambio de la métrica de rendimiento : Ya lo estoy haciendo, pero no cambia el hecho de que las clases minoritarias tienen un mal rendimiento. Esto es menos malo cuando eliminamos los documentos "malos". Pero cuando están ahí, el rendimiento de estas clases pequeñas empeora, ya que el gran grupo "malo" comparte un poco de vocabulario por casualidad.
- Ponderación : El mismo problema que antes.
- Refuerzo, árboles de decisión no es bueno para este tipo de datos. Estoy utilizando la representación tf-idf. No uso incrustaciones preentrenadas porque el vocabulario es muy específico.