Moderación de texto: lecciones de etiqueta para científicos de datos

¡Hola, Habr!



Con este artículo iniciamos la publicación de una serie de artículos sobre Data Science, las tareas que resolvemos en el Centro para el Desarrollo de Tecnologías Financieras del Banco Agrícola Ruso.



El año pasado, Rosselkhozbank anunció la creación y desarrollo de un ecosistema para empresas agroindustriales. Para uno de los sitios básicos del ecosistema, Our Farming, decidimos hacer un par de tareas útiles, que discutiremos a continuación.







El sitio de Svoe Farmezstvo es un mercado de productos para productores agrícolas de los mayores proveedores de toda Rusia. El sitio incluye productos de las categorías de mayor prioridad para los agricultores: productos fitosanitarios, fertilizantes, semillas, maquinaria agrícola, etc. Miles de proveedores cargan información sobre sus productos con el propósito de venderlos. Y, por supuesto, debe implementar un proceso para verificar la calidad del contenido que descarga. En este sentido, decidimos crear nuestra propia herramienta de moderación previa de información textual y gráfica.



¿Qué estaban haciendo?



En este artículo te contamos cómo, en colaboración con el Laboratorio MIPT, especialmente creado para las tareas del Banco, hemos desarrollado una herramienta que te permite pre-moderar contenido de texto con alta precisión.



Nuestro objetivo parecía bastante simple: la herramienta que creamos debería clasificar automáticamente el texto como aceptable para colocar en el sitio (clase 0) o inaceptable (clase 1). Si el algoritmo no puede entender claramente a qué clase pertenece el texto, lo enviamos (el texto) para moderación manual.



Tenemos la tarea del procesamiento de texto: queremos filtrar los textos que son “tóxicos” en todos los sentidos, a saber: maldiciones, insultos, contenido variado prohibido por la ley y simplemente texto que es inaceptable para colocar en el sitio.



Esperamos que el algoritmo que hemos desarrollado tome un conjunto de textos como entrada y produzca un número de 0 a 1, el grado o probabilidad de que el texto sea "tóxico". Cuanto más cercano esté este número a uno, más tóxico será el comentario.



Cabe señalar que el problema de la detección de textos tóxicos no es nuevo en absoluto y es bastante popular en el segmento de habla inglesa. Hace varios años, se resolvió un problema similar en el Desafío de clasificación de comentarios tóxicos en Kaggle. Para el idioma ruso, la solución debe obtenerse de manera similar, pero la calidad del modelo puede resultar menor debido a que el idioma ruso es estructuralmente más complicado que el inglés.



Solo hay un conjunto de datos marcado en ruso en el dominio públicopara buscar toxicidad en el texto. También logramos encontrar un conjunto de datos para buscar insultos (un caso especial de toxicidad). Además, hemos recopilado ejemplos de anuncios de portales agrícolas y los hemos marcado como aceptables (clase - 0).



La tarea que nos propusimos resultó ser bastante única en términos del tema agrícola dado. Su especificidad radica en que frases que en la vida cotidiana son insultos no siempre lo son cuando se trata de agricultura. Los ejemplos comunes incluyen los siguientes: “No meta su hocico” - el texto es claramente inaceptable, mientras que el texto con un “hocico de cerdo” se puede colocar fácilmente en el sitio (aunque depende del contexto). Lo mismo se aplica a ciertas subespecies de animales y plantas de granja.



Si hablamos de resolver tales problemas de clasificación de textos, entonces, de hecho, incluso los modelos más simples (lineales) ya dan buenos resultados . Pero, como siempre, para lograr una mayor calidad, usaremos redes neuronales. La arquitectura más popular (en el momento de escribir este artículo) para resolver este tipo de problemas es BERT. En el momento de la competencia de Kaggle mencionada anteriormente, esta arquitectura no existía, por lo que se utilizaron otras. Sin embargo, más tarde esta tarea se resolvió con éxito con la ayuda de BERT.



¿Cómo lo hiciste?



Pasemos a la parte más interesante: resolver el problema. Después de pensar un poco en la “arquitectura” de la herramienta, decidimos utilizar tres modelos: búsqueda de diccionario (como filtro de vocabulario obsceno), regresión logística (como solución básica) y BERT (como solución más avanzada).



Esquema general







El esquema general de la solución se ve así: dentro de la "caja negra", el texto ingresa primero al clasificador ingenuo, que se basa en un diccionario de palabras obscenas (improperios), aquí los textos que contienen palabras "malas" se cortan inmediatamente (su toxicidad es siempre una ( 1). Los textos que han pasado la primera etapa caen en un modelo de red neuronal más complejo, que da el grado de toxicidad. En caso de falla del modelo de red neuronal, se reemplaza por uno más simple, la regresión logística. Es decir, obtendremos un resultado no ingenuo en cualquier caso. .



Ahora vamos a ver cada componente en detalle.



Clasificador ingenuo



Aquí todo es bastante simple: según el diccionario de vocabulario obsceno, es bastante fácil entender si el texto contiene esta o aquella palabra “mala” o no.



Es decir, en esta etapa, incluso puede prescindir del modelo ML como tal y eliminar inmediatamente los textos que contienen palabras "malas". Pero, ¿qué pasa si esas palabras del diccionario no se utilizan en el texto, pero el texto, no obstante, es inaceptable para su publicación en el portal? Intentemos resolver este problema usando regresión logística y BERT'a.



Regresión logística



El modelo más simple permite predecir un valor en función de los datos disponibles. Los vectores de texto para este modelo se obtienen usando TF-IDF y TweetTokenizer de nltk. Tal modelo, como es conocido, permite estimar la probabilidad de toxicidad del texto usando una función logística. En nuestra arquitectura, la regresión logística "asegura" la red neuronal.



Gran y terrible BERT



Usamos el modelo RuBert previamente entrenado de DeepPavlov, que además entrenamos en los textos marcados. El proceso de predicción, sin entrar en detalles, es el siguiente:





¡Construimos, construimos y finalmente construimos!



Evaluamos la calidad utilizando nuestras métricas favoritas Precisión, ROC-AUC y medida F1. Las métricas de calidad final de la muestra diferida son las siguientes:



Algoritmo / métrica

Ingenuo

BERT

LR

Ingenuo → BERT

Ingenuo → LR

Exactitud

0,854

0.901

0,865

0.909

0,879

ROC-AUC

0,782

0,960

0,921

0,963

0,939

Medida F1

0,722

0,840

0,800

0,855

0,824



Velocidad de operación: ~ 2800 textos por minuto en GPU (GeForce 1080Ti) en caso de procesamiento BERT como el algoritmo más lento de los presentados.



Como era de esperar, las métricas con BERT resultaron un poco mejores, aunque no mucho.



Que conclusiones sacamos



En conclusión, me gustaría señalar varios aspectos importantes, sin los cuales, en nuestra opinión, es imposible lanzar tales soluciones en modo industrial.



  1. Siempre debe tener en cuenta los detalles de la tarea con respecto al marcado de textos.
  2. Es necesario prever la moderación manual del texto, en el caso de que el modelo “dude” de su decisión. No desea que el contenido inapropiado termine en su producto.
  3. También es necesario enviar los textos marcados a mano del párrafo anterior para capacitación adicional. Por lo tanto, puede mejorar el modelo en pequeños pasos y reducir la cantidad de trabajo durante la moderación manual con el tiempo.
  4. Es mejor utilizar un enfoque integrado para resolver el problema. A veces, incluso los "modelos" más simples de los diccionarios ya dan buenos resultados.
  5. Elija el mejor modelo en función de su tarea. En nuestro caso, elegimos BERT porque reacciona mejor al contexto que la regresión logística.


¡Gracias por su atención!



En el próximo artículo, compartiremos nuestra experiencia en la moderación previa de imágenes, todo en la misma plataforma de nuestro ecosistema: Our Farming.



All Articles