Informationen zu Spracherkennungsfunktionen

Speech-to-Text ist eine der drei vortrainierten Vertex AI APIs in der Google Distributed Cloud (GDC) Air-Gapped Appliance. Der Speech-to-Text-Dienst erkennt Sprache in Audiodateien und transkribiert Audio in Text. Speech-to-Text erfüllt die Anforderungen an den Datenstandort und die Compliance.

In der folgenden Tabelle werden die wichtigsten Funktionen von Speech-to-Text beschrieben:

Hauptmerkmale
Transkription Wenden Sie erweiterte Deep-Learning-Algorithmen für neuronale Netzwerke auf die automatische Spracherkennung an.
Modelle Stellen Sie Erkennungsmodelle mit weniger als 1 GB Größe bereit, die nur minimale Ressourcen verbrauchen.
API-kompatibel Mit der Speech-to-Text API und ihren Clientbibliotheken können Sie Audio senden und eine Texttranskription vom Speech-to-Text-Dienst empfangen.

Unterstützte Audiocodierungen für Speech-to-Text

Die Speech-to-Text API unterstützt verschiedene Codierungen. In der nachstehenden Tabelle sind die unterstützten Audio-Codecs aufgelistet:

Codec Name Verlustfrei Verwendungshinweise
FLAC Free Lossless Audio Codec Ja 16 Bit oder 24 Bit für Streams
LINEAR16 Linear PCM Ja 16-Bit-Codierung mit linearer Pulscodemodulation (PCM) Der Header muss die Abtastrate enthalten.
MULAW μ-law Nein 8-Bit-PCM-Codierung
OGG_OPUS Opus-codierte Audioframes in einem Ogg-Container Nein Abtastrate muss 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz, oder 48.000 Hz sein.

FLAC ist sowohl ein Audio-Codec als auch ein Audiodateiformat. Wenn Sie Audio dateien mit FLAC Codierung transkribieren möchten, müssen Sie sie im .FLAC Dateiformat bereitstellen, wobei die Dateien Header mit Metadaten enthalten müssen.

Speech-to-Text unterstützt WAV-Dateien mit LINEAR16- oder MULAW-codierten Audiodaten.

Wenn Sie bei der Codierung des Quellmaterials eine Wahl haben, verwenden Sie eine verlustfreie Codierung wie FLAC oder LINEAR16 für eine bessere Spracherkennung.

Speech-to-Text-Funktionen

Speech-to-Text in der GDC Air-Gapped Appliance bietet die folgenden drei Methoden zur Spracherkennung:

  • Synchrone Erkennung: Audiodaten werden an die Speech-to-Text API gesendet. Für die Daten wird eine Spracherkennung durchgeführt und die Ergebnisse werden nach der Audioverarbeitung zurückgegeben. Synchrone Erkennungsanfragen sind auf Audiodaten mit einer maximalen Dauer von einer Minute beschränkt.

  • Asynchrone Erkennung: Audiodaten werden an die Speech-to-Text API gesendet und ein Vorgang mit langer Ausführungszeit wird initiiert. Während dieses Vorgangs können Sie regelmäßig Erkennungsergebnisse abfragen. Verwenden Sie asynchrone Anfragen für Audiodaten von einer beliebigen Dauer bis zu maximal 480 Minuten.

  • Streamingerkennung: Die Spracherkennung wird aus Audiodaten durchgeführt, die als bidirektionaler Stream vorliegen. Bei den Streaminganfragen erfolgt die Erkennung in Echtzeit, zum Beispiel bei der Aufnahme von Live-Audio mit einem Mikrofon. Die Streamingerkennung liefert während der Aufnahme der Audiodaten Zwischenergebnisse, sodass das Ergebnis zum Beispiel bereits angezeigt wird, während ein Nutzer noch spricht.

Anfragen enthalten Konfigurationsparameter und Audiodaten. In den folgenden Abschnitten werden diese Erkennungsanfragen, die von ihnen generierten Antworten und die Verarbeitung dieser Antworten ausführlicher beschrieben.

Synchrone Anfragen und Antworten

Die einfachste Methode zur Spracherkennung aus Audiodaten besteht darin, eine Anfrage zur synchronen Erkennung an die Speech-to-Text API zu stellen. Speech-to-Text kann bis zu eine Minute Audiosprachdaten verarbeiten, die in einer synchronen Anfrage gesendet wurden. Nachdem Speech-to-Text alle Audiodaten verarbeitet und erkannt hat, wird eine Antwort zurückgegeben.

Speech-to-Text muss eine Antwort zurückgeben, bevor die nächste Anfrage verarbeitet wird. Sie können pro Minute bis zu sieben Minuten Audio transkribieren. Das entspricht sieben Sekunden Audio, die pro Sekunde in jeder Appliance-Einheit transkribiert werden. Bei schlechter Audioqualität kann die Erkennungsanfrage allerdings deutlich länger dauern.

Spracherkennungsanfragen

Eine synchrone Speech-to-Text API-Anfrage besteht aus einer Spracherkennungskonfiguration und Audiodaten. Das folgende Beispiel zeigt eine Anfrage:

{
    "config": {
        "encoding": "LINEAR16",
        "sample_rate_hertz": 16000,
        "language_code": "en-US",
    },
    "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
    }
}

Alle synchronen Erkennungsanfragen an die Speech-to-Text API müssen ein Spracherkennungsfeld config vom Typ RecognitionConfig enthalten. Ein RecognitionConfig-Objekt enthält die folgenden erforderlichen untergeordneten Felder:

  • encoding: gibt das Codierungsschema der bereitgestellten Audiodaten an. Dieses Feld hat den Typ AudioEncoding. Wenn Sie den Codec frei wählen können, sollten Sie für die beste Leistung eine verlustfreie Codierung wie FLAC oder LINEAR16 nutzen. Eine Liste der unterstützten Audiocodierungsformate finden Sie unter Unterstützte Audiocodierungen für Speech-to-Text. Das Feld encoding ist optional für FLAC- und WAV-Dateien, bei denen die Codierung im Dateiheader enthalten ist.
  • sample_rate_hertz: gibt die Abtastrate der bereitgestellten Audiodaten in Hertz an. Weitere Informationen zu Abtastraten finden Sie unter Abtastraten. Das Feld sample_rate_hertz ist optional für FLAC- und WAV-Dateien, bei denen die Abtastrate im Dateiheader enthalten ist.
  • language_code: enthält die Sprache und Region, die zur Spracherkennung der bereitgestellten Audiodaten zu verwenden ist. Der Sprachcode muss eine BCP-47-Kennung sein. Sprachcodes bestehen aus primären Sprach-Tags und sekundären Tags für die Region zur Angabe von Dialekten. Im Beispiel steht en für Englisch und US für die Vereinigten Staaten. Eine Liste der unterstützten Sprachen finden Sie unter Unterstützte Sprachen.

Übergeben Sie Audio mit dem Parameter audio vom Typ RecognitionAudio an Speech-to-Text. Das Feld audio enthält das folgende untergeordnete Feld:

  • content: enthält die auszuwertenden Audiodaten, eingebettet in die Anfrage. Die Audiodatenbyte werden mit einer reinen Binärdarstellung codiert. JSON-Darstellungen verwenden Base64. Weitere Informationen finden Sie unter Eingebettete Audioinhalte. Audiodaten, die direkt in diesem Feld übergeben werden, sind auf eine maximale Dauer von einer Minute begrenzt.

Abtastraten

Die Abtastrate für Ihre Audiodaten wird im Feld sample_rate_hertz der Anfragekonfiguration festgelegt. Sie muss der Abtastrate des bereitgestellten Audioinhalts entsprechen. Speech-to-Text unterstützt Abtastraten zwischen 8.000 und 48.000 Hz. Sie können die Abtastrate für eine FLAC- oder WAV-Datei im Dateiheader angeben, anstatt das Feld sample_rate_hertz zu verwenden. Das Feld sample_rate_hertz ist jedoch für alle anderen Audioformate erforderlich.

Wenn Sie bei der Codierung des Quellmaterials eine Wahl haben, erfassen Sie Audio mit einer Abtastrate von 16.000 Hz. Niedrigere Werte können die Spracherkennungsgenauigkeit beeinträchtigen, höhere Werte haben keine nennenswerte Auswirkung auf die Spracherkennungsqualität.

Wenn Sie Ihre Audiodaten jedoch mit einer anderen Abtastrate als 16.000 Hz aufgezeichnet haben, sollten Sie sie nicht mit einer Abtastrate von 16.000 Hz resampeln. Die meisten Legacy-Audiocodecs für Telefonie nutzen beispielsweise Abtastraten von 8.000 Hz, die weniger genaue Ergebnisse liefern. Wenn Sie solche Audiodaten verwenden müssen, stellen Sie sie der Speech-to-Text API mit ihrer ursprünglichen Abtastrate bereit.

Sprachen

Die Erkennungs-Engine von Speech-to-Text unterstützt eine Vielzahl von Sprachen und Dialekten. Die Sprache sowie der nationale oder regionale Dialekt Ihrer Audiodaten werden im Feld language_code der Anfragekonfiguration angegeben. Dazu verwenden Sie eine BCP-47 Kennung.

Auf der Seite Unterstützte Sprachen finden Sie eine vollständige Liste der unterstützten Sprachen für die einzelnen Funktionen.

Modellauswahl

Wenn Sie eine Anfrage zur Audiotranskription an Speech-to-Text senden, können Sie Ihre Audiodateien mit einem Modell für maschinelles Lernen verarbeiten, das speziell dafür trainiert wurde, gesprochene Sprache aus dieser Art von Quelle zu erkennen.

Wenn Sie ein Modell für die Spracherkennung festlegen möchten, fügen Sie in Ihrer Anfrage das Feld model in das Objekt RecognitionConfig ein und geben das gewünschte Modell an. Speech-to-Text in der GDC Air-Gapped Appliance unterstützt nur das Modell default.

Eingebettete Audioinhalte

Eingebettete Audioinhalte lassen sich durch das Übergeben des Parameters content innerhalb des Feldes audio in eine Spracherkennungsanfrage einfügen. Eingebettete Audiodaten, die als „content“ in einer REST-Anfrage bereitgestellt werden, müssen mit der JSON-Serialisierung kompatibel sein.

Daten können zur synchronen Erkennung nur direkt im Feld content gesendet werden, wenn sie nicht mehr als 60 Sekunden lang und 10 MB groß sind. Alle Audiodaten im Feld content müssen das Base64-Format haben.

Wenn Sie eine Anfrage mit einer Clientbibliothek erstellen, schreiben Sie diese Binärdaten bzw. Base64-codierten Daten direkt in das contentFeld.

Die meisten Entwicklungsumgebungen enthalten ein base64-Dienstprogramm, um eine Binärdatei als ASCII-Textdaten zu codieren. Damit haben Sie die erforderlichen Tools und Unterstützung. Außerdem hat Python integrierte Mechanismen für die Base64-Codierung von Inhalten. Die folgenden Beispiele zeigen, wie Sie eine Datei codieren:

Linux

Codieren Sie die Datei mit dem base64-Befehlszeilentool. Verhindern Sie Zeilenumbrüche mit dem Flag -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

So codieren Sie Audiodateien mit Base64 in Python:

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Antworten auf Spracherkennungsanfragen

Es kann einige Zeit dauern, bis durch eine synchrone Speech-to-Text API-Antwort Ergebnisse zurückgegeben werden. Nach der Verarbeitung gibt die API eine Antwort wie im folgenden Beispiel zurück:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
        }
      ]
    }
  ]
}

Alle synchronen Erkennungsantworten der Speech-to-Text API enthalten Spracherkennungsergebnisse vom Typ RecognizeResponse. Ein RecognizeResponse-Objekt enthält die folgenden Felder:

  • results: enthält die Liste der Ergebnisse vom Typ SpeechRecognitionResult, wobei jedes Ergebnis einem Segment der Audiodaten entspricht. Jedes Ergebnis besteht aus einem oder mehreren der folgenden untergeordneten Felder:

    • alternatives: enthält eine Liste möglicher Transkriptionen vom Typ SpeechRecognitionAlternative. Die erste Alternative in einer Antwort ist immer die wahrscheinlichste. Jede Alternative besteht aus den folgenden untergeordneten Feldern:

      • transcript: enthält den transkribierten Text. Wenn aufeinanderfolgende Alternativen bereitgestellt werden, können Sie diese Transkriptionen verketten.
      • words: enthält eine Liste mit wortspezifischen Informationen für jedes erkannte Wort.

Asynchrone Anfragen und Antworten

Eine asynchrone Speech-to-Text API-Anfrage ist in der Form mit einer synchronen Anfrage identisch. Statt jedoch eine Antwort zurückzugeben, wird durch die asynchrone Anfrage ein Vorgang mit langer Ausführungszeit initiiert und sofort zurückgegeben. Sie können die asynchrone Spracherkennung mit Audiodaten von einer beliebigen Länge bis zu maximal 480 Minuten verwenden.

Hier ist ein Beispiel für eine Vorgangsantwort:

{
  "name": "OPERATION_NAME",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata"
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

Beachten Sie, dass noch keine Ergebnisse vorhanden sind. Speech-to-Text fährt mit der Verarbeitung der Audiodaten fort und verwendet diesen Vorgang, um die Ergebnisse zu speichern. Die Ergebnisse werden im Feld response des Vorgangs angezeigt, der zurückgegeben wird, wenn die Anfrage LongRunningRecognize abgeschlossen ist.

Das folgende Beispiel zeigt eine vollständige Antwort nach Beendigung der Anfrage:

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "transcript": "how old is the Brooklyn Bridge",
        "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
      }]}]
  },
  "done": True
}

Beachten Sie, dass done auf True gesetzt wurde und die response des Vorgangs eine Ergebnismenge vom Typ SpeechRecognitionResult enthält. Dies ist derselbe Typ, der von einer synchronen Erkennungsanfrage zurückgegeben wird.

Streaminganfragen und -antworten

Ein Aufruf zur Streamingerkennung an die Speech-to-Text API ist so ausgelegt, dass damit Audiodaten in einem bidirektionalen Stream in Echtzeit erfasst und erkannt werden können. Ihre Anwendung kann Audiodaten im Anfragestream senden und vorläufige sowie endgültige Erkennungsergebnisse im Antwortstream in Echtzeit empfangen. Die Zwischenergebnisse geben das aktuelle Erkennungsergebnis für einen Audiobereich wieder, während die endgültigen Erkennungsergebnisse den letzten besten Versuch für diesen Audiobereich darstellen.

Streaminganfragen zur Erkennung

Im Gegensatz zu synchronen und asynchronen Aufrufen, bei denen Sie sowohl die Konfiguration als auch die Audiodaten innerhalb einer einzigen Anfrage senden, erfordert die Streaminganfrage an die Speech-to-Text API das Senden mehrerer Anfragen. Die erste StreamingRecognizeRequest muss eine Konfiguration vom Typ StreamingRecognitionConfig enthalten.

Eine StreamingRecognitionConfig besteht aus dem Feld config, das Konfigurationsinformationen für die Audiodaten vom Typ RecognitionConfig enthält und mit dem in synchronen und asynchronen Anfragen gezeigten Feld identisch ist.

Antworten auf Streamingerkennungsanfragen

Die Ergebnisse einer Streamingspracherkennung werden in einer Reihe von Antworten vom Typ StreamingRecognizeResponse zurückgegeben. Eine solche Antwort umfasst die folgenden Felder:

  • speech_event_type: enthält Ereignisse vom Typ SpeechEventType. Der Wert dieser Ereignisse weist darauf hin, wann eine einzelne gesprochene Eingabe abgeschlossen ist. Die Sprachereignisse dienen als Marker in der Streamingantwort.
  • results: enthält die Liste der Ergebnisse, bei denen es sich entweder um Zwischenergebnisse oder endgültige Ergebnisse vom Typ StreamingRecognitionResult handelt. Die Liste results enthält die folgenden untergeordneten Felder:
    • alternatives: enthält eine Liste alternativer Transkriptionen.
    • is_final: gibt an, ob die Ergebnisse in diesem Listeneintrag vorläufige oder endgültige Ergebnisse sind.
    • result_end_time: gibt den zeitlichen Versatz des Endes dieses Ergebnisses relativ zum Beginn des Audios an.