Dado que está considerando un clasificador basado en reglas (¿ tal vez para la determinación de la intención de la pregunta ?), ¿Parece que hay pocos patrones de plantilla en los datos que se pueden capturar en expresiones o plantillas regulares codificadas a mano?
Si ese es el caso, ¿no podemos intentar escribir un clasificador basado en reglas para generar primero datos etiquetados y luego usarlo para entrenar un modelo de secuencia (por ejemplo, LSTM. Keras, por ejemplo, tiene un LSTM bidireccional en su conjunto de ejemplo que podemos probar). La generación de datos etiquetados puede ser una mejor opción que la creación manual de datos etiquetados: podríamos tener más datos de capacitación.
Esto suena como una pésima solución porque sugiere hacer ambas cosas, pero puede tener los siguientes beneficios
- ¿Cuál es la diferencia entre derivada de una función o pendiente de gradiente?
- ¿Para qué se puede utilizar el análisis de la marcha?
- ¿Qué significa el espacio de hipótesis en Machine Learning?
- ¿El aprendizaje supervisado se usa más?
- ¿Es una red neuronal completamente conectada igual a una red neuronal de retroalimentación?
- Incluso si los patrones que capturamos mediante el uso de reglas no son exhaustivos, es probable que el modelo de aprendizaje automático sea tan bueno, si no mejor, que el sistema basado en reglas por las siguientes razones
- Incluso si los datos de entrenamiento no son muchos, suponiendo que los patrones para clasificar sean suficientes, el modelo se puede hacer para memorizar / sobreajustar. Esta sigue siendo una mejor opción que la codificación manual para todos los patrones a lo largo del tiempo.
- Suponiendo que surja un nuevo patrón invisible, es probable que el sistema basado en reglas se rompa de todos modos. Suponiendo que el modelo también se rompa (puede que no, puede generalizarse), solo necesitamos generar más casos de ese tipo y entrenar al modelo para que se ajuste nuevamente.
- En el caso basado en reglas, agregar un nuevo patrón puede romper potencialmente los patrones existentes: el modelo de máquina no tiene este problema porque puede memorizar (incluso si no se generaliza)
- Con el tiempo, a medida que aumentan los datos de capacitación, el modelo puede comenzar a generalizarse. Un sistema basado en reglas, en contraste, solo es probable que se rompa con más casos con el tiempo.
Aquí hay un resumen de sugerencias para probar en este experimento.
- Escribamos un clasificador basado en reglas para generar datos etiquetados.
- Luego inspeccionamos que es correcto.
- Nos dividimos en validación de entrenamiento y datos de prueba (digamos 60/20/20)
- Asegurémonos de tener la misma cantidad de casos de capacitación para aprender en cada clase.
- Una cosa que podría ayudar es crear datos de entrenamiento con entidades nombradas reemplazadas por token . Esto supone que la clasificación no depende de la estructura de la oración y no se utilizan entidades nombradas específicas.
- La precisión del modelo puede mejorar si representamos palabras como incrustaciones. Para esto, solo genere incrustaciones de palabras usando fasttext (mejor que word2vec para casos fuera del vocabulario) y represente las palabras como incrustaciones como entrada para modelar
- Keras tiene un LSTM bidireccional que podemos usar para este experimento. Es posible que tengamos que modificarlo un poco para agregar incrustaciones como entrada de palabras, y también agregar código para la persistencia del modelo entrenado usando h5py. Esto es muy útil para cargar un modelo existente que generamos.