Resumen de habilidades prácticas de clasificación de texto (trucos)

Directorio

 

Prólogo

Sobre el tokenizer

Sobre el vector de caracteres chinos

Si el conjunto de datos es muy ruidoso

Elija CNN o RNN para la línea de base? ¿La ruta sigue CNN o RNN?

¿Dónde se agrega Dropout?

Sobre la segunda categoría

Acerca de la clasificación de etiquetas múltiples

Qué hacer si la categoría no está equilibrada

No te enredes demasiado series

Todavía no uso trucos, pero solo quiero obtener un buen resultado.


Prólogo

Hace un año, Xiao Xi hizo esa pregunta sobre Zhihu

¿Hay algún truco en la clasificación de texto que rara vez se menciona en los documentos pero que tiene un impacto importante en el rendimiento?
Enlace: https://www.zhihu.com/question/265357659/answer/578944550

En ese momento, estaba cepillando una tarea más interesante, y descubrí que los trucos extraños pueden traer muchos beneficios de rendimiento. Además, para verificar una pequeña idea, ejecuté un conjunto de conjuntos de datos de clasificación de texto público. Aunque la idea no era muy brillante, acumulé y exploré muchos trucos para mejorar el rendimiento╮ ( ̄ ▽  ̄ "") ╭ Luego, pequeña En el seguimiento, utilicé estos trucos para cepillar muchos juegos relacionados (incluso si se trata de un problema especial de clasificación de texto, como la coincidencia de texto), descubrí que la línea de base + un montón de trucos + integración simple se puede cepillar casualmente al top10 de una competencia de agua de clasificación de texto. top3, siento la importancia de los ajustes y los trucos. Ran Ge, no he tenido el problema básico de la clasificación de texto durante mucho tiempo. Siento que casi lo he olvidado. Aunque todavía tengo un poco de memoria vaga, lo resolveré y lo compartiré con todos. Espero poder cepillar documentos sobre experimentos, concursos o proyectos reales. Brinde ayuda o inspiración. Primero, llegue a una conclusión, los trucos se usan bien y la afinación es maravillosa. TextCNN también puede colgar la mayoría de las campanas y silbatos del modelo profundo. Los trucos son inútiles, y el modelo SOTA también tiene un rendimiento deficiente, lo que te hace dudar de tu vida. No tiene sentido lo siguiente, no hay lógica para comenzar este artículo picante.

Sobre el tokenizer

Ya sea en chino o en inglés, lo inevitable cuando tomas el conjunto de datos es ver si quieres hacer la segmentación de palabras (algunos amigos piensan que el conjunto de datos en inglés no usa segmentación de palabras, es realmente un pato indefenso), si quieres hacerlo, Está a punto de luchar con la elección del tokenizer.

Passerby C: nuestra fábrica tiene una gama completa de tokenizadores que cuelgan todo tipo de tokenizadores de código abierto
Xiao Xi: Bueno, puedes bajar

En primer lugar, hay una pregunta. ** ¿Es realmente que cuanto más avanzado es el algoritmo, mejor es el rendimiento de la tarea posterior? ** Muchas personas ignorarán una cosa cuando lleguen a este paso, ** ¡Word vector! ! ! ** De hecho, en comparación con el grado avanzado del algoritmo de segmentación de palabras en sí mismo, en el contexto de redes neuronales que usan vectores de palabras previamente entrenados, ** ¡Asegurarse de que la granularidad de token coincida entre el segmentador de palabras y la tabla de vectores de palabras es realmente más importante! ** Después de todo, incluso si su puntaje de palabras es bueno, una vez que no esté en la tabla de vectores de palabras, se convertirá en OOV, e incluso se usará el mejor puntaje ╮ ( ̄ ▽  ̄ "") ╭ (a menos que no sea demasiado problema) Escriba un código para realizar un procesamiento especial en el OOV en relación con la tabla de vectores de palabras, de todos modos, generalmente me resulta problemático (╮ (╯ ▽ ╰) ╭), por lo que aquí hay dos casos. 1. **** Los tokenizadores de vectores de palabras pre-entrenados conocidos generalmente como el lanzamiento oficial de vectores de palabras pre-entrenados como word2vec, glove, fasttext publicarán la información del corpus de entrenamiento correspondiente, incluidas las estrategias de preprocesamiento como la segmentación de palabras, etc. Este es realmente el caso ¡No podría ser mejor, sin enredos, si decides usar un determinado vector de palabras, entonces usa el separador de palabras que se usó para entrenar el vector de palabras! El rendimiento de este tokenizador en tareas posteriores será mejor que otros tokenizadores beligerantes. 2. **** No conoce el tokenizer del vector de palabras pre-entrenado, entonces necesita "adivinar" el tokenizer. ¿Cómo adivinar? Primero, después de obtener la tabla de vectores de palabras previamente capacitada, vaya a buscar algunas palabras específicas, como algunos sitios web, buzones, modismos, nombres, etc., también están en inglésn'tEspere, vea qué granularidad usa el vector de palabras de entrenamiento para dividirlos, y luego ejecute algunos tokenizadores para ver qué granularidad está más cerca de él. Si no se preocupa, póngalo en la tarea aguas abajo. Corre y mira. Por supuesto, la situación ideal es, por supuesto, determinar la segmentación de palabras que sea más adecuada para el conjunto de datos de la tarea actual, y luego usar los vectores de palabras previamente entrenados producidos por la misma segmentación de palabras. Desafortunadamente, no hay tantas versiones de vectores de palabras abiertas en Internet para la selección, por lo que entrenar sus propios vectores de palabras en el conjunto de entrenamiento de tareas aguas abajo o una gran cantidad de cuerpos no supervisados ​​distribuidos de forma idéntica es obviamente más propicio para reducir aún más el rendimiento del modelo. Sin embargo, cómo pre-entrenar un vector de palabras útil para la tarea actual es suficiente para escribir un artículo. . No hablaré de eso aquí. Lo escribiré más tarde ~ (¡No presté atención a la atención de Xiao Xi!) Por supuesto, además del tokenizador y la tabla de vectores de palabras, también debe coincidir con el vector de caso y la definición de OOV. Mesa de partido. Si usa una tabla de vectores de palabras que distingue entre mayúsculas y minúsculas, pero también pone en minúsculas todas las palabras en las tareas posteriores, no lo piense, el rendimiento absoluto pierde más de N puntos porcentuales.

Sobre el vector de caracteres chinos

Passerby: Es problemático, no sé ninguna palabra, voy a usar vectores de palabras
Xiao Xi: No huyas ( ̄∇ ̄)

Si realmente utilizas el nivel de char como la fuerza principal, ¡no olvides pre-entrenar vectores de palabras en chino! Y recuerde abrir la ventana más grande durante el entrenamiento previo . No utilice el tamaño de ventana de nivel de palabra directamente. Otros hiperparámetros de entrenamiento previo se pueden ajustar fácilmente. Definitivamente es mejor que los vectores de palabras inicializados aleatoriamente.

Si el conjunto de datos es muy ruidoso

Hay dos casos donde el ruido es severo. Para el conjunto de datos D (X, Y), uno es que X tiene mucho ruido interno (por ejemplo, el texto es hablado o generado por la mayoría de los usuarios de Internet), y el otro es que Y es muy ruidoso (algunas muestras están marcadas por errores obvios, Es difícil para algunos muestreadores definir a qué categoría pertenecen, incluso con ambigüedad de categoría). Para el primer tipo de ruido , una idea natural es usar un modelo de lenguaje o corrección de texto basado en la distancia de edición. Sin embargo, debido a la existencia de sustantivos propios y "ruido falso" más allá de la imaginación en el ganso real, a menudo es efectivo en escenas reales. No muy bien Aquí generalmente hay dos ideas para Xiao Xi, una es cambiar directamente la entrada del modelo a nivel de caracteres (la granularidad de la palabra en chino), y luego entrenar desde cero (sin usar vectores de palabras previamente entrenados) para comparar con el nivel de palabras Ahora, si el efecto obvio del nivel de char es bueno, entonces, en poco tiempo, directamente basado en el nivel de char para hacer el pozo modelo ~ Si el rendimiento no es tan malo, o el char ya ha alcanzado la cabeza, ¿le gustaría hacer el nivel de palabra? ? No se preocupe, primero ayude a Xiao Xi a comprar una piruleta ( ̄∇ ̄), un trabajo muy útil, pero aparentemente no mucha gente encuentra truco para usar un hiperparámetro especial FastText para entrenar un vector de palabras. ¿Por qué es especial? En términos generales, el tamaño de la ventana de char ngram en texto rápido en inglés generalmente toma un valor de 3 a 6, pero cuando procesamos chino, si nuestro propósito es eliminar el ruido en la entrada, entonces podemos limitar esta ventana a 1 a 2, Este tipo de ventana pequeña es útil para que el modelo capture errores tipográficos (imagine que cuando escribimos una palabra incorrecta, generalmente le damos una de las palabras a otra palabra con la misma forma fonética), como la palabra reciente "parece" aprendida por word2vec Puede ser "como", pero es probable que las palabras recientes "parecidas" aprendidas por el texto rápido en la pequeña ventana de ngram sean palabras que contengan errores tipográficos internos, como "Yihu", de modo que las palabras compuestas por no demasiados errores tipográficos de repente Vuelva a reunirse, incluso en cierta medida, contra el ruido generado por el tokenizer (cortar una palabra en varias palabras). Por supuesto, si el conjunto de datos es muy limpio, entonces entrenar la palabra vector puede ser gg. Y para este último caso de ruido(Es decir, el ruido en Y), una idea muy directa es suavizar las etiquetas, pero Xiao Xi lo usó muchas veces en el combate real para descubrir que el efecto no es demasiado obvio. El resumen final del truco es: primero ignore este ruido, entrene a la fuerza el modelo lo mejor posible, y luego deje que el modelo entrenado ejecute el conjunto de entrenamiento y el conjunto de desarrollo, tome las muestras incorrectas en el conjunto de entrenamiento y las del conjunto de desarrollo con alta Muestras que toman decisiones equivocadas con confianza (como predecir una muestra con una etiqueta de 0 a 1 con un 99% de certeza), y luego hacen el análisis de estos casos negativos. Si se descubre que la etiqueta incorrecta tiene una fuerte regularidad, entonces directamente Use un script para hacer correcciones por lotes (solo asegúrese de que la tasa correcta de la etiqueta corregida sea significativamente mayor que antes de la corrección). Si no hay regularidad, pero se encuentra que la mayoría de las muestras con alta confianza en el modelo están etiquetadas incorrectamente, elimine estas muestras directamente ~ a menudo también puede obtener una pequeña mejora en el rendimiento, después de todo, el conjunto de prueba es manual Las muestras anotadas y difíciles y las muestras mal etiquetadas no serán demasiadas.

Elija CNN o RNN para la línea de base? ¿La ruta sigue CNN o RNN?

Realmente no se enrede demasiado con este problema en la clasificación de texto, personalmente prefiero CNN principalmente porque corro rápido. . . Es bueno realizar algunos experimentos más. Y la experiencia real considera que el modelo básico de CNN como TextCNN no solo es particularmente fácil de implementar, sino que también es fácil convertirse en una línea base sólida en un conjunto de datos (a menos que esta tarea de clasificación sea difícil), lleva una o dos horas hacer la línea base No es demasiado tarde para hacer otros modelos ~ También ayuda a corregir la dirección general temprano. Si desea hablar sobre el pensamiento objetivo y la toma de decisiones, tómese una hora para echar un buen vistazo al conjunto de datos ~ Si cree que muchos ngrams fuertes en el conjunto de datos pueden ayudar directamente a generar la decisión correcta, entonces comienza CNN. Si cree que muchos casos son del tipo que requiere leer una oración o incluso dos o tres veces para obtener la etiqueta correcta, entonces comienza RNN. Por supuesto, si los datos son grandes y hay una tarjeta gráfica, también puede probar Transformer. Si tiene más tiempo, también puede ejecutar los modelos CNN y RNN e integrarlos.

¿Dónde se agrega Dropout?

Después de la capa de incrustación de palabras, después de la capa de agrupación y después de la capa FC ** (capa totalmente conectada) **, oh. Las probabilidades de abandono en la etapa inicial siguen siendo las mismas, y es mejor ajustar el tiempo solo (nunca ha habido esta vez). En cuanto a la estrategia de abandono de palabras que algunas personas promocionan a veces (enmascarar algunos tokens al azar a [PAD], o 0. Tenga en cuenta que esta operación no es equivalente a agregar abandono a la capa de incrustación), y finalmente inténtelo si tiene tiempo. Cuando se ajusta el abandono, generalmente no juega mucho papel.

Sobre la segunda categoría

¿El problema de clasificación binaria debe usar sigmoide como la función de activación de la capa de salida? Por supuesto que no, prueba softmax con dos categorías. Es posible que haya una rama más con un poco más de información. Aunque esta última es un poco más fea en forma de matemáticas, en la práctica, a menudo trae algunos puntos de mejora. También es más metafísica.

Acerca de la clasificación de etiquetas múltiples

Si una muestra tiene varias etiquetas al mismo tiempo, e incluso las etiquetas también constituyen un DAG (gráfico acíclico dirigido), no se preocupe, primero use la entropía cruzada binaria para entrenar una línea base (es decir, convierta cada categoría en una clasificación binaria) Problema, este problema de clasificación de etiquetas múltiples de N categorías se convierte en N problemas de clasificación binaria), después de todo, esto tiene una API preparada en tensorflow, es decir, tf.nn.sigmoid_cross_entropy_with_logits. Por lo tanto, el costo de implementación es muy pequeño. Entonces, también puede sorprenderse gratamente descubrir que después de completar la línea de base, parece que el problema de las etiquetas múltiples no es grande, y el problema del DAG básicamente se ha resuelto por sí mismo (aunque la capa del modelo no trata específicamente este problema), y luego puede hacerlo con confianza. Que? ¿Se solucionó el problema? Verifique los documentos ╮ ( ̄ ▽  ̄ ””) ╭Xi Xi no ha sido expuesto a un conjunto de datos que es demasiado difícil a este respecto.

Qué hacer si la categoría no está equilibrada

Como dijo Internet, ¿usa rápidamente varias estrategias de aumento de muestreo y disminución de muestreo para usarlo? No, si la proporción de muestras positivas y negativas es de solo 9: 1, continúe haciendo su modelo profundo para ajustar sus hiperparámetros. Después de completar el modelo, encontrará que este desequilibrio no vale la pena mencionar al modelo, y el umbral de decisión no se utiliza en absoluto. Ajuste manual. Pero! Si! Si encuentra que un lote es a menudo una muestra de la misma categoría, o una muestra de algunas categorías es difícil de encontrar después de muchos lotes, el equilibrio es muy, muy necesario. Portal del problema de desequilibrio de categoría-> [Xiao Xi Seleccionado] Cómo resolver elegante y con estilo el problema de clasificación de desequilibrio

No te enredes demasiado series

  1. No se enrede demasiado acerca de si la longitud del truncamiento de texto es 120 o 150

  2. No se enrede demasiado con el pequeño aumento en el rendimiento del conjunto de desarrollo que brindan los hiperparámetros insensibles al rendimiento.

  3. No se enrede demasiado si la incrustación de palabras no registradas se inicializa en todos los 0 o se inicializa aleatoriamente, no comparta la incrustación con PAD.

  4. No se enrede demasiado con si el optimizador usa Adam o MomentumSGD. Si la relación con SGD no es profunda, entonces no hay Adam cerebral, y finalmente use MomentumSGD para ejecutarse algunas veces.

Todavía no uso trucos, pero solo quiero obtener un buen resultado.

BERT entiendo. Encima Esto es lo que recordaba por el momento. Los trucos restantes que recordaba se actualizarán a Zhihu, portal:

https://www.zhihu.com/question/265357659/answer/578944550

En otras palabras, Xiao Xi ha compartido tantos trucos con ustedes, queridos amigos, ¿hay algún truco secreto para compartir con Xiao Xi en el área de comentarios ( ̄∇ ̄)

Publicado 45 artículos originales · ganado elogios 2 · Vistas 5228

Supongo que te gusta

Origin blog.csdn.net/xixiaoyaoww/article/details/105460364
Recomendado
Clasificación