.

Soy bastante dado a las generalizaciones pero me gustaría pensar que dejo claro que nunca hablo de verdades absolutas; una generalización no es dogma, en principio está derivada de una estadística significativa y reconoce explícitamente que no se aplica invariablemente. Por esta definición, es un argumento reduccionista de lo que normalmente será algo más complejo.

Dicho esto, voy a hacer alguna que otra generalización basada en mi experiencia particular.

Observo con bastante frecuencia que la gente culpa o exculpa determinados comportamientos por ideología. Unas veces la atribución de una ideología a una entidad sirve para atacarla o defenderla, según convenga. En otras instancias, se usa la ideología para justificar o introducir una intencionalidad donde es posible que no la haya. Esta clase de injerencias rara vez sirven de mucho más que para ofuscar y generar posturas dogmáticas, que descartan cualquier otro tipo de análisis, desviando y reduciendo la atención a ese punto.

Por desgracia, el sexismo parece ser otro de esos términos que pierde valor por su abuso y, aunque a veces da para chiste, el uso indiscriminado del término no ayuda a resolver el problema existente. Esto viene a colación de un artículo en Hypebot con un titular similar al de esta entrada que se presenta con el siguiente párrafo:

Aunque la información predictiva ha demostrado ciertamente ser útil, los algoritmos —escritos por humanos— son inherentemente defectuosos y puede que estén sirviendo una dosis considerable de sexismo a la hora de recomendar opciones de música en streaming.

El artículo menciona varias cifras, que parecen sacadas de un artículo en el New York Post que, a su vez, señala un estudio y un artículo de opinión de los autores del mismo. En una lectura superficial algunos de los datos obtenidos parecen significativos: con una muestra suficientemente grande de artistas musicales diferenciados como «masculinos» y «femeninos» se observa que, para una relación aproximada de 3:1 entre el número de integrantes de ambos conjuntos, la posición media en el que se producía la primera recomendación de un integrante de de cada conjunto se diferenciaba aproximadamente a razón 1:7, aunque la distribución de las recomendaciones sí que tenga paridad estadística.

La catalogación de los artistas en esas dos categorías tiene su propia problemática pero no es eso lo que me incomoda. Lo que veo más problemático es que el artículo de Hypebot es el primero en toda la cadena de contenidos mencionada que usa el término sexismo para describir a los algoritmos. No digo que no sea una interpretación válida, pero el estudio habla de corregir los algoritmos para que las recomendaciones no amplifiquen el desequilibrio previamente existente. Los autores dicen que el diseño de los sistemas de recomendación crea un bucle de realimentación que, a partir de una situación de desigualdad, tiende a aumentar dicha diferencia. El problema que abordan no es ideológico, es algorítmico.

Ahora no lo encuentro, pero recuerdo haber leído un estudio donde se veía como estos ecosistemas «sociales», donde las recomendaciones vienen en la forma de «a otras personas a las que les ha gustado esto también les interesa esto», generaban el mismo efecto amplificador y aislante: la gente no se ve expuesta a una mayor variedad, más bien al contrario. Me alegro que se preste atención a los peligros de estos efectos cuando existe un problema de base pero, si se habla de discriminación en la música, habría que seguir ilustrando sobre por qué algunas personas se pueden sentir excluidas o no se sientan cómodas siendo usadas para llamar la atención.

.

El mes pasado me topé con “Beat Detection Algorithms”, un texto en dos partes (1 y 2) sobre la implementación en Scala de un par de algoritmos sencillos con el objetivo titular. Aparte de la explicación de la teoría tras estas implementaciones se puede encontrar el resultado integrado en el código fuente de un proyecto del autor.

Recuerdo haber echado un ojo a este tipo de análisis matemático (aunque sin llegar a aplicarlo) a finales de la década de los 90, en la estela de la demoscene y con el ascenso de WinAmp y sus complementos de visualización. Remontándome sólo al año pasado, tenía apuntado un artículo sobre detección de pulsaciones usando Web Audio, encontrado a través de EchoJS, nuevamente sin llevarlo a la práctica por mi parte.

Grimes – Go: Peaks with a lowpass, highpass, and bandpass filter, respectively.

Este último enlace lo tenía apuntado junto con otra reseña en EchoJS de un proyecto denominado WaveGL, cuyo objetivo era «generar audio en la GPU y transmitirlo a la tarjeta de audio» y del que señalaban uno de varios ejemplos. Con tantos proyectos de programación que he visto recientemente no estaría mal sacar un poco de tiempo para programar por gusto en lugar de por compromiso.

.

Una red neuronal recurrente, o RNN (Recurrent Neural Network) es una clase de red de neuronas artificial en las que las conexiones entre unidades forman un ciclo dirigido. Si no lo he entendido mal, esto quiere decir que la secuencia cíclica de vértices (o nodos) y aristas en un camino es determinada completamente por el conjunto de aristas que usa: sólo se puede recorrer en una dirección. Esto crea un estado interno de la red que le permite exhibir un comportamiento temporal dinámico y procesar secuencias arbitrarias de entradas. También se puede entender como una red neuronal recursiva, igualmente abreviada como RNN, con una estructura en cadena.

Todo esto viene a colación una serie de relativamente breves pero interesantísimos textos de Bob L. Sturm titulados “Deep learning for assisting the process of music composition”, partes 1, 2, 3 y 4. En ellos deja constancia de algunas reflexiones sobre un proyecto veraniego realizado en colaboración con João Felipe Santos denominado The Infinite Irish Trad Session:

So João grabbed all the tunes he could from The Session, I parsed and editted the text file to produce a 13 MB file of 23,962 tunes, and João set to using it to train an RNN with 3 hidden layers having 512 units each. Once finished, João had the system generate a 21 MB text file of new ABC tunes, which I am parsing into its 72,000+ tunes. I convert each ABC tune to MIDI, process it in python (with python-midi) to give a more human-like performance (including some musicians who lack good timing, and a sometimes over-active bodhran player who loves to have the last notes :), and then synthesize the parts with timidity, and finally mix it all together and add effects with sox. Each successful synthesis is then served to my home directory, and a cronjob generates a new playlist every five minutes from the 22000+ tunes already synthesized (that is 18,964,140 kilobytes, which at 128 kbps is a 41 hour trad session!).

Hope you have some craic!

El resultado son composiciones como esta:

Parte del trabajo se apoya en el trabajo de Andrej Karpathy sobre redes LSTM, cuyo artículo “The Unreasonable Effectiveness of Recurrent Neural Networks” explica con algo más de detalle qué son las RNN y sus virtudes.

Todo esto me llegó vía Hacker News, igual que el artículo sobre composición algorítmica de hace unos meses.