Wenn Sie die Iron Man-Filme gesehen haben, sind Sie sich der Hilfe bewusst, die Jarvis leisten kann. Wenn nicht, denken Sie an einen englischen Butler, der in einem Computer gefangen ist. Ein entscheidender Aspekt von Jarvis ist seine Fähigkeit, zu verstehen, was Sie sagen. Dies wird als Spracherkennung bezeichnet und ist etwas, das ich in diesem Beitrag mit Python und etwas maschinellem Lernen nachzubilden versuche.
Sie können das folgende Material als schnellen, eigenständigen Leitfaden für die Spracherkennung verwenden. Es handelt sich jedoch um den zweiten Teil einer umfassenderen Serie, in der Python verwendet wird, um Ihren eigenen Computerassistenten zu erstellen. Wenn Sie mehr erfahren möchten, sehen Sie sich hier den ersten Teil der Serie an, in dem Python verwendet wird, um Ihren Computer zum Sprechen zu bringen.
Was ist Spracherkennung?
Spracherkennung (sowie auch Text-zu-Sprache) sind Probleme der natürlichen Sprachverarbeitung, die oft mit dem Akronym NLP abgekürzt werden. Bei jedem NLP-Problem werden gesprochene oder geschriebene Wörter verwendet, es werden Berechnungen durchgeführt und eine Ausgabe oder Vorhersage erstellt.
Die Software zur Spracherkennung zerlegt eine Audioaufnahme in einzelne Klänge, analysiert die Klänge und verwendet dann einen Algorithmus, um die wahrscheinlichsten Wörter zu finden, die zu den Klängen passen. Der manuelle Ansatz für diesen Algorithmus besteht darin, die beste Übereinstimmung für jeden Klang in einer großen Datenbank oder in Beispielen zu finden, die Eigenschaften der Aufnahme gemeinsam haben. Dieser Prozess ist jedoch schwierig in Code umzusetzen.
Die Spracherkennung muss sich mit dem sogenannten „Cocktail-Party-Problem“ auseinandersetzen. Dies ist ein Problem, das Menschen leicht lösen können, indem sie einzelne Stimmen von denen vieler anderer isolieren. Daher ahmen viele neue, hocherfolgreiche Anwendungen für die Spracherkennung Neuronen (die Zellen in unserem Gehirn) mit neuronalen Netzwerken nach und trainieren sie mit Beispielen (ein Prozess, der als überwachtes Lernen bezeichnet wird). Einige bemerkenswerte Beispiele hierfür sind Deep Karaoke und die Arbeit von Yu, D und anderen. Wenn Sie es nicht wussten, das „tief“ in der Tiefenlernung bezieht sich einfach auf die Verwendung eines sehr großen, oder mit anderen Worten, tiefen neuronalen Netzwerks (d.h. solcher, die viele Schichten von Neuronen haben).
Da die Belastung, wie das Problem zu lösen ist, auf das neuronale Netz verlagert wird, hat der Ersteller des Algorithmus oft eine drastisch reduzierte Arbeitsbelastung. Dies bedeutet, dass neuronale Netze Probleme lösen können, die mit traditionellen Methoden für Menschen unlösbar wären.
Eine kürzlich erschienene Anwendung auf der Grundlage des Tiefenlernens, die viel Aufmerksamkeit erregt hat, ist Google Duplex. Sehen Sie sich das Video hier an. Auf einer Entwicklerkonferenz im Mai 2018 stellte Google diese neue und bevorstehende Funktion für Google Assistant vor, die Menschen anrufen und chatten kann, wie ein menschlicher Assistent. Sie demonstrierten diese Anwendung, indem sie einen Salon und ein Restaurant anriefen und eine Reservierung für die vom Benutzer angeforderten Zeiten vornahmen. Eine Sache, die an dieser Anwendung wirklich beeindruckend ist, ist, wie gut das neuronale Netzwerk schlecht strukturierte Sätze verstehen kann.
Ein Modell für die Spracherkennung finden
Es gibt eine gute Auswahl an Spracherkennungspaketen, die für Python verfügbar sind. Diese Pakete tun entweder Folgendes: 1) sie übertragen die Arbeit an eine API, die über einen intelligenten Algorithmus verfügt, die meisten verwenden einen Algorithmus für tiefes Lernen, oder 2) sie verwenden ein separates Programm (pocketsphinx). Einige häufig verwendete sind:
Für eine schöne Anleitung, wie man eine beliebte Bibliothek, die diese Bibliotheken kapselt, SpeechRecognition, verwendet, sehen Sie sich https://realpython.com/python-speech-recognition/ an.
Nachdem ich die Methoden des tiefen Lernens angepriesen habe, denke ich, dass es schön wäre, eine zu verwenden. Ich möchte auch nicht dafür bezahlen, ein Modell zu verwenden, das auf den meisten Laptops kostenlos ausgeführt werden kann. Wir werden auch auf die API-Wrapper verzichten und das Modell selbst lokal mit der transformers-Bibliothek ausführen.
Eines der fortschrittlicheren Modelle, die Sie selbst ausführen können, ist OpenAI’s Whisper, das von OpenAI veröffentlicht und kostenlos von Hugging Face heruntergeladen werden kann.
Erste Schritte
Bevor wir mit der Arbeit beginnen, müssen wir unser Projekt einrichten. Wenn Sie die Anleitung aus meinem vorherigen Beitrag befolgt haben, haben Sie diesen Schritt bereits ausgeführt. Sie können Ihre virtuelle Umgebung aktivieren und diesen Abschnitt überspringen.
Wir werden alles über einen Texteditor und ein Terminal durchführen. Wenn Sie nicht wissen, was das bedeutet, ist ein Texteditor, den ich für Anfänger empfehle, Visual Studio Code und ein Terminal ist normalerweise in Ihrem Texteditor integriert (wie in Visual Studio Code) oder ein Programm auf Ihrem Computer, das „Terminal“ oder „Cmd“ heißt.
Öffnen Sie nun Ihr Terminal und wechseln Sie in das Verzeichnis, in dem Sie Ihre Projekte speichern, z. B. mit dem Befehl:
cd ~/projects
Als Nächstes erstellen Sie ein Verzeichnis, um unser Projekt zu speichern. Dies liegt ganz bei Ihnen, aber ich möchte, dass mein Assistent Robert heißt. Also erstelle ich ein neues Verzeichnis mit dem Namen „robert“ und wechsle in dieses Verzeichnis mit dem Befehl:
mkdir robert
cd robert
Sie können den Namen nach Belieben ändern, z. B. in Brandy oder Kumar oder etwas anderes.
Als Nächstes müssen wir Python zum Laufen bringen. Dazu benötigen wir Python 3. Wenn Sie dies noch nicht installiert haben, finden Sie unter https://www.python.org/ Anweisungen zur Installation. Wir müssen auch eine virtuelle Python-Umgebung erstellen. Wenn Sie mehr darüber erfahren möchten, finden Sie in einem meiner kürzlich veröffentlichten Beiträge unter hier weitere Informationen.
Sie können Ihre Python-Installation im Terminal mit dem folgenden Befehl überprüfen:
python3 --version
Sie sollten nun in der Lage sein, Ihre virtuelle Python-Umgebung innerhalb Ihres Robert-Verzeichnisses mit dem folgenden Befehl zu erstellen:
python3 -m venv venv
Hinweis: Wenn die Version von Python, die Sie installiert haben, py
,python
, python3.7
, python3.9
oder etwas anderes heißt, verwenden Sie diese.
Sie sollten dann in der Lage sein, Ihre virtuelle Umgebung mit den folgenden Befehlen zu aktivieren:
(auf MacOS und Linux)
source venv/bin/activate
oder (auf Windows)
venv\Scripts\activate
Pakete und Abhängigkeiten installieren
Wir müssen nun unsere erforderlichen Python-Pakete installieren. Dazu erstellen wir eine Datei mit dem Namen requirements.txt oder bearbeiten unsere vorhandene Datei. Diese requirements.txt-Datei hilft uns dabei, den Überblick über die von uns verwendeten Pakete für unser Projekt zu behalten.
transformers
torchaudio
gradio
Dann (vorausgesetzt, Sie befinden sich in Ihrem Terminal im selben Verzeichnis) installieren Sie Ihre Anforderungen mit dem folgenden Befehl:
pip install -r requirements.txt
Eines unserer Pakete (gradio) erfordert die Installation von ffmpeg, da es dies im Hintergrund zur Verarbeitung von Audioaufnahmen verwendet.
Wenn Sie einen Mac mit Homebrew haben, ist die Installation so einfach wie:
brew install ffmpeg
Ähnlich können Sie es auf Linux mit Ihrem bevorzugten Paketmanager installieren (z. B. für Ubuntu):
sudo apt install ffmpeg
Auf Windows folgen Sie den Anweisungen auf der Website von ffmpeg: https://ffmpeg.org/
Das Skript erstellen
Wenn Sie denken „Zeig mir endlich den Code!“, hier ist das vollständige Skript für unsere Datei mit dem Namen converstation.py
:
import gradio as gr
from transformers import pipeline
import numpy as np
transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base.en")
def transcribe(stream, new_chunk):
sr, y = new_chunk
y = y.astype(np.float32)
y /= np.max(np.abs(y))
if stream is not None:
stream = np.concatenate([stream, y])
else:
stream = y
return stream, transcriber({"sampling_rate": sr, "raw": stream})["text"]
demo = gr.Interface(
transcribe,
["state", gr.Audio(sources=["microphone"], streaming=True)],
["state", "text"],
live=True,
)
demo.launch()
Wenn Sie jedoch besser verstehen möchten, was passiert, finden Sie hier eine Erklärung der einzelnen Teile des Codes: Zunächst importieren wir einige erforderliche Pakete:
import gradio as gr
from transformers import pipeline
import numpy as np
Das gradio
-Paket bietet eine intuitive Benutzeroberfläche. Das transformers
-Paket ermöglicht es uns, das Whisper-Modell von OpenAI zu nutzen, und numpy
unterstützt uns bei Array-Operationen.
Als Nächstes definieren wir das Modell und die Transkriptionsfunktion:
transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base.en")
def transcribe(stream, new_chunk):
sr, y = new_chunk
y = y.astype(np.float32)
y /= np.max(np.abs(y))
if stream is not None:
stream = np.concatenate([stream, y])
else:
stream = y
return stream, transcriber({"sampling_rate": sr, "raw": stream})["text"]
Um das Whisper-Modell von OpenAI zu nutzen, haben wir eine Transkriptionspipeline eingerichtet. Dieses Skript verarbeitet eingehende Audiostücke, bereitet sie auf und transkribiert die Sprache.
Schließlich kapseln wir alles in einer Gradio-Benutzeroberfläche:
demo = gr.Interface(
transcribe,
["state", gr.Audio(sources=["microphone"], streaming=True)],
["state", "text"],
live=True,
)
und starten den Gradio-Server:
demo.launch()
Die Gradio-Benutzeroberfläche bietet eine Live-Demo, die die kontinuierliche Transkriptionsfunktion integriert, um eine Echtzeit-Interaktion mit dem Whisper-Modell von OpenAI zu ermöglichen.
Führen Sie nun diese Datei aus, indem Sie den folgenden Befehl eingeben:
python conversation.py
Sie sollten eine Ausgabe sehen, die Ihnen etwas über die URL sagt, die Sie besuchen sollen. Starten Sie die Live-Demo, indem Sie auf die in der Ausgabe angegebene URL klicken.
Ich finde es erstaunlich, dass Sie ein so gutes Spracherkennungsmodell auf Ihrem eigenen Computer in Echtzeit ausführen können.
Es ist auch mehrsprachig! Wenn Sie also eine andere Sprache sprechen, probieren Sie es aus.
Und das ist es! Sie verfügen nun über ein Python-Skript, das in der Lage ist, Sprache in Echtzeit zu erkennen und als Grundlage für Ihren eigenen Jarvis-ähnlichen Assistenten zu dienen.
Wenn Sie möchten, dass ich dieses Spracherkennungsmodell mit einem Text-zu-Sprache-Modell und einem GPT-„Gehirn“ kombiniere, hinterlassen Sie einen Kommentar unten. Außerdem teilen Sie mir mit, wenn Sie coole Ideen haben, was wir mit unseren persönlichen KI-Assistenten machen können.
Viel Spaß!