Todos los sistemas modernos de moderaci贸n utilizan
crowdsourcing o aprendizaje autom谩tico que ya se ha convertido en un cl谩sico. En el pr贸ximo entrenamiento de ML en Yandex, Konstantin Kotik, Igor Galitsky y Alexey Noskov hablaron sobre su participaci贸n en el concurso para la identificaci贸n masiva de comentarios ofensivos. La competencia se llev贸 a cabo en la plataforma Kaggle.
- Hola a todos! Mi nombre es Konstantin Kotik, soy cient铆fico de datos en la compa帽铆a Button of Life, estudiante del departamento de f铆sica y de la Escuela de Graduados de Negocios de la Universidad Estatal de Mosc煤.
Hoy, nuestros colegas, Igor Galitsky y Alexei Noskov, le informar谩n sobre la competencia del Desaf铆o de clasificaci贸n de comentarios t贸xicos, en la que nuestro equipo DecisionGuys ocup贸 el d茅cimo lugar entre 4551 equipos.
Una discusi贸n en l铆nea de temas que nos importan puede ser dif铆cil. Los insultos, la agresi贸n y el acoso que ocurren en l铆nea a menudo obligan a muchas personas a abandonar la b煤squeda de varias opiniones apropiadas sobre temas que les interesan, a negarse a expresarse.
Muchas plataformas luchan por comunicarse efectivamente en l铆nea, pero esto a menudo lleva a muchas comunidades a simplemente cerrar los comentarios de los usuarios.
Un equipo de investigaci贸n de Google y otra compa帽铆a est谩n trabajando en herramientas para ayudar a mejorar la discusi贸n en l铆nea.
Uno de los trucos en los que se centran es explorar comportamientos negativos en l铆nea, como comentarios t贸xicos. Estos son comentarios que pueden ser ofensivos, irrespetuosos o simplemente obligar al usuario a abandonar la discusi贸n.

Hasta la fecha, este grupo ha desarrollado una API p煤blica que puede determinar el grado de toxicidad de un comentario, pero sus modelos actuales a煤n cometen errores. Y en esta competencia, nosotros, los Kegglers, fuimos desafiados a construir un modelo que fuera capaz de identificar comentarios que contengan amenazas, odio, insultos y similares. E idealmente, este modelo deb铆a ser mejor que el modelo actual para su API.
Tenemos la tarea del procesamiento de texto: identificar y luego clasificar los comentarios. Como ejemplos de entrenamiento y prueba, se proporcionaron comentarios de las p谩ginas de discusi贸n de Wikipedia. Hubo alrededor de 160 mil comentarios en el tren, 154 mil en la prueba.

La muestra de entrenamiento se marc贸 de la siguiente manera. Cada comentario tiene seis etiquetas. Las etiquetas toman el valor 1 si el comentario contiene este tipo de toxicidad, 0 de lo contrario. Y puede ser que todas las etiquetas sean cero, un caso de comentario adecuado. O puede ser que un comentario contenga varios tipos de toxicidad, inmediatamente una amenaza y obscenidad.
Debido al hecho de que estamos en el aire, no puedo demostrar ejemplos espec铆ficos de estas clases. Con respecto a la muestra de prueba, para cada comentario fue necesario predecir la probabilidad de cada tipo de toxicidad.
La m茅trica de calidad es el AUC ROC promediado sobre los tipos de toxicidad, es decir, la media aritm茅tica del AUC ROC para cada clase por separado.

Aqu铆 est谩 la distribuci贸n de objetos por clases en el conjunto de entrenamiento. Se puede ver que los datos est谩n muy desequilibrados. Debo decir de inmediato que nuestro equipo calific贸 en una muestra de m茅todos para trabajar con datos desequilibrados, por ejemplo, sobremuestreo o submuestreo.

Cuando constru铆 el modelo, utilic茅 un preprocesamiento de datos en dos etapas. La primera etapa es el preprocesamiento b谩sico de los datos, estas son las transformaciones de la vista en la diapositiva, esto est谩 llevando el texto a min煤sculas, eliminando enlaces, direcciones IP, n煤meros y signos de puntuaci贸n.

Para todos los modelos, se utiliz贸 este preprocesamiento de datos b谩sico. En la segunda etapa, se llev贸 a cabo un preprocesamiento parcial de los datos, reemplazando los emoticones con las palabras correspondientes, descifrando abreviaturas, corrigiendo errores tipogr谩ficos, llevando los diferentes tipos de tapetes a la misma forma y tambi茅n eliminando im谩genes. En algunos comentarios, se indicaron enlaces a im谩genes, simplemente los eliminamos.
Para cada uno de los modelos, se utiliz贸 el preprocesamiento parcial de datos y sus diversos elementos. Todo esto se hizo para que los modelos base redujeran la correlaci贸n cruzada entre los modelos base al construir una composici贸n adicional.
Pasemos a la parte m谩s interesante: construir un modelo.
Inmediatamente abandon茅 el enfoque cl谩sico de la bolsa de palabras. Debido al hecho de que en este enfoque cada palabra es un atributo separado. Este enfoque no tiene en cuenta el orden general de las palabras; se supone que las palabras son independientes. En este enfoque, la generaci贸n del texto ocurre de modo que haya cierta distribuci贸n en las palabras, una palabra se selecciona aleatoriamente de esta distribuci贸n y se inserta en el texto.
Por supuesto, hay procesos generativos m谩s complejos, pero la esencia no cambia: este enfoque no tiene en cuenta el orden general de las palabras. Puede ir a engramas, pero solo se tendr谩 en cuenta el orden de las palabras en la ventana, y no en general. Por lo tanto, tambi茅n entend铆 a mis compa帽eros de equipo que necesitaban usar algo m谩s inteligente.

Lo primero que se me ocurri贸 fue usar una representaci贸n vectorial con Doc2vec. Este es Word2vec m谩s un vector que tiene en cuenta la unicidad de un documento en particular. En el art铆culo original, este vector se llama como el p谩rrafo id.
Luego, de acuerdo con dicha representaci贸n vectorial, se estudi贸 la regresi贸n log铆stica, donde cada documento estaba representado por un vector de 10.000 dimensiones. La evaluaci贸n de calidad se realiz贸 en una validaci贸n cruzada de diez pliegues, se estratific贸 y es importante tener en cuenta que la regresi贸n log铆stica se estudi贸 para cada clase, seis problemas de clasificaci贸n se resolvieron por separado. Y al final, el resultado fue una distribuci贸n de probabilidad por clase.
La regresi贸n log铆stica ha sido entrenada durante mucho tiempo. Generalmente no encajaba en la RAM. En las instalaciones de Igor, pasaron un d铆a en alg煤n lugar para obtener el resultado, como en una diapositiva. Por esta raz贸n, de inmediato nos negamos a usar Doc2vec debido a las altas expectativas, aunque podr铆a mejorarse en 1000 si se hiciera un comentario con preprocesamiento de datos adicional.

Los m谩s inteligentes que nosotros y los otros competidores usamos fueron redes neuronales recurrentes. Reciben secuencialmente palabras en la entrada, actualizando su estado oculto despu茅s de cada palabra. Igor y yo usamos la red recurrente GRU para la incorporaci贸n de palabras en fastText, que es especial porque resuelve muchos problemas de clasificaci贸n binaria independientes. Predecir la presencia o ausencia de la palabra de contexto de forma independiente.
Tambi茅n realizamos una evaluaci贸n de calidad en la validaci贸n cruzada de diez pliegues, no se estratific贸 aqu铆, y aqu铆 la distribuci贸n de probabilidad se obtuvo inmediatamente por clase. Cada problema de clasificaci贸n binaria no se resolvi贸 por separado, pero se gener贸 inmediatamente un vector de seis dimensiones. Fue nuestro uno de los mejores modelos individuales.
Usted pregunta, 驴cu谩l fue el secreto del 茅xito?

Consist铆a en mezclar, hab铆a mucho, con apilamiento y redes en el enfoque. El enfoque de redes debe representarse como un gr谩fico dirigido.

Al comienzo de la competencia, el equipo de DecisionGuys estaba formado por dos personas. Luego, Pavel Pleskov, en el canal ODS Slack, expres贸 el deseo de querer formar un equipo con alguien del top 200. En ese momento est谩bamos en alg煤n lugar en el lugar 157, y Pavel Pleskov en el lugar 154, en alg煤n lugar del vecindario. Igor not贸 su deseo de unirse, y lo invit茅 al equipo. Entonces Andrey Litvinov se uni贸 a nosotros, luego Pavel invit贸 al Gran Maestro Alexei Noskov a nuestro equipo. Igor - Eugene. Y el 煤ltimo socio de nuestro equipo fue el b煤lgaro Atanas Atanasov, y este fue el resultado de un conjunto internacional humano.
Ahora Igor Galitsky contar谩 c贸mo ense帽贸 gru, con m谩s detalle hablar谩 sobre las ideas y enfoques de Pavel Pleskov, Andrei Litvinov y Atanas Atanasov.
Igor Galitsky:
- Soy cient铆fico de datos en Epoch8, y hablar茅 sobre la mayor铆a de las arquitecturas que utilizamos.

Todo comenz贸 con el gru帽ido didireccional est谩ndar con dos capas, casi todos los equipos lo usaron, y fastText, la funci贸n de activaci贸n EL, se us贸 como incrustaci贸n.
No hay nada especial que decir, arquitectura simple, sin lujos. 驴Por qu茅 nos dio tan buenos resultados con los que nos mantuvimos en el top 150 durante bastante tiempo? Tuvimos un buen preprocesamiento del texto. Era necesario seguir adelante.

Paul tuvo su propio enfoque. Despu茅s de mezclarse con la nuestra, esto dio un aumento significativo. Antes de eso, ten铆amos una mezcla de gru y modelo en Doc2vec, dio 61 LB.

Te contar茅 sobre los enfoques de Atanas Atanasov, 茅l es directamente un entusiasta de cualquier art铆culo nuevo. Aqu铆 est谩 gru con atenci贸n, todos los par谩metros en la diapositiva. Ten铆a muchos enfoques realmente geniales, pero hasta el 煤ltimo momento us贸 su preprocesamiento y todas las ganancias se nivelaron. Velocidad en el tobog谩n.

Luego hubo una atenci贸n jer谩rquica, mostr贸 resultados a煤n peores, ya que inicialmente era una red para clasificar documentos que constaban de oraciones. Lo jodi贸, pero el enfoque no es muy.

Hubo un enfoque interesante, inicialmente podemos obtener caracter铆sticas de la oferta desde el principio y desde el final. Con la ayuda de convoluci贸n, capas convolucionales, obtenemos entidades por separado a la izquierda y a la derecha del 谩rbol. Esto es desde el principio y el final de la oraci贸n, luego se fusionan y nuevamente pasan por gru.

Tambi茅n Bi-GRU con bloque de atenci贸n. Este es uno de los mejores en privado fue una red bastante profunda, mostr贸 buenos resultados.

El siguiente enfoque es resaltar las caracter铆sticas tanto como sea posible. Despu茅s de la capa de la red recurrente, hacemos tres capas paralelas m谩s de convoluci贸n. Y aqu铆 tomamos oraciones no tan largas, las redujimos a 250, pero debido a tres convoluciones esto dio un buen resultado.

Fue la red m谩s profunda. Como dijo Atanas, solo quer铆a ense帽ar algo grande e interesante. Una cuadr铆cula convolucional ordinaria que aprendi贸 de las caracter铆sticas del texto, los resultados no son nada especial.

Este es un enfoque nuevo bastante interesante, en 2017 hubo un art铆culo sobre este tema, se us贸 para ImageNet y all铆 nos permiti贸 mejorar el resultado anterior en un 25%. Su caracter铆stica principal es que se lanza una peque帽a capa paralela al bloque convolucional, que ense帽a los pesos para cada convoluci贸n en este bloque. Ella dio un enfoque muy bueno, a pesar de cortar las oraciones.
El problema es que la longitud m谩xima de las oraciones en estas tareas alcanz贸 las 1.500 palabras, hubo comentarios muy grandes. Otros equipos tambi茅n pensaron en c贸mo aprovechar esta gran oferta, c贸mo encontrarla, porque no todo est谩 muy presionado. Y muchos dijeron que al final de la oraci贸n hab铆a un infante muy importante. Desafortunadamente, en todos estos enfoques, esto no se tuvo en cuenta, porque se tom贸 el comienzo. Quiz谩s esto dar铆a un aumento adicional.

Aqu铆 est谩 la arquitectura AC-BLSTM. La conclusi贸n es que si la divisi贸n inferior en dos partes, adem谩s de la atenci贸n, es un tir贸n inteligente, pero en paralelo todav铆a es normal, y todo esto se concreta. Tambi茅n buenos resultados.

Y Atanas su zool贸gico completo de modelos, entonces fue una mezcla genial. Adem谩s de los modelos en s铆, agregu茅 algunas caracter铆sticas de texto, generalmente la longitud, la cantidad de letras may煤sculas, la cantidad de palabras malas, la cantidad de caracteres, todo lo dem谩s. Validaci贸n cruzada de cinco pliegues, y obtuve excelentes resultados en LB privado 0.9867.

Y el segundo enfoque, ense帽贸 con una inserci贸n diferente, pero los resultados fueron peores. Casi todos usaban fastText.
Quer铆a hablar sobre el enfoque de nuestro otro colega, Andrei, con el sobrenombre de Laol en ODS. Ense帽贸 muchos granos p煤blicos, los bebi贸 como si estuviera fuera de s铆 mismo, y esto realmente arroj贸 resultados muy buenos. No podr铆a hacer todo esto, pero solo tome un mont贸n de n煤cleos p煤blicos diferentes, incluso en tf-idf, hay todo tipo de convolucionistas gru.

Tuvo uno de los mejores enfoques, con los que nos quedamos durante mucho tiempo en el top 15, hasta que Alexey y Atanas se unieron a nosotros, combin贸 la combinaci贸n y el apilamiento de todo esto. Y tambi茅n un momento genial, que, seg煤n tengo entendido, que ninguno de los equipos utiliz贸, tambi茅n hicimos funciones a partir de los resultados de la API de los organizadores. Sobre esto, dile a Alex.
Alexey Noskov:
hola Te contar茅 sobre el enfoque que utilic茅 y c贸mo lo completamos.

Todo fue lo suficientemente simple para m铆: 10 pliegues de validaci贸n cruzada, modelos pre-entrenados en diferentes vectores con diferentes preprocesamientos, para que tuvieran m谩s diversidad en el conjunto, un peque帽o aumento y dos ciclos de desarrollo. El primero, que b谩sicamente funcion贸 al principio, entren贸 a un cierto n煤mero de modelos, analiz贸 los errores de validaci贸n cruzada, en qu茅 ejemplos comete errores obvios y corrigi贸 el preprocesamiento basado en esto, porque es m谩s claro c贸mo solucionarlos.
Y el segundo enfoque, que se us贸 m谩s al final, ense帽贸 algunos conjuntos de modelos, examin贸 las correlaciones, encontr贸 bloques de modelos que est谩n d茅bilmente correlacionados entre s铆, fortaleci贸 la parte que consiste en ellos. Esta es la matriz de correlaci贸n de validaci贸n cruzada entre mis modelos.

Se puede ver que tiene una estructura de bloques en algunos lugares, mientras que algunos modelos eran de buena calidad, estaban d茅bilmente correlacionados con los dem谩s, y se obtuvieron muy buenos resultados cuando tom茅 estos modelos como base, les ense帽茅 varias variaciones diferentes que difieren en diferentes hiperpar谩metros o preprocesamiento, y luego se agregan al conjunto.

Para aumentar, la idea que fue publicada en el foro por Pavel Ostyakov fue la que m谩s despert贸. Consisti贸 en el hecho de que podemos tomar un comentario, traducirlo a otro idioma y luego volver. Como resultado de la doble traducci贸n, se obtiene una reformulaci贸n, algo se pierde un poco, pero en general se obtiene un texto similar ligeramente diferente, que tambi茅n se puede clasificar y, por lo tanto, ampliar el conjunto de datos.
Y el segundo enfoque, que no ayud贸 tanto, pero tambi茅n ayud贸, es que puede intentar tomar dos comentarios arbitrarios, generalmente no muy largos, pegarlos y tomar como una etiqueta en el objetivo una combinaci贸n de etiquetas o un poco de entusiasmo donde solo hay uno de conten铆an una etiqueta.
Ambos enfoques funcionaron bien si no se aplicaron de antemano a todo el conjunto de conjuntos, sino para cambiar el conjunto de ejemplos a los que se debe aplicar el aumento en cada era. Cada era en el proceso de formar un lote, elegimos, digamos, el 30% de los ejemplos que se ejecutan a trav茅s de traducciones. M谩s bien, de antemano, en alg煤n lugar paralelo yace en la memoria, simplemente seleccionamos la versi贸n para la traducci贸n basada en ella y la agregamos al lote durante su entrenamiento.

Una diferencia interesante fueron los modelos entrenados en BPE. Hay una SentencePiece, un tokenizador de Google que le permite dividirse en tokens en los que no habr谩 UNK en absoluto. Un diccionario limitado en el que cualquier cadena se divide en algunos tokens. Si el n煤mero de palabras en el texto real es mayor que el tama帽o objetivo del diccionario, comienzan a dividirse en pedazos m谩s peque帽os, y se obtiene un enfoque intermedio entre el nivel de caracteres y los modelos de nivel de palabra.
All铆 se utilizan dos algoritmos de construcci贸n principales: BPE y Unigram. Para el algoritmo BPE, fue bastante f谩cil encontrar incrustaciones premarcadas en la red, y con un vocabulario fijo, solo ten铆a un buen vocabulario de 50k, tambi茅n pod铆a entrenar modelos que dieron bastante bien (inaudible, aprox. Ed.), Un poco peor, de lo habitual en fastText, pero se correlacionaron muy d茅bilmente con todos los dem谩s y dieron un buen impulso.

Este es un esquema de apilamiento cl谩sico. Como regla general, durante la mayor parte de la competencia, antes de combinar, sol铆a mezclar simplemente todos mis modelos sin pesas. Esto dio los mejores resultados. Pero despu茅s de la fusi贸n, pude obtener un esquema un poco m谩s complejo, que al final dio un buen impulso.

Ten铆a una gran cantidad de modelos. 驴Solo tirarlos a todos en alg煤n tipo de apilador? No volvi贸 a funcionar muy bien, volvi贸 a entrenar, pero dado que los modelos eran grupos que estaban muy correlacionados, simplemente los un铆 en estos grupos, dentro de cada grupo promedi茅 y recib铆 5-7 grupos de modelos muy similares, de los cuales como caracter铆sticas para El siguiente nivel utiliz贸 valores promediados. Entren茅 a LightGBM en esto, prob茅 20 lanzamientos con varias muestras, cargu茅 un poco de metafuncionalidad similar a lo que hizo Atanas, y al final finalmente comenz贸 a funcionar, dando un impulso sobre el promedio simple.

Sobre todo, agregu茅 la API que Andrei encontr贸 y que contiene un conjunto similar de etiquetas. Los organizadores construyeron modelos para ellos inicialmente. Como originalmente era diferente, los participantes no lo usaron, era imposible simplemente compararlo con los que necesit谩bamos predecir. Pero si se lanz贸 a un apilamiento que funciona bien como una meta-caracter铆stica, entonces dar铆a un impulso maravilloso, especialmente en la clase TOXIC, que, aparentemente, fue la m谩s dif铆cil en la tabla de clasificaci贸n, y nos permiti贸 saltar a varios lugares al final, literalmente el 煤ltimo d铆a. .

Dado que descubrimos que el apilamiento y la API funcionaron tan bien para nosotros, antes de las presentaciones finales, ten铆amos pocas dudas sobre qu茅 tan bien se portar铆a a privado. Funcion贸 muy sospechosamente bien, por lo que elegimos dos presentaciones de acuerdo con el siguiente principio: uno: una combinaci贸n de modelos sin una API que se recibi贸 antes de eso, adem谩s de apilar con metaf铆sica de la API. Aqu铆 result贸 0.9880 en p煤blico y 0.9874 en privado. Aqu铆 mis marcas son confusas.

Y el segundo es una combinaci贸n de modelos sin API, sin usar apilamiento y sin usar LightGBM, porque exist铆a el temor de que esto fuera alg煤n tipo de reentrenamiento menor para el p煤blico, y podr铆amos volar con eso. Sucedi贸, no volaron, y como resultado, con el resultado de 0.9876 en privado obtuvimos la d茅cima posici贸n. Eso es todo.