{"id":53143,"date":"2019-11-24T00:00:00","date_gmt":"2019-11-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru"},"modified":"2020-02-18T14:01:00","modified_gmt":"2020-02-18T11:01:00","slug":"ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","title":{"rendered":"Uso de aprendizaje autom\u00e1tico en Mail.ru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/ee5728dccb94b849ad3bfd9cf84ad74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Inspirado en mis presentaciones en Highload++ y DataFest Minsk 2019.<\/i><\/p>\n<p>Para muchos hoy en d\u00eda, el correo es una parte integral de la vida en l\u00ednea. A trav\u00e9s de \u00e9l, llevamos a cabo correspondencia empresarial, almacenamos toda clase de informaci\u00f3n importante relacionada con finanzas, reservas de hoteles, realizaci\u00f3n de pedidos y mucho m\u00e1s. A mediados de 2018, formulamos una estrategia de desarrollo del producto de correo. \u00bfC\u00f3mo deber\u00eda ser el correo moderno?<\/p>\n<p>El correo debe ser <b>inteligente<\/b>, es decir, ayudar a los usuarios a navegar en el creciente volumen de informaci\u00f3n: filtrar, estructurar y ofrecerla de la manera m\u00e1s conveniente. Debe ser <b>\u00fatil<\/b>, permitiendo resolver diversas tareas directamente en la bandeja de entrada, por ejemplo, pagar multas (una funci\u00f3n que, lamentablemente, utilizo). Y, por supuesto, el correo debe garantizar la protecci\u00f3n de la informaci\u00f3n, filtrando el spam y protegiendo contra hackeos, es decir, debe ser <b>seguro<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEstas direcciones determinan una serie de tareas clave, muchas de las cuales pueden resolverse de manera efectiva con el uso de aprendizaje autom\u00e1tico. Aqu\u00ed hay ejemplos de caracter\u00edsticas ya implementadas en el marco de la estrategia, una para cada direcci\u00f3n.<\/p>\n<ul>\n<li><b>Respuesta Inteligente<\/b>. El correo tiene una funci\u00f3n de respuesta inteligente. La red neuronal analiza el texto del correo, entiende su significado y objetivo, y como resultado, ofrece tres opciones de respuesta m\u00e1s adecuadas: positiva, negativa y neutral. Esto ayuda a ahorrar tiempo al responder correos, y a menudo responde de manera no est\u00e1ndar y divertida para s\u00ed mismo.\n<\/li>\n<li><b>Agrupaci\u00f3n de correos<\/b>, relacionados con pedidos en tiendas en l\u00ednea. A menudo compramos en l\u00ednea, y generalmente las tiendas pueden enviar varios correos para cada pedido. Por ejemplo, de AliExpress, el servicio m\u00e1s grande, llegan muchos correos para un pedido, y hemos calculado que en el caso extremo su n\u00famero puede llegar hasta 29. Por lo tanto, con la ayuda del modelo de Reconocimiento de Entidades Nombradas, extraemos el n\u00famero de pedido y otra informaci\u00f3n del texto y agrupamos todos los correos en un hilo. Tambi\u00e9n mostramos la informaci\u00f3n principal sobre el pedido en una etiqueta separada, lo que facilita el tratamiento de este tipo de correos.\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8b37b0bf0c0d152498027bc25d476128.jpg\" style=\"display:block;margin: 0 auto;\" \/>\n<\/li>\n<li><b>Antiphishing<\/b>. El phishing es un tipo de fraude especialmente peligroso mediante el cual los delincuentes intentan apoderarse de informaci\u00f3n financiera (incluida la informaci\u00f3n de las tarjetas bancarias del usuario) y credenciales. Estos correos se mimetizan con mensajes aut\u00e9nticos, incluidos los visuales. Por lo tanto, gracias a la Visi\u00f3n por Computadora, reconocemos los logotipos y el estilo de dise\u00f1o de correos de grandes empresas (por ejemplo, Mail.ru, Sber, Alfa) y tomamos esto en cuenta junto con el texto y otros signos en nuestros clasificadores de spam y phishing.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Aprendizaje autom\u00e1tico<\/h2>\n<p>\nUn poco sobre el aprendizaje autom\u00e1tico en el correo en general. El correo es un sistema de alta carga: a trav\u00e9s de nuestros servidores se procesan en promedio 1.5 mil millones de correos al d\u00eda para 30 millones de usuarios DAU. Aproximadamente 30 sistemas de aprendizaje autom\u00e1tico gestionan todas las funciones y caracter\u00edsticas necesarias. <\/p>\n<p>Cada correo pasa por toda una cadena de clasificaci\u00f3n. Primero filtramos el spam y dejamos los correos buenos. Los usuarios a menudo no notan el trabajo del antispam, porque el 95-99 % del spam ni siquiera llega a la carpeta correspondiente. La detecci\u00f3n de spam es una parte muy importante de nuestro sistema y la m\u00e1s compleja, ya que en el campo del antispam existe una adaptaci\u00f3n constante entre sistemas de defensa y ataque, lo que presenta un desaf\u00edo t\u00e9cnico continuo para nuestro equipo.<\/p>\n<p>Luego, diferenciamos los correos de personas y de robots. Los correos de personas son los m\u00e1s importantes, por lo que ofrecemos funciones como Smart Reply para ellos. Los correos de robots se dividen en dos partes: transaccionales, que son correos importantes de servicios, como confirmaciones de compras o reservas de hoteles, finanzas, y informativos, que son publicidad comercial y descuentos. <\/p>\n<p>Creemos que los correos transaccionales son tan importantes como la correspondencia personal. Deben estar a mano, ya que a menudo se necesita encontrar r\u00e1pidamente informaci\u00f3n sobre un pedido o una reserva de vuelo, y perdemos tiempo buscando estos correos. Por ello, para mayor comodidad, los dividimos autom\u00e1ticamente en seis categor\u00edas principales: viajes, pedidos, finanzas, entradas, inscripciones y, finalmente, multas.<\/p>\n<p>Los correos informativos son el grupo m\u00e1s numeroso y, probablemente, el menos importante, ya que no requieren una respuesta inmediata, pues nada significativo cambiar\u00e1 en la vida del usuario si no lee dicho correo. En nuestra nueva interfaz, los agrupamos en dos hilos: redes sociales y boletines, limpiando visualmente la bandeja de entrada y dejando a la vista solo los correos importantes.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/175773879daaa29d1542a98070cb7972.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Explotaci\u00f3n<\/h3>\n<p>\nLa gran cantidad de sistemas presenta numerosas dificultades en su operaci\u00f3n. Con el tiempo, los modelos se degradan, al igual que cualquier software: algunos indicadores fallan, las m\u00e1quinas dejan de funcionar, se acumula c\u00f3digo defectuoso. Adem\u00e1s, los datos cambian constantemente: se a\u00f1aden nuevos, se transforma el patr\u00f3n de comportamiento de los usuarios, etc., por lo que un modelo sin el soporte adecuado funcionar\u00e1 cada vez peor con el tiempo. <\/p>\n<p>No se puede olvidar que, cuanto m\u00e1s profundo es el aprendizaje autom\u00e1tico en la vida de los usuarios, mayor es su impacto en el ecosistema, y, como consecuencia, mayores son las p\u00e9rdidas financieras o ganancias que pueden obtener los jugadores del mercado. Por ello, en un n\u00famero creciente de \u00e1reas, los jugadores se adaptan a trabajar con algoritmos de ML (ejemplos cl\u00e1sicos: publicidad, b\u00fasqueda y el ya mencionado anti-spam).<\/p>\n<p>Adem\u00e1s, las tareas de aprendizaje autom\u00e1tico tienen una particularidad: cualquier peque\u00f1a, aunque insignificante, alteraci\u00f3n en el sistema puede generar mucho trabajo con el modelo: trabajo con datos, reentrenamiento, despliegue, lo que puede extenderse por semanas o meses. Cuanto m\u00e1s r\u00e1pido cambie el entorno en el que operan sus modelos, m\u00e1s esfuerzo requerir\u00e1 su mantenimiento. El equipo puede crear m\u00faltiples sistemas y alegrarse, pero luego gastar casi todos los recursos en su mantenimiento, sin posibilidad de hacer algo nuevo. Nos encontramos alguna vez en esta situaci\u00f3n con el equipo de anti-spam. Y llegamos a la evidente conclusi\u00f3n de que el mantenimiento debe ser automatizado.<\/p>\n<h3>Automatizaci\u00f3n<\/h3>\n<p>\n\u00bfQu\u00e9 se puede automatizar? En realidad, casi todo. He identificado cuatro \u00e1reas que definen la infraestructura del aprendizaje autom\u00e1tico:<\/p>\n<ul>\n<li>recolecci\u00f3n de datos;\n<\/li>\n<li>reentrenamiento;\n<\/li>\n<li>despliegue;\n<\/li>\n<li>pruebas y monitoreo.\n<\/li>\n<\/ul>\n<p>\nSi el entorno es inestable y cambia constantemente, toda la infraestructura alrededor del modelo resulta ser mucho m\u00e1s importante que el propio modelo. Puede ser un viejo y confiable clasificador lineal, pero si se alimentan correctamente las caracter\u00edsticas y se establece un buen feedback de los usuarios, funcionar\u00e1 mucho mejor que los modelos de \u00faltima generaci\u00f3n con todas sus complejidades.<\/p>\n<h4>Ciclo de retroalimentaci\u00f3n<\/h4>\n<p>\nEste ciclo combina la recolecci\u00f3n de datos, el reentrenamiento y el despliegue \u2014 en esencia, todo el ciclo de actualizaci\u00f3n del modelo. \u00bfPor qu\u00e9 es importante? Observa el gr\u00e1fico de registro en el correo:<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/f3c98bd49a101754cf299821a40e2b8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUn desarrollador de aprendizaje autom\u00e1tico implement\u00f3 un modelo anti-bots, que impide que los bots se registren en el correo. El gr\u00e1fico desciende a un nivel donde solo permanecen los usuarios reales. \u00a1Todo genial! Pero pasan cuatro horas, los spammers ajustan sus scripts y todo vuelve a la normalidad. En esta implementaci\u00f3n, el desarrollador gast\u00f3 un mes a\u00f1adiendo caracter\u00edsticas y reentrenando el modelo, pero el spammer pudo adaptarse en solo cuatro horas.<\/p>\n<p>Para que no sea tan doloroso y no haya que rehacer todo luego, es fundamental pensar desde el principio en c\u00f3mo ser\u00e1 el ciclo de retroalimentaci\u00f3n y qu\u00e9 haremos si el entorno cambia. Comencemos con la recolecci\u00f3n de datos: este es el combustible para nuestros algoritmos.<\/p>\n<h2>Recopilaci\u00f3n de datos<\/h2>\n<p>\nEs evidente que para las redes neuronales modernas, cuanto m\u00e1s datos, mejor. Estos datos los generan, en esencia, los usuarios del producto. Los usuarios pueden ayudar etiquetando datos, pero no se puede abusar de esto, porque en alg\u00fan momento a los usuarios les aburrir\u00e1 reentrenar tus modelos y se cambiar\u00e1n a otro producto. <\/p>\n<p>Uno de los errores m\u00e1s comunes (aqu\u00ed hago referencia a Andrew Ng) es una excesiva orientaci\u00f3n hacia las m\u00e9tricas en el conjunto de datos de prueba, en lugar de sobre la retroalimentaci\u00f3n del usuario, que en realidad es la principal medida de calidad del trabajo, ya que estamos creando un producto para el usuario. Si al usuario no le resulta clara o le desagrada la operaci\u00f3n del modelo, entonces todo es en vano. <\/p>\n<p>Por eso, el usuario siempre debe tener la posibilidad de votar, se le debe proporcionar una herramienta para dar su feedback. Si consideramos que en una bandeja de entrada ha llegado un correo relacionado con finanzas, debe marcarse como 'finanzas', y dibujar un bot\u00f3n que el usuario pueda presionar y decir que no se trata de finanzas.<\/p>\n<h3>Calidad de la retroalimentaci\u00f3n<\/h3>\n<p>\nHablemos sobre la calidad de la retroalimentaci\u00f3n del usuario. En primer lugar, t\u00fa y el usuario pueden atribuir diferentes significados a un mismo concepto. Por ejemplo, t\u00fa y los gerentes de producto consideran que \"finanzas\" son cartas del banco, mientras que el usuario piensa que una carta de la abuela sobre la pensi\u00f3n tambi\u00e9n se refiere a finanzas. En segundo lugar, hay usuarios que presionan botones sin pensar, sin l\u00f3gica alguna. En tercer lugar, el usuario puede tener ideas completamente equivocadas. Un claro ejemplo de nuestra pr\u00e1ctica es la implementaci\u00f3n de un clasificador <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B8%D0%B3%D0%B5%D1%80%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B5_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0\">de spam nigeriano<\/a><\/noindex>, un tipo de spam bastante curioso, donde se le ofrece al usuario reclamar varios millones de d\u00f3lares de un pariente lejano que de repente ha sido encontrado en \u00c1frica. Tras la implementaci\u00f3n de este clasificador, revisamos los clics en \"No es spam\" en estos correos, y result\u00f3 que el 80 % de ellos eran jugosos correos de spam nigeriano, lo que indica que los usuarios pueden ser extremadamente cr\u00e9dulos.<\/p>\n<p>Y no olvidemos que no solo las personas pueden presionar botones, sino tambi\u00e9n varios bots que se hacen pasar por navegadores. As\u00ed que la retroalimentaci\u00f3n cruda no es adecuada para el aprendizaje. \u00bfQu\u00e9 se puede hacer con esta informaci\u00f3n?<\/p>\n<p>Aplicamos dos enfoques: <\/p>\n<ul>\n<li><b>Retroalimentaci\u00f3n de ML relacionado<\/b>. Por ejemplo, tenemos un sistema antipatrones en l\u00ednea que, como mencion\u00e9 anteriormente, toma decisiones r\u00e1pidas basadas en un n\u00famero limitado de caracter\u00edsticas. Y hay un segundo sistema, m\u00e1s lento, que opera despu\u00e9s de los hechos. Este cuenta con m\u00e1s datos sobre el usuario, su comportamiento, etc. Como consecuencia, se toma la decisi\u00f3n m\u00e1s equilibrada, por lo que tiene mayor precisi\u00f3n y exhaustividad. Se puede dirigir la diferencia en el funcionamiento de estos sistemas a la primera como datos para el aprendizaje. De esta manera, el sistema m\u00e1s simple siempre intentar\u00e1 acercarse al rendimiento del sistema m\u00e1s complejo.\n<\/li>\n<li><b>Clasificaci\u00f3n de clics<\/b>. Se puede clasificar cada clic de usuario, evaluar su validez y posibilidad de uso. Hacemos esto en el antispam del correo, utilizando caracter\u00edsticas del usuario, su historial, caracter\u00edsticas del remitente, el texto mismo y el resultado del trabajo de los clasificadores. Al final, obtenemos un sistema autom\u00e1tico que valida el feedback del usuario. Y dado que necesita ser reentrenado mucho menos, su funcionamiento puede convertirse en la base para todos los dem\u00e1s sistemas. La prioridad principal en este modelo es la precisi\u00f3n, porque entrenar el modelo con datos imprecisos puede tener consecuencias graves. \n<\/li>\n<\/ul>\n<p>\nMientras limpiamos los datos y reentrenamos nuestros sistemas de ML, no debemos olvidar a los usuarios, ya que para nosotros miles o millones de errores en el gr\u00e1fico son solo estad\u00edsticas, pero para el usuario cada error es una tragedia. Adem\u00e1s de que el usuario debe lidiar con tu error en el producto, despu\u00e9s de dar su retroalimentaci\u00f3n, espera que situaciones similares no se repitan en el futuro. Por lo tanto, siempre debemos dar a los usuarios no solo la oportunidad de votar, sino tambi\u00e9n de corregir el comportamiento de los sistemas de ML, creando, por ejemplo, heur\u00edsticas personales para cada clic de retroalimentaci\u00f3n; en el caso del correo, esto podr\u00eda ser la posibilidad de filtrar correos similares seg\u00fan el remitente y el asunto para ese usuario.<\/p>\n<p>Tambi\u00e9n es necesario, bas\u00e1ndose en algunos informes o solicitudes al soporte, ajustar el modelo de manera semiautom\u00e1tica o manual, para que otros usuarios no sufran problemas similares.<\/p>\n<h3>Heur\u00edsticas para el entrenamiento<\/h3>\n<p>\nCon estos datos heur\u00edsticos y ajustes, hay dos problemas. El primero es que la cantidad de ajustes en constante crecimiento es dif\u00edcil de mantener, sin mencionar su calidad y funcionamiento a largo plazo. El segundo problema es que el error puede no ser frecuente y que unos pocos clics no ser\u00e1n suficientes para reentrenar el modelo. Aparentemente, estos dos efectos no relacionados se pueden mitigar sustancialmente si se aplica el siguiente enfoque.<\/p>\n<ol>\n<li>Creamos un ajuste temporal. \n<\/li>\n<li>Dirigimos los datos desde \u00e9l al modelo, que se reentrena regularmente, incluyendo los datos obtenidos. Aqu\u00ed, por supuesto, es importante que la heur\u00edstica tenga alta precisi\u00f3n para no reducir la calidad de los datos en el conjunto de entrenamiento. \n<\/li>\n<li>Luego, configuramos la monitorizaci\u00f3n para que se active con el 'puente', y si despu\u00e9s de un tiempo el 'puente' ya no se activa y queda completamente cubierto por el modelo, entonces se puede eliminar sin problemas. Ahora es poco probable que este problema se repita.\n<\/li>\n<\/ol>\n<p>\nAs\u00ed que el ej\u00e9rcito de 'puentes' es muy \u00fatil. Lo importante es que su uso sea temporal y no permanente. <\/p>\n<h2>Reentrenamiento<\/h2>\n<p>\nEl reentrenamiento es el proceso de agregar nuevos datos, obtenidos a partir de la retroalimentaci\u00f3n de los usuarios u otros sistemas, y entrenar el modelo existente con ellos. El reentrenamiento puede presentar varios problemas:<\/p>\n<ol>\n<li>El modelo puede simplemente no soportar el reentrenamiento y solo aprender desde cero. \n<\/li>\n<li>No hay nada en el libro de la naturaleza que diga que el reentrenamiento necesariamente mejorar\u00e1 la calidad del trabajo en producci\u00f3n. A menudo ocurre precisamente lo contrario, es decir, puede resultar en una degradaci\u00f3n.\n<\/li>\n<li>Los cambios pueden ser impredecibles. Este es un punto bastante delicado que hemos identificado. Incluso si un nuevo modelo en una prueba A\/B muestra resultados similares en comparaci\u00f3n con el actual, eso no significa que funcionar\u00e1 de la misma manera. Su rendimiento puede diferir en un solo porcentaje, lo cual puede introducir nuevos errores o reactivar antiguos ya solucionados. Con los errores actuales, tanto nosotros como los usuarios ya hemos aprendido a convivir, y cuando surgen muchos nuevos errores, el usuario tambi\u00e9n puede no entender lo que est\u00e1 pasando, ya que espera un comportamiento predecible.\n<\/li>\n<\/ol>\n<p>\nPor lo tanto, lo m\u00e1s importante en el reentrenamiento es garantizar que se mejore el modelo, o al menos no se degrade. <\/p>\n<p>Lo primero que viene a la mente cuando hablamos de reentrenamiento es el enfoque de Aprendizaje Activo. \u00bfQu\u00e9 significa esto? Por ejemplo, un clasificador determina si un correo pertenece a finanzas, y alrededor de su frontera de decisi\u00f3n agregamos una muestra de ejemplos etiquetados. Esto funciona bien, por ejemplo, en publicidad, donde hay mucha retroalimentaci\u00f3n y se puede entrenar el modelo en tiempo real. Pero si hay poca retroalimentaci\u00f3n, obtenemos una muestra muy sesgada en relaci\u00f3n con la distribuci\u00f3n de datos en producci\u00f3n, sobre la cual no se puede evaluar el comportamiento del modelo durante su funcionamiento.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/fd1b3e07bfaf896dde3248e43537f61a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe hecho, nuestro objetivo es conservar los patrones antiguos, los modelos ya conocidos, y adquirir nuevos. Aqu\u00ed la continuidad es importante. El modelo que hemos desplegado con gran esfuerzo ya funciona, por lo que podemos orientarnos en su rendimiento. <\/p>\n<p>En el correo se aplican diferentes modelos: \u00e1rboles, lineales, redes neuronales. Para cada uno desarrollamos nuestro propio algoritmo de reentrenamiento. En el proceso de reentrenamiento, no solo obtenemos nuevos datos, sino que a menudo tambi\u00e9n aparecen nuevas caracter\u00edsticas que tendremos en cuenta en todos los algoritmos que se presentan a continuaci\u00f3n.<\/p>\n<h3>Modelos lineales<\/h3>\n<p>\nSupongamos que tenemos regresi\u00f3n log\u00edstica. Componemos la funci\u00f3n de p\u00e9rdida del modelo a partir de los siguientes componentes:<\/p>\n<ul>\n<li>LogLoss en nuevos datos;\n<\/li>\n<li>regularizamos los pesos de las nuevas caracter\u00edsticas (no tocamos las viejas);\n<\/li>\n<li>aprendemos tambi\u00e9n de los datos antiguos para conservar los patrones anteriores;\n<\/li>\n<li>y, quiz\u00e1s lo m\u00e1s importante: aplicamos Regularizaci\u00f3n Arm\u00f3nica, que garantiza que no haya grandes cambios en los pesos en relaci\u00f3n con el antiguo modelo seg\u00fan la norma.\n<\/li>\n<\/ul>\n<p>\nDado que cada componente de la p\u00e9rdida tiene coeficientes, podemos encontrar valores \u00f3ptimos para nuestra tarea en la validaci\u00f3n cruzada o seg\u00fan los requisitos del producto.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/00ae86d23afb780f5e260e61f833d4bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00c1rboles<\/h3>\n<p>\nPasemos a los \u00e1rboles de decisi\u00f3n. Hemos desarrollado el siguiente algoritmo de reentrenamiento para los \u00e1rboles:<\/p>\n<ol>\n<li>En producci\u00f3n hay un bosque de 100 a 300 \u00e1rboles, entrenado en el antiguo conjunto de datos.\n<\/li>\n<li>Al final, eliminamos M = 5 \u00e1rboles y a\u00f1adimos 2M = 10 nuevos, entrenados en todo el conjunto de datos, pero con un alto peso en los nuevos datos, lo que naturalmente garantiza un cambio incremental en el modelo.\n<\/li>\n<\/ol>\n<p>\nEs evidente que con el tiempo la cantidad de \u00e1rboles aumenta significativamente, y es necesario reducirlos peri\u00f3dicamente para ajustarse a los tiempos. Para esto, utilizamos el omnipresente ahora Conocimiento Distillation (KD). Brevemente sobre su principio de funcionamiento.<\/p>\n<ol>\n<li>Tenemos el actual modelo \"complejo\". Lo ejecutamos en el conjunto de datos de entrenamiento y obtenemos la distribuci\u00f3n de probabilidades de clases como salida.\n<\/li>\n<li>Luego ense\u00f1amos al modelo alumno (modelo con menos \u00e1rboles en este caso) a repetir los resultados del modelo, utilizando la distribuci\u00f3n de clases como variable objetivo.\n<\/li>\n<li>Es importante se\u00f1alar que no utilizamos ninguna estructura de conjunto de datos, por lo que podemos emplear datos arbitrarios. Por supuesto, utilizamos una muestra de datos del flujo en producci\u00f3n como conjunto de entrenamiento para el modelo estudiante. De esta manera, el conjunto de entrenamiento nos permite asegurar la precisi\u00f3n del modelo, mientras que la muestra del flujo garantiza un rendimiento similar en la distribuci\u00f3n de producci\u00f3n, compensando el sesgo del conjunto de entrenamiento.\n<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/3fdfcb9b1e5a6fa824226a429afc475a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa combinaci\u00f3n de estas dos t\u00e9cnicas (agregar \u00e1rboles y reducir peri\u00f3dicamente su cantidad mediante Knowledge Distillation) garantiza la introducci\u00f3n de nuevos patrones y una continuidad completa.<\/p>\n<p>Con KD tambi\u00e9n realizamos operaciones de diferenciaci\u00f3n de caracter\u00edsticas del modelo, como la eliminaci\u00f3n de caracter\u00edsticas y el trabajo con ausencias. En nuestro caso, tenemos una serie de caracter\u00edsticas estad\u00edsticas importantes (por remitentes, hashes de texto, URLs, etc.) que se almacenan en una base de datos que tiene la propiedad de fallar. Ante tal eventualidad, el modelo, por supuesto, no est\u00e1 preparado, ya que en el conjunto de entrenamiento no hay situaciones de fallo. En tales casos, combinamos t\u00e9cnicas de KD y aumento: durante el entrenamiento de parte de los datos, eliminamos o nulificamos las caracter\u00edsticas necesarias, mientras que las etiquetas (salidas del modelo actual) se toman originales; el modelo estudiante aprende a repetir esta distribuci\u00f3n.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/5e1f5af9a359646a49f4fe88ffed1025.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHemos notado que cuanto m\u00e1s severa es la manipulaci\u00f3n de los modelos, mayor es el porcentaje de muestra del flujo que se requiere.<\/p>\n<p>Para la eliminaci\u00f3n de caracter\u00edsticas, la operaci\u00f3n m\u00e1s simple, solo se necesita una peque\u00f1a parte del flujo, ya que solo se cambian un par de caracter\u00edsticas, y el modelo actual se ha entrenado en el mismo conjunto: la diferencia es m\u00ednima. Para simplificar el modelo (reducir la cantidad de \u00e1rboles varias veces) se requiere ya un 50\/50. Y para las ausencias de caracter\u00edsticas estad\u00edsticas importantes, que afectan seriamente el rendimiento del modelo, se necesita a\u00fan m\u00e1s flujo para igualar el funcionamiento del nuevo modelo resistente a las ausencias en todos los tipos de correos. <\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8f3729cfff43be9ecdc47d532daa8d6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>FastText<\/h3>\n<p>\nPasemos a FastText. Recuerdo que la representaci\u00f3n (Embedding) de una palabra consiste en la suma del embedding de la propia palabra y todos sus N-gramas de letras, generalmente trigramas. Dado que puede haber bastantes trigramas, se utiliza Bucket Hashing, es decir, la transformaci\u00f3n de todo el espacio en un cierto hash map fijo. Como resultado, la matriz de pesos tiene dimensiones de la capa interna multiplicadas por la cantidad de palabras m\u00e1s los buckets. <\/p>\n<p>Durante el fine-tuning surgen nuevas caracter\u00edsticas: palabras y trigramas. En el fine-tuning est\u00e1ndar de Facebook no ocurre nada significativo. Solo se ajustan los antiguos pesos con la entrop\u00eda cruzada en nuevos datos. As\u00ed, las nuevas caracter\u00edsticas no se utilizan, por supuesto, este enfoque presenta todas las desventajas mencionadas anteriormente relacionadas con la imprevisibilidad del modelo en producci\u00f3n. Por lo tanto, hemos mejorado un poco FastText. A\u00f1adimos todos los nuevos pesos (palabras y trigramas), ajustamos toda la matriz con la entrop\u00eda cruzada y a\u00f1adimos regularizaci\u00f3n arm\u00f3nica por analog\u00eda con el modelo lineal, que garantiza un cambio insignificante en los pesos antiguos.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/4491639587d1c91ac91d77b587ee0111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>CNN<\/h3>\n<p>\nCon las redes convolucionales es algo m\u00e1s complicado. Si en la CNN se ajustan las \u00faltimas capas, entonces, por supuesto, se puede aplicar regularizaci\u00f3n arm\u00f3nica y garantizar la continuidad. Pero en el caso de que se requiera ajustar toda la red, esa regularizaci\u00f3n ya no se puede aplicar a todas las capas. Sin embargo, hay una opci\u00f3n de entrenamiento de embeddings complementarios a trav\u00e9s de Triplet Loss (<noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1503.03832\">art\u00edculo original<\/a><\/noindex>).<\/p>\n<h4>Triplet Loss<\/h4>\n<p>\nA trav\u00e9s del ejemplo de la tarea de antifraude, analizaremos en t\u00e9rminos generales el Triplet Loss. Tomamos nuestro logotipo, as\u00ed como ejemplos positivos y negativos de logotipos de otras compa\u00f1\u00edas. Minimizar la distancia entre los primeros y maximizar la distancia entre los segundos, hacemos esto con una peque\u00f1a holgura para garantizar una mayor compactaci\u00f3n de las clases. <\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/dc8547fa042286798eb5c2f0887c4da6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi ajustamos la red, cambiamos completamente el espacio m\u00e9trico, y se vuelve absolutamente incompatible con el anterior. Este es un problema grave en las tareas que utilizan vectores. Para sortear este problema, mezclaremos durante el entrenamiento los antiguos embeddings.<\/p>\n<p>Hemos a\u00f1adido nuevos datos al conjunto de entrenamiento y estamos formando desde cero la segunda versi\u00f3n del modelo. En la segunda etapa, afinamos nuestra red (Finetuning): primero se ajusta la \u00faltima capa y luego se descongelan todas las capas. En el proceso de creaci\u00f3n de tripletas, solo una parte de las incrustaciones se calcula utilizando el modelo entrenado, las dem\u00e1s se obtienen a trav\u00e9s del antiguo. De esta forma, durante el proceso de afinaci\u00f3n, garantizamos la compatibilidad de los espacios m\u00e9tricos v1 y v2. Una especie de variante de regularizaci\u00f3n arm\u00f3nica.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/854d4fcc97775b24e6863cc38743cd27.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Arquitectura completa<\/h3>\n<p>\nSi consideramos todo el sistema en su conjunto a trav\u00e9s del ejemplo del antispam, los modelos no est\u00e1n aislados, sino que est\u00e1n anidados unos dentro de otros. Tomamos im\u00e1genes, textos y otros rasgos, y con la ayuda de CNN y Fast Text obtenemos incrustaciones. Luego, sobre las incrustaciones se aplican clasificadores que generan puntuaciones para diversas clases (tipos de correos, spam, presencia de logotipos). Las puntuaciones y rasgos ya se env\u00edan a un bosque de \u00e1rboles para tomar la decisi\u00f3n final. Clasificadores individuales en este esquema permiten interpretar mejor los resultados del funcionamiento del sistema y afinar componentes de manera m\u00e1s precisa en caso de surgir problemas, en lugar de presentar todos los datos sin procesar a los \u00e1rboles de decisiones.<\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/30effc5ef7398db5f085b6dd415647d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn definitiva, garantizamos la continuidad en cada nivel. En el nivel inferior, en CNN y Fast Text, utilizamos regularizaci\u00f3n arm\u00f3nica, y para los clasificadores en medio, tambi\u00e9n regularizaci\u00f3n arm\u00f3nica y calibraci\u00f3n de la puntuaci\u00f3n para compatibilidad en la distribuci\u00f3n de probabilidades. El boosting de \u00e1rboles se entrena de manera incremental o mediante Knowledge Distillation.<\/p>\n<p>En general, el soporte para tal sistema de aprendizaje autom\u00e1tico anidado suele ser complicado, ya que cualquier componente en el nivel inferior lleva a la actualizaci\u00f3n de todo el sistema superior. Pero dado que en nuestra configuraci\u00f3n cada componente cambia ligeramente y es compatible con el anterior, todo el sistema puede actualizarse en partes sin la necesidad de reentrenar toda la estructura, lo que permite mantenerlo sin un alto coste adicional. <\/p>\n<h2>Despliegue<\/h2>\n<p>\nHemos revisado la recopilaci\u00f3n de datos y el afinamiento de diferentes tipos de modelos, por lo que pasamos a su despliegue en el entorno de producci\u00f3n.<\/p>\n<h3>Pruebas A\/B<\/h3>\n<p>\nComo mencion\u00e9 anteriormente, durante el proceso de recopilaci\u00f3n de datos, por lo general, obtenemos una muestra sesgada, lo que hace imposible evaluar el rendimiento de producci\u00f3n del modelo. Por lo tanto, al implementar el modelo, es imprescindible compararlo con la versi\u00f3n anterior para entender c\u00f3mo est\u00e1n realmente las cosas, es decir, realizar pruebas A\/B. De hecho, el proceso de implementaci\u00f3n y el an\u00e1lisis de gr\u00e1ficos es bastante rutinario y se presta perfectamente a la automatizaci\u00f3n. Implementamos nuestros modelos gradualmente en un 5 %, 30 %, 50 % y 100 % de los usuarios, recopilando todas las m\u00e9tricas disponibles sobre las respuestas del modelo y los comentarios de los usuarios. En caso de cualquier anomal\u00eda grave, revertimos autom\u00e1ticamente el modelo, y en otros casos, al acumular una cantidad suficiente de clics de los usuarios, tomamos la decisi\u00f3n de aumentar el porcentaje. Al final, llevamos el nuevo modelo al 50 % de los usuarios completamente de forma autom\u00e1tica, y la implementaci\u00f3n a toda la audiencia es aprobada por una persona, aunque este paso tambi\u00e9n se puede automatizar.<\/p>\n<p>Sin embargo, el proceso de pruebas A\/B representa un amplio espacio para la optimizaci\u00f3n. La cuesti\u00f3n es que cualquier prueba A\/B es bastante prolongada (en nuestro caso, dura de 6 a 24 horas dependiendo de la cantidad de comentarios), lo que la hace bastante costosa y con recursos limitados. Adem\u00e1s, se requiere un porcentaje suficientemente alto de flujo para la prueba, con el fin de acelerar el tiempo total de la prueba A\/B (recoger una muestra estad\u00edsticamente significativa para evaluar m\u00e9tricas con un bajo porcentaje puede llevar mucho tiempo), lo que hace que la cantidad de ranuras A\/B sea extremadamente limitada. Es obvio que necesitamos incluir en la prueba solo los modelos m\u00e1s prometedores, los cuales, durante el proceso de ajuste, obtenemos en gran cantidad.<\/p>\n<p>Para abordar esta tarea, entrenamos un clasificador separado que predice el \u00e9xito de la prueba A\/B. Para ello, utilizamos como caracter\u00edsticas las estad\u00edsticas de la toma de decisiones, Precision, Recall y otras m\u00e9tricas en el conjunto de entrenamiento, en el conjunto de validaci\u00f3n y en una muestra del flujo. Adem\u00e1s, comparamos el modelo con el actual en producci\u00f3n, con heur\u00edsticas, y consideramos la complejidad del modelo. Utilizando todas estas caracter\u00edsticas, el clasificador, entrenado con el historial de pruebas, eval\u00faa los modelos candidatos, en nuestro caso, \u00e1rboles de decisi\u00f3n, y toma la decisi\u00f3n de cu\u00e1l de ellos enviar a la prueba A\/B. <\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/41b121987209a663075be399e83f5a50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn el momento de la implementaci\u00f3n, este enfoque permiti\u00f3 aumentar varias veces la cantidad de pruebas A\/B exitosas.<\/p>\n<h3>Pruebas y monitoreo<\/h3>\n<p>\nLas pruebas y el monitoreo, sorprendentemente, no perjudican nuestra salud; m\u00e1s bien, lo contrario, mejoran y eliminan el estr\u00e9s innecesario. Las pruebas permiten prevenir fallos, mientras que el monitoreo ayuda a detectarlos a tiempo para reducir su impacto en los usuarios.<\/p>\n<p>Aqu\u00ed es importante entender que tarde o temprano su sistema siempre cometer\u00e1 errores; esto se debe al ciclo de desarrollo de cualquier software. Al inicio del desarrollo, hay muchos errores hasta que todo se estabiliza y se completa la fase principal de innovaciones. Pero con el tiempo, la entrop\u00eda se impone, y vuelven a aparecer errores, debido a la degradaci\u00f3n de los componentes y el cambio de datos, como mencion\u00e9 al principio.<\/p>\n<p>Aqu\u00ed me gustar\u00eda se\u00f1alar que cualquier sistema de aprendizaje autom\u00e1tico debe ser evaluado en t\u00e9rminos de su rentabilidad a lo largo de todo su ciclo de vida. A continuaci\u00f3n, se muestra un ejemplo de la operaci\u00f3n de un sistema para detectar un tipo raro de spam (en el gr\u00e1fico, la l\u00ednea est\u00e1 cerca de cero). Una vez, debido a un atributo mal almacenado en cach\u00e9, el sistema se volvi\u00f3 loco. Lamentablemente, no hab\u00eda monitoreo para activaciones an\u00f3malas, como resultado, el sistema comenz\u00f3 a guardar correos en la carpeta 'spam' cerca de la frontera de la decisi\u00f3n en grandes cantidades. A pesar de corregir las consecuencias, el sistema ya hab\u00eda fallado tantas veces que no recuperar\u00e1 su costo en cinco a\u00f1os. Esto es un completo fracaso desde la perspectiva del ciclo de vida del modelo. <\/p>\n<p><img decoding=\"async\" alt=\"Uso de aprendizaje autom\u00e1tico en Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/65efd799537ceea3761cabc3a764ba90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor lo tanto, algo tan simple como el monitoreo puede ser clave en la vida del modelo. Adem\u00e1s de las m\u00e9tricas est\u00e1ndar y evidentes, consideramos la distribuci\u00f3n de respuestas y puntajes del modelo, as\u00ed como la distribuci\u00f3n de valores de caracter\u00edsticas clave. Usando la divergencia KL, podemos comparar la distribuci\u00f3n actual con la hist\u00f3rica o los valores en la prueba A\/B con el resto del flujo, lo que permite detectar anomal\u00edas en el modelo y revertir los cambios a tiempo.<\/p>\n<p>En la mayor\u00eda de los casos, lanzamos nuestras primeras versiones de sistemas utilizando heur\u00edsticas simples o modelos que posteriormente utilizamos para monitoreo. Por ejemplo, monitorizamos un modelo NER en comparaci\u00f3n con expresiones regulares para tiendas en l\u00ednea espec\u00edficas, y si la cobertura del clasificador disminuye en comparaci\u00f3n con ellas, investigamos las razones. \u00a1Otra aplicaci\u00f3n \u00fatil de las heur\u00edsticas!<\/p>\n<h2>Resultados<\/h2>\n<p>\nRevisemos nuevamente los puntos clave del art\u00edculo.<\/p>\n<ul>\n<li><b>Fibd\u00e9c<\/b>. Siempre pensamos en el usuario: c\u00f3mo vivir\u00e1 con nuestros errores, c\u00f3mo podr\u00e1 informarlos. No olvidemos que los usuarios no son una fuente de retroalimentaci\u00f3n pura para el entrenamiento de modelos, y es necesario filtrar esta informaci\u00f3n con la ayuda de sistemas de ML auxiliares. Si no hay manera de recopilar se\u00f1ales del usuario, buscamos fuentes alternativas de retroalimentaci\u00f3n, como sistemas relacionados. \n<\/li>\n<li><b>Reentrenamiento<\/b>. Aqu\u00ed lo principal es la continuidad, por lo que nos basamos en el modelo actual en producci\u00f3n. Entrenamos nuevos modelos de manera que no se desv\u00eden demasiado del anterior mediante regularizaci\u00f3n arm\u00f3nica y trucos similares.<\/li>\n<li><b>Despliegue<\/b>. El autodespliegue basado en m\u00e9tricas reduce significativamente el tiempo de implementaci\u00f3n de modelos. El monitoreo de estad\u00edsticas y la distribuci\u00f3n de decisiones, as\u00ed como el n\u00famero de falsos positivos de los usuarios, es fundamental para su tranquilidad y fines de semana productivos.\n<\/li>\n<\/ul>\n<p>\nBueno, espero que lo que has le\u00eddo te ayude a mejorar m\u00e1s r\u00e1pidamente tus sistemas de ML, acelerar su salida al mercado y hacerlos m\u00e1s confiables, reduciendo la cantidad de estr\u00e9s en el trabajo.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/476714\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 Highload++ \u0438 DataFest Minsk 2019 \u0433. \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0447\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0436\u0438\u0437\u043d\u0438 \u0432 \u0441\u0435\u0442\u0438. \u0421 \u0435\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u044b \u0432\u0435\u0434\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443, \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438, \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0435\u043b\u0435\u0439, \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u043c. \u0412 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 2018 \u0433\u043e\u0434\u0430 \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u043e\u0447\u0442\u044b. \u041a\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53143","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u041f\u043e\u0447\u0442\u0435 Mail.ru | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-11-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:00+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Operaci\u00f3n de aprendizaje autom\u00e1tico en Mail.ru | ProHoster","description":"Basado en mis presentaciones en.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u041f\u043e\u0447\u0442\u0435 Mail.ru | ProHoster","og:description":"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-11-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53143","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 06:14:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:30:25","updated":"2026-01-24 06:14:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/53143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=53143"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/53143\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=53143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=53143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=53143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}