¿Cómo implementaría el servicio de noticias de Quora?

Mi idea de una implementación (ingenua) de Quora Newsfeed se puede dividir en dos pasos:

La primera parte es obtener el conjunto de preguntas válidas que satisfacen las restricciones del usuario. Esto es similar a una consulta de base de datos en el conjunto de todas las preguntas recientes / no leídas (por no leídas nos referimos a una pregunta en la que el usuario no ha realizado ninguna acción). Por lo tanto, aplicamos todos los filtros válidos (usuarios seguidos, temas seguidos, temas silenciados, usuarios bloqueados, ya leídos, límite de tiempo, etc.) adecuadamente a nuestra consulta y obtenemos un conjunto válido de preguntas que podemos mostrar a nuestro usuario.

Pero este conjunto de preguntas puede ser potencialmente enorme. Por lo tanto, no solo hemos malgastado una gran cantidad de recursos tratando de obtener identificadores de preguntas que nunca se mostrarán, sino que ahora también tenemos que “clasificar” este conjunto de preguntas obtenidas, o específicamente, debemos seleccionar las preguntas principales ‘k’ que necesitamos para mostrar al usuario. Esto puede calificarse como un problema de clasificación en el que, suponiendo que tengamos un recuadro negro B que, dado un conjunto de preguntas de entrada S y el usuario U, devolverá k preguntas que deberían mostrarse al usuario. Entonces tenemos B (S, U, k) = el conjunto que se mostrará al usuario.

Cómo se implementa el blackbox es muy interesante. En la variación más simple, podemos usar la suma ponderada del vector de características F sobre un vector de pesos W, donde el puntaje final de la pregunta es FW (lineal)

Podemos tener tres enfoques aquí: i) Ingeniero manual tanto en el vector de características como en los pesos correspondientes ii) Características ingeniero manual, pero use un algoritmo ML entrenado para calificar y actualizar W iii) Aprenda F también de manera no supervisada (¿Aprendiendo a fondo a alguien?)

Para el caso i) podemos tener un conjunto de características F para la pregunta (por ejemplo, F = {{perfil del autor}, {perfil de la pregunta}}. Podemos diseñar a mano el vector de peso W usando análisis de uso y creencias a priori. Por ejemplo, características como el número de votos a favor o si el usuario U ha seguido al autor pueden tener pesos más altos que decir, si el usuario U ha seguido un tema en la pregunta. Esto tiene sentido ya que es más probable que una respuesta popular de una persona que le guste para interesarle que la respuesta aleatoria en un tema que ha seguido (recuerde que ya hemos filtrado temas silenciados). Un parámetro nominal para estimar la respuesta del usuario es si votaron / compartieron el elemento que mostramos. Con el tiempo, la analítica agregada se puede utilizar para actualizar el vector de peso W.

Si esto no es lo suficientemente bueno (seguramente), entonces probablemente podamos elegir el caso ii) o iii), donde los pesos se actualizarán automáticamente de una manera en línea, dependiendo de lo que vota el usuario.

El vector de peso W también se puede generar de manera híbrida (escenario más probable). Podemos tener un vector de peso global que se generaliza para todos los usuarios y está hecho a mano en base a análisis generales del sitio, pero también un vector de peso específico del usuario W ‘que se aprende dinámicamente y se encarga de las respuestas del usuario a través de votos a favor / en contra.

Me inclino a pensar si los algoritmos generales de ML-Rank también se pueden usar aquí, pero no estoy seguro de cómo se puede obtener un conjunto de entrenamiento lo suficientemente grande como para capturar todas las variaciones.

No estoy seguro de lo que ofrece Quora en este momento y cuánta redundancia podría contener mi respuesta, así que tengan paciencia conmigo.

Tengo tres pestañas en mente:

  1. Mejores historias
  2. Más reciente
  3. Actualmente popular.

Historias principales:

Estoy contento con lo que Quora está ofreciendo a través de la pestaña Top Stories en este momento. Es una excelente manera de descubrir nuevos contenidos. Si tuviera que diseñarlo desde cero, simplemente llenaría esta pestaña con contenido que fue destacado recientemente. ¿Qué tan reciente podría depender de lo que funciona mejor (algunas pruebas A / B pueden ser?) – contenido que es popular hoy, la semana pasada o el mes. Puede ser una mezcla de ambos. Pero predominantemente contenido que no fue creado por las personas que sigo.

Las mejores historias podrían ser un gran lugar para descubrir nuevo buen material para leer. Un usuario se los estaría perdiendo si el feed solo se adhiere al contenido creado por las personas que sigo. Por lo tanto, Top Stories podría contener el contenido más popular que se agregó a los temas que sigo, votado por las personas que sigo, solo entonces seguido por el contenido principal del día / semana / mes por las personas que sigo.

Más reciente:

Esta es una cola simple y sin sentido de todo el contenido en orden cronológico. Esto se llena según las personas que sigo. Puede que no tenga sentido poblarlo en función del tema que sigo porque sería una gran actividad y la alimentación podría estar cambiando a un ritmo más rápido de lo que puedo consumir.

Actualmente popular (o lo que está de moda):

Este será un gran lugar para descubrir contenido nuevo sin estar limitado por las personas o los temas que sigo. Quora solía mostrar temas de tendencia y ya no lo hacen. En lugar de solo mostrar los temas, habría tenido más sentido mostrar el contenido actualmente en aumento de ese tema, ya que me ahorra la carga de tener que pasar por contenido inútil en un área a la que no estoy acostumbrado. De nuevo, este sería un gran lugar para mantener a los usuarios al tanto de las noticias y el nuevo contenido que se publica.

Se vería algo así. Perdón por la apresurada maqueta.

Ah, y me encantó la opción aleatoria que una vez tuvo Quora. Entonces tendría un ‘¡Sorpréndeme!’ característica que me llevaría a una respuesta / publicación de blog / pregunta aleatoria de Quora (puede ser incluso un usuario aleatorio de Quora cuyas respuestas puedo consultar).

Crearía un gráfico que vincule todas las categorías a categorías de naturaleza similar pero con fortalezas diferentes. Entonces, vincularía el aprendizaje fuerte de Machine Learning a Inteligencia Artificial. Aprendizaje automático de algoritmos Enlace normal. Aprendizaje automático a C ++ enlace débil. Le daría al usuario la opción de elegir las categorías que le interesaban. Luego tomaría todos los artículos populares de esas categorías y un artículo popular de los dos enlaces más fuertes. Eso ocuparía el 25% de mis noticias. Y todas estas deben ser preguntas que han tenido actividad recientemente.

A continuación, daría un 25% a las preguntas que sigo según la actividad reciente. Si el usuario ya vio la actividad reciente, la eliminaría del feed hasta que se vea más actividad.

Luego, haría un 20% a las preguntas en los temas que sigues y los temas Strong Linked.

Tal vez alrededor del 10% iría a las preguntas más populares de Quora hoy en las que aún no ha hecho clic.

Luego, llenaría el 20% restante con preguntas aleatorias del otro 80%.