Notre réseau de neurones peut le faire en reconnaissant une personne par une syllabe prononcée. Cependant, le sujet de cet article n'est pas directement lié à l'identification vocale, bien qu'il y soit lié. Nous parlerons des caractéristiques du réseau neuronal, le soi-disant d-vecteur, qui peut être utilisé dans des tâches de traitement du son: de la vérification à la reconnaissance vocale et aux émotions.
Matériel
Selon le taux d'échantillonnage, une seconde de son peut contenir de 8 à 48 000 nombres. Ils peuvent être représentés comme des écarts par rapport à la position d'équilibre de la membrane du haut-parleur ou du microphone. En fait, une telle description du son est redondante: l'amplitude du signal au moment suivant dépend fortement de la précédente, ce qui laisse entendre que ce signal peut être efficacement compressé sans trop de perte d'informations. Il existe un grand nombre de façons de réduire la dimension d'un signal, et la plupart d'entre elles sont basées sur les propriétés physiques du son et les caractéristiques de l'audition humaine.
Meme 1.Avant que les réseaux de neurones fonctionnent bien (au sens large), la communauté travaillait avec les soi-disant attributs fabriqués à la main. Les plus célèbres et les plus utilisés sont
Pitch et
MFCC . Le premier a une signification physique de la fréquence des oscillations des cordes vocales, qui diffèrent, par exemple, pour différentes personnes, et dépendent également de l'intonation. L'idée des coefficients cepstraux (MFCC) est basée sur la non-linéarité de la perception humaine du son, à savoir la fréquence et le volume. Il semble à une personne qu'un son est plus élevé qu'un autre dans une certaine mesure, si en réalité leurs fréquences diffèrent d'un certain nombre de fois.
Ces caractéristiques et d'autres fonctions calculées manuellement sont irréversibles dans le sens où une partie du signal est perdue à jamais. Dans certaines tâches, ce n'est pas critique, mais je voudrais proposer une approche plus universelle et plus fonctionnelle.
La clé pour résoudre ce problème est la transformée de Fourier. En l'utilisant, vous pouvez imaginer un signal audio comme la somme des ondes avec différentes fréquences et amplitudes. En fait, la parole n'est pas stationnaire dans le sens où son spectre sera qualitativement différent à différents moments. Cela nous permet de le considérer dans la représentation temps-fréquence, à l'aide de
spectrogrammes .
Pour construire un spectrogramme, vous devez diviser le son en sections entrecroisées (images qui se chevauchent) de plusieurs dizaines de millisecondes de longueur, pour chacune d'elles calculer la transformée de Fourier et écrire leurs modules dans des colonnes sur les spectrogrammes. De plus, une telle transformation est presque mutuellement inverse, c'est-à-dire qu'en utilisant la transformée de Fourier inverse et
l'algorithme Griffin-Lim, vous pouvez restaurer le signal sonore d'origine (en fait, il y a une perte d'informations, car la transformée de Fourier est complexe dans le cas général, et le spectrogramme a une valeur réelle, et, pour approximer la récupération de phase, l'algorithme itératif Griffin-Lim est généralement utilisé). Au total, si nous prenons le logarithme des amplitudes, nous obtenons ces images:
Spectrogramme 5 secondes de parole.Et ils sont commodément traités par des filets convolutifs.
Un tel hack est souvent utilisé dans les tâches de traitement d'image: il existe de grandes bases de données avec des exemples d'objets différents (par exemple, ImageNet). Vous pouvez former une grande grille pour les reconnaître, puis la recycler sur notre tâche spécifique, ou prendre le résultat de sortie de l'une des couches internes entièrement connectées. On pense qu'une telle architecture calculera de bonnes caractéristiques informatives pour les images d'entrée. L'expérience suggère que presque toujours les résultats seront meilleurs que si nous formions le réseau neuronal à partir de zéro.
L'idée des vecteurs d (généralement des vecteurs d, mais parfois appelés vecteurs x) est similaire à l'utilisation de grilles pré-entraînées sur ImageNet, sauf qu'il n'y a pas de bases similaires pour les spectrogrammes. Comme moyen de sortie possible, les auto-encodeurs peuvent être envisagés, mais ils ne savent a priori pas quoi rechercher dans le spectrogramme, ils fonctionnent donc de manière insatisfaisante.
Nous devons aller plus loin
Attention, la partie principale de cet article commence.
La tâche de vérifier une personne par la voix est largement connue, où il est nécessaire de déterminer par le segment d'entrée de la parole laquelle des personnes dans la base de données l'a dit. En fait, la construction de tels systèmes est une science distincte, et il existe de nombreux modules complémentaires (durée du discours; est-il nécessaire que tout le monde parle le même texte; mise en scène un contre un ou un contre tous), qui sont critiques dans différentes conditions, mais pour nous vous devez faire attention à autre chose.
À savoir: à quel point les fonctionnalités seront bonnes si nous pré-formons la grille pour reconnaître une personne. Tout est fait pour des signes.
Cela nous aidera à l'intuition et à l'
article de 2015. Dans ce document, les auteurs enseignent la grille pour reconnaître une personne par le visage (reconnaissance du visage). La clé de ce travail consiste à utiliser Triplet Loss.
Son idée est très simple: nous normalisons les entités de l'avant-dernière couche afin qu'elles se trouvent sur une sphère unitaire, et exigeons que les points d'une classe soient proches et éloignés de différents. Ceci peut être réalisé comme suit: pour chaque exemple de formation (ancre), nous trouvons deux autres de la même classe et d'une autre classe dans l'échantillon - positif et négatif. Ensuite, pour ces triplets de points, nous formons une perte:
\ commencer {équation}
\ Big [\ Vert f (x ^ a) - f (x ^ p) \ Vert - \ Vert f (x ^ a) - f (x ^ n) \ Vert + \ alpha \ Big] _ +,
\ end {équation}
où x est l'image d'entrée, f est la sortie de la grille après normalisation, alpha est le paramètre sélectionné manuellement, [] _ {+} est la fonction ReLU. Qualitativement, la valeur de cette perte est nulle si la distance entre l'ancre et les points positifs est supérieure à la distance entre l'ancre et le négatif d'au moins alpha, et plus grande est la différence entre deux classes différentes.
Une illustration de ce qui arrive aux fonctionnalités après l'entraînement avec Triplet Loss.Soit dit en passant, vous pouvez former des triplets de manière intelligente. À un certain point, l'ampleur de la perte deviendra petite et pour accélérer l'apprentissage, vous pouvez rechercher des exemples négatifs non pas parmi toutes les autres classes, mais ne considérer que ceux proches de l'ancre. Mais pour les grands ensembles de données, cela est difficile, car vous devez considérer les distances par paire entre les classes qui changent après chaque itération de l'apprentissage réseau.
La perte de triplet a un avantage sur la crossentropie catégorielle, qui est utilisée dans la classification conventionnelle. Un modèle formé à l'entropie croisée tentera de regrouper tous les points d'une classe dans une zone de plus en plus petite, et les informations qui sont superflues pour une tâche particulière peuvent être perdues. Mais nous ne voulons pas cela, car nous allons utiliser le réseau neuronal comme générateur de fonctionnalités, et non pour la vérification. La perte de triplet a cette propriété dans une bien moindre mesure: il est plus important pour elle de répartir différentes classes dans différentes zones sur une seule sphère que de porter une classe.
Meme 2.La dernière chose à faire avant d'entraîner le générateur de fonctionnalités sur les spectrogrammes est de déterminer leurs tailles. De toute évidence, la précision de la classification sera la plus élevée, plus la période de temps que nous considérerons sera grande, mais plus les signes «moyens» se révéleront. Par conséquent, il est raisonnable d'utiliser une telle longueur de signal afin que 1 à 3 phonèmes (syllabes) y tombent - une demi-seconde semble appropriée.
Pour la formation, nous prenons le
jeu de données
VoxCeleb2 , où pour chacun des 6300 haut-parleurs il y a plusieurs enregistrements audio séparés de plusieurs minutes chacun (réalisés dans des conditions différentes). Nous utilisons une partie des fichiers audio pour la formation et le reste pour la validation, sélectionnez l'architecture du réseau de convolution, ajoutez-y Triplet Loss et apprenez.
Les résultats ont été très sympas. En près de 2 semaines d'entraînement à 1080Ti (oui, depuis si longtemps), la précision de classification a atteint 55%. Il semblerait que ce ne soit pas beaucoup, mais la précision du top-5 est de 78%, et si nous considérons uniquement la moitié la plus forte des fragments, qui sont principalement des voyelles accentuées, alors la précision du top-5 augmentera à 91%. Nous pouvons dire que nous pouvons identifier une personne par l'une de ses phrases avec une précision décente. Mais cela n'a pas d'importance.
Meme 3.Après tout, tout a été lancé pour les fonctionnalités qui peuvent être obtenues pour sortir de l'avant-dernière avant de classer la couche de réseau neuronal. Nous les avons testés sur nos tâches, et partout les résultats étaient meilleurs que l'utilisation d'approches classiques pour calculer les attributs. Par exemple, dans le problème de la reconnaissance des émotions, l'utilisation de vecteurs d nous a permis de contourner l'état de l'art de 4%, et l'article correspondant a été accepté lors de la conférence FICC 2019. Cependant, la reconnaissance des émotions est une histoire complètement différente, dont nous parlerons plus tard.
Publié par
Gregory Sterling sterling239 , expert en apprentissage profond, Neurodata Lab.