Transkriptionsergebnisse mit Modellanpassung verbessern

Übersicht

Mit der Funktion Modellanpassung kann Speech-to-Text bestimmte Wörter oder Wortgruppen häufiger erkennen als andere Optionen, die sonst möglicherweise vorgeschlagen werden. Angenommen, Ihre Audiodaten enthalten häufig das Wort "weather" (Wetter). Wenn Speech-to-Text auf das Wort "weather" stößt, soll das Wort häufiger mit "weather" (Wetter) als mit "whether" (ob) transkribiert werden. In diesem Fall können Sie die Modellanpassung verwenden, um Speech-to-Text auf das Erkennen des Begriffs "Stadt" auszurichten.

Die Modellanpassung ist in den folgenden Anwendungsfällen besonders hilfreich:

  • Verbesserung der Erkennung von Wörtern und Wortgruppen, die in den Audiodaten häufig vorkommen. Beispielsweise können Sie das Erkennungsmodell auf Sprachbefehle hinweisen, die normalerweise von Ihren Nutzern gesprochen werden.

  • Erweiterung des Vokabulars von Wörtern, die von Speech-to-Text erkannt werden. Speech-to-Text enthält bereits ein sehr umfangreiches Vokabular. Wenn Ihre Audiodaten jedoch häufig Wörter enthalten, die im allgemeinen Sprachgebrauch eher selten sind (z. B. Eigennamen oder themenspezifische Begriffe), können Sie diese mithilfe der Modellanpassung hinzufügen.

  • Verbesserung der Treffsicherheit der Sprachtranskription, wenn der Audioinhalt Rauschen enthält oder nicht klar ist.

Optional können Sie die Gewichtung des Erkennungsmodells mit der Funktion zur Optimierung der Modellanpassung anpassen.

Erkennung von Wörtern und Wortgruppen verbessern

Um die Wahrscheinlichkeit zu erhöhen, dass Speech-to-Text beim Transkribieren Ihrer Audiodaten das Wort "weather" erkennt, können Sie das einzelne Wort "weather" im PhraseSet-Objekt in einer SpeechAdaptation-Ressource.

Wenn Sie eine Wortgruppe mit mehreren Wörtern bereitstellen, erhöht das die Wahrscheinlichkeit, dass Speech-to-Text diese Wortgruppe korrekt erkennt. Bei Angabe einer Wortgruppe erhöht sich ebenfalls die Wahrscheinlichkeit, dass Teile der Wortgruppe, einschließlich einzelner Wörter, erkannt werden. Unter Limits für Inhalte finden Sie Limits für die Anzahl und Länge dieser Wortgruppen.

Erkennung mithilfe von Klassen verbessern

Klassen stehen für gängige Konzepte, die in natürlicher Sprache vorkommen, z. B. Währungseinheiten und Kalenderdaten. Mit einer Klasse können Sie die Transkriptionsgenauigkeit für große Wortgruppen, die zu einem gemeinsamen Konzept gehören, aber nicht immer identische Wörter oder Wortgruppen enthalten, verbessern.

Angenommen, Ihre Audiodaten enthalten Aufnahmen von Personen, die ihre Adresse nennen. In einer Audioaufnahme sagt jemand vielleicht: "Mein Haus befindet sich in der Hauptstraße 123. Es ist das vierte Haus auf der linken Seite." In diesem Fall soll Speech-to-Text die erste Ziffernfolge ("123") als Adresse und nicht als Ordinalzahl erkennen ("einhundertdreiundzwanzigste"). Allerdings wohnen nicht alle Menschen in der "Hauptstraße 123". Es ist unpraktisch, jede mögliche Adresse in einer PhraseSet-Ressource anzugeben. Stattdessen können Sie mithilfe einer Klasse dafür sorgen, dass eine Hausnummer unabhängig von der tatsächlichen Zahl erkannt wird. In diesem Beispiel könnte Speech-to-Text Wortgruppen wie "Hauptstraße 123" und "Königsallee 987" genauer transkribieren, da die beiden Zahlen als Hausnummern erkannt werden.

Klassentokens

Wenn Sie bei der Modellanpassung eine Klasse verwenden möchten, fügen Sie in das Feld phrases einer PhraseSet-Ressource ein Klassentoken ein. In der Liste der unterstützten Klassentokens sehen Sie, welche Tokens für Ihre Sprache verfügbar sind. Wenn Sie beispielsweise die Transkription von Hausnummern aus der Audioquelle verbessern möchten, geben Sie in Ihrem SpeechContext-Objekt den Wert $ADDRESSNUM an.

Sie können Klassen entweder als eigenständige Elemente im phrases-Array verwenden oder ein oder mehrere Klassentokens in längere Wortgruppen mit mehreren Wörtern einbetten. Beispielsweise können Sie eine Hausnummer in einer größeren Wortgruppe angeben, indem Sie das Klassentoken in einen String einfügen: ["my address is $ADDRESSNUM"]. Diese Wortgruppe ist jedoch nicht hilfreich, wenn die Audiodaten eine zwar ähnliche, aber nicht identische Wortgruppe enthalten, z. B. "Ich bin in der Hauptstraße 123". Um die Erkennung ähnlicher Wortgruppen zu verbessern, ist es wichtig, zusätzlich das Klassentoken für sich allein anzugeben: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Wenn Sie ein ungültiges oder falsch formatiertes Klassentoken verwenden, ignoriert Speech-to-Text das Token, ohne einen Fehler auszulösen. Der Rest der Wortgruppe wird aber für den Kontext verwendet.

Das folgende Snippet zeigt ein Beispiel für eine JSON-Nutzlast, die an die Speech-to-Text API gesendet wird. Das JSON-Snippet enthält ein SpeechContext-Objekt, das ein Klassentoken verwendet.

Benutzerdefinierte Klassen

Sie können auch Ihre eigene CustomClass erstellen. Diese Klasse besteht aus Ihrer eigenen benutzerdefinierten Liste mit ähnlichen Elementen oder Werten. Sie möchten beispielsweise Audiodaten transkribieren, die wahrscheinlich den Namen eines von mehreren Hundertregionalen Restaurants enthalten. Restaurantnamen sind im Allgemeinen relativ selten und werden daher wahrscheinlich weniger als die richtige Antwort des Erkennungsmodells ausgewählt. Sie können das Erkennungsmodell so beeinflussen, dass diese Namen bei der Verwendung einer benutzerdefinierten Klasse in Ihrer Audiodatei korrekt identifiziert werden.

Erstellen Sie eine CustomClass-Ressource, die jeden Restaurantnamen als ClassItem enthält, um eine benutzerdefinierte Klasse zu verwenden. Benutzerdefinierte Klassen funktionieren auf dieselbe Weise wie die vordefinierten Klassentokens. Eine phrase kann sowohl vorkonfigurierte Klassentokens als auch benutzerdefinierte Klassen enthalten.

Transkriptionsergebnisse mit Boost optimieren

Standardmäßig hat die Modellanpassung einen relativ kleinen Effekt, insbesondere bei Wortgruppen mit nur einem Wort. Mit der Anpassungsfunktion für die Modellanpassung können Sie die Gewichtung eines Erkennungsmodells erhöhen, indem Sie einigen Wortgruppen mehr Gewichtungen zuweisen als andere. Wir empfehlen Ihnen, Boost zu implementieren, wenn 1) Sie bereits die Modellanpassung implementiert haben, und 2) die Stärke der Modellanpassungseffekte für Ihre Transkriptionsergebnisse weiter anpassen möchten. Auf der Seite zur Sprachunterstützung können Sie sehen, ob das Optimierungsfeature für Ihre Sprache verfügbar ist.

Angenommen, es gibt viele Aufnahmen von Personen, die nach "fare to get into the county fair" (Fahrpreis für die Fahrt zum Jahrmarkt) fragen, wobei das Wort "fair" häufiger vorkommt als "fare". In diesem Fall können Sie mithilfe der Modellanpassung die Wahrscheinlichkeit erhöhen, dass das Modell sowohl "fair" als auch "Waagen" erkennt. Fügen Sie sie dazu als phrases in eine PhraseSet-Ressource ein. Dadurch wird Speech-to-Text angewiesen, „fair“ und „fare“ häufiger zu erkennen als beispielsweise „hare“ oder „lair“.

Gleichzeitig soll häufiger "fair" als "fare" erkannt werden, da dieses Wort in den Audiodaten öfter vorkommt. Möglicherweise haben Sie Ihre Audiodaten schon mit der Speech-to-Text API transkribiert und eine große Anzahl an Fehlern bei der Erkennung des richtigen Wortes ("fair") gefunden. In diesem Fall können Sie die Optimierungsfunktion verwenden, um "fair" einen höheren Optimierungswert zuzuweisen als "fare". Durch den höher gewichteten Wert, der dem Wort "fair" zugewiesen ist, wird die Speech-to-Text API so konfiguriert, dass sie "fair" häufiger auswählt als "fare". Ohne Optimierungswerte werden vom Erkennungsmodell "fair" und "fare" mit gleicher Wahrscheinlichkeit erkannt.

Optimierungsgrundlagen

Wenn Sie die Optimierung verwenden, weisen Sie phrase-Elementen in einer PhraseSet-Ressource einen Gewichtungswert zu. Speech-to-Text berücksichtigt diesen Gewichtungswert, wenn es eine mögliche Transkription für Wörter in Audiodaten auswählt. Je höher der Wert, desto höher die Wahrscheinlichkeit, dass Speech-to-Text dieses Wort oder diese Wortgruppe aus den möglichen Alternativen auswählt.

Wenn Sie einer Wortgruppe mit mehreren Wörtern einen Optimierungswert zuweisen, wird der Boost auf die gesamte Wortgruppe und nur auf die gesamte Wortgruppe angewendet. Sie möchten beispielsweise der Aussage "Meine Lieblingsausstellung im American Museum of Natural History" den blauen Walwal geben. Wenn Sie diese Wortgruppe einem phrase-Objekt hinzufügen und einen Optimierungswert zuweisen, erhöht das Erkennungsmodell die Wahrscheinlichkeit dieser Wortgruppe wahrscheinlich.

Wenn Sie nicht die Ergebnisse erhalten, die Sie durch die Optimierung einer Wortgruppe mit mehreren Wörtern erwartet hatten, sollten Sie alle Bigramme (zwei Wörter in einer bestimmten Reihenfolge) aus denen die Wortgruppe besteht, als zusätzliche phrase-Elemente hinzufügen und jedem einen Optimierungswert zuweisen. Bezogen auf das obige Beispiel könnten Sie versuchen, zusätzliche Bigramme und Endgramme (mit mehr als zwei Wörtern) hinzuzufügen, z. B. "Meine Lieblingsausstellung", "Meine Lieblingsausstellung im American Museum of Natural History", "American Museum of Natural History" usw. Das STT-Erkennungsmodell erkennt dann mit größerer Wahrscheinlichkeit ähnliche Wortgruppen in Ihrem Audio, die Teile der ursprünglichen optimierten Wortgruppe enthalten, aber dieser nicht Wort für Wort entsprechen.

Optimierungswerte festlegen

Optimierungswerte müssen einen Gleitkommawert größer als 0 haben. Die praktische Obergrenze für Optimierungswerte beträgt 20. Um optimale Ergebnisse zu erzielen, sollten Sie mit Ihren Transkriptionsergebnissen experimentieren, indem Sie die Optimierungswerte nach oben oder unten anpassen, bis Sie genauere Transkriptionsergebnisse erhalten.

Durch höhere Optimierungswerte lässt sich die Zahl der falsch-negativen Ergebnisse möglicherweise verringern. Solche Ergebnisse liegen vor, wenn ein Wort oder eine Wortgruppe in den Audiodaten vorkommt, aber von Speech-to-Text nicht richtig erkannt wird. Durch die Optimierung kann aber auch die Wahrscheinlichkeit von falsch-positiven Ergebnissen erhöht werden. Das sind Ergebnisse, bei denen das Wort oder die Wortgruppe in der Transkription vorkommt, obwohl es nicht in den Audiodaten enthalten ist.

Anwendungsbeispiel mit Modellanpassung

Im folgenden Beispiel werden Sie durch den Einsatz von Modellanpassungen geführt, um eine Audioaufnahme eines Mitarbeiters zu sagen, der sagt: "Ruft Fione und ok mein Go, was ist hier." In diesem Fall ist es wichtig, dass das Modell "Zwierität" und "ionity" korrekt identifiziert.

Der folgende Befehl führt die Erkennung des Audios ohne die Modellanpassung aus. Die daraus resultierende Transkription ist falsch: "Ruf mich von Fiona Tea an und geh, wie ich bin, habe ich einen Tag."

   curl -H "Authorization: Bearer $(gcloud auth
   --impersonate-service-account=$SA_EMAIL print-access-token)" -H
   "Content-Type: application/json; charset=utf-8"
   "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
   {"languageCode": "en-US"}, "audio":
   {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
   

Beispielanfrage:

     {
       "config":{
       "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
     }
   

Transkription mit PhraseSet verbessern

  1. PhraseSet erstellen:

    curl -X POST -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets"
    -d '{"phraseSetId": "test-phrase-set-1"}'
    

    Beispielanfrage:

    {
       "phraseSetId":"test-phrase-set-1"
    }
    
  2. Rufen Sie die PhraseSet ab:

    curl -X GET -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id>/locations/global/phraseSets/test-phrase-set-1"\
    
  3. Fügen Sie dem AusdruckPhraseSet und weise eineboost jeweils ein Wert von 10:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"\
    -d '{"phrases": [{"value": "ionity", "boost": 10}, {"value": "fionity", "boost": 10}]}'
    

    "PhraseSet" wurde aktualisiert zu:

    {
      "phrases":[
         {
              "value":"ionity",
              "boost":10
           },
           {
              "value":"fionity",
              "boost":10
           }
        ]
     }
    
  4. Erkennen Sie das Audio wieder, indem Sie diesmal mit der Modellanpassung und dem zuvor erstellten PhraseSet tun. Die transkribierten Ergebnisse sind jetzt richtig: "Ruf mich anion

    curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)"
    -H "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phrase_set_references": ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]},
    "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Beispielanfrage:

    {
       "config":{
          "adaptation":{
             "phrase_set_references":[
                "projects/project_id/locations/global/phraseSets/test-phrase-set-1"
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
    

Transkriptionsergebnisse mithilfe eines CustomClass verbessern

  1. CustomClass erstellen:

    curl -X POST -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses"
    -d '{"customClassId": "test-custom-class-1"}'
    

    Beispielanfrage:

    {
       "phraseSetId":"test-phrase-set-1"
    }
    
  2. Rufen Sie die CustomClass ab:

     curl -X GET -H "Authorization: Bearer $(gcloud auth
     --impersonate-service-account=$SA_EMAIL print-access-token)" -H
     "Content-Type: application/json; charset=utf-8"
     "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
     

  3. den Audioclip testen. Das Feld CustomClass ist leer, daher ist das zurückgegebene Transkript immer noch falsch: "Ruf mich Fiona Tea an und oh mein go, spiele ich jetzt einen Tag:

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phraseSets": [{"phrases": [{"value":
    "${projects/project_idlocations/global/customClasses/test-custom-class-1}",
    "boost": "10"}]}]}, "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Beispielanfrage:

      {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
                         "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
     }
    
  4. Fügen Sie der benutzerdefinierten Klasse die Ausdrücke "fionity" und "ionity" hinzu:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1?updateMask=items"
    -d '{"items": [{"value": "ionity"}, {"value": "fionity"}]}'
    

    Dadurch wird die benutzerdefinierte Klasse so aktualisiert:

    {
       "items":[
          {
             "value":"ionity"
          },
          {
             "value":"fionity"
          }
       ]
    }
    
  5. Erkennen Sie das Beispielaudio noch einmal, in diesem Fall mit "fionity" und "ionity" in der CustomClass. Das Transkript ist jetzt richtig: "Call me fionity, and oh my gos what you do here ionity".

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phraseSets": [{"phrases": [{"value":
    "${projects/project_id/locations/global/customClasses/test-custom-class-1}",
    "boost": "10"}]}]}, "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Beispielanfrage:

    {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
    "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
    

CustomClass in einem PhraseSet

  1. Aktualisieren Sie die zuvor erstellte Ressource PhraseSet, um auf CustomClass zu verweisen:

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"
    -d '{"phrases": [{"value": "${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost": 10}]}'
    

    Beispielanfrage:

    {
       "config":{
          "adaptation":{
             "phraseSets":[
                {
                   "phrases":[
                      {
                         "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
                         "boost":"10"
                      }
                   ]
                }
             ]
          },
          "languageCode":"en-US"
       },
       "audio":{
          "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"
       }
    }
    
  2. Erkennen Sie die Audiodaten mithilfe der Ressource PhraseSet, die auf CustomClass verweist. Das Transkript ist korrekt: "Ruf mich he, feilen an, Oh, fange mal an."

    curl -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config":
    {"adaptation": {"phrase_set_references":
    ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]},
    "languageCode": "en-US"}, "audio":
    {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
    

    Beispielanfrage:

    {
       "phrases":[
          {
             "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}",
             "boost":10
          }
       ]
    }
    

Löschen Sie CustomClass und PhraseSet.

  1. Löschen Sie das PhraseSet:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1"
    
  2. Löschen Sie das CustomClass:

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth
    --impersonate-service-account=$SA_EMAIL print-access-token)" -H
    "Content-Type: application/json; charset=utf-8"
    "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
    

Nächste Schritte