Quando inizia la risata?


14

Uno dei miei progetti del fine settimana mi ha portato nelle acque profonde dell'elaborazione del segnale. Come per tutti i miei progetti di codice che richiedono un po 'di matematica pesante, sono più che felice di cercare una soluzione nonostante la mancanza di basi teoriche, ma in questo caso non ne ho, e mi piacerebbe qualche consiglio sul mio problema , vale a dire: sto cercando di capire esattamente quando il pubblico dal vivo ride durante uno spettacolo televisivo.

Ho trascorso un bel po 'di tempo a leggere gli approcci di apprendimento automatico per rilevare le risate, ma ho capito che ha più a che fare con il rilevamento delle risate individuali. Duecento persone che ridono contemporaneamente avranno proprietà acustiche molto diverse e la mia intuizione è che dovrebbero essere distinguibili attraverso tecniche molto più grossolane rispetto a una rete neurale. Potrei sbagliarmi completamente, però! Gradirei pensieri sulla questione.

Ecco cosa ho provato finora: ho estratto un estratto di cinque minuti da un recente episodio di Saturday Night Live in due secondi clip. Ho quindi etichettato queste "risate" o "non-risate". Usando l'estrattore di funzionalità MFCC di Librosa, ho quindi eseguito un cluster K-Means sui dati e ho ottenuto buoni risultati: i due cluster sono stati mappati in modo molto preciso sulle mie etichette. Ma quando ho provato a scorrere il file più lungo, le previsioni non contenevano acqua.

Cosa proverò ora: sarò più preciso sulla creazione di queste clip di risate. Piuttosto che fare una divisione e un ordinamento cieco, ho intenzione di estrarli manualmente, in modo che nessun dialogo inquini il segnale. Quindi li suddividerò in clip di un quarto di secondo, calcolerò questi MFCC e li userò per addestrare un SVM.

Le mie domande a questo punto:

  1. Qualcuno di questo ha senso?

  2. Le statistiche possono aiutare qui? Sto scorrendo nella modalità di visualizzazione dello spettrogramma di Audacity e posso vedere chiaramente dove si verificano le risate. In uno spettrogramma di potenza del tronco, il linguaggio ha un aspetto molto particolare, "solcato". Al contrario, le risate coprono un ampio spettro di frequenze in modo abbastanza uniforme, quasi come una normale distribuzione. È persino possibile distinguere visivamente gli applausi dalle risate dal più limitato insieme di frequenze rappresentate negli applausi. Questo mi fa pensare a deviazioni standard. Vedo che c'è qualcosa chiamato il test di Kolmogorov – Smirnov, potrebbe essere utile qui? Spettrogramma log-power (Puoi vedere la risata nell'immagine sopra come un muro di arance che colpisce il 45% del cammino).

  3. Lo spettrogramma lineare sembra mostrare che la risata è più energica alle frequenze più basse e si attenua verso le frequenze più alte - significa che si qualifica come rumore rosa? In tal caso, potrebbe essere un punto d'appoggio sul problema? spettrogramma

Mi scuso se ho fatto un uso improprio di un gergo, sono stato un po 'su Wikipedia per questo e non sarei sorpreso se mi facessi un po' di confusione.


1
Concordo sul fatto che "non sarà necessaria una rete neurale per ottenere un solido rivelatore per le risate". Concordo anche sul fatto che tu abbia lanciato Kolmogorov al segnale, considerando che se hai ragione, e la risata è la somma (ponderata) delle risate, dovresti ottenere caratteristiche normali di qualche tipo. Forse ti piacerebbe comunque aumentare la risoluzione della frequenza. A proposito, per qualcuno che non è "appassionato di DSP", il tuo gergo va abbastanza bene :) purtroppo, non sono un tipo audio, quindi probabilmente non sono molto utile.
Marcus Müller,

Sono felice di aiutare. Hai dei dati per la formazione? Una delle cose più importanti è l'etichettatura dei dati. Immondizia in entrata - immondizia in uscita. Uno degli approcci più semplici ed efficaci sarebbe quello di formare un GMM bag-of-frame e valutare la probabilità.
jojek

Potresti voler controllare prima, se riesci a separare le risate dal silenzio controllando la potenza / ampiezza del tuo segnale in determinati momenti. Ti dà la possibilità di soglie i momenti in cui "qualcosa" sta accadendo. Quindi potresti provare a guardare la distribuzione della frequenza. Ad esempio, il discorso potrebbe avere alcuni picchi acuti distintivi (non importa dove siano esattamente questi picchi, solo che esistono), mentre le risate sono uniformi come hai detto. Tracciare questo potrebbe produrre un valore per decidere se si tratta di una risata. (Hai bisogno delle informazioni sul volume, per assicurarti di non avere un silenzio uniforme)
user6522399

Risposte:


0

In base alla tua osservazione, quello spettro del segnale è sufficientemente distinguibile, puoi usarlo come una caratteristica per classificare le risate dal parlato.

Esistono molti modi per esaminare il problema.

Approccio n. 1

In una sola volta, puoi semplicemente guardare il vettore dell'MFCC. e applicalo a qualsiasi classificatore. Dato che hai molti coefficienti nel dominio della frequenza, potresti voler esaminare la struttura dei classificatori Cascade con algoritmi di potenziamento come Adaboost basati su questo, puoi confrontare tra la classe del parlato e la classe del ridere.

Approccio n. 2

Ti rendi conto che il tuo discorso è essenzialmente un segnale che varia nel tempo. Quindi uno dei modi efficaci per farlo è guardare la variazione temporale del segnale stesso. Per questo, è possibile dividere i segnali in lotti di campioni e osservare lo spettro per quel tempo. Ora, potresti capire che la risata potrebbe avere un modello più ripetitivo per una durata stabilita in cui il discorso possiede intrinsecamente più informazioni e quindi la variazione dello spettro sarebbe piuttosto maggiore. Puoi applicarlo al tipo di modello HMM per vedere se rimani costantemente nello stesso stato per un certo spettro di frequenze o continui a cambiare continuamente. Qui, anche se occasionalmente lo spettro del discorso assomiglia a quello delle risate, cambierà più tempo.

Approccio n. 3

Forzare ad applicare il tipo di codifica LPC / CELP sul segnale e osservare il residuo. CELP Coding costituisce un modello molto accurato di produzione vocale.

Dal riferimento qui: TEORIA DELLA CODIFICA CELP

Le ridondanze nel segnale vocale vengono quasi rimosse dopo la previsione a breve termine e la previsione a lungo termine del segnale vocale e al residuo è rimasta pochissima correlazione. Quindi viene cercata un'eccitazione che sintetizza il discorso e l'indice e il guadagno del libro di codici vengono cercati dal libro di codici fisso. Il criterio di selezione dell'indice del codebook ottimale si basa sull'MMSE tra il parlato sintetizzato localmente e il segnale vocale originale.

Per dirla semplicemente, dopo aver rimosso tutto il discorso previsto dall'analizzatore, rimane il residuo che viene trasmesso per ricreare la forma d'onda esatta.

In che modo aiuta con il tuo problema? Fondamentalmente, se si applica la codifica CELP, la voce nel segnale viene per lo più rimossa, ciò che rimane è residuo. In caso di risate, la maggior parte del segnale potrebbe essere trattenuta perché il CELP non riuscirà a prevedere tale segnale con la modellazione del tratto vocale, dove il discorso individuale avrà pochissimi residui. Puoi anche analizzare questo residuo nel dominio della frequenza, per vedere se è una risata o un discorso.


0

La maggior parte dei riconoscitori vocali utilizza non solo i coefficienti MFCC ma anche la prima e la seconda derivata dei livelli MFCC. Immagino che gli insiemi sarebbero molto utili in questo caso e ti aiuterebbero a distinguere una risata rispetto ad altri suoni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.