ComentaBOT: Creando el comentarista perfecto con cadenas de Márkov

tl;dr creando un bot de twitter que sea el pelotudo promedio

Cuando uno entra a la sección de comentarios del sitio de un diario normalmente se termina riendo de lo absurdo de estos y/o perdiendo toda la fe en la humanidad, o al menos, lastimosamente eso es lo que me sucede a mi. No es que espere iluminarme pero a veces uno busca algún aporte o punto de vista diferente pero en la mayoría de los casos, y aunque el artículo trate sobre el virus del Zika o cualquier otro tema lo que sucede es algo similar a esto:

[UFOstronismo y demás sinsentidos]

Entonces ya sabiendo que no voy a poder entender el razonamiento de los comentaristas decidí "masoquistamente" tratar reproducirlo con la ayuda de 53.373 comentarios de noticias de ABC y cadenas de Márkov.

¡Cuantos comentarios y cadenas de qué?

Sí, de Márkov :P

Bueno, vamos por partes. Sin dar vueltas veamos la definición de Wikipedia:

En la teoría de la probabilidad, se conoce como cadena de Márkov a un tipo especial de proceso estocástico discreto en el que la probabilidad de que ocurra un evento depende solamente del evento inmediatamente anterior. Esta característica de falta de memoria recibe el nombre de propiedad de Markov.
Recibe su nombre del matemático ruso Andréi Márkov (1856-1922).

Haciendo una burda síntesis podríamos decir que dado un estado actual se puede calcular la probabilidad del estado siguiente. Esto tiene muchas aplicaciones desde Meteorología a Inteligencia Artificial; por ejemplo, el algoritmo PageRank de Google utiliza cadenas de Márkov.

¿Y qué tiene que ver esto con un comentarista o a que viene este post?

Ok voz en off en cursiva, ya estamos llegando a eso.

El lenguaje no es algo que se pueda reproducir fácilmente en un modelo matemático(al menos no con este enfoque) sobre todo porque tiene muchas reglas gramática y semántica por lo que sería muy difícil sacar un resultado que sea coherente, pero...
¡Esa es la buena noticia!
Si queremos imitar a un comentarista promedio las reglas gramaticales, semánticas y especialmente coherencia no son cosas que necesitemos! :D
Lo único que se necesita es "alimentar" al algoritmo con datos reales, es decir con comentarios de medios digitales y elegí ABC por ser el sitio de noticias nacionales con mas visitas (asumo que más comentarios también) según el ranking de Alexa.
Con esto podemos ir eligiendo una palabra o frase y se pueden completar las siguientes de acuerdo a la probabilidades según nuestros datos (el conjunto de comentarios).

Scraping de datos

Luego de una corta investigación vi que el scraping como tal por suerte no era necesario; la recolección, minería o como lo quieran llamar se puede obtener llamando al API de Facebook, es decir sin ni siquiera "gastar" el ancho de banda de ABC, solo pasando la URL deseada como parámetro, por ejemplo:
https://graph.facebook.com/comments?id=http://abc.com.py/1447680.html&limit=500&fields=message
El hecho que la url corta sea prácticamente numérica facilitó muchísimo el trabajo. Con esta información crear un script (ver código) que descargue los comentarios y los guarde en una base de datos no fue muy difícil, la parte complicada fue no pasarse de los limites del API de Facebook para consultar aproximadamente 3 meses de noticias.

Resultado: 53.373 comentarios

Más que suficientes para lo que necesitamos.

¡Uff muchas vueltas y muchos tecnicismos donde está el bot?

Voz en off en cursiva cuando tenés razón, tenés razón.

A quién le interese la parte técnica, el código está en un repositorio de GitHub con unas breves instrucciones de uso; preguntas, sugerencias y/o modificaciones son totalmente bienvenidas.

Sin más preambulos les presento a

@ComentaristaABC

El bot está programado para tuitear cada dos horas y tuitéa este tipo de cosas incoherentes:

Pero a veces hasta tiene más sentido que los comentaristas reales

Y algunas son directamente WTF 😂

También puede responder tuits basandose en las primeras 3 palabras que le escribas por ejemplo:

La respuesta😂😳:

Pero si tengo que elegir uno solo como la prueba de que el bot realmente es un comentarista de ABC me quedo con este tuit:

Simplemente sublime.

Para más adelante hay muchas cosas que se pueden mejorar, desde usar otro algoritmo a cortar mejor las palabras pero vamos a ver que tal funciona. También en estos días voy a liberar el dataset de los 53.373 comentarios por si alguien necesita una base de datos de incoherencias.

Ahora solo resta escribirle para ver que nos cuenta nuestro nuevo amigo amante de las mayúsculas ;)

Marcelo Elizeche Landó

Read more posts by this author.