¿Cómo funciona el algoritmo de Shazam?

Este es el tercer artículo de Mitos de la Inteligencia Artificial, una serie que estudia los fundamentos y conceptos más importantes en inteligencia artificial (IA), machine learning (ML) y matemáticas. Puedes encontrar los artículos previos de la colección aquí.

La idea es ofrecer una referencia clara y sencilla que permita comprender, a cualquier lector, el funcionamiento de diversas herramientas que operan a partir del análisis de datos. En la medida de lo posible, se evitará el uso de conceptos grandilocuentes (en la mayoría de los casos no contribuyen a mejorar el entendimiento) y tecnicismos innecesarios pero, si no hay otra alternativa, se ofrecerá una explicación previa con ideas intuitivas y ejemplos.


Una de las aplicaciones más ilustrativas del uso de datos y tecnología para ofrecer un buen producto es Shazam. Esta popular aplicación te permite grabar, con tu celular o computadora, una muestra de alguna canción que estés escuchando y después de algunos segundos te entrega el nombre de la canción, artista y otros datos adicionales, además de enlaces directos a alguno de los servicios para escuchar música.

En mi experiencia personal, funciona muy bien en la mayoría de los casos. Lo anterior podría deberse al sistema de análisis de datos que utiliza para realizar las asignaciones y al banco de canciones que almacena. Sin embargo, ¿cómo funciona el algoritmo de Shazam? ¿Se trata de un problema de machine learning? ¿Podría considerarse un problema de ML de clasificación o regresión? ¿Es posible utilizar Shazam cuando estamos escuchando una interpretación en vivo de alguna canción?

En esta tercera entrega del especial “Mitos de la Inteligencia Artificial” se ofrece una explicación general sobre el algoritmo de Shazam y se exploran algunas preguntas relacionadas con su funcionamiento. El objetivo de este texto consiste en ofrecer una explicación clara y sencilla sobre algunas preguntas relacionadas al análisis de datos, con base en la experiencia profesional que el autor tiene en temas inteligencia artificial y matemáticas.

Ilustración: Oldemar González
Ilustración: Oldemar González

¿Cómo funciona el algoritmo de Shazam?

Antes de estudiar la operación de este sistema desde un punto de vista más técnico, pensemos en una analogía que permitirá entender mejor el funcionamiento de Shazam.

Imagina que estás en un bar y empieza a sonar una canción de tu artista favorito. Seguramente serías capaz de identificar quién la canta y cómo se llama pero, ¿cuál es el proceso para que esto ocurra? Probablemente, al identificar el tono de voz del cantante, el ritmo, los instrumentos que utiliza o la letra podrás identificarla. Además, no necesitarías escuchar toda la canción para reconocerla, después de algunos segundos lo podrías lograr. Sin embargo, hay una condición fundamental en todo este proceso: debes conocer previamente la canción para identificarla con total precisión; de lo contrario, tal vez podrías determinar el artista pero no el nombre exacto de la canción.

La comparación anterior nos da una idea de cómo funciona Shazam aunque, por supuesto, utiliza una serie de componentes más técnicos para su funcionamiento. El primero de estos se llama espectrograma y representa la abstracción inicial que debe realizarse para que una computadora pueda procesar y analizar los datos generados por una canción.

Sin la intención de profundizar en tecnicismos (como la Transformada de Fourier) sobre la definición de un espectrograma, lo podemos considerar como una herramienta que permite representar las frecuencias de una señal a través del tiempo. Los espectrogramas son muy utilizados para el análisis de comunicaciones y señales eléctricas y además tienen diversas aplicaciones, por ejemplo, para el procesamiento de voz mediante redes neuronales o para el monitoreo de estaciones sismológicas.

En particular, es posible obtener el espectrograma de un sonido o de una canción, por ejemplo, para analizar el canto de un pájaro.  En otras palabras, un espectrograma nos permite “visualizar el sonido”.

Figura 1: Espectrograma del canto de un pájaro. Un espectrograma nos permite “visualizar el sonido”.

De manera similar, es posible obtener el espectrograma de algunas canciones

Figura 2: Espectrograma de Seven Days in Sunny June de Jamiroquai realizado sobre la parte del coro:
Ooh, so baby, let’s get it on
Drinking wine and killing time, sitting in the summer sun
You know I’ve wanted you so long
Why do you have to drop that bomb on me?

De esta forma, Shazam puede crear un banco de canciones que almacena a través de sus espectrogramas. Este proceso puede aplicarse a millones de canciones y, por supuesto, resulta natural suponer que la eficiencia de la aplicación aumenta entre más información (espectrogramas) tenga almacenada.

Cuando el usuario envía una muestra de la canción que desea identificar inicia el siguiente paso en el funcionamiento de Shazam. En esta etapa, el sistema recibe el fragmento de canción, obtiene su espectrograma y posteriormente, utiliza algunas métricas y hashes para compararlo contra los millones de espectrogramas previamente almacenados (banco de canciones). Además de la complejidad técnica que implica realizar estas comparaciones para realizar una asignación correcta, se debe considerar que esto ocurre en algunos segundos.

En este artículo no se presentarán los detalles matemáticos y computacionales anteriormente mencionados, pues podría convertirse en un texto innecesariamente técnico. Sin embargo, es posible acceder al paper original del algoritmo de Shazam en donde el lector podrá encontrar todo el proceso de forma minuciosa.

Figura 3: Espectrograma de una canción (An Industrial-Strength Audio Search Algorithm, aquí)

Finalmente, el usuario recibe la canción propuesta por Shazam con algunos detalles como el nombre y artista de la canción. Además se incluyen enlaces para escuchar la canción en diversas plataformas de música, video y hasta las fechas de los próximos conciertos.

Figura 4: Canción identificada por Shazam a partir de la muestra enviada por el usuario.

Ahora con una idea más clara sobre el funcionamiento de Shazam, surgen preguntas adicionales relacionadas con la precisión del algoritmo y su relación con los problemas de machine learning.

¿Se trata de un problema de machine learning?

Considerando que el ML es un conjunto de métodos computacionales que permiten crear reglas o aprender patrones directamente de los datos con el fin de resolver problemas o tomar decisiones de mejor forma, se podría suponer que Shazam es un problema de ML. En este caso, el conjunto de datos (que podría considerarse el conjunto de entrenamiento del problema) lo conforman los millones de canciones y espectrogramas que conforman su banco de información y posteriormente, utiliza métodos computacionales (hashes y métricas de comparación) para ofrecer un pronóstico sobre la canción que envía el usuario.

Por otro lado, tal como está planteado, Shazam no cumple con unas de las características funcionales más importantes de los algoritmos de ML, pues estas herramientas permiten ofrecer pronósticos sobre registros o individuos que no están contenidos en la base de datos. En otras palabras, los algoritmos de ML sirven para aprender patrones en los datos del conjunto de entrenamiento, para ofrecer predicciones sobre nuevos registros del conjunto de prueba. En el caso de Shazam, si una canción no está contenida en el banco de espectrogramas, no podría ofrecer un match o podría hacerlo de forma imprecisa.

Si Shazam puede considerarse como un problema de ML, ¿de qué clase sería? ¿Clasificación o regresión?

Shazam podría considerarse como un problema de clasificación pues cada canción puede representar una etiqueta.

¿Es posible utilizar Shazam en una interpretación en vivo de alguna canción?

Seguramente no, ya que aunque la canción sea interpretada por el artista original, el espectrograma puede ser muy distinto respecto a la versión original de la canción.

Por ejemplo, en la Figura 5 se pueden observar los espectrogramas de una misma canción; la primera corresponde a la versión en vivo y la segunda a la original. Aunque los espectrogramas se calcularon sobre la misma parte, son claramente distintos.

Figura 5: Espectrogramas de la versión en AOL Sessions de Seven Days in Sunny June de Jamiroquai y la versión original.

De hecho, al probar con la versión en vivo, Shazam declara que no pudo encontrar coincidencias con la versión de AOL (seguramente porque no está en su banco de espectrogramas, pero lo mismo pasaría con cualquier otra versión en vivo):

Figura 6: Mensaje de Shazam cuando no puede encontrar coincidencia con la canción solicitada por el usuario.

¿Por qué falla Shazam?

En mi experiencia personal, esta herramienta funciona muy bien casi siempre que la utilizo. Sin embargo, he encontrado algunos casos en donde no ofrece ningún match o lo hace de forma errónea. Esto puede explicarse al analizar el planteamiento del algoritmo que utiliza.

Si no encuentra ningún match es posible que la canción que envía el usuario no esté contenida en el banco de espectrogramas de Shazam; por otro lado, si la recomendación no es precisa podría deberse a que existe otra canción con un espectrograma similar y el algoritmo decide presentar la recomendación en lugar de no entregar nada.

En conclusión, encontrar el match de la canción que un usuario está escuchando es un proceso complejo que involucra tecnología y sofisticados procesos matemáticos y computacionales que pueden ser planteados a partir de un algoritmo de aprendizaje de máquina. Además, el algoritmo de Shazam representó un modelo de negocio con tanto potencial de mercado que Apple compró Shazam en el 2018.

 

Carlos Castro Correa
Licenciado en Matemáticas Aplicadas y Maestro en Ciencia de Datos por el Instituto Tecnológico Autónomo de México. Consultor y profesor de Análisis de Datos e Inteligencia Artificial en distintos programas de Maestría del ITAM.

Agradezco a Sebastián Garrido de Sierra por sus comentarios y observaciones.