Spracheingabe: Die „Wake Word Detection“ trainiere ich aktuell auf Basis meiner eigenen Sprachaufnahmen. Für die Erkennung der Wünsche greife ich auf das KI-Model VOSK zurück.
…
Der Daten- und Analyseflow (Workflow) bei der Spracherkennung und Sprachverarbeitung vom Mikrofon bis zum Dialogsystem ist:
- Sprachaufnahme
- Digitalisierung und Speicherung der Sprache.
- Signalverarbeitung
- Rauschunterdrückung -> Sprachaktivierungserkennung -> Normalisierung.
- Merkmalsextraktion:
- Berechnung des Mel-Frequency Cepstral Coefficients (MFCCs) und Erzeugung von Spectrogrammen -> Extraktion der wesentlichen Sprachmerkmale.
- Spracherkennung (Automatic Speech Recognition – ASR):
- MFCCs -> Akustisches Modell (Vosk/Kaldi) -> Sprachmodell -> Decoding -> Textausgabe.
- Post-Processing:
- Normalisierung und Fehlerkorrektur des erkannten Texts.
- Dialogsystem:
- Text -> Absichtserkennung -> Entitätenextraktion -> Kontextmanagement -> Antwortgenerierung.“
Im folgenden sind die Schritte des Workflows der Spracherkennung und Sprachverarbeitung beschreiben. Je Schritt wird angeben, welche Funktionen von welcher CulinAIBot Komponente übernommen werden.
1. Sprachaufnahme (Mikrofon)
- Eingabe:
- Der Nutzer spricht in das CulinAIBot Mikrofon beyerdynamic SPACE.
- Hardware:
- Das Mikrofon erfasst die analogen Schallwellen und wandelt sie in digitale Audiodaten um.
- Funktionen (Vorverarbeitung):
- Die digitalen Audiodaten werden je nach Anwendung in einem geeigneten Format (z.B. PCM, WAV) mit einer konfigurierten Abtastrate (z.B. 16 kHz) und Bit-Tiefe (z.B. 16 Bit) gespeichert.
2. Signalverarbeitung
Bei der Spracherkennung sorgen die folgenden Funktionen für eine klare Sprachübertragung, insbesondere in lauten Umgebungen wie der Küche.
- Rauschunterdrückung (noise suppression):
- Die Audiodaten werden gefiltert, um Hintergrundgeräusche und Störsignale zu reduzieren. Techniken wie Adaptive Noise Cancellation (ANC) oder spektrale Subtraktion können hier verwendet werden.
- Echo Kompensation / Unterdrückung:
- Verringert Echos, um die Sprachqualität zu verbessern.
- Normalisierung:
- Die Lautstärke der Audiodaten wird normalisiert, um konsistente Eingabewerte für die Spracherkennung zu gewährleisten.
- Sprachaktivierungserkennung (Voice Activity Detection – VAD):
- Die Sprachaktivierungserkennung erkennt, wann ein Sprachsignal beginnt und endet, um nur relevante Daten weiter zu verarbeiten. Dies hilft, die Menge der zu verarbeitenden Daten zu reduzieren.
Auch bei der Spracherkennung des CulinAIBot sind diese Funktionen enthalten.
- Rauschunterdrückung (noise suppression):
- Das CulinAIBot Mikrofon beyerdynamic SPACE bringt diese Funktion mit.
- Echo Kompensation / Unterdrückung:
- Das CulinAIBot Mikrofon beyerdynamic SPACE bringt diese Funktion mit.
- Normalisierung
- Das CulinAIBot Mikrofon beyerdynamic SPACE bringt diese Funktion mit. Die Lautstärke der aufgenommenen Stimmen werden selbstständig angepasst, um eine gleichmäßige Verständlichkeit zu gewährleisten. Zusätzlich bringen GStreamer und VOSK im CulinAIBot diese Funktionen mit.
- Sprachaktivierungserkennung (Voice Activity Detection – VAD):
- Im CulinAIBot bringt GStreamer und VOSK (mit der Kaldi-Bibliothek) diese Funktion mit.
3. Merkmalsextraktion (Feature Extraction)
Die Merkmalextraktion hilft dabei, aus einem Audiosignal wichtige Informationen, wie Sprachmuster, Töne, oder Geräusche zu filtern, die für die Spracherkennung relevant sind.
- Mel-Frequency Cepstral Coefficients (MFCCs):
- Die Mel Frequency Cepstral Coefficients (MFCCs) sind eine Technik, die in der Spracherkennung verwendet wird, um wichtige Merkmale eines Sprachsignals zu extrahieren. Konkret wird ein komplexes Audiosignal auf einfache Zahlen herunterzubrechen, die für die Spracherkennung leichter zu verarbeiten sind. Dieser Prozess verwendet ausschließlich mathematische und signalverarbeitungstechnische Methoden, ohne den Einsatz von künstlicher Intelligenz oder Machine-Learning-Algorithmen. MFCCs werden jedoch oft als Eingabefeatures für maschinelle Lernverfahren wie neuronale Netze verwendet, insbesondere in der Sprach- und Audiosignalverarbeitung.
- Funktionsweise:
- Pre-Emphasis: Verstärkung höherer Frequenzen.
- Framing: Das Audio bzw. Sprachsignal wird in kleine zeitliche Abschnitte aufgeteilt, sogenannte Frames. Das hilft, die Veränderungen der Sprache im Laufe der Zeit zu erfassen.
- Umwandlung in Frequenzen: Jeder dieser Abschnitte wird in seine Frequenzen zerlegt. Das ist so, als ob man das Audiosignal aufbricht, um zu sehen, welche Tonhöhen (tiefe oder hohe Töne) es enthält.
- Windowing: Jedes Frame wird mit einem Fenster (meist Hamming-Fenster) gewichtet.
- Fourier-Transformation: Umwandlung jedes Frames vom Zeitbereich in den Frequenzbereich.
- Mel-Filterbank/Mel-Skala: Die menschlichen Ohren nehmen Töne nicht gleichmäßig wahr. Die Mel-Skala ist eine spezielle Art, Frequenzen so zu messen, wie das menschliche Ohr sie hört. Sie legt mehr Gewicht auf tiefe Töne, die für uns Menschen leichter zu unterscheiden sind. Dies beinhaltet die Anwendung von Mel-basierten Filtern, die die menschliche Wahrnehmung von Frequenzen besser widerspiegeln.
- Logarithmische Energie: Danach wird die Energie jeder Frequenz berechnet und auf eine logarithmische Skala gebracht (Umwandlung der Filterbank-Ausgaben in einen logarithmischen Maßstab). Das bedeutet, dass laute und leise Teile des Signals besser dargestellt werden können, ähnlich wie unser Ohr große Lautstärkeunterschiede verarbeitet.
- Merkmale (MFCCs): Schließlich werden diese Informationen mit einer mathematischen Technik namens diskrete Cosinus-Transformation (DCT) in eine Reihe von Zahlen umgewandelt, die MFCCs. Diese Zahlen beschreiben die wichtigsten Eigenschaften des Sprachsignals und sind die Merkmale, die die Spracherkennungssoftware zur Identifikation der gesprochenen Wörter nutzt. MFCCs werden als Eingabefeatures für maschinelle Lernverfahren wie neuronale Netze verwendet, insbesondere in der Sprach- und Audiosignalverarbeitung.
- Die Mel Frequency Cepstral Coefficients (MFCCs) sind eine Technik, die in der Spracherkennung verwendet wird, um wichtige Merkmale eines Sprachsignals zu extrahieren. Konkret wird ein komplexes Audiosignal auf einfache Zahlen herunterzubrechen, die für die Spracherkennung leichter zu verarbeiten sind. Dieser Prozess verwendet ausschließlich mathematische und signalverarbeitungstechnische Methoden, ohne den Einsatz von künstlicher Intelligenz oder Machine-Learning-Algorithmen. MFCCs werden jedoch oft als Eingabefeatures für maschinelle Lernverfahren wie neuronale Netze verwendet, insbesondere in der Sprach- und Audiosignalverarbeitung.
In der Küche kann CulinAIBot Sprachbefehle wie „Heize den Ofen auf 180 Grad vor“ erkennen, d.h. welche Laute in dem Befehl wichtig sind, um die passende Aktion auszuführen. In Zukunft soll der CulinAIBot auch Geräusche wie „Zischen einer Pfanne“ oder Töne wie „Piepen eines Timers“ erkennen.
- Im CulinAIBot wird VOSK für die Merkmalextraktion der Sprache mit Mel Frequency Cepstral Coefficients (MFCCs) genutzt.
- Für die Erkennung von Geräuschen und Tönen soll in Zukunft die Python-Audioanalyse-Bibliothek librosa genutzt werden.
4. Spracherkennung (Automatic Speech Recognition, ASR)
Die folgenden Komponenten zusammen ermöglichen eine präzise und effiziente Spracherkennung durchzuführen
- Akustisches Modell:
- Die extrahierten Merkmale (z.B. MFCCs) werden an ein akustisches Modell übergeben. Dieses Modell wurde trainiert, um die Wahrscheinlichkeit bestimmter Phoneme (die kleinsten Lauteinheiten) zu bestimmen, die zu den vorliegenden Merkmalen passen.
- Sprachmodell:
- Das Sprachmodell (häufig ein statistisches Modell oder ein neuronales Netzwerk) nutzt grammatikalische und sprachliche Regeln, um die erkannten Phoneme in sinnvolle Worte und Phrasen zu überführen. Moderne Systeme verwenden oft tiefere neuronale Netze, wie Recurrent Neural Networks (RNNs) oder Transformer-Modelle.
- Lexikon:
- Ein Lexikon oder Wörterbuch stellt die Verbindung zwischen Phonemen und vollständigen Wörtern her, um die korrekte Aussprache und Wortwahl zu ermöglichen.
- Decoding:
- Ein Decoding-Algorithmus kombiniert die Ausgaben des akustischen Modells und des Sprachmodells, um die wahrscheinlichste Wortfolge zu bestimmen.
- Ein Decoding-Algorithmus kombiniert die Ausgaben des akustischen Modells und des Sprachmodells, um die wahrscheinlichste Wortfolge zu bestimmen.
Im CulinAIBot wird VOSK mit einer Kombination aus diesen verschiedenen Modellen und Algorithmen zur Spracherkennung genutzt:
- Akustisches Modell:
- VOSK verwendet ein akustisches Modell, um die Beziehung zwischen Audiosignalen und den entsprechenden phonemischen Einheiten der Sprache zu erkennen. Dies erfolgt über Merkmalextraktion, bei der Audio in Merkmale wie Mel Frequency Cepstral Coefficients (MFCCs) zerlegt wird, um Sprachlaute zu analysieren.
- Sprachmodell:
- VOSK integriert Sprachmodelle, die die Wahrscheinlichkeit von Wortfolgen abschätzen. Diese Modelle helfen dem System, grammatikalisch und kontextabhängig die wahrscheinlichste Wortsequenz zu erkennen. Es gibt statische Sprachmodelle, die schneller, aber größer sind, sowie dynamische Modelle, die kompakter sind und sich zur Laufzeit anpassen lassen. Größere Modelle wie RNNLMs bieten eine höhere Genauigkeit, sind aber rechenintensiver.
- Lexikon:
- Das Lexikon von VOSK enthält Informationen darüber, wie Wörter in Phoneme zerlegt werden, also die kleinsten Lauteinheiten der Sprache. Dies ist wichtig, um sicherzustellen, dass das System die richtigen Laute für jedes Wort erkennt. VOSK bietet auch Möglichkeiten, neue Wörter hinzuzufügen oder alternative Aussprachen zu definieren.
- Decoding-Algorithmus:
- Der Decoder in VOSK kombiniert das akustische Modell, das Sprachmodell und das Lexikon, um die wahrscheinlichste Wortfolge zu bestimmen. Dieser Algorithmus arbeitet in Echtzeit, um gesprochene Sprache in Text umzuwandeln.
5. Post-Processing und Interpretation
Post-Processing und Interpretation werden genutzt, um den erkannten Text nach der Spracherkennung zu bereinigen, Fehler zu korrigieren und sicherzustellen, dass die erkannten Informationen in den richtigen Kontext gesetzt und korrekt verstanden werden.
- Text-Normalisierung:
- Der erkannte Text wird normalisiert, um Zahlen, Abkürzungen und spezielle Zeichen einheitlich darzustellen, z.B. „4“ in „vier“) oder die Korrektur von Abkürzungen beinhalten.
- Fehlerkorrektur:
- In manchen Systemen werden Techniken zur Fehlerkorrektur eingesetzt, um Missverständnisse aufgrund von Dialekten, Akzenten oder Hintergrundgeräuschen zu reduzieren.
In der aktuellen Version von CulinAIBot nutze ich diese Funktion nicht, weil die für das Sprachverständnis und die Sprachgenerierung genutzte OpenAI Funktion das Post-Processing und Interpretation beinhaltet. In Zukunft möchte ich testen ob diese zusätzlichen Funktionen die Resultate der Sprachverarbeitung basierend auf einem GenAI Modellen verbessern können. Mögliche Toolkits dafür sind:
- NLTK (Natural Language Toolkit): Normalisierung des erkannten Text.
- spaCy: erweiterte Textverarbeitung, wie das Erkennen von Entitäten oder die Korrektur von häufigen Fehlern.
6. Sprachenverständnis (NLU – Natural Language Understanding)
Das Sprachenverständnis hat die Aufgabe, die Absicht hinter der Benutzeranfrage zu erkennen, relevante Informationen oder Aktionen bereitzustellen. Genutzte Funktionen sind:
- Absichtserkennung (Intent Recognition):
- Intent Recognition ist der Prozess, bei dem das Sprachverständnis die Absicht hinter einem Sprachbefehl versteht, um darauf basierend eine passende Aktion auszuführen. Hierfür identifiziert das Sprachverständnis die Absicht des Nutzers (z.B. „Kaffee bestellen“ oder „Essen kochen“).
- Entitätenextraktion:
- Zusätzlich werden relevante Informationen (Entitäten) wie Zahlen, Orte, Namen oder spezifische Schlüsselwörter aus dem Text extrahiert, die für die weitere Verarbeitung wichtig sind.
Im Kontext der Küche könnten verschiedene Intents erkannt werden, die auf bestimmte Absichten des Nutzers hinweisen:
- Intent: Gerät einstellen
- Sprachbefehl: „Stelle den Ofen auf 180 Grad ein.“
- Erkannte Entitäten: „Ofen“ (Gerät), „180 Grad“ (Temperatur)
- Intent: SetTemperature
- Das System erkennt die Absicht, die Temperatur eines Geräts (Ofen) einzustellen, und führt die entsprechende Aktion aus.
- Das System erkennt die Absicht, die Temperatur eines Geräts (Ofen) einzustellen, und führt die entsprechende Aktion aus.
- Intent: Zutat vorbereiten
- Sprachbefehl: „Schneide die Tomaten und die Zwiebeln.“
- Erkannte Entitäten: „Tomaten“, „Zwiebeln“ (Zutaten)
- Intent: PrepareIngredient
- Die Absicht des Benutzers ist, bestimmte Zutaten zu schneiden. Das System erkennt dies und könnte Anweisungen für die Zubereitung bereitstellen oder selbst schneiden, wenn der Roboter diese Funktion hat.
- Die Absicht des Benutzers ist, bestimmte Zutaten zu schneiden. Das System erkennt dies und könnte Anweisungen für die Zubereitung bereitstellen oder selbst schneiden, wenn der Roboter diese Funktion hat.
- Intent: Zutat hinzufügen
- Sprachbefehl: „Füge 200 Gramm Mehl hinzu.“
- Erkannte Entitäten: „200 Gramm“ (Menge), „Mehl“ (Zutat)
- Intent: AddIngredient
- Hier erkennt das System, dass der Benutzer eine bestimmte Menge einer Zutat hinzufügen möchte. Der Roboter könnte den Benutzer unterstützen oder die Menge selbst abmessen.
- Hier erkennt das System, dass der Benutzer eine bestimmte Menge einer Zutat hinzufügen möchte. Der Roboter könnte den Benutzer unterstützen oder die Menge selbst abmessen.
- Intent: Gerät vorheizen
- Sprachbefehl: „Heize den Ofen auf 180 Grad vor.“
- Erkannte Entitäten: „Ofen“ (Gerät), „180 Grad“ (Temperatur)
- Intent: PreheatDevice
- Das System erkennt, dass das Gerät (Ofen) auf eine bestimmte Temperatur vorgeheizt werden soll, und führt diese Aktion aus.
- Das System erkennt, dass das Gerät (Ofen) auf eine bestimmte Temperatur vorgeheizt werden soll, und führt diese Aktion aus.
- Intent: Timer setzen
- Sprachbefehl: „Lasse den Kuchen 20 Minuten backen.“
- Erkannte Entitäten: „20 Minuten“ (Zeit), „Kuchen“ (Zutat)
- Intent: SetTimer
- Der Benutzer möchte, dass ein Timer gesetzt wird, um die Dauer des Backens zu überwachen. Das System startet den Timer für 20 Minuten.
- Der Benutzer möchte, dass ein Timer gesetzt wird, um die Dauer des Backens zu überwachen. Das System startet den Timer für 20 Minuten.
- Intent: Zubereitung starten
- Sprachbefehl: „Mische die Butter mit dem Mehl.“
- Erkannte Entitäten: „Butter“, „Mehl“ (Zutaten), „mischen“ (Zubereitungsart)
- Intent: StartMixing
- Das System erkennt, dass der Benutzer die Zubereitung beginnen möchte, indem die Zutaten gemischt werden. Der Roboter könnte diese Aktion direkt ausführen.
Zusätzlich beinhaltet das Sprachverständnis das Dialogmanagement, welches den Gesprächsfluss verwaltet, die Dialogstruktur steuert und den Verlauf des Gesprächs verfolgt. Desweiteren entscheidet es welche Aktion als nächstes ausgeführt wird.
- Dialogstruktur:
- Die Dialogstruktur beschreibt den logischen Ablauf und die Organisation eines Dialogs zwischen Mensch und Maschine, indem das Gespräch in Phasen oder Sequenzen unterteilt wird, um eine klare und zusammenhängende Kommunikation sicherzustellen. Sie legt fest, wie der Roboter auf Anfragen reagiert und den Gesprächsverlauf steuert.
- Kontextmanagement:
- Das Dialogmanagementsystem verwendet diese Informationen, um den Kontext des Gesprächs zu verstehen und zu verwalten, was zu einer logisch zusammenhängenden und relevanten Antwort führt.
Wichtige Aspekte der Dialogstruktur:
- Eröffnung und Begrüßung: Wie wird der Dialog gestartet? Beispielsweise könnte der Roboter sagen: „Wie kann ich Ihnen helfen?“
- Benutzeranfrage: Der Benutzer gibt eine Frage oder einen Befehl ein, wie „Stelle den Ofen auf 180 Grad ein.“
- Abfrage und Bestätigung: Der Roboter kann zur Klarstellung Rückfragen stellen oder eine Bestätigung anfordern, z.B. „Meinen Sie den Ofen oder den Herd?“
- Aktion und Rückmeldung: Der Roboter führt die Aktion aus und informiert den Benutzer über den Fortschritt, z.B. „Der Ofen wird auf 180 Grad vorgeheizt.“
- Abschluss: Wie wird der Dialog beendet? Der Roboter könnte sagen: „Möchten Sie noch etwas tun?“ oder einfach mit einer freundlichen Verabschiedung enden.
In der aktuellen Version von CulinAIBot nutze ich für das Sprachverständnis die OpenAI ChatGTP API im Internet. Für die Generierung der bislang getesteten Lebensmittel zur Generierung war kein feintuning von ChatGTP nötig. Hiermit möchte ich in einem der nächsten Schritte noch experimentieren und testen.
In Zukunft möchte ich lokale bzw. offline Open-Source Software nutzen. Hierfür eignet sich eine Kombination von
- Rasa, einer offline nutzbaren Open-Source Bibliothek und Plattform entwickelt durch die Rasa Technologies GmbH. Rasa ist ideal, um Intents zu erkennen, Entitäten zu extrahieren und regelbasierte Dialoge zu verwalten. Es bietet ein starkes Dialogmanagementsystem, das auf maschinellem Lernen basiert und die Konversation in strukturierte Bahnen lenkt. Rasa ist besonders nützlich für Dialoge, die klare Regeln und Antwortstrukturen erfordern, wie z.B. in Anwendungen mit wiederkehrenden Benutzeranfragen (z.B. Terminbuchung, Bestellungen).
- Llama 3.1 (Large Language Model Meta AI), einem offline nutzbaren Open-Source Large Language Model (LLM), das von Meta AI entwickelt wurde. LLaMA 3.1 wird für die Generierung natürlicher Sprache eingesetzt. Es eignet sich besonders gut für offene Fragen oder komplexe Konversationen, bei denen es keine vorgegebenen Regeln gibt. LLaMA kann detaillierte, menschenähnliche Antworten generieren und auf unvorhersehbare Fragen reagieren, indem es Text generiert, der über das hinausgeht, was regelbasierte Systeme leisten können.
Im Abschnitt 2.4 Multimodales Dialogmanagement wird beschrieben wie das Dialogsystem mit der Bild- und Videoerkennung ergänzt wird.