¿Qué tipo de tecnología de aprendizaje automático debo usar para crear clasificaciones de usuarios de Twitter?

Ok, comencemos con la definición del producto, pasemos a los requisitos y luego hagamos una selección de tecnología básica. Por ejemplo, trata esto como un scrum de inicio muy rápido.

1. El producto es un motor de publicidad. Esto significa que debe tomar rápidamente una solicitud web de un usuario, identificar al usuario, descubrir qué mostrarle, optimizar el ingreso y el ajuste del usuario / interés y el sitio de origen y otros factores, y responder con un anuncio. Sí, esto es una simplificación. En este caso, el ajuste de usuario / interés se deriva de un análisis de los tweets del usuario.

2. Debe poder identificar al usuario que realiza la solicitud lo suficientemente bien como para correlacionarlo con una cuenta de Twitter. Supongamos, por simplificación, que tiene una asignación de la cookie del usuario o el token de encabezado a una cuenta de Twitter. Una vez que haya identificado al usuario, debe relacionarlo con un anuncio basado en un conjunto de palabras clave ponderadas que haya extraído de sus transmisiones de Twitter y un conjunto de palabras clave asociadas con su inventario de anuncios.

3. Hay varias piezas aquí. Primero, debe poder leer y analizar las transmisiones de Twitter. Un prototipo de esto se puede escribir con algo tan simple como la combinación de un cliente API de Twitter y algunos scripts, todo lo cual se puede escribir en Python, Scala, JavaScript o el idioma que elija. Sin embargo, el trabajo de producción a escala requeriría que haga esto tanto contra transmisiones en vivo como datos históricos, así como aplicar algún grado de clasificación. Para esto, probablemente desee algo como Spark, Spark Streaming y SparkML. Python, R, Scala y Java se pueden usar para esto. Para el almacenamiento de los datos, puede crear prototipos en MySQL o Postgres. A escala, para unos cientos de millones de usuarios, querrás algo un poco más escalable, como Cassandra o ElasticSearch.

Próximo. Con los datos en su lugar e indexados, querrá escribir algunas rutinas coincidentes. Por ejemplo, dado el usuario 79, cuyos intereses son {Java: 7, Código abierto: 18, NFL: 4, Granadas: 891} y un inventario de anuncios que contiene muchos miles de palabras clave, cada una con pesos, reglas e ingresos, desea seleccionar un anuncio. Se puede escribir un prototipo utilizando un enfoque en memoria. Una combinación de Pythin y Reddis estaría bien para un prototipo. Pero, para un sistema real con millones de anuncios, es probable que se necesite un enfoque de reducción de mapas paralelo distribuido. En el caso principal, algo como los actores akka es interesante. Este tipo de sistemas, debido a la necesidad de controles de velocidad y costo, puede ser bastante interesante de armar.

Todo bien. Entonces, con esta descripción vertiginosamente superficial y breve, creo que un sistema basado en Python que hace uso de una base de datos postgres y algunas rutinas de coincidencia simples sería un buen comienzo para la creación de prototipos. Pero, para un sistema de producción importante, un enfoque basado en la escala que utilice tanto el cómputo de lotes de chispas como la transmisión de chispas, todo lo cual hace uso de rutinas de aprendizaje automático, introduciría datos en el sistema. Y, se escribiría un sistema de actores basado en scala, junto con, probablemente, algo así como Cassandra (que habría recibido datos de Spark), para distribuir en la memoria la correspondencia en tiempo real de las solicitudes con los anuncios. Su kilometraje en la pila de tecnología precisa puede, por supuesto, variar: Erlang y Clojure son alternativas obvias.

Espero que esto ayude. Un poco.