Fehlerbehebung

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

Authentifizierung bei Speech-to-Text nicht möglich

Möglicherweise werden Sie in einer Fehlermeldung darauf hingewiesen, dass Ihre "Standardanmeldedaten für Anwendungen" nicht verfügbar sind, oder Sie fragen sich, wie Sie einen API-Schlüssel zum Aufrufen von Speech-to-Text erhalten.

Speech-to-Text verwendet für die Authentifizierung die Standardanmeldedaten für Anwendungen (ADC).

Die Anmeldedaten für ADC müssen in dem Kontext verfügbar sein, in dem Sie die 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 Speech-to-Text fehlschlagen.

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

Speech-to-Text gibt eine leere Antwort zurück

Es gibt mehrere Gründe, warum Speech-to-Text eine leere Antwort zurückgeben kann. Die Ursache des Problems kann RecognitionConfig oder die Audiodatei selbst sein.

Fehlerbehebung RecognitionConfig

Das RecognitionConfig-Objekt (oder StreamingRecognitionConfig) ist Teil einer Speech-to-Text-Erkennungsanfrage. Es gibt zwei Hauptkategorien von Feldern, die festgelegt werden müssen, um eine Transkription ordnungsgemäß durchzuführen:

  • Audiokonfiguration
  • Modell und Sprache

Eine der häufigsten Ursachen für leere Antworten (wenn Sie beispielsweise eine leere {}-JSON-Antwort erhalten) 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.

Das folgende Beispiel zeigt, wie Sie mit ffprobe die Metadaten für https://storage.googleapis.com/cloud-samples-tests/speech/commercial_mono.wav 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

Mit dem obigen Befehl kann die Datei Folgendes enthalten:

  • sample_rate_hertz: 8000
  • Kanäle: 1
  • Codierung LINEAR16 (s16)

Sie können diese Informationen in Ihrer RecognitionConfig verwenden.

Weitere audiobezogene Ursachen für eine leere Antwort können in der Audiocodierung enthalten sein. Hier sind einige weitere Tools und Lösungsmöglichkeiten:

  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 gewä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 im SoX-Befehl play angegebenen Audiodatenparameter diesen Parametern entsprechen:

    play audio.flac

    muss Folgendes auflisten:

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

    Wenn die SoX-Auflistung für Sampleratehertz etwas anderes als 16000Hz anzeigt, ändern Sie "sampleRateHertz" in InitialRecognizeRequest, um die Übereinstimmung sicherzustellen. 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 diese mit SoX in das FLAC-Format zu konvertieren. Wiederholen Sie die oben beschriebenen Schritte zum Abspielen der Datei, überprüfen Sie die Codierung, die Werte für sampleRateHertz und die Kanäle. Im Folgenden sind einige Beispiele aufgeführt, in denen verschiedene Audiodateiformate in die FLAC-Codierung konvertiert werden.

    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. Sie können das Beispiel aus dem Schnellstart oder eine der Beispielanwendungen mit der bereitgestellten Beispielaudiodatei ausführen. 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. Speech-to-Text bietet mehrere Modelle, die auf unterschiedliche Anwendungsfälle zugeschnitten sind. Sie müssen so ausgewählt werden, dass sie möglichst genau auf Ihre Audiodaten zugeschnitten sind. Einige Modelle (z. B. latest_short und command_and_search) sind beispielsweise Kurzform-Modelle, die sich für kurze Audios und Eingabeaufforderungen besser eignen. Diese Modelle geben wahrscheinlich Ergebnisse zurück, sobald sie einen Zeitraum der Inaktivität erkannt haben. Langform-Modelle hingegen (z. B. latest_short, phone_call, video and default) eignen sich besser für längere Audios und sind nicht so anfällig dafür, dass sie Stille als das Ende der Audiodaten interpretieren.

Wenn Ihre Erkennung zu abrupt ist oder nicht schnell zurückgegeben wird, können Sie mit anderen Modellen experimentieren, um festzustellen, ob Sie eine bessere Transkriptionsqualität erhalten können. Sie können mithilfe der Speech UI mit mehreren Modellen experimentieren.

Zeitüberschreitungsfehler

Diese Probleme werden in den meisten Fällen durch eine Fehlkonfiguration oder einen Missbrauch der Spracherkennung 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 die Zeitüberschreitung in der Anfrage verlängern.

Dieses Problem tritt auf, wenn die LongRunningRecognize- oder BatchRecognize-Anfrage nicht innerhalb der angegebenen Zeitüberschreitung abgeschlossen wird. Es ist kein Fehler, der auf einen Fehler bei der Sprachtranskription hinweist. Das 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: Die Zeit zwischen den gesendeten Audio-Chunks muss verkürzt werden. Wenn die Funktion „Sprache in Text“ alle paar Sekunden keinen neuen Teil erhält, wird die Verbindung geschlossen und dieser Fehler ausgelöst.

StreamingRecognize 409 abgebrochen

  • Problem: Sie erhalten die Fehlermeldung 409 Max duration of 5 minutes reached for stream.

  • Lösung:Sie erreichen das Limit von 5 Minuten Audio für die Streamingerkennung. Wenn Sie dieses Limit erreichen, schließen Sie den Stream und öffnen Sie einen neuen.

Schlechte Transkriptqualität

Die automatische Spracherkennung (Automatic Speech Recognition, ASR) unterstützt eine Vielzahl von Anwendungsfällen. Die meisten Qualitätsprobleme lassen sich beheben, indem Sie verschiedene API-Optionen ausprobieren. 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 verstärken Sie fehlende Wörter.

    3. Wenn du Streaming-Eingabe verwendest, setze single_utterance=true.

Ein Wort oder eine Wortgruppe, das bzw. die immer wieder nicht erkannt wird

  • Problem: Bestimmte Wörter oder Wortgruppen werden immer falsch erkannt, z. B. wird 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 verstärken Sie fehlende Wörter. Mit Klassentokens können Sie ganze Wortgruppen wie Ziffernfolgen oder Adressen steigern. Prüfen Sie die verfügbaren Klassentokens.

    3. Erhöhen Sie max_alternatives. Setzen Sie dann ein Häkchen bei SpeechRecognitionResult alternatives und wählen Sie das erste Element aus, das dem gewünschten Format entspricht.

Die Formatierung kann für die automatische Spracherkennung eine Herausforderung darstellen. Die Sprachanpassung kann oft dabei helfen, ein erforderliches Format zu erhalten. Möglicherweise ist jedoch eine Nachbearbeitung erforderlich, um das erforderliche Format zu erreichen.

Gemischte oder mehrsprachige Eingaben

  • Problem: Das Audio enthält Sprache in mehreren Sprachen, z. B. ein Gespräch zwischen einem englischsprachigen 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.

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 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. Prüfen Sie dann, ob sie korrekt sind. Der ausgewählte Endpunkt muss mit dem Standort in der Anfrage / Ressource übereinstimmen.

Ressource erschöpft

Streaming-Chunk 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:Sie müssen die Größe der gesendeten Audio-Chunks verringern. Wir empfehlen, Chunks von 100 ms zu senden, um die Latenz zu minimieren und das Audiolimit nicht zu erreichen.

Daten-Logging

  • Problem: Speech-to-Text bietet keine Cloud Logging-Funktionen.

  • Lösung:Da die Datenprotokollierung für Speech-to-Text standardmäßig deaktiviert ist, müssen Kunden sie auf Projektebene aktivieren.