¿Cómo agrega Quora el aprendizaje automático a su aplicación web?

Dado que los detalles de la arquitectura de Quora se encuentran entre sus secretos más guardados, probablemente nunca lo sabremos. Sin embargo, no son los primeros en implementar algoritmos ML en los servicios, así que …

Construyamos un feed de Quora. Tiene una base de datos con una capa de caché, un motor de recomendaciones y un algoritmo de clasificación, en aras de la simplicidad.

Requisitos:

  1. Alta disponibilidad de todos los servicios. Si algo sale, la alimentación deja de funcionar.
  2. Posibilidad de actualizar constantemente. No puede seguir recomendando respuestas populares a partir de 2012. También debe tener en cuenta los temas de tendencias emergentes, los cambios en las preferencias de los usuarios y, al mismo tiempo, evitar los cambios repentinos en los que mi clara fuente centrada en AI se inunda con friendzone si decido para seguir “Citas”.
  3. No hay discrepancias en el comportamiento entre las versiones móvil y web, obviamente.
  4. Sin dependencias en la interfaz. Si el equipo de UX decide dejar de mostrar votos a favor, no debería haber cambiado el motor de recomendación.

En esta tarea, suponemos que los equipos de ingeniería de datos e infraestructura hicieron todo bien y la base de datos funciona perfectamente.

Este es el esquema aproximado del ciclo de trabajo para cada usuario:

  1. El usuario envía una solicitud para un nuevo feed
  2. El motor de recomendaciones forma un grupo de contenido para mostrar
  3. Los algoritmos de clasificación crean el esqueleto de la fuente; digamos, una lista de identificadores para preguntas y respuestas
  4. El servidor consulta la base de datos para obtener datos específicos

El primer paso no es nuestra principal preocupación. Lo que necesitamos saber es el contenido que ha visto el usuario, por lo que no aparece en el feed una y otra vez. Nunca veo ninguna respuesta dos veces, aunque para las preguntas no es el caso. Cualquier usuario puede ver solo una fracción del contenido, por lo que esta relación puede almacenarse como una matriz distribuida dispersa (como suele hacerse).

El segundo paso puede variar. Hay tantos trucos de rendimiento que podrían usarse aquí, como preconstruir el feed de usuario de antemano con almacenarlo en caché, construir algunos feeds separados para temas populares y tomar muestras de ellos para los suscriptores, etc. La principal preocupación aquí es la velocidad, porque si intenta asignar puntajes a cada respuesta en su base de datos para cada solicitud, tomará una eternidad. Hay dos maneras:

  • Haz el algoritmo más simple
  • Usar heurística

No conozco detalles sangrientos, por supuesto, pero las recomendaciones de YouTube no son realmente una cirugía de cohetes, de lo contrario no podrían servir a tantos de ellos tan rápido. ¿Por qué? La alimentación no tiene que ser perfecta. Solo tiene que ser lo suficientemente bueno . Lo que significa:

  • Correspondiente a mis intereses
  • Diverso
  • Alta calidad

Esto se hace mediante recsys y clasificación, que no es de lo que se trata la pregunta. El verdadero desafío está en los detalles, por ejemplo, no construye representaciones de texto cada vez que crea una nueva fuente. Idealmente, debe hacerse solo una vez, cuando se envía la respuesta. Después de eso, todos los algoritmos de ML tratan solo con los datos numéricos que aceleran mucho las cosas. Entonces, puede haber un servicio interno adicional para eso.

El tercer paso, clasificar el feed, consiste en elegir el contenido correcto de un grupo sugerido. Quizás tenga curiosidad por qué debería devolver una lista de identificadores, porque sus servidores no necesitan nada más, la construcción de la respuesta http y el control de la información visible se realiza mediante otro módulo: el cuarto paso.

Ahora, hay una gran diferencia entre implementar un algoritmo en línea y uno fuera de línea. El algoritmo en línea no debe ralentizarse por el proceso de aprendizaje que realmente no se detiene. Implementar un algoritmo fuera de línea es fácil, ejecuta algunos trabajos en un clúster, obtiene un modelo serializado, reemplaza uno antiguo por uno nuevo. Cuando actualiza un algoritmo en línea, es importante separar la señal del ruido, de lo contrario no solo terminará con un modelo inútil, sino que también será dolorosamente lento. Por ejemplo, no actualice SGD incremental después de cada voto a favor.

Cuando implementa un algoritmo en línea, debe asegurarse de que sea robusto. Porque si no es así, es posible que se enfrente a una situación en la que se ajusta demasiado a alguna tendencia, todos reciben nada más que Donald Trump en su feed y sus inversores y usuarios comienzan a odiarlo.

Estas son consideraciones bastante generales. En la práctica:

  • Deje la mayor cantidad de procesamiento de datos y procesamiento previo fuera del backend del sitio. Debe hacerse en otros servidores para no interferir con los servicios de ML.
  • Los datos reales utilizados en el ciclo de trabajo deben ser lo más pequeños posible. Son muchas solicitudes, por lo que debe minimizar todas las transferencias de datos. Los ID y los vectores numéricos son perfectos.
  • Todos sus algoritmos deben ser escalables y funcionar exactamente de la misma manera en el clúster que en una sola máquina.
  • Deben ser independientes de todas las demás interfaces y formatos de datos. Mejor escenario: representación del usuario (no id, un vector es mejor) como entrada, una lista de identificadores como salida.
  • Mantenga los datos relevantes, como una base de datos de “contenido visto” en las mismas máquinas que el algoritmo que lo utiliza. La diferencia entre leer desde el disco y recibir datos a través de la conexión a Internet, incluso en el mismo centro de datos, es muy grande.
  • Particionar los datos de manera más inteligente. ¿Qué pasaría si pudiera realizar algunas partes de la clasificación y las recomendaciones independientemente de otras? (Como en el ejemplo con la creación de feeds estáticos para temas populares). Localizar esa parte del algoritmo en una máquina separada con solo los datos relevantes podría ser beneficioso.
  • Por último, pero no menos importante: comprenda las secciones críticas de su algoritmo e impleméntelas de la manera más eficiente. Si puede reescribir algunas partes en C, probablemente sea una buena idea.

Quora tiene un front-end (web, aplicación) que se conecta a un back-end (servidor) que sirve los datos. Por lo que entendí, el back-end está escrito en python, así que ahí es donde sucede la magia. El procesamiento en tiempo real es bastante difícil, pero ¡adelante! ¡Aprenderás mucho!

More Interesting

¿La segmentación de palabras chinas se considera un problema resuelto?

¿Es posible realizar el aprendizaje en conjunto mediante el apilamiento si solo tengo dos modelos?

¿Cuáles son algunos de los problemas abiertos más importantes en el aprendizaje automático en este momento?

Cómo aplicar PCA para la reducción de dimensionalidad y SVM para agrupar y clasificar los patrones usando C ++ OpenCV

En la curva ROC, cualquier punto es resultado del modelo en un parámetro particular. No estoy claro por qué el adivinador aleatorio está en x = y y no siempre (0.5, 0.5). ¿También cómo interpretar el área bajo la curva?

¿Cómo puede llevar a cabo experimentos y compararlos con otros algoritmos en la investigación de la visión por computadora (detección de objetos, reconocimiento, seguimiento, etc.)?

Cómo saber qué algoritmo usar y cuándo

¿Cuál es una buena forma de buscar artículos en visión artificial y aprendizaje automático?

¿Hay algún lugar en la ciencia donde la biblioteca estadística de Python sea pobre o inmadura en comparación con R?

¿Qué es el aprendizaje automático y sus diferencias con la inteligencia artificial?

¿Cuáles son las mejores mejores bibliotecas para la clasificación? ¿Cómo se comparan entre sí?

¿Cuál es el truco del núcleo?

¿Por qué Apple no forma parte de la Asociación en IA?

¿Hay un LSTM en TensorFlow que procesa un carácter a la vez?

¿Hay ejemplos de organizaciones de ciencias de la vida que logren resultados en el descubrimiento de drogas a través del aprendizaje automático que no serían posibles sin el aprendizaje automático?