und Siri sind die allgegenwärtigen Sprachassistenten, die heute den größten Teil der Internetverbindung dienen. Zum größten Teil ist Englisch die dominierende Sprache, die mit diesen Sprachassistenten verwendet wird. Damit ein Sprachassistent wirklich hilfreich ist, muss er den Benutzer verstehen können, wenn er natürlich spricht. In vielen Teilen der Welt, insbesondere in einem vielfältigen Land wie Indien, ist es üblich, dass Menschen mehrsprachig sind und in einem einzigen Gespräch zwischen mehreren Sprachen wechseln. Ein wirklich kluger Assistent sollte in der Lage sein, dies zu bewältigen.
Google Assistant bietet die Möglichkeit, eine zweite Sprache hinzuzufügen. Seine Funktionalität beschränkt sich jedoch nur auf bestimmte Geräte und bietet dies nur für eine begrenzte Reihe von großen Sprachen. Zum Beispiel unterstützt Googles Nest Hub noch keine zweisprachigen Fähigkeiten für Tamil, eine Sprache, die von über 80 Millionen Menschen gesprochen wird. Alexa unterstützt den zweisprachigen Ansatz, solange er in seinem internen Sprachpaar unterstützt wird. Auch dies unterstützt nur eine begrenzte Reihe von Hauptsprachen. Siri hat keine zweisprachige Fähigkeiten und erlaubt jeweils nur eine Sprache.
In diesem Artikel werde ich den Ansatz diskutieren, um zu aktivieren Mein Sprachassistent eine zweisprachige Fähigkeit mit Englisch und Tamilisch als Sprachen zu haben. Mit diesem Ansatz kann der Sprachassistent die Sprache automatisch erkennen, die eine Particular person spricht, indem er das Audio direkt analysiert. Durch die Verwendung eines Algorithmus auf „Konfidence Rating“ -Foundation bestimmt das System, ob Englisch oder Tamil gesprochen wird, und reagiert in der entsprechenden Sprache.
Ansatz zur zweisprachigen Fähigkeit
Um den Assistenten sowohl Englisch als auch Tamil zu verstehen, gibt es einige potenzielle Lösungen. Der erste Ansatz wäre, ein benutzerdefiniertes maschinelles Lernmodell von Grund auf neu zu trainieren, insbesondere in tamilischen Sprachdaten, und dann dieses Modell in den Raspberry Pi integrieren. Dies würde zwar ein hohes Maß an Anpassung bieten, aber es handelt sich um einen unglaublich zeitaufwändigen und ressourcenintensiven Prozess. Coaching Ein Modell erfordert einen massiven Datensatz und eine signifikante Rechenleistung. Darüber hinaus würde das Ausführen eines schweren benutzerdefinierten Modells wahrscheinlich den Raspberry Pi verlangsamen, was zu einer schlechten Benutzererfahrung führt.
FastText -Ansatz
Eine praktischere Lösung besteht darin, ein vorhandenes, vorgebildetes Modell zu verwenden, das bereits für eine bestimmte Aufgabe optimiert ist. Für die Sprachidentifizierung ist eine gute Possibility FastText.
FastText ist eine Open-Supply-Bibliothek von Fb AI Analysis für effiziente Textklassifizierung und Wortrepräsentation. Es wird mit vorgeborenen Modellen geliefert, die die Sprache eines bestimmten Textstücks schnell und genau aus einer großen Anzahl von Sprachen identifizieren können. Da es leicht und hoch optimiert ist, ist es eine hervorragende Wahl, um auf einem ressourcenbezogenen Gerät wie einem Himbeer-Pi zu laufen, ohne erhebliche Leistungsprobleme zu verursachen. Der Plan struggle daher zu verwenden fastText Um die gesprochene Sprache des Benutzers zu klassifizieren.
Um FastText zu verwenden, laden Sie das entsprechende Modell (Deckel.176.bin) herunter und speichern es in Ihrem Projektordner. Geben Sie dies als model_path an und laden Sie das Modell.
import fastText
import speech_recognition as sr
import fasttext
# --- Configuration ---
MODEL_PATH = "./lid.176.bin" # That is the mannequin file you downloaded and unzipped
# --- Fundamental Software Logic ---
print("Loading fastText language identification mannequin...")
attempt:
# Load the pre-trained mannequin
mannequin = fasttext.load_model(MODEL_PATH)
besides Exception as e:
print(f"FATAL ERROR: Couldn't load the fastText mannequin. Error: {e}")
exit()
Der nächste Schritt wäre, die Sprachbefehle als Aufzeichnungen an das Modell zu übergeben und die Vorhersage zurückzubekommen. Dies kann durch eine dedizierte Funktion erreicht werden.
def identify_language(textual content, mannequin):
# The mannequin.predict() perform returns a tuple of labels and chances
predictions = mannequin.predict(textual content, ok=1)
language_code = predictions(0)(0) # e.g., '__label__en'
return language_code
attempt:
with microphone as supply:
recognizer.adjust_for_ambient_noise(supply, length=1)
print("nPlease communicate now...")
audio = recognizer.hear(supply, phrase_time_limit=8)
print("Transcribing audio...")
# Get a tough transcription with out specifying a language
transcription = recognizer.recognize_google(audio)
print(f"Heard: "{transcription}"")
# Establish the language from the transcribed textual content
language = identify_language(transcription, mannequin)
if language == '__label__en':
print("n---> Outcome: The detected language is English. <---")
elif language == '__label__ta':
print("n---> Outcome: The detected language is Tamil. <---")
else:
print(f"n---> Outcome: Detected a unique language: {language}")
besides sr.UnknownValueError:
print("Couldn't perceive the audio.")
besides sr.RequestError as e:
print(f"Speech recognition service error; {e}")
besides Exception as e:
print(f"An surprising error occurred: {e}")
Der obige Codeblock folgt einem einfachen Pfad. Es verwendet das Recusizer.Recognize_Google (Audio) Funktionieren Sie den Sprachbefehl und übergeben diese Transkription dann an das FastText -Modell, um eine Vorhersage für die Sprache zu erhalten. Wenn die Vorhersage „__label__en“ lautet, wurde Englisch erkannt und wenn die Vorhersage „__label_ta“ ist, wurde Tamil erkannt.
Dieser Ansatz führte jedoch zu schlechten Vorhersagen. Das Drawback ist das rede_recognition Bibliothek standardmäßig Englisch. Wenn ich additionally etwas in Tamil spreche, findet es das engste (und falsche) äquivalent klingende Wörter in Englisch und übergibt es an FastText.
Zum Beispiel, als ich sagte „En peyar ennna“ (wie heißt mein Identify in Tamil), rede_recognition verstand es als „Empire Na“ und daher sagte FastText die Sprache als Englisch voraus. Um dies zu überwinden, kann ich das hardcodieren rede_recognition Funktion zum Erkennen von nur Tamilen. Dies würde jedoch die Idee besiegen, wirklich „klug“ und „zweisprachig“ zu sein. Der Assistent sollte in der Lage sein, die Sprache anhand dessen zu erkennen, was gesprochen wird. nicht basierend auf dem, was hart codiert ist.

Die Methode „Konfidence Rating“
Was wir brauchen, ist eine direktere und datengetriebene Methode. Die Lösung liegt in einem Merkmal der Speech_Recognition Library. Der Erkenntnis.recognize_google () Funktion ist die Google Spracherkennungs -API und kann Audio aus einer Vielzahl von Sprachen, einschließlich Englisch und Tamilisch, transkribieren. Eine Schlüsselmerkmal dieser API ist, dass sie für jede Transkription, die sie bietet, auch a zurückgeben kann Vertrauensbewertung – Ein numerischer Wert zwischen 0 und 1, der angibt, wie sicher er ist, dass seine Transkription korrekt ist.
Diese Funktion ermöglicht einen viel eleganteren und dynamischeren Ansatz für die Sprachidentifizierung. Schauen wir uns den Code an.
def recognize_with_confidence(recognizer, audio_data):
tamil_text = None
tamil_confidence = 0.0
english_text = None
english_confidence = 0.0
# 1. Try to acknowledge as Tamil and get confidence
attempt:
print("Trying to transcribe as Tamil...")
# show_all=True returns a dictionary with transcription alternate options
response_tamil = recognizer.recognize_google(audio_data, language='ta-IN', show_all=True)
# We solely take a look at the highest various
if response_tamil and 'various' in response_tamil:
top_alternative = response_tamil('various')(0)
tamil_text = top_alternative('transcript')
if 'confidence' in top_alternative:
tamil_confidence = top_alternative('confidence')
else:
tamil_confidence = 0.8 # Assign a default excessive confidence if not offered
besides sr.UnknownValueError:
print("Couldn't perceive audio as Tamil.")
besides sr.RequestError as e:
print(f"Tamil recognition service error; {e}")
# 2. Try to acknowledge as English and get confidence
attempt:
print("Trying to transcribe as English...")
response_english = recognizer.recognize_google(audio_data, language='en-US', show_all=True)
if response_english and 'various' in response_english:
top_alternative = response_english('various')(0)
english_text = top_alternative('transcript')
if 'confidence' in top_alternative:
english_confidence = top_alternative('confidence')
else:
english_confidence = 0.8 # Assign a default excessive confidence
besides sr.UnknownValueError:
print("Couldn't perceive audio as English.")
besides sr.RequestError as e:
print(f"English recognition service error; {e}")
# 3. Evaluate confidence scores and return the winner
print(f"nConfidence Scores -> Tamil: {tamil_confidence:.2f}, English: {english_confidence:.2f}")
if tamil_confidence > english_confidence:
return tamil_text, "Tamil"
elif english_confidence > tamil_confidence:
return english_text, "English"
else:
# If scores are equal (or each zero), return neither
return None, None
Die Logik in diesem Codeblock ist einfach. Wir übergeben das Audio an die erkennen_google () Funktionieren und die gesamte Liste der Alternativen und ihrer Punktzahlen erhalten. Zuerst versuchen wir die Sprache als Tamil und erhalten die entsprechende Vertrauensbewertung. Dann versuchen wir das gleiche Audio wie Englisch und erhalten die entsprechende Vertrauensbewertung von der API. Sobald wir beide haben, vergleichen wir die Konfidenzwerte und wählen die mit der höheren Punktzahl als vom System erkannte Sprache aus.
Unten ist die Ausgabe der Funktion, wenn ich auf Englisch spreche und wenn ich in Tamil spreche.


Die obigen Ergebnisse zeigen, wie der Code in der Lage ist, die dynamische Sprache basierend auf dem Konfidenzwert zu verstehen.
Alles zusammenfügen – der zweisprachige Assistent
Der letzte Schritt wäre, diesen Ansatz in den Code für den Raspberry Pi -basierten Sprachassistenten zu integrieren. Der vollständige Code kann in meinem gefunden werden Github. Sobald der nächste Schritt integriert wurde, besteht darin, die Funktionsweise des Sprachassistenten durch Englisch und Tamil zu testen und zu sehen, wie er für jede Sprache reagiert. Die folgenden Aufzeichnungen zeigen die Arbeit des zweisprachigen Sprachassistenten, wenn sie eine Frage in Englisch und Tamil gestellt haben.
Abschluss
In diesem Artikel haben wir gesehen, wie man einen einfachen Sprachassistenten erfolgreich in ein wirklich zweisprachiges Werkzeug aufrüstet. Durch die Implementierung eines Algorithmus „Confi dahy Rating“ kann das System erstellt werden, um festzustellen, ob ein Befehl in Englisch oder Tamilisch gesprochen wird, sodass es in der ausgewählten Sprache des Benutzers für diese bestimmte Abfrage verstehen und beantwortet wird. Dies schafft ein natürlicheres und nahtloser Gesprächserlebnis.
Der Hauptvorteil dieser Methode ist die Zuverlässigkeit und Skalierbarkeit. Während sich dieses Projekt auf nur zwei Sprachen konzentrierte, könnte dieselbe Konfidence -Rating -Logik leicht erweitert werden, um drei, vier oder mehr zu unterstützen, indem einfach eine API -Aufruf für jede neue Sprache hinzugefügt und alle Ergebnisse verglichen werden. Die hier untersuchten Techniken dienen als robuste Grundlage für die Schaffung fortschrittlicherer und intuitiverer persönlicher KI -Instruments.
Referenz:
(1) A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, Tricksack für eine effiziente Textklassifizierung
(2) A. Joulin, E. Grave, P. Bojanowski, M. Douze, H. Jégou, T. Mikolov. FastText.zip: Komprimierende Textklassifizierungsmodelle
