blackrock-cio-dit-bitcoin-pourrait-atteindre-de-nouveaux-sommets.jpg

"Ok, Google !"— Speech to Text en Python avec Deep Learning en 2 minutes

Nœud source: 1866555

Cet article a été publié dans le cadre du Blogathon sur la science des données

Introduction

Vous utilisez peut-être fréquemment Assistant Google ou d'Apple Siri ou encore Alexa d'Amazon pour trouver des réponses rapides sur le web ou simplement pour commander quelque chose. Ces assistants IA sont bien connus pour comprendre nos commandes vocales et effectuer les tâches souhaitées. Ils répondent rapidement aux commandes vocales telles que "OK, Google. Quelle est la capitale de l'Islande ? ou "Hey, Siri. Montrez-moi la recette des lasagnes. et afficher le résultat exact. Vous êtes-vous déjà demandé comment ils font vraiment ? Aujourd'hui, nous allons construire un système de reconnaissance vocale très simple qui prend notre voix en entrée et produit le texte correspondant en entendant l'entrée.

speech to text
image 1

TLDR Montrez-moi le code !

Si vous êtes impatient comme moi, c'est pratiquement le code source complet qui peut être rapidement copié, collé et exécuté via un fichier Python. Assurez-vous d'avoir un fichier nommé 'my-audio.wav' comme entrée vocale. Assurez-vous également que toutes les bibliothèques sont installées.

Dans la dernière partie du didacticiel, nous discuterons de ce que fait chacune des lignes.

Voici le code !

importer la torche importer librosa importer numpy en tant que np importer le fichier son en tant que sf depuis scipy.io importer le fichier wav depuis IPython.display importer l'audio depuis les transformateurs importer Wav2Vec2ForCTC, Wav2Vec2Tokenizer
tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
nom_fichier = 'mon-audio.wav'
data = wavfile.read(file_name) framerate = data[0] sounddata = data[1] time = np.arange(0,len(sounddata))/framerate input_audio, _ = librosa.load(file_name, sr=16000) input_values = tokenizer(input_audio, return_tensors="pt").input_values ​​logits = model(input_values).logits predicted_ids = torch.argmax(logits, dim=-1) transcription = tokenizer.batch_decode(predicted_ids)[0] print(transcription)

Avant de commencer

Assurez-vous de vérifier le code source complet de ce tutoriel dans ce repo Github.

Wav2Vec : un modèle révolutionnaire

wave2vec | parole au texte
image 2

Nous utiliserons Vague2Vec - une approche de reconnaissance vocale à la pointe de la technologie par Facebook.

Les chercheurs de Facebook décrivent cette approche comme suit :

Il existe des milliers de langues parlées dans le monde, dont beaucoup avec plusieurs dialectes différents, ce qui représente un énorme défi pour la construction d'une technologie de reconnaissance vocale de haute qualité. Il n'est tout simplement pas possible d'obtenir des ressources pour chaque dialecte et chaque langue dans les nombreux domaines possibles (discours lu, discours téléphonique, etc.). Notre nouveau modèle, wav2vec 2.0 , utilise l'auto-supervision pour repousser les limites en apprenant à partir de données de formation non étiquetées afin d'activer des systèmes de reconnaissance vocale pour de nombreux autres langues, dialectes et domaines. Avec seulement une heure de données d'entraînement étiquetées, wav2vec 2.0 surpasse l'état de l'art précédent sur le sous-ensemble de 100 heures du benchmark LibriSpeech - en utilisant 100 fois moins de données étiquetées.

Voilà! Wav2Vec est un modèle auto-supervisé qui vise à créer un système de reconnaissance vocale pour plusieurs langues et dialectes. Avec très peu de données d'entraînement (environ 100 fois moins étiquetées), le modèle a été en mesure de surpasser la précédente référence de pointe.

Ce modèle, comme BERT, est formé en prédisant les unités vocales pour les segments audio masqués. Le son de la parole, en revanche, est un signal continu qui capture de nombreuses caractéristiques de l'enregistrement sans être clairement segmenté en mots ou en d'autres unités. Wav2vec 2.0 résout ce problème en apprenant des unités de base de 25ms afin d'apprendre des représentations contextualisées de haut niveau. Ces unités sont ensuite utilisées pour caractériser une large gamme d'enregistrements audio parlés, améliorant la robustesse de wav2vec. Avec 100 fois moins de données d'entraînement étiquetées, nous pouvons créer des algorithmes de reconnaissance vocale qui surpassent les meilleures approches semi-supervisées. Grâce à l'apprentissage auto-supervisé, Wav2vec 2.0 fait partie des modèles d'apprentissage automatique qui reposent moins sur des entrées étiquetées. L'auto-supervision a contribué à l'avancement des systèmes de classification d'images, de compréhension vidéo et de compréhension de contenu. L'algorithme pourrait conduire à des avancées dans la technologie de la parole pour un large éventail de langues, de dialectes et de domaines, ainsi que pour les systèmes actuels.

Choisir notre environnement et nos bibliothèques

Nous utiliserons PyTorch, un cadre d'apprentissage automatique open source pour cette opération. De même, nous utiliserons Transformateurs, une bibliothèque de traitement du langage naturel à la pointe de la technologie par Étreindre le visage.

Vous trouverez ci-dessous la liste de toutes les exigences que vous pourriez vouloir installer via pip. Il est recommandé d'installer tous ces packages dans un environnement virtuel avant de procéder.

  1. Jupyter Notebook
  2. Torche
  3. Librosa
  4. Numpy
  5. Fichier audio
  6. scipy
  7. IPython
  8. Transformateurs

Travailler avec le code

Ouvrez votre notebook Jupyter tout en activant l'environnement virtuel qui contient toutes les bibliothèques essentielles mentionnées ci-dessus.

Une fois le notebook chargé, créez un nouveau fichier et commencez à importer les bibliothèques.

importer la torche importer librosa importer numpy en tant que np importer le fichier son en tant que sf depuis scipy.io importer le fichier wav depuis IPython.display importer l'audio depuis les transformateurs importer Wav2Vec2ForCTC, Wav2Vec2Tokenizer

Maintenant que nous avons importé avec succès toutes les bibliothèques, chargeons notre tokenizer et le modèle. Nous utiliserons un modèle pré-formé pour cet exemple. Un modèle pré-formé est un modèle qui a déjà été formé par quelqu'un d'autre que nous pouvons réutiliser dans notre système. Le modèle que nous allons importer est formé par Facebook.

tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")

Le téléchargement peut prendre un certain temps.

Une fois cela fait, vous pouvez enregistrer votre voix et enregistrer le fichier wav juste à côté du fichier dans lequel vous écrivez votre code. Vous pouvez nommer votre audio « my-audio.wav ».

nom_fichier = 'mon-audio.wav' Audio(nom_fichier)

Avec ce code, vous pouvez lire votre audio dans le bloc-notes Jupyter.

Prochaine étape : nous allons charger notre fichier audio et vérifier notre taux d'échantillonnage et notre temps total.

data = wavfile.read(file_name) framerate = data[0] sounddata = data[1] time = np.arange(0,len(sounddata))/framerate print('Sampling rate:',framerate,'Hz')

Le résultat de cet exemple serait différent du vôtre car vous utilisez peut-être votre propre audio.

Taux d'échantillonnage : 44100 XNUMX Hz

Ceci est imprimé pour mon échantillon audio.

Nous devons convertir le taux d'échantillonnage à 16000 Hz car le modèle de Facebook accepte le taux d'échantillonnage à cette plage. Nous prendrons l'aide de Librosa, une bibliothèque que nous avions installée plus tôt.

input_audio, _ = librosa.load (nom_fichier, sr = 16000)

Enfin, l'audio d'entrée est envoyé au tokenizer qui est ensuite traité par le modèle. Le résultat final sera stocké dans la variable de transcription.

input_values ​​= tokenizer(input_audio, return_tensors="pt").input_values ​​logits = model(input_values).logits predicted_ids = torch.argmax(logits, dim=-1) transcription = tokenizer.batch_decode(predicted_ids)[0] print(transcription)

Le résultat:

"L'APPRENTISSAGE EN PROFONDEUR EST INCROYABLE"

Eh bien, c'est exactement ce que j'avais enregistré dans le fichier my-audio.wav.

Continuez et essayez d'enregistrer votre propre discours et réexécutez le dernier bloc de code. Cela devrait fonctionner en quelques secondes.

About the Author:

Salut! Je m'appelle Akash et je travaille en tant que développeur Python depuis plus de 4 ans maintenant. Au cours de ma carrière, j'ai commencé en tant que développeur Python junior sur le plus grand site de portail d'emploi du Népal, Mérojob. Plus tard, j'ai été impliqué dans la science des données et la recherche dans la première entreprise de covoiturage du Népal, Jouer un petit air. Actuellement, je suis activement impliqué dans la science des données ainsi que dans le développement Web avec Django.

Vous pouvez retrouver mes autres projets sur :

https://github.com/akashadhikari

Connectez-moi sur LinkedIn

https://www.linkedin.com/in/akashadh/

Courriel : [email protected] | [email protected]

Site Web (Travailler sur le blog Data Science): https://akashadhikari.github.io/

Sources d'image:

Image 1 – https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

Image 2 – https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

Notes de fin:

Merci pour la lecture!

J'espère que vous avez apprécié la lecture de l'article. Si vous l'avez trouvé utile, partagez-le également avec vos amis sur les réseaux sociaux. Pour toute question, suggestion, critique constructive ou toute autre discussion, veuillez me contacter ici dans les commentaires ou vous pouvez me joindre directement par e-mail.

Source : https://www.analyticsvidhya.com/blog/2021/09/ok-google-speech-to-text-in-python-with-deep-learning-in-2-minutes/

Horodatage:

Plus de Analytique Vidhya