blackrock-cio-said-bitcoin-zou-nieuwe-hoogten.jpg kunnen bereiken

"Ok, Google!" - Spraak naar tekst in Python met Deep Learning in 2 minuten

Bronknooppunt: 1866555

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon

Introductie

Je gebruikt misschien vaak Google Assistant of van Apple Siri of Amazon's Alexa om snelle antwoorden op internet te vinden of om gewoon iets te bevelen. Deze AI-assistenten staan ​​erom bekend onze spraakopdrachten te begrijpen en de gewenste taken uit te voeren. Ze reageren snel op de spraakcommando's zoals "OK, Google. Wat is de hoofdstad van IJsland?” of "Hé, Siri. Laat me het recept van lasagne zien.” en het nauwkeurige resultaat weergeven. Heb je je ooit afgevraagd hoe ze het echt doen? Vandaag zullen we een heel eenvoudig spraakherkenningssysteem bouwen dat onze stem als invoer gebruikt en de bijbehorende tekst produceert door de invoer te horen.

spraak naar tekst
Afbeelding 1

TLDR Laat me de code zien!

Als je net als ik ongeduldig bent, is dit praktisch de volledige broncode die snel kan worden gekopieerd, geplakt en uitgevoerd via een Python-bestand. Zorg ervoor dat u een bestand met de naam 'my-audio.wav' als spraakinvoer hebt. Zorg er ook voor dat alle bibliotheken zijn geïnstalleerd.

In het laatste deel van de tutorial zullen we bespreken wat elk van de regels doet.

Hier is de code!

importeer torch import librosa importeer numpy als np importeer geluidsbestand als sf van scipy.io importeer wav-bestand van IPython.display importeer audio van transformatoren importeer Wav2Vec2ForCTC, Wav2Vec2Tokenizer
tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
file_name = 'mijn-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(transcriptie)

Voordat we beginnen

Zorg ervoor dat u de volledige broncode van deze tutorial controleert in deze Github-repo.

Wav2Vec: een revolutionair model

wave2vec | spraak naar tekst
Afbeelding 2

We zullen gebruiken Golf2Vec — een state-of-the-art spraakherkenningsaanpak van Facebook.

De onderzoekers van Facebook omschrijven deze aanpak als:

Er worden duizenden talen over de hele wereld gesproken, vele met verschillende dialecten, wat een enorme uitdaging vormt voor het bouwen van hoogwaardige spraakherkenningstechnologie. Het is gewoon niet haalbaar om bronnen te verkrijgen voor elk dialect en elke taal in de vele mogelijke domeinen (spraak lezen, telefoonspraak, enz.). Ons nieuwe model, wav2vec 2.0, gebruikt zelftoezicht om de grenzen te verleggen door te leren van niet-gelabelde trainingsgegevens om spraakherkenningssystemen voor veel meer talen, dialecten en domeinen mogelijk te maken. Met slechts één uur aan gelabelde trainingsgegevens presteert wav2vec 2.0 beter dan de vorige stand van de techniek op de 100-uurs subset van de LibriSpeech-benchmark — met 100 keer minder gelabelde gegevens.

Daar ga je! Wav2Vec is een zelfgestuurd model dat tot doel heeft een spraakherkenningssysteem te creëren voor verschillende talen en dialecten. Met zeer weinig trainingsgegevens (ongeveer 100 keer minder gelabeld), is het model in staat geweest om beter te presteren dan de vorige state-of-the-art benchmark.

Dit model wordt, net als BERT, getraind door spraakeenheden te voorspellen voor gemaskeerde audiosegmenten. Spraakaudio daarentegen is een continu signaal dat veel kenmerken van de opname vastlegt zonder duidelijk te worden gesegmenteerd in woorden of andere eenheden. Wav2vec 2.0 lost dit probleem op door basiseenheden van 25 ms te leren om contextuele representaties op hoog niveau te leren. Deze eenheden worden vervolgens gebruikt om een ​​breed scala aan gesproken audio-opnames te karakteriseren, waardoor de robuustheid van wav2vec wordt verbeterd. Met 100x minder gelabelde trainingsgegevens kunnen we spraakherkenningsalgoritmen maken die de best-semi-supervisie benaderingen overtreffen. Dankzij zelfgestuurd leren maakt Wav2vec 2.0 deel uit van machine learning-modellen die minder afhankelijk zijn van gelabelde invoer. Zelftoezicht heeft geholpen bij de vooruitgang van systemen voor beeldclassificatie, videobegrip en inhoudsbegrip. Het algoritme zou kunnen leiden tot verbeteringen in spraaktechnologie voor een breed scala aan talen, dialecten en domeinen, evenals voor huidige systemen.

Kiezen voor onze omgeving en bibliotheken

We zullen gebruiken PyTorch, een open-source machine learning-framework voor deze bewerking. Op dezelfde manier zullen we gebruiken transformers, een ultramoderne bibliotheek voor natuurlijke taalverwerking door Gezicht knuffelen.

Hieronder vindt u de lijst met alle vereisten die u mogelijk via pip wilt installeren. Het wordt aanbevolen dat u al deze pakketten installeert in een virtuele omgeving alvorens verder te gaan.

  1. Jupyter Notebook
  2. Fakkel
  3. Weegschaal
  4. numpy
  5. Geluidsbestand
  6. Pittig
  7. IPython
  8. transformers

Werken met de code

Open uw Jupyter-notebook terwijl u de virtuele omgeving activeert die alle bovengenoemde essentiële bibliotheken bevat.

Nadat de notebook is geladen, maakt u een nieuw bestand en begint u met het importeren van de bibliotheken.

importeer torch import librosa importeer numpy als np importeer geluidsbestand als sf van scipy.io importeer wav-bestand van IPython.display importeer audio van transformatoren importeer Wav2Vec2ForCTC, Wav2Vec2Tokenizer

Nu we met succes alle bibliotheken hebben geïmporteerd, gaan we onze tokenizer en het model laden. We zullen voor dit voorbeeld een vooraf getraind model gebruiken. Een voorgetraind model is een model dat al door iemand anders is getraind en dat we kunnen hergebruiken in ons systeem. Het model dat we gaan importeren is getraind door Facebook.

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

Dit kan even duren om te downloaden.

Als u klaar bent, kunt u uw stem opnemen en het wav-bestand opslaan net naast het bestand waarin u uw code schrijft. U kunt uw audio een naam geven als "my-audio.wav".

bestandsnaam = 'mijn-audio.wav' Audio(bestandsnaam)

Met deze code kun je je audio afspelen in de Jupyter-notebook.

Volgende: we zullen ons audiobestand laden en onze samplefrequentie en totale tijd controleren.

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

Het resultaat van dit voorbeeld kan afwijken van het uwe, aangezien u mogelijk uw eigen audio gebruikt.

Bemonsteringsfrequentie: 44100 Hz

Dit is afgedrukt voor mijn voorbeeldaudio.

We moeten de samplefrequentie omrekenen naar 16000 Hz, aangezien het model van Facebook de samplefrequentie in dit bereik accepteert. We zullen hulp krijgen van Librosa, een bibliotheek die we eerder hadden geïnstalleerd.

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

Ten slotte wordt de invoeraudio naar de tokenizer gevoerd die vervolgens door het model wordt verwerkt. Het eindresultaat wordt opgeslagen in de transcriptievariabele.

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(transcriptie)

Het resultaat:

'DIEP LEREN IS GEWELDIG'

Nou, dat is precies wat ik had opgenomen in het mijn-audio.wav-bestand.

Ga verder en probeer uw eigen toespraak op te nemen en voer het laatste codeblok opnieuw uit. Het zou binnen enkele seconden moeten werken.

Over de auteur:

Hoi! Mijn naam is Akash en ik werk al meer dan 4 jaar als Python-ontwikkelaar. In de loop van mijn carrière begon ik als Junior Python Developer op de grootste Jobportaalsite van Nepal, Merojob. Later was ik betrokken bij datawetenschap en onderzoek bij het eerste ritdeelbedrijf van Nepal, tandje. Momenteel ben ik actief betrokken geweest bij zowel datawetenschap als webontwikkeling bij Django.

Mijn andere projecten vind je op:

https://github.com/akashadhikari

Verbind mij op LinkedIn

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

E-mail: [e-mail beveiligd] | [e-mail beveiligd]

Website (werkt aan The Data Science Blog): https://akashadhikari.github.io/

Afbeeldingsbronnen:

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

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

Einde opmerkingen:

Bedankt voor het lezen!

Ik hoop dat je het artikel leuk vond om te lezen. Als je het nuttig vond, deel het dan ook met je vrienden op sociale media. Voor vragen, suggesties, constructieve kritiek of andere discussies, kunt u me pingen hier in de opmerkingen of u kunt me rechtstreeks bereiken via e-mail.

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

Tijdstempel:

Meer van Analytics Vidhya