Meningkatkan hasil transkripsi dengan adaptasi model

Ringkasan

Anda dapat menggunakan fitur adaptasi model untuk membantu Speech-to-Text mengenali kata atau frasa tertentu lebih sering daripada opsi lain yang mungkin disarankan. Misalnya, anggaplah data audio Anda sering menyertakan kata "weather" (cuaca). Saat Speech-to-Text menemukan kata "weather", Anda ingin agar kata tersebut mentranskripsikan kata tersebut sebagai "weather" (cuaca) lebih sering daripada "whether" (apakah). Dalam hal ini, Anda dapat menggunakan adaptasi model agar Speech-to-Text lebih condong mengenalinya sebagai "weather".

Adaptasi model sangat membantu dalam kasus penggunaan berikut:

  • Meningkatkan akurasi kata dan frasa yang sering muncul dalam data audio Anda. Misalnya, Anda dapat memberi tahu model pengenalan terhadap perintah suara yang biasanya diucapkan oleh pengguna Anda.

  • Memperluas kosakata yang dikenali oleh Speech-to-Text. Speech-to-Text mencakup kosakata yang sangat besar. Namun, jika data audio Anda sering kali berisi kata-kata yang langka dalam penggunaan bahasa umum (seperti nama diri atau kata khusus domain), Anda dapat menambahkannya menggunakan adaptasi model.

  • Meningkatkan akurasi transkripsi ucapan jika audio yang disediakan berisi derau atau tidak terlalu jelas.

Secara opsional, Anda dapat menyesuaikan pembiasan model pengenalan menggunakan fitur peningkatan adaptasi model.

Tingkatkan pengenalan kata dan frasa

Untuk meningkatkan kemungkinan Speech-to-Text mengenali kata "weather" (cuaca) saat mentranskripsikan data audio Anda, Anda dapat meneruskan satu kata "weather" di PhraseSet dalam resource SpeechAdaptation.

Saat Anda memberikan frasa yang terdiri dari beberapa kata, Speech-to-Text akan lebih mungkin mengenali kata-kata tersebut dalam satu rangkaian. Menyediakan frasa juga akan meningkatkan kemungkinan mengenali bagian-bagian dari frasa, termasuk setiap kata. Lihat halaman batas konten untuk mengetahui batas jumlah dan ukuran frasa tersebut.

Meningkatkan pengenalan menggunakan class

Class mewakili konsep umum yang terjadi dalam bahasa alami, seperti unit uang dan tanggal kalender. Class membantu Anda meningkatkan akurasi transkripsi untuk sejumlah besar kata yang mengarah ke konsep umum, tetapi tidak selalu mencakup kata atau frasa yang identik.

Misalnya, anggaplah data audio Anda menyertakan rekaman orang yang menyebutkan alamat mereka. Anda mungkin memiliki rekaman audio seseorang yang berkata "Rumah saya di 123 Main Street, rumah keempat di sebelah kiri." Dalam hal ini, Anda ingin Speech-to-Text mengenali urutan pertama angka ("123") sebagai alamat, bukan sebagai ordinal ("seratus dua puluh tiga"). Namun, tidak semua orang tinggal di "123 Main Street". Sangat tidak praktis untuk mencantumkan setiap alamat jalan yang mungkin ada di resource PhraseSet. Sebagai gantinya, Anda dapat menggunakan class untuk menunjukkan bahwa nomor jalan harus dikenali, terlepas dari apa pun angka itu sebenarnya. Dalam contoh ini, Speech-to-Text dapat mentranskripsikan frasa seperti "123 Main Street" dan "987 Grand Boulevard" dengan lebih akurat karena keduanya dikenali sebagai nomor alamat.

Token class

Untuk menggunakan class dalam adaptasi model, sertakan token class di kolom phrases dari resource PhraseSet. Lihat daftar token class yang didukung untuk mengetahui token yang tersedia untuk bahasa Anda. Misalnya, untuk meningkatkan transkripsi nomor alamat dari audio sumber, berikan nilai $ADDRESSNUM dalam frasa dalam PhraseSet.

Anda dapat menggunakan class sebagai item mandiri dalam array phrases atau menyematkan satu atau beberapa token class dalam frasa yang lebih panjang dengan beberapa kata. Misalnya, Anda dapat menunjukkan nomor alamat dalam frasa yang lebih besar dengan menyertakan token class dalam string: ["my address is $ADDRESSNUM"]. Namun, frasa ini tidak akan membantu jika audio berisi frasa yang serupa, tetapi tidak identik, seperti "Saya di 123 Main Street". Untuk membantu pengenalan frasa serupa, penting untuk menyertakan token class saja: ["my address is $ADDRESSNUM", "$ADDRESSNUM"]. Jika Anda menggunakan token class yang tidak valid atau salah format, Speech-to-Text akan mengabaikan token tersebut tanpa memicu error, tetapi tetap menggunakan frasa lainnya untuk konteks.

Class kustom

Anda juga dapat membuat CustomClass sendiri, class yang terdiri dari daftar kustom item atau nilai terkait milik Anda sendiri. Misalnya, Anda mungkin ingin mentranskripsikan data audio yang mungkin menyertakan nama salah satu dari ratusan restoran di suatu wilayah. Nama restoran relatif jarang digunakan dalam ucapan umum, sehingga cenderung tidak dipilih sebagai jawaban yang "benar" oleh model pengenalan. Anda dapat membiaskan model pengenalan agar dapat mengidentifikasi nama-nama tersebut dengan benar saat muncul di audio Anda menggunakan class kustom.

Untuk menggunakan class kustom, buat resource CustomClass yang menyertakan setiap nama restoran sebagai ClassItem. Class kustom berfungsi dengan cara yang sama seperti token class bawaan. phrase dapat menyertakan token class bawaan dan class kustom.

Menyesuaikan hasil transkripsi menggunakan penguatan

Secara default, adaptasi model memberikan efek yang relatif kecil, terutama untuk frasa satu kata. Fitur penguatan adaptasi model dapat Anda gunakan untuk meningkatkan bias model pengenalan dengan memberikan bobot yang lebih besar pada beberapa frasa daripada yang lain. Sebaiknya Anda menerapkan peningkatan jika semua hal berikut terpenuhi:

  1. Anda telah menerapkan adaptasi model.
  2. Anda ingin menyesuaikan lebih lanjut kekuatan efek adaptasi model pada hasil transkripsi. Untuk mengetahui apakah fitur penguatan tersedia untuk bahasa Anda, lihat halaman dukungan bahasa.

Misalnya, Anda memiliki banyak rekaman orang yang menanyakan tentang "fare to get into the county fair" (tiket masuk ke pekan raya), di mana kata "fair"(pekan raya) muncul lebih sering daripada "fare" (tarif). Dalam hal ini, Anda dapat menggunakan adaptasi model untuk meningkatkan kemungkinan model mengenali "fair" dan "fare" dengan menambahkannya sebagai phrases dalam resource PhraseSet. Kode ini akan memberi tahu Speech-to-Text untuk mengenali "fair" dan "fare" lebih sering daripada, misalnya, "hare" atau "lair".

Namun, "fair" harus dikenali lebih sering daripada "fare" karena kata ini muncul lebih sering dalam audio. Anda mungkin telah mentranskripsikan audio menggunakan Speech-to-Text API dan menemukan banyak error dalam mengenali kata yang benar ("fair"). Dalam hal ini, Anda dapat menggunakan fitur penguatan untuk menetapkan nilai peningkatan yang lebih tinggi untuk "fair" daripada "fare". Nilai berbobot yang lebih tinggi yang ditetapkan ke "fair" akan membuat Speech-to-Text API lebih sering memilih "fair" daripada "fare". Tanpa nilai penguatan, model pengenalan akan mengenali "fair" dan "fare" dengan probabilitas yang sama.

Dasar-dasar penguatan

Saat menggunakan penguatan, Anda menetapkan nilai berbobot ke item phrase di resource PhraseSet. Speech-to-Text mengacu pada nilai berbobot ini saat memilih kemungkinan transkripsi untuk kata-kata dalam data audio Anda. Semakin tinggi nilainya, semakin tinggi kemungkinan Speech-to-Text memilih kata atau frasa tersebut dari alternatif yang memungkinkan.

Jika Anda menetapkan nilai penguatan ke frasa yang terdiri dari beberapa kata, penguatan akan diterapkan ke seluruh frasa dan hanya seluruh frasa. Misalnya, Anda ingin menetapkan nilai penguatan untuk frasa "My favorite exhibit at the American Museum of Natural History is the blue whale" (Objek favorit saya di American Museum of Natural History adalah ikan paus biru). Jika Anda menambahkan frasa tersebut ke objek phrase dan menetapkan nilai penguatan, model pengenalan akan lebih cenderung mengenali frasa tersebut secara keseluruhan, kata demi kata.

Jika Anda tidak mendapatkan hasil yang diinginkan dengan penguatan frasa multi-kata, sebaiknya tambahkan semua bigram (2 kata berurutan) yang membentuk frasa tersebut sebagai tambahan phrase item dan tetapkan nilai penguatan ke setiap item. Melanjutkan contoh sebelumnya, Anda dapat menyelidiki penambahan bigram dan endgram tambahan (lebih dari dua kata), seperti "my favorite", "my favorite exhibit", "favorite exhibit", "my favorite exhibit at the American Museum of Natural History", "American Museum of Natural History", dan "blue whale". Model pengenalan STT lebih mungkin mengenali frasa terkait dalam audio Anda yang berisi bagian dari frasa asli yang ditingkatkan, tetapi tidak mencocokkannya kata demi kata.

Menetapkan nilai penguatan

Nilai penguatan harus berupa nilai float yang lebih besar dari 0. Batas maksimum praktis untuk nilai peningkatan adalah 20. Untuk mendapatkan hasil terbaik, lakukan eksperimen dengan hasil transkripsi dengan menaikkan atau menurunkan nilai penguatan sampai Anda mendapatkan hasil transkripsi yang akurat.

Nilai penguatan yang lebih tinggi dapat menghasilkan negatif palsu (NP) yang lebih sedikit, yang merupakan kasus ketika kata atau frasa muncul dalam audio, tetapi tidak dikenali dengan benar oleh Speech-to-Text. Namun, penguatan juga dapat meningkatkan kemungkinan positif palsu; yaitu, kasus saat kata atau frasa muncul dalam transkripsi meskipun tidak muncul dalam audio.

Contoh kasus penggunaan yang menggunakan adaptasi model

Contoh berikut memandu Anda dalam proses penggunaan adaptasi model untuk mentranskripsikan rekaman audio seseorang yang mengucapkan "The word is fare". Dalam hal ini, tanpa adaptasi ucapan, Speech-to-Text mengidentifikasi kata "fair" (adil). Penggunaan adaptasi ucapan Speech-to-Text dapat mengidentifikasi kata "fare" (tarif).

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API Speech-to-Text.

    Mengaktifkan API

  5. Make sure that you have the following role or roles on the project: Cloud Speech Administrator

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.

    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.
    8. Install the Google Cloud CLI.
    9. To initialize the gcloud CLI, run the following command:

      gcloud init
    10. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

      Buka pemilih project

    11. Make sure that billing is enabled for your Google Cloud project.

    12. Aktifkan API Speech-to-Text.

      Mengaktifkan API

    13. Make sure that you have the following role or roles on the project: Cloud Speech Administrator

      Check for the roles

      1. In the Google Cloud console, go to the IAM page.

        Go to IAM
      2. Select the project.
      3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

      4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

      Grant the roles

      1. In the Google Cloud console, go to the IAM page.

        Buka IAM
      2. Pilih project.
      3. Klik Berikan akses.
      4. Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.

      5. Di daftar Pilih peran, pilih peran.
      6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
      7. Klik Simpan.
      8. Install the Google Cloud CLI.
      9. To initialize the gcloud CLI, run the following command:

        gcloud init
      10. Library klien dapat menggunakan Kredensial Default Aplikasi untuk dengan mudah melakukan autentikasi dengan Google API dan mengirim permintaan ke API tersebut. Dengan Kredensial Default Aplikasi, Anda dapat menguji aplikasi secara lokal dan men-deploy aplikasi tanpa mengubah kode yang mendasarinya. Untuk informasi selengkapnya, lihat Lakukan autentikasi untuk menggunakan library klien.

      11. Buat kredensial autentikasi lokal untuk Akun Google Anda:

        gcloud auth application-default login

      Selain itu, pastikan Anda telah menginstal library klien.

      Tingkatkan transkripsi menggunakan PhraseSet

      1. Contoh berikut membuat PhraseSet dengan frasa "fare" dan menambahkannya sebagai inline_phrase_set dalam permintaan pengenalan:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_inline_phrase_set(audio_file: str) -> cloud_speech.RecognizeResponse:
          """Enhances speech recognition accuracy using an inline phrase set.
          The inline custom phrase set helps the recognizer produce more accurate transcriptions for specific terms.
          Phrases are given a boost to increase their chances of being recognized correctly.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
          Returns:
              cloud_speech.RecognizeResponse: The full response object which includes the transcription results.
          """
      
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Build inline phrase set to produce a more accurate transcript
          phrase_set = cloud_speech.PhraseSet(
              phrases=[{"value": "fare", "boost": 10}, {"value": "word", "boost": 20}]
          )
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      inline_phrase_set=phrase_set
                  )
              ]
          )
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
      
          # Prepare the request which includes specifying the recognizer, configuration, and the audio content
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
      
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      
      1. Contoh ini membuat resource PhraseSet dengan frasa yang sama, lalu mereferensikannya dalam permintaan pengenalan:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_phrase_set_reference(
          audio_file: str,
          phrase_set_id: str,
      ) -> cloud_speech.RecognizeResponse:
          """Transcribe audio files using a PhraseSet.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
              phrase_set_id (str): The unique ID of the PhraseSet to use.
          Returns:
              cloud_speech.RecognizeResponse: The full response object which includes the transcription results.
          """
      
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Creating operation of creating the PhraseSet on the cloud.
          operation = client.create_phrase_set(
              parent=f"projects/{PROJECT_ID}/locations/global",
              phrase_set_id=phrase_set_id,
              phrase_set=cloud_speech.PhraseSet(phrases=[{"value": "fare", "boost": 10}]),
          )
          phrase_set = operation.result()
      
          # Add a reference of the PhraseSet into the recognition request
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      phrase_set=phrase_set.name
                  )
              ]
          )
      
          # Automatically detect audio encoding. Use "short" model for short utterances.
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
          #  Prepare the request which includes specifying the recognizer, configuration, and the audio content
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      

      Tingkatkan hasil transkripsi menggunakan CustomClass

      1. Contoh berikut membuat CustomClass dengan item "fare" dan nama "fare". Selanjutnya, kode ini akan merujuk ke CustomClass dalam inline_phrase_set dalam permintaan pengenalan:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_inline_custom_class(
          audio_file: str,
      ) -> cloud_speech.RecognizeResponse:
          """Transcribe audio file using inline custom class.
          The inline custom class helps the recognizer produce more accurate transcriptions for specific terms.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
          Returns:
              cloud_speech.RecognizeResponse: The response object which includes the transcription results.
          """
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Define an inline custom class to enhance recognition accuracy with specific items like "fare" etc.
          custom_class_name = "your-class-name"
          custom_class = cloud_speech.CustomClass(
              name=custom_class_name,
              items=[{"value": "fare"}],
          )
      
          # Build inline phrase set to produce a more accurate transcript
          phrase_set = cloud_speech.PhraseSet(
              phrases=[{"value": custom_class_name, "boost": 20}]
          )
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      inline_phrase_set=phrase_set
                  )
              ],
              custom_classes=[custom_class],
          )
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
      
          # Prepare the request which includes specifying the recognizer, configuration, and the audio content
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
      
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      
      1. Contoh ini membuat resource CustomClass dengan item yang sama. Kemudian, tindakan ini akan membuat resource PhraseSet dengan frasa yang merujuk ke nama resource CustomClass. Kemudian, kode ini akan merujuk ke resource PhraseSet dalam permintaan pengenalan:

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def adaptation_v2_custom_class_reference(
          audio_file: str, phrase_set_id: str, custom_class_id: str
      ) -> cloud_speech.RecognizeResponse:
          """Transcribe audio file using a custom class.
          Args:
              audio_file (str): Path to the local audio file to be transcribed.
              phrase_set_id (str): The unique ID of the phrase set to use.
              custom_class_id (str): The unique ID of the custom class to use.
          Returns:
              cloud_speech.RecognizeResponse: The full response object which includes the transcription results.
          """
          # Instantiates a speech client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(audio_file, "rb") as f:
              audio_content = f.read()
      
          # Create a custom class to improve recognition accuracy for specific terms
          custom_class = cloud_speech.CustomClass(items=[{"value": "fare"}])
          operation = client.create_custom_class(
              parent=f"projects/{PROJECT_ID}/locations/global",
              custom_class_id=custom_class_id,
              custom_class=custom_class,
          )
          custom_class = operation.result()
      
          # Create a persistent PhraseSet to reference in a recognition request
          created_phrase_set = cloud_speech.PhraseSet(
              phrases=[
                  {
                      "value": f"${{{custom_class.name}}}",
                      "boost": 20,
                  },  # Using custom class reference
              ]
          )
          operation = client.create_phrase_set(
              parent=f"projects/{PROJECT_ID}/locations/global",
              phrase_set_id=phrase_set_id,
              phrase_set=created_phrase_set,
          )
          phrase_set = operation.result()
      
          # Add a reference of the PhraseSet into the recognition request
          adaptation = cloud_speech.SpeechAdaptation(
              phrase_sets=[
                  cloud_speech.SpeechAdaptation.AdaptationPhraseSet(
                      phrase_set=phrase_set.name
                  )
              ]
          )
          # Automatically detect the audio's encoding with short audio model
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              adaptation=adaptation,
              language_codes=["en-US"],
              model="short",
          )
      
          # Create a custom class to reference in a PhraseSet
          request = cloud_speech.RecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              content=audio_content,
          )
      
          # Transcribes the audio into text
          response = client.recognize(request=request)
      
          for result in response.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      

      Pembersihan

      Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.

      1. Opsional: Cabut kredensial autentikasi yang Anda buat, dan hapus file kredensial lokal.

        gcloud auth application-default revoke
      2. Opsional: Cabut kredensial dari gcloud CLI.

        gcloud auth revoke

      Konsol

    14. Di konsol Google Cloud, buka halaman Manage resource.

      Buka Manage resource

    15. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
    16. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
    17. gcloud

      Menghapus project Google Cloud:

      gcloud projects delete PROJECT_ID

      Langkah berikutnya