Uno de mis proyectos de fin de semana me ha llevado a las aguas profundas del procesamiento de señales. Al igual que con todos mis proyectos de código que requieren algunas matemáticas pesadas, estoy más que feliz de encontrar una solución a pesar de la falta de fundamento teórico, pero en este caso no tengo ninguno, y me encantaría recibir algunos consejos sobre mi problema , a saber: estoy tratando de averiguar exactamente cuándo la audiencia en vivo se ríe durante un programa de televisión.
Pasé bastante tiempo leyendo sobre enfoques de aprendizaje automático para detectar la risa, pero me di cuenta de que eso tiene más que ver con la detección de la risa individual. Doscientas personas que se ríen a la vez tendrán propiedades acústicas muy diferentes, y mi intuición es que deberían distinguirse a través de técnicas mucho más crudas que una red neuronal. Sin embargo, ¡puedo estar completamente equivocado! Agradecería pensamientos sobre el asunto.
Esto es lo que he probado hasta ahora: corté un extracto de cinco minutos de un episodio reciente de Saturday Night Live en dos segundos clips. Luego etiqueté estas "risas" o "no-risas". Usando el extractor de funciones MFCC de Librosa, ejecuté un clúster de K-Means en los datos y obtuve buenos resultados: los dos clústeres se asignaron muy bien a mis etiquetas. Pero cuando intenté recorrer el archivo más largo, las predicciones no aguantaron.
Lo que voy a intentar ahora: voy a ser más preciso sobre la creación de estos clips de risa. En lugar de dividir y ordenar a ciegas, voy a extraerlos manualmente, para que ningún diálogo contamine la señal. Luego los dividiré en clips de un cuarto de segundo, calcularé los MFCC de estos y los usaré para entrenar un SVM.
Mis preguntas en este punto:
¿Tiene algo de esto sentido?
¿Pueden ayudar las estadísticas aquí? He estado desplazándome por el modo de vista de espectrograma de Audacity y puedo ver muy claramente dónde se producen las risas. En un espectrograma de potencia de registro, el habla tiene una apariencia muy distintiva, "surcada". En contraste, la risa cubre un amplio espectro de frecuencia de manera bastante uniforme, casi como una distribución normal. Incluso es posible distinguir visualmente los aplausos de la risa por el conjunto más limitado de frecuencias representadas en los aplausos. Eso me hace pensar en desviaciones estándar. Veo que hay algo llamado prueba de Kolmogorov-Smirnov, ¿podría ser útil aquí? (Puedes ver la risa en la imagen de arriba como una pared de naranja golpeando al 45% del camino).
El espectrograma lineal parece mostrar que la risa es más enérgica en las frecuencias más bajas y se desvanece hacia las frecuencias más altas. ¿Significa esto que califica como ruido rosa? Si es así, ¿podría ser un punto de apoyo en el problema?
Pido disculpas si hice mal uso de alguna jerga, he estado en Wikipedia bastante para esta y no me sorprendería si me metiera un poco.
fuente
Respuestas:
Según su observación, ese espectro de la señal es lo suficientemente distinguible, puede usar esto como una característica para clasificar la risa del habla.
Hay muchas formas de ver el problema.
Enfoque n. ° 1
En un caso, solo puede mirar el vector del MFCC. y aplicar esto a cualquier clasificador. Dado que tiene muchos coeficientes en el dominio de la frecuencia, es posible que desee ver la estructura de los clasificadores en cascada con algoritmos de refuerzo como Adaboost basados en esto, puede comparar entre la clase de voz y la clase de risa.
Enfoque n. ° 2
Te das cuenta de que tu discurso es esencialmente una señal que varía en el tiempo. Entonces, una de las formas efectivas de hacerlo es observar la variación en el tiempo de la señal misma. Para esto, puede dividir las señales en lotes de muestras y observar el espectro para ese momento. Ahora, puede darse cuenta de que la risa podría tener un patrón más repetitivo durante un período de tiempo estipulado, ya que el habla posee más información y, por lo tanto, la variación del espectro sería bastante mayor. Puede aplicar esto al tipo de modelo HMM para ver si permanece constantemente dentro del mismo estado para algún espectro de frecuencia o si continúa cambiando continuamente. Aquí, incluso si ocasionalmente el espectro del habla se asemeja al de la risa, cambiará más el tiempo.
Enfoque n. ° 3
Fuerza para aplicar el tipo de codificación LPC / CELP en la señal y observar el residuo. La codificación CELP es un modelo muy preciso de producción de voz.
De la referencia aquí: TEORÍA DE LA CODIFICACIÓN CELP
En pocas palabras, después de eliminar todo el discurso que se predice del analizador, lo que queda es el residuo que se transmite para recrear la forma de onda exacta.
¿Cómo ayuda eso con tu problema? Básicamente, si aplica la codificación CELP, la voz en la señal se elimina principalmente, lo que queda es residuo. En caso de risa, la mayoría de la señal podría retenerse porque CELP no podrá predecir dicha señal con el modelado del tracto vocal, donde el discurso individual tendrá muy pocos residuos. También puede analizar este residuo nuevamente en el dominio de la frecuencia, para ver si es risa o habla.
fuente
La mayoría de los reconocedores de voz usan no solo los coeficientes MFCC sino también la primera y la segunda derivada de los niveles MFCC. Supongo que la aparición sería muy útil en este caso y te ayudaría a distinguir una risa frente a otros sonidos.
fuente