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.
- ¿Se puede resolver el problema de cauvery utilizando algoritmos de aprendizaje automático?
- ¿Se utiliza Machine Learning fuera de las startups y otras "nuevas" empresas?
- ¿Qué es exactamente la monitorización neuronal remota?
- ¿Cuál es la diferencia entre Empirical Bayes e inferencia bayesiana?
- ¿Cuáles son algunas arquitecturas de redes neuronales?
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.