A menudo hablamos de tecnologías y bibliotecas que se originaron y formaron en Yandex. De hecho, al menos aplicamos y desarrollamos soluciones de terceros.
Hoy contaré a la comunidad Habr sobre uno de esos ejemplos. Aprenderá por qué enseñamos a la red neuronal BERT a buscar errores tipográficos en los titulares de las noticias, y no usó el modelo ya hecho, por qué no puede obtener y ejecutar BERT en varias tarjetas de video y cómo usamos la característica clave de esta tecnología: el mecanismo de atención.

Desafío
Yandex.News es un servicio que recopila noticias de publicaciones relacionadas con nosotros. Estas no son solo las noticias de los medios más leídas y citadas en la página principal, sino también secciones
temáticas o incluso selecciones personales de todas las publicaciones. En cualquier caso, estos son miles de sitios y millones de encabezados, de los cuales la máquina debe formar una selección cada pocos minutos.
Es la máquina, porque nunca intervenimos en la imagen del día: no agregamos noticias allí manualmente, no las eliminamos de allí (no importa cuánto nos gustaría), no editamos los titulares. Alrededor de esto ya se han roto muchas copias. Un enfoque totalmente algorítmico tiene ventajas y desventajas. Algo que podemos mejorar con la tecnología, algo que no. Incluso si hay errores ortográficos o errores tipográficos en los encabezados, no los corregimos. Hemos agregado los favicons de publicaciones a los titulares para que quede claro de dónde provienen las noticias. Esto ayudó en parte, pero no llegamos a un acuerdo con los errores y comenzamos a buscar una forma de deshacernos de ellos sin hacer cambios en el texto.
Si es imposible corregir el error, puede entrenar la máquina para encontrar encabezados que, debido a errores, no sean adecuados para la parte superior. Además, Yandex se ha especializado en la morfología rusa desde el momento en que el nombre aún no se había inventado. Parece que tomamos una red neuronal, y el punto está en el sombrero.
Las herramientas
Yandex tiene tecnología
Speller para encontrar y corregir errores. Gracias a la
biblioteca de aprendizaje automático
CatBoost, Speller puede descifrar palabras irreconocibles ("adjetivos" → "compañeros de clase") y tener en cuenta el contexto al buscar errores tipográficos ("música perdida" → "descargar música"). Puede parecer que Speller es ideal para nuestra tarea, pero no.
El deletreador (conocido internamente como el guardián de búsqueda) ya está afilado a nivel de arquitectura para resolver una tarea completamente diferente: ayudar a los usuarios a restaurar el formulario de solicitud correcto. En la búsqueda, no es tan importante si el caso se seleccionó correctamente, si se coloca una letra mayúscula o una coma. Allí, es más importante para la consulta de búsqueda "Haminguel" adivinar que la persona tenía en mente a Hemingway.
Los errores en los titulares son cometidos por personas relativamente alfabetizadas que es poco probable que escriban Haminguel. Pero la aprobación incorrecta ("el vuelo se retrasó"), las palabras faltantes ("el joven intentó el automóvil") y las letras mayúsculas adicionales ("Presidente del Banco") son comunes. Finalmente, hay una oración formalmente correcta "Repararé la calle Gorki en Pskov", a la que un tutor normal no se aferrará (bueno, ¿y si esto es una promesa del autor?), Pero este es obviamente un titular de noticias estropeado. Además, en las Noticias la tarea no era la misma que en la Búsqueda: no corregir errores tipográficos y errores, sino detectarlos.
Teníamos otras opciones, por ejemplo, modelos basados en DSSM (si es interesante, hablamos brevemente sobre este enfoque en una publicación sobre
el algoritmo Palekh ), pero también tenían limitaciones. Por ejemplo, el orden de las palabras no se tuvo en cuenta perfectamente.
En general, las herramientas preparadas no eran adecuadas para nuestra tarea o eran limitadas. Por lo tanto, debe crear el suyo propio para entrenar a su modelo. Y esta fue una buena razón para trabajar con la tecnología BERT, que estuvo disponible para los desarrolladores en 2018 y mostró resultados impresionantes.
Introduciendo BERT
El principal problema de los problemas modernos del procesamiento del lenguaje natural (PNL) es encontrar suficientes ejemplos marcados por personas para entrenar una red neuronal. Si necesita un crecimiento de calidad, la muestra de capacitación debe ser muy grande: millones y miles de millones de ejemplos. Al mismo tiempo, hay muchas tareas en PNL y todas son diferentes. Recopilar datos en volúmenes similares para cada tarea es largo, costoso y, a menudo, imposible. Incluso para las empresas más grandes del mundo.
Pero hay una opción para solucionar este problema, con la ayuda del entrenamiento en dos etapas. Al principio, a la red neuronal se le enseña una estructura de lenguaje durante un tiempo largo y costoso en un gran cuerpo de miles de millones de palabras (esto es entrenamiento previo). Luego, la red se retuerce rápida y económicamente para una tarea específica, por ejemplo, dividir las revisiones en buenas y malas (esto es un ajuste fino). Bastantes de unos 10 mil ejemplos marcados en
Tolok .
La tecnología BERT (Representaciones de codificador bidireccional de transformadores) se basa en esta idea. La idea en sí no es nueva y se ha aplicado antes, pero hay una diferencia significativa. Transformer es una arquitectura de red neuronal que le permite tener en cuenta todo el contexto a la vez, incluido el otro extremo de la oración y la rotación de participios en algún punto intermedio. Y esta es su diferencia con las arquitecturas de moda anteriores, que tuvieron en cuenta el contexto. Por ejemplo, una red neuronal LSTM tiene una longitud de contexto de decenas de palabras en el mejor de los casos, y aquí son 200.
En
GitHub , el código fuente de TensorFlow e incluso un modelo universal pre-entrenado en 102 idiomas están disponibles, desde ruso hasta volapyuk. Tome, al parecer, la solución lista para usar, y obtenga el resultado de inmediato. Pero no
Resultó que el modelo universal en textos en ruso mostró una calidad significativamente menor que el modelo en inglés, rompiendo récords en textos en inglés (lo cual, como ve, es lógico). En textos rusos, perdió con nuestros modelos internos en DSSM.
Bien, puedes pre-educarte a ti mismo, afortunadamente, Yandex tiene suficientes textos rusos y experiencia en aprendizaje automático. Pero hay un matiz. ¡Toma un año aprender!
El hecho es que BERT está diseñado para procesadores de tensor de Google (TPU), por lo tanto, de fábrica puede funcionar con una sola tarjeta de video (GPU). Y es imposible paralelizar la frente de uno con cualquier
horovod : transferir 400 megabytes de datos de una tarjeta a otra en cada paso es muy costoso, la paralelización será inútil. Que hacer
Optimización
Comenzaron a buscar ideas y soluciones que pudieran acelerar significativamente el asunto. En primer lugar, notamos que cada número en nuestro modelo ocupaba 32 bits de memoria (el flotante estándar para los números en la computadora). Parece ser pequeño, pero cuando tienes 100 millones de pesos, esto es crítico. No necesitábamos tal precisión en todas partes, por lo que decidimos convertir parcialmente los números al formato de 16 bits (esto es lo que se llama entrenamiento de precisión mixta).
En el camino, con la ayuda de muchos archivos y muletas, atornillamos la compilación de XLA, confiando en la
confirmación de NVIDIA que aún estaba sin procesar. Gracias a esto, nuestras tarjetas NVIDIA Tesla V100 (un pequeño servidor de ellas se encuentra como un apartamento en un área económica de Moscú) pudieron revelar completamente su potencial debido a la aritmética de 16 bits en los núcleos tensores.
Estábamos interesados solo en los titulares en ruso, pero el modelo multilingüe, que tomamos como base, fue entrenado en cientos de idiomas, incluido incluso un volapuk artificial. Las palabras de todos los idiomas traducidos al espacio vectorial se almacenaron en el modelo. Además, no puede tomarlos y simplemente eliminarlos de allí: tuve que sudar para reducir el tamaño del diccionario.
Y una cosa más. Si usted es un científico y su computadora está debajo de la mesa, puede reconfigurar todo para cada tarea específica. Pero en una nube informática real, donde miles de máquinas están configuradas de la misma manera, es bastante problemático, por ejemplo, reconstruir el núcleo para cada nueva característica de TensorFlow. Por lo tanto, dedicamos mucho esfuerzo a recopilar esas versiones de paquetes que pueden hacer todos los chips nuevos y no requieren una actualización radical y la reconfiguración de las tarjetas de video en la nube.
En general, exprimieron todos los jugos donde pudieron. Y lo hicimos El año se convirtió en una semana.
Entrenamiento
Construir el conjunto de datos correcto suele ser la parte más difícil del trabajo. Primero, aprendimos el clasificador en tres millones de encabezados marcados con tolokers. Parece ser mucho, pero solo 30 mil de ellos, con errores tipográficos. ¿Dónde obtener más ejemplos?
Decidimos ver qué títulos corrigieron los propios medios. Hay más de 2 millones de tales en la historia de Yandex.News. Bingo! Aunque era demasiado temprano para alegrarse.
Resultó que muy a menudo los medios rehacen los titulares no por errores. Nuevos detalles salieron a la luz, y el editor reemplazó una redacción correcta por otra. Por lo tanto, nos limitamos a correcciones con una diferencia entre versiones de hasta tres letras (aunque todavía había algo de ruido aquí: se "encontró dos" - se convirtió en "encontró tres"). Así que anotamos un millón de errores tipográficos. Primero estudiamos en esta gran selección con ruido, y luego en un pequeño marcador sin ruido.
Calidad
En tales tareas, es costumbre medir la precisión y la integridad. En nuestro caso, la precisión es la proporción de veredictos correctos entre todos los veredictos sobre un error en el encabezado. Integridad: la proporción de encabezados de error que detectamos entre todos los encabezados de error. Tanto eso como otro en el mundo ideal deberían aspirar al 100%. Pero en las tareas de aprendizaje automático, estos indicadores tienden a entrar en conflicto. Es decir, cuanto más giramos la precisión, más cae la integridad. Y viceversa.
En nuestro enfoque anterior basado en DSSM, ya hemos logrado un 95% de precisión (es decir, un 5% de veredictos de falsos positivos). Esto ya es un indicador bastante alto. Por lo tanto, decidimos mantener el mismo nivel de precisión y ver cómo cambia la integridad con el nuevo modelo. Y ella saltó del 21 al 78%. Y definitivamente es un éxito.
Aquí sería posible ponerle fin, pero recuerdo la promesa de hablar de atención.
Red neuronal con rotulador
En general, se acepta que una red neuronal es una caja negra. Alimentamos algo a la entrada y obtenemos algo a la salida. Por qué y cómo es un misterio.
Esta limitación está destinada a eludir las redes neuronales interpretadas. BERT es uno de ellos. Su interpretabilidad radica en el mecanismo de atención. Hablando en términos generales, en cada capa de la red neuronal repetimos la misma técnica: miramos las palabras vecinas con diferente "atención" y tomamos en cuenta la interacción con ellas. Por ejemplo, cuando una red neuronal procesa el pronombre "él", "mira cuidadosamente" el sustantivo al que se refiere "él".
La siguiente imagen muestra en diferentes tonos de rojo qué palabras "mira" el token, que acumula información sobre el título completo de la capa de clasificación final. Si un error tipográfico en la palabra, la atención lo resalta, si las palabras son inconsistentes, entonces ambas (y, posiblemente, dependen de ellas).

En este lugar, por cierto, uno puede discernir el potencial completo de las redes neuronales. En ninguna etapa de la capacitación, nuestro modelo sabe exactamente dónde se encuentra el error tipográfico en el ejemplo: solo sabe que todo el título es incorrecto. Y aún así, ella aprende que "una escuela para 1224 lugares" es incorrecta de escribir debido a un número inconsistente, y destaca específicamente el número 4.
No nos detuvimos en los errores tipográficos y comenzamos a aplicar un nuevo enfoque no solo para buscar errores, sino también para identificar encabezados obsoletos. Pero esta es una historia completamente diferente con la que esperamos volver a Habr en el futuro cercano.
Enlaces útiles para aquellos que quieran profundizar en el tema.