Fehlerbehebung

Hier finden Sie nützliche Informationen über die schrittweise Fehlerbehebung in Verbindung mit Cloud Speech-to-Text.

Keine Authentifizierung bei Cloud STT möglich

Möglicherweise erhalten Sie eine Fehlermeldung, die besagt, dass Ihre Standardanmeldedaten für Anwendungen nicht verfügbar sind. Oder Sie fragen sich, wie Sie einen API-Schlüssel zum Aufrufen von Cloud STT erhalten.

Cloud STT verwendet für die Authentifizierung die Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC).

Die Anmeldedaten für ADC müssen in dem Kontext verfügbar sein, in dem Sie die Cloud Speech-to-Text API aufrufen. Wenn Sie beispielsweise ADC in Ihrem Terminal einrichten, Ihren Code aber im Debugger Ihrer IDE ausführen, hat der Ausführungskontext Ihres Codes möglicherweise keinen Zugriff auf die Anmeldedaten. In diesem Fall kann Ihre Anfrage an Cloud STT fehlschlagen.

Informationen zum Bereitstellen von Anmeldedaten für ADC finden Sie unter Standardanmeldedaten für Anwendungen einrichten.

Cloud STT gibt eine leere Antwort zurück

Es gibt mehrere Gründe, warum Cloud STT eine leere Antwort zurückgeben kann. Die Ursache des Problems kann RecognitionConfig oder die Audioeingabe selbst sein.

Fehlerbehebung für RecognitionConfig

Das RecognitionConfig-Objekt (oder StreamingRecognitionConfig) ist Teil einer Cloud STT-Erkennungsanfrage. Legen Sie die Felder fest, die in die folgenden Hauptkategorien fallen, um eine Transkription korrekt durchzuführen:

  • Audiokonfiguration
  • Modell und Sprache

Eine häufige Ursache für leere Antworten (z. B. eine leere {}-JSON-Antwort) ist die Angabe falscher Informationen zu den Audiometadaten. Wenn die Audiokonfigurationsfelder nicht richtig festgelegt sind, schlägt die Transkription wahrscheinlich fehl und das Erkennungsmodell gibt leere Ergebnisse zurück.

Die Audiokonfiguration enthält die Metadaten der bereitgestellten Audiodaten. Sie können die Metadaten für Ihre Audiodatei mit dem Befehl ffprobe abrufen, der Teil von FFMPEG ist.

Im folgenden Beispiel wird gezeigt, wie Sie mit dem Befehl die Metadaten für dieses Sprachbeispiel abrufen.

$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
  Duration: 00:00:35.75, bitrate: 128 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s

Die Datei hat eindeutig 8.000 Hz, genau einen Kanal und die LINEAR16-Codierung (s16). Sie können diese Informationen in Ihrer RecognitionConfig verwenden.

So beseitigen Sie andere mögliche Gründe für eine leere Antwort:

  1. Spielen Sie die Datei ab und hören Sie die Ausgabe an. Ist das Audio klar und die Sprache verständlich?

    Zum Abspielen von Dateien können Sie den Befehl play von SoX (Sound eXchange) verwenden. Im Folgenden werden einige Beispiele für unterschiedliche Audiocodierungen dargestellt.

    FLAC-Dateien enthalten einen Header, der die Abtastrate, den Codierungstyp und die Anzahl der Kanäle angibt. Sie werden mit folgendem Befehl abgespielt:

    play audio.flac

    LINEAR16-Dateien haben keinen Header. Zum Abspielen müssen Sie die Abtastrate, den Codierungstyp und die Anzahl der Kanäle angeben. Für die LINEAR16-Codierung muss 16 Bit, Signed-Integer und Little-Endian ausgewählt werden.

    play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw

    MULAW-Dateien enthalten ebenfalls keinen Header und verwenden oft eine niedrigere Abtastrate.

    play --channels=1 --rate=8000 --encoding=u-law audio.raw
  2. Prüfen Sie, ob die Audiocodierung Ihrer Daten mit den Parametern übereinstimmt, die Sie in RecognitionConfig gesendet haben. Wenn Sie in Ihrer Anfrage beispielsweise "encoding":"FLAC" und "sampleRateHertz":16000 angegeben haben, sollten die mit dem SoX-Befehl play angegebenen Audiodatenparameter diesen Parametern entsprechen:

    play audio.flac

    sollte Folgendes auflisten:

    Encoding: FLAC
    Channels: 1 @ 16-bit
    Sampleratehertz: 16000 Hz

    Wenn die SoX-Auflistung für Sampleratehertz etwas anderes als 16000Hz anzeigt, ändern Sie "sampleRateHertz" in InitialRecognizeRequest, um für eine Übereinstimmung zu sorgen. Wenn für Encoding nicht FLAC oder für Channels nicht 1 @ 16-bit aufgelistet wird, können Sie diese Datei nicht direkt verwenden und müssen sie in eine kompatible Codierung konvertieren (siehe nächster Schritt).

  3. Wenn Ihre Audiodatei nicht FLAC-codiert ist, versuchen Sie, sie mit SoX in das FLAC-Format zu konvertieren. Wiederholen Sie die oben beschriebenen Schritte zum Abspielen der Datei, prüfen Sie die Codierung, die Hertz-Werte der Abtastrate und die Anzahl der Kanäle. Beispiele für die Konvertierung verschiedener Audiodateiformate in die FLAC-Codierung:

    sox audio.wav --channels=1 --bits=16 audio.flac
    sox audio.ogg --channels=1 --bits=16 audio.flac
    sox audio.au --channels=1 --bits=16 audio.flac
    sox audio.aiff --channels=1 --bits=16 audio.flac

    Für die Konvertierung einer RAW-Datei in das FLAC-Format benötigen Sie die Audiocodierung der Datei. Mit dem folgenden Beispiel wird die Codierung Stereo, 16 Bit, Signed-Integer, Little-Endian bei 16.000 Hz in das FLAC-Format konvertiert:

    sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw --channels=1 --bits=16 audio.flac
  4. Führen Sie das Beispiel aus der Kurzanleitung oder eine der Beispielanwendungen mit der bereitgestellten Beispielaudiodatei aus. Wenn das Beispiel erfolgreich ausgeführt wurde, ersetzen Sie die Beispielaudiodatei durch Ihre Audiodatei.

Modell- und Sprachkonfiguration

Die Modellauswahl ist sehr wichtig, um hochwertige Transkriptionsergebnisse zu erhalten. Cloud STT bietet mehrere Modelle, die auf unterschiedliche Anwendungsfälle zugeschnitten sind. Sie müssen so ausgewählt werden, dass sie möglichst genau Ihren Audiodaten entsprechen. Einige Modelle (wie latest_short und command_and_search) sind beispielsweise Kurzformmodelle, die sich besser für kurze Audioeingaben und Prompts eignen. Diese Modelle geben wahrscheinlich Ergebnisse zurück, sobald sie einen Zeitraum der Inaktivität erkennen. Langformmodelle (wie latest_short, phone_call, video and default) eignen sich hingegen besser für längere Audios und sind nicht so anfällig dafür, dass sie Stille als das Ende der Audioeingabe interpretieren.

Wenn Ihre Erkennung zu abrupt endet oder nicht schnell Ergebnisse zurückgibt, können Sie mit anderen Modellen experimentieren, um festzustellen, ob Sie damit eine bessere Transkriptionsqualität erhalten. Verwenden Sie dazu die Speech-UI.

Zeitüberschreitungsfehler

Diese Probleme werden größtenteils durch eine falsche Konfiguration oder einen falschen Gebrauch von Cloud Speech-to-Text verursacht.

LongRunningRecognize oder BatchRecognize

  • Problem: Sie erhalten TimeoutError: Operation did not complete within the designated timeout.

  • Lösung: Sie können eine Transkription an den Cloud Storage-Bucket senden oder das Zeitlimit in der Anfrage verlängern.

Dieses Problem tritt auf, wenn die Anfrage LongRunningRecognize oder BatchRecognize nicht innerhalb des angegebenen Zeitlimits abgeschlossen wird. Es handelt sich nicht um einen Fehler, der auf einen Fehler bei der Sprachtranskription hinweist. Es bedeutet, dass die Transkriptionsergebnisse noch nicht extrahiert werden können.

StreamingRecognize

  • Problem: Sie erhalten Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.

  • Lösung: Der Zeitraum zwischen den gesendeten Audioblöcken muss verkürzt werden. Wenn Cloud Speech-to-Text nicht alle paar Sekunden einen neuen Block erhält, wird die Verbindung geschlossen und dieser Fehler ausgelöst.

StreamingRecognize mit Fehler 409 abgebrochen

  • Problem: Sie erhalten den Fehler 409 Max duration of 5 minutes reached for stream.

  • Lösung: Sie haben das Limit für die Streaming-Spracherkennung von fünf Minuten Audio erreicht. Wenn Sie sich diesem Limit nähern, schließen Sie den Stream und öffnen Sie einen neuen.

Geringe Transkriptqualität

Die automatische Spracherkennung (Automated Speech Recognition, ASR) unterstützt eine Vielzahl von Anwendungsfällen. Die meisten Qualitätsprobleme lassen sich durch Ausprobieren verschiedener API-Optionen beheben. Folgen Sie zur Verbesserung der Erkennungsgenauigkeit den Richtlinien in Best Practices.

Kurze Äußerungen werden nicht erkannt

  • Problem: Kurze Äußerungen von Endnutzern wie Ja, Nein und Weiter werden von der API nicht erfasst und fehlen im Transkript.

  • Lösung: Gehen Sie so vor:

    1. Testen Sie dieselbe Anfrage mit verschiedenen Modellen.

    2. Fügen Sie die Sprachanpassung hinzu und optimieren Sie fehlende Wörter.

    3. Wenn Sie Streamingeingabe verwenden, legen Sie single_utterance=true fest.

Wort oder Wortgruppe wird immer wieder nicht erkannt

  • Problem: Bestimmte Wörter oder Wortgruppen werden immer wieder falsch erkannt, z. B. wird im Englischen a als 8 erkannt.

  • Lösung: Gehen Sie so vor:

    1. Testen Sie dieselbe Anfrage mit verschiedenen Modellen.

    2. Fügen Sie die Sprachanpassung hinzu und optimieren Sie fehlende Wörter. Mit Klassentokens können Sie ganze Wortgruppen wie Ziffernfolgen oder Adressen hervorheben. Verfügbare Klassentokens

    3. Erhöhen Sie max_alternatives. Suchen Sie dann nach SpeechRecognitionResult alternatives und wählen Sie das erste Ergebnis aus, das dem gewünschten Format entspricht.

Die Formatierung kann für die automatische Spracherkennung eine Herausforderung sein. Die Sprachanpassung kann oft helfen, das erforderliche Format zu erhalten. Manchmal ist dafür aber auch eine Nachbearbeitung erforderlich.

Eingaben in mehreren Sprachen

  • Problem:: Das Audio umfasst mehrere Sprachen, z. B. ein Gespräch zwischen einem englisch- und einem spanischsprachigen Sprecher, was zu einer falschen Transkription führt.

  • Lösung: Diese Funktion wird nicht unterstützt. Speech-to-Text kann pro Anfrage nur eine Sprache transkribieren.

Artefakte bei Stille oder Musik mit Chirp-Modellen

  • Problem: Beim Übergeben von Audio mit Stille oder Musik enthält die Transkription zufällige Zahlen oder halluzinierte Wörter.

  • Lösung: Aktivieren Sie Rauschunterdrückung und SNR-Filterung und probieren Sie verschiedene Kombinationen von SNR-Schwellenwerten aus.

Berechtigung verweigert

  • Problem: Sie erhalten die folgende Fehlermeldung:

    Permission denied to access GCS object BUCKET-PATH.
    Source error: PROJECT-ID@gcp-sa-speech.iam.gserviceaccount.com does not have
    storage.buckets.get access to the Google Cloud Storage bucket.
    Permission 'storage.buckets.get' denied on resource (or it may not exist).
  • Lösung: Gewähren Sie PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.comdie die Berechtigung, auf die Datei im Bucket BUCKET-PATH zuzugreifen.

Ungültiges Argument

  • Problem: Sie erhalten die folgende Fehlermeldung:

    {
      "error": {
        "code": 400,
        "message": "Request contains an invalid argument.",
        "status": "INVALID_ARGUMENT"
      }
    }
  • Lösung: Prüfen Sie die Argumente und vergleichen Sie sie mit der API-Dokumentation, um dafür zu sorgen, dass sie korrekt sind. Achten Sie darauf, dass der ausgewählte Endpunkt mit dem Standort in der Anfrage/Ressource übereinstimmt.

Ressource erschöpft

  • Problem: Sie erhalten die folgende Fehlermeldung:

    RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
  • Lösung: Weitere Informationen finden Sie unter Kontingentanpassung anfordern.

Streamingblock zu groß

  • Problem: Sie erhalten die folgende Fehlermeldung:

    INVALID_ARGUMENT: Request audio can be a maximum of 10485760 bytes.
    [type.googleapis.com/util.MessageSetPayload='[google.rpc.error_details_ext]
    { message: "Request audio can be a maximum of 10485760 bytes." }']
  • Lösung: Verringern Sie die Größe der gesendeten Audioblöcke. Wir empfehlen, Blöcke von 100 ms zu senden, um die Latenz zu optimieren und nicht das Audiolimit zu erreichen.

Daten-Logging

  • Problem: Speech-to-Text stellt kein Cloud-Logging bereit.

  • Lösung: Da das Daten-Logging für Speech-to-Text standardmäßig deaktiviert ist, müssen Kunden es auf Projektebene aktivieren.