2016-01-07 1 views
5

J'essaie de faire une classification binaire LSTM en utilisant theano. J'ai parcouru l'exemple de code mais je veux construire le mien.Jeu de données Speech pour la classification binaire LSTM

J'ai un petit ensemble de "bonjour" & "Goodbye" enregistrements que j'utilise. Je les pré-traite en leur extrayant les fonctions MFCC et en enregistrant ces fonctions dans un fichier texte. J'ai 20 fichiers vocaux (10 chacun) et je génère un fichier texte pour chaque mot, donc 20 fichiers texte qui contiennent les fonctions MFCC. Chaque fichier est une matrice 13x56.

Mon problème maintenant est: Comment utiliser ce fichier texte pour former le LSTM?

Je suis relativement nouveau à ce sujet. J'ai aussi lu de la documentation sur le sujet, mais je n'ai pas trouvé une très bonne compréhension du concept.

Une manière plus simple d'utiliser LSTM serait également la bienvenue.

Répondre

6

Il existe de nombreuses implémentations existantes par exemple Tensorflow Implementation, Kaldi-focused implementation with all the scripts, il est préférable de les vérifier en premier.

Theano est trop bas niveau, vous pouvez essayer avec keras à la place, comme décrit dans tutorial. Vous pouvez exécuter le tutoriel "tel quel" pour comprendre comment les choses se passent.

Ensuite, vous devez préparer un jeu de données. Vous devez transformer vos données en séquences de trames de données et pour chaque trame de données dans l'ordre, vous devez affecter une étiquette de sortie. Keras prend en charge deux types de RNN - les couches retournant des séquences et les couches retournant des valeurs simples. Pour vous entraîner avec des séquences, vous pouvez attribuer une étiquette fictive à toutes les images sauf la dernière où vous pouvez assigner l'étiquette du mot que vous voulez reconnaître. Vous devez placer des étiquettes d'entrée et de sortie dans les tableaux. Ce sera donc:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]] 

Y = [[0,0,...,1], [0,0,....,2]] 

Dans X chaque élément est un vecteur de 13 flottants. Dans Y, chaque élément est juste un nombre - 0 pour les trames intermédiaires et ID de mot pour la trame finale.

Pour vous entraîner uniquement avec des étiquettes, vous devez placer des étiquettes d'entrée et de sortie dans les tableaux et la matrice de sortie est plus simple. Ainsi, les données seront:

X = [[word1frame1, word1frame2, ..., word1framen],[word2frame1, word2frame2,...word2framen]] 

Y = [[0,0,1], [0,1,0]] 

Notez que la sortie est vectorisé (np_utils.to_categorical) pour mettre à la place des vecteurs de simples chiffres.

Ensuite, vous créez une architecture réseau. Vous pouvez avoir 13 flotteurs pour l'entrée, un vecteur pour la sortie. Au milieu, vous pouvez avoir une couche entièrement connectée suivie d'une couche lstm. N'utilisez pas de couches trop grandes, commencez par les petites.

Ensuite, vous alimentez ce jeu de données en model.fit et il vous forme le modèle. Vous pouvez estimer la qualité du modèle sur l'ensemble hors service après l'entraînement.

Vous aurez un problème de convergence puisque vous n'avez que 20 exemples. Vous avez besoin de plus d'exemples, de préférence des milliers pour former LSTM, vous ne pourrez utiliser que de très petits modèles.

+0

Salut, merci pour vos conseils. Connaissez-vous un ensemble de données qui a comme 100 bonjour et au revoir? –

+1

Vous pouvez télécharger une base de données de chiffres isolés ici: http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/speech%20recognition%20course.html, il y a environ 200 échantillons pour chaque chiffre –

+0

Donc si je suis va appliquer cette méthode pour les nombres (pas binaires) pouvons-nous l'appeler reconnaissance vocale? – udani