blackrock-cio-said-bitcoin-could-reach-new-heights.jpg

"Εντάξει, Google!" - Ομιλία σε κείμενο σε Python με Deep Learning σε 2 λεπτά

Κόμβος πηγής: 1866555

Αυτό το άρθρο δημοσιεύθηκε ως μέρος του Επιστήμη δεδομένων Blogathon

Εισαγωγή

Μπορεί να χρησιμοποιείτε συχνά Βοηθός Google ή της Apple Siri ή ακόμη Amazon Alexa για να μάθετε γρήγορες απαντήσεις στον ιστό ή απλά να παραγγείλετε κάτι. Αυτοί οι βοηθοί AI είναι πολύ γνωστοί για την κατανόηση των εντολών ομιλίας μας και την εκτέλεση των επιθυμητών εργασιών. Απαντούν γρήγορα στις εντολές ομιλίας όπως "Εντάξει, Google. Ποια είναι η πρωτεύουσα της Ισλανδίας; » ή «Γεια σου, Siri. Δείξε μου τη συνταγή της Λαζάνια ». και εμφανίζει το ακριβές αποτέλεσμα. Έχετε αναρωτηθεί ποτέ πώς το κάνουν πραγματικά; Σήμερα, θα χτίσουμε ένα πολύ απλό σύστημα αναγνώρισης ομιλίας που παίρνει τη φωνή μας ως είσοδο και παράγει το αντίστοιχο κείμενο ακούγοντας την είσοδο.

ομιλία σε κείμενο
1 εικόνα

TLDR Δείξε μου τον κωδικό!

Εάν είστε ανυπόμονοι όπως εγώ, αυτός είναι πρακτικά ο πλήρης πηγαίος κώδικας που μπορεί να αντιγραφεί, να επικολληθεί και να εκτελεστεί γρήγορα μέσω ενός αρχείου Python. Βεβαιωθείτε ότι έχετε ένα αρχείο με το όνομα 'my-audio.wav' ως είσοδο ομιλίας σας. Επίσης, βεβαιωθείτε ότι έχετε εγκαταστήσει όλες τις βιβλιοθήκες.

Στο επόμενο μέρος του σεμιναρίου, θα συζητήσουμε τι κάνει κάθε γραμμή.

Ιδού ο κωδικός!

import torch import librosa import numpy as np import soundfile as sf from scipy.io import wavfile from IPython.display import Audio from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer
tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
όνομα_αρχείου = 'my-audio.wav'
data = wavfile.read (όνομα αρχείου) 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)

Πριν ξεκινήσουμε

Βεβαιωθείτε ότι έχετε ελέγξει τον πλήρη πηγαίο κώδικα αυτού του σεμιναρίου αυτό το repo του Github.

Wav2Vec: Ένα επαναστατικό μοντέλο

wave2vec | ομιλία σε κείμενο
2 εικόνα

Θα χρησιμοποιούμε Wave2Vec -μια υπερσύγχρονη προσέγγιση αναγνώρισης ομιλίας από το Facebook.

Οι ερευνητές στο Facebook περιγράφουν αυτήν την προσέγγιση ως εξής:

Υπάρχουν χιλιάδες γλώσσες που ομιλούνται σε όλο τον κόσμο, πολλές με πολλές διαφορετικές διαλέκτους, γεγονός που αποτελεί τεράστια πρόκληση για τη δημιουργία υψηλής ποιότητας τεχνολογίας αναγνώρισης ομιλίας. Απλώς δεν είναι εφικτό να αποκτηθούν πόροι για κάθε διάλεκτο και κάθε γλώσσα σε πολλούς πιθανούς τομείς (ανάγνωση ομιλίας, τηλεφωνική ομιλία κ.λπ.). Το νέο μας μοντέλο, wav2vec 2.0, χρησιμοποιεί την αυτοεπίβλεψη για να ξεπεράσει τα όρια μαθαίνοντας από μη επισημασμένα δεδομένα εκπαίδευσης για να επιτρέψει συστήματα αναγνώρισης ομιλίας για πολλές περισσότερες γλώσσες, διαλέκτους και τομείς. Με μία μόνο ώρα επισημασμένων δεδομένων εκπαίδευσης, το wav2vec 2.0 ξεπερνά την προηγούμενη τεχνολογία στο υποσύνολο 100 ωρών του δείκτη αναφοράς LibriSpeech-χρησιμοποιώντας 100 φορές λιγότερα δεδομένα με ετικέτα.

Ορίστε! Το Wav2Vec είναι ένα αυτο-εποπτευόμενο μοντέλο που στοχεύει στη δημιουργία ενός συστήματος αναγνώρισης ομιλίας για πολλές γλώσσες και διαλέκτους. Με πολύ λίγα δεδομένα κατάρτισης (περίπου 100 φορές λιγότερο επισημασμένα), το μοντέλο κατάφερε να ξεπεράσει το προηγούμενο μοντέλο αναφοράς τελευταίας τεχνολογίας.

Αυτό το μοντέλο, όπως και το BERT, εκπαιδεύεται προβλέποντας μονάδες ομιλίας για καλυμμένα τμήματα ήχου. Ο ήχος ομιλίας, από την άλλη πλευρά, είναι ένα συνεχές σήμα που καταγράφει πολλά χαρακτηριστικά της ηχογράφησης χωρίς να χωρίζεται σαφώς σε λέξεις ή άλλες ενότητες. Το Wav2vec 2.0 αντιμετωπίζει αυτό το πρόβλημα μαθαίνοντας βασικές μονάδες των 25ms για να μάθει υψηλού επιπέδου αναπαραστάσεις με βάση τα συμφραζόμενα. Αυτές οι μονάδες χρησιμοποιούνται στη συνέχεια για να χαρακτηρίσουν ένα ευρύ φάσμα προφορικών ηχογραφήσεων, ενισχύοντας τη στιβαρότητα του wav2vec. Με 100 φορές λιγότερο επισημασμένα δεδομένα κατάρτισης, μπορούμε να δημιουργήσουμε αλγόριθμους αναγνώρισης φωνής που ξεπερνούν τις προσεγγίσεις με την καλύτερη ημι-εποπτεία. Χάρη στην αυτο-εποπτευόμενη μάθηση, το Wav2vec 2.0 αποτελεί μέρος μοντέλων μηχανικής μάθησης που βασίζονται λιγότερο στις ετικέτες εισόδου. Η αυτοεποπτεία έχει βοηθήσει στην προώθηση της ταξινόμησης εικόνας, της κατανόησης βίντεο και των συστημάτων κατανόησης περιεχομένου. Ο αλγόριθμος θα μπορούσε να οδηγήσει σε εξελίξεις στην τεχνολογία ομιλίας για ένα ευρύ φάσμα γλωσσών, διαλέκτων και τομέων, καθώς και για τα τρέχοντα συστήματα.

Επιλέγοντας το περιβάλλον και τις βιβλιοθήκες μας

Θα χρησιμοποιούμε PyTorch, ένα πλαίσιο μηχανικής εκμάθησης ανοιχτού κώδικα για αυτήν τη λειτουργία. Ομοίως, θα χρησιμοποιήσουμε transformers, μια υπερσύγχρονη βιβλιοθήκη επεξεργασίας φυσικής γλώσσας από Αγκαλιάζοντας το πρόσωπο.

Παρακάτω είναι η λίστα με όλες τις απαιτήσεις που μπορεί να θέλετε να εγκαταστήσετε μέσω του pip. Συνιστάται να εγκαταστήσετε όλα αυτά τα πακέτα μέσα σε ένα εικονικό περιβάλλον πριν προχωρήσετε.

  1. Jupyter Notebook
  2. Δάδα
  3. Librosa
  4. Νούμπι
  5. Αρχείο ήχου
  6. Σκατά
  7. IPython
  8. transformers

Εργασία με τον κώδικα

Ανοίξτε το σημειωματάριό σας Jupyter ενώ ενεργοποιείτε το εικονικό περιβάλλον που περιέχει όλες τις βασικές βιβλιοθήκες που αναφέρονται παραπάνω.

Μόλις φορτωθεί ο φορητός υπολογιστής, δημιουργήστε ένα νέο αρχείο και ξεκινήστε την εισαγωγή των βιβλιοθηκών.

import torch import librosa import numpy as np import soundfile as sf from scipy.io import wavfile from IPython.display import Audio from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer

Τώρα που έχουμε εισαγάγει με επιτυχία όλες τις βιβλιοθήκες, ας φορτώσουμε το tokenizer και το μοντέλο. Θα χρησιμοποιήσουμε ένα προ-εκπαιδευμένο μοντέλο για αυτό το παράδειγμα. Ένα προ-εκπαιδευμένο μοντέλο είναι ένα μοντέλο που έχει ήδη εκπαιδευτεί από κάποιον άλλο το οποίο μπορούμε να επαναχρησιμοποιήσουμε στο σύστημά μας. Το μοντέλο που πρόκειται να εισαγάγουμε εκπαιδεύεται από το Facebook.

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

Ενδέχεται να χρειαστεί λίγος χρόνος για τη λήψη.

Μόλις τελειώσετε, μπορείτε να ηχογραφήσετε τη φωνή σας και να αποθηκεύσετε το αρχείο wav ακριβώς δίπλα στο αρχείο στο οποίο γράφετε τον κωδικό σας. Μπορείτε να ονομάσετε τον ήχο σας σε "my-audio.wav".

όνομα_αρχείου = 'my-audio.wav' ioχος (όνομα_αρχείου)

Με αυτόν τον κωδικό, μπορείτε να αναπαράγετε τον ήχο σας στο σημειωματάριο Jupyter.

Επόμενο: Θα φορτώσουμε το αρχείο ήχου μας και θα ελέγξουμε το δείγμα και τον συνολικό χρόνο.

data = wavfile.read (όνομα αρχείου) framerate = data [0] sounddata = data [1] time = np.arange (0, len (sounddata))/framerate print ('Sampling rate:', framerate, 'Hz')

Το αποτέλεσμα από αυτό το παράδειγμα θα διαφέρει από το δικό σας καθώς ενδέχεται να χρησιμοποιείτε τον δικό σας ήχο.

Ρυθμός δειγματοληψίας: 44100 Hz

Αυτό εκτυπώνεται για το δείγμα ήχου μου.

Πρέπει να μετατρέψουμε το ρυθμό δειγματοληψίας σε 16000 Hz καθώς το μοντέλο του Facebook αποδέχεται το ποσοστό δειγματοληψίας σε αυτό το εύρος. Θα λάβουμε βοήθεια από τη Librosa, μια βιβλιοθήκη που είχαμε εγκαταστήσει νωρίτερα.

input_audio, _ = librosa.load (όνομα αρχείου, sr = 16000)

Τέλος, ο ήχος εισόδου τροφοδοτείται με το tokenizer το οποίο στη συνέχεια επεξεργάζεται από το μοντέλο. Το τελικό αποτέλεσμα θα αποθηκευτεί στη μεταβλητή μεταγραφής.

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)

Η έξοδος:

«ΤΟ ΒΑΘΥ ΜΑΘΗΣΕΙΣ ΕΙΝΑΙ ΚΑΤΑΠΛΗΚΤΙΚΟ»

Λοιπόν, αυτό ακριβώς είχα καταγράψει στο αρχείο my-audio.wav.

Συνεχίστε και δοκιμάστε να καταγράψετε τη δική σας ομιλία και εκτελέστε ξανά το τελευταίο μπλοκ κώδικα. Θα πρέπει να λειτουργήσει μέσα σε δευτερόλεπτα.

Σχετικά με το Συντάκτης:

Γεια σου! Το όνομά μου είναι Akash και εργάζομαι ως προγραμματιστής Python για πάνω από 4 χρόνια τώρα. Κατά τη διάρκεια της καριέρας μου, ξεκίνησα ως Junior Python Developer στη μεγαλύτερη πύλη εργασίας του Νεπάλ, MerojobΤο Αργότερα, ασχολήθηκα με την Επιστήμη των Δεδομένων και την έρευνα στην πρώτη εταιρεία του Νεπάλ για την κοινή χρήση διαδρομών, ΤότολΤο Επί του παρόντος, έχω ασχοληθεί ενεργά με την Επιστήμη Δεδομένων καθώς και την Ανάπτυξη Ιστού με το Django.

Μπορείτε να βρείτε τα άλλα μου έργα σε:

https://github.com/akashadhikari

Συνδέστε με στο LinkedIn

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

Email: [προστασία μέσω email] | [προστασία μέσω email]

Ιστότοπος (Εργασία στο The Data Science Blog): https://akashadhikari.github.io/

Πηγές εικόνας:

Εικόνα 1-https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

Εικόνα 2-https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

Τελικές σημειώσεις:

Ευχαριστώ για την ανάγνωση!

Ελπίζω να απολαύσατε την ανάγνωση του άρθρου. Αν το βρήκατε χρήσιμο, μοιραστείτε το και στους φίλους σας στα κοινωνικά μέσα. Για τυχόν απορίες, προτάσεις, εποικοδομητικές κριτικές ή οποιαδήποτε άλλη συζήτηση, παρακαλώ στείλτε μου ping εδώ στα σχόλια ή μπορείτε να επικοινωνήσετε απευθείας μαζί μου μέσω email.

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

Σφραγίδα ώρας:

Περισσότερα από Ανάλυση Vidhya