Pemecahan masalah

Pelajari langkah-langkah pemecahan masalah yang mungkin dapat membantu jika Anda mengalami masalah saat menggunakan Speech-to-Text.

Tidak dapat melakukan autentikasi ke Speech-to-Text

Anda mungkin menerima pesan error yang menunjukkan bahwa "Kredensial Default Aplikasi" tidak tersedia atau Anda mungkin ingin tahu cara mendapatkan kunci API yang akan digunakan saat memanggil Speech-to-Text.

Speech-to-Text menggunakan Kredensial Default Aplikasi (ADC) untuk autentikasi.

Kredensial untuk ADC harus tersedia dalam konteks tempat Anda memanggil Speech-to-Text API. Misalnya, jika Anda menyiapkan ADC di terminal, tetapi menjalankan kode di debugger IDE, konteks eksekusi kode Anda mungkin tidak memiliki akses ke kredensial. Dalam hal ini, permintaan Anda ke Speech-to-Text mungkin gagal.

Untuk mempelajari cara memberikan kredensial ke ADC, lihat Menyiapkan Kredensial Default Aplikasi.

Speech-to-Text menampilkan respons kosong

Ada beberapa alasan mengapa Speech-to-Text menampilkan respons kosong. Sumber masalahnya dapat berupa RecognitionConfig atau audio itu sendiri.

Memecahkan masalah RecognitionConfig

Objek RecognitionConfig (atau StreamingRecognitionConfig) adalah bagian dari permintaan pengenalan Speech-to-Text. Ada 2 kategori utama kolom yang harus ditetapkan agar dapat melakukan transkripsi dengan benar:

  • Konfigurasi audio
  • Model dan bahasa.

Salah satu penyebab paling umum respons kosong (misalnya, Anda menerima respons JSON {} kosong) adalah memberikan informasi yang salah tentang metadata audio. Jika kolom konfigurasi audio tidak disetel dengan benar, transkripsi kemungkinan besar akan gagal dan model pengenalan akan menampilkan hasil kosong.

Konfigurasi audio berisi metadata dari audio yang disediakan. Anda bisa mendapatkan metadata untuk file audio menggunakan perintah ffprobe, yang merupakan bagian dari FFMPEG.

Contoh berikut menunjukkan penggunaan ffprobe untuk mendapatkan metadata untuk https://storage.googleapis.com/cloud-samples-tests/speech/anonymous_mono.wav.

$ 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

Dengan perintah di atas, kita dapat melihat file tersebut memiliki:

  • sample_rate_hertz: 8000
  • saluran: 1
  • encoding LINEAR16 (s16)

Anda dapat menggunakan informasi ini di RecognitionConfig.

Alasan tambahan terkait audio untuk respons kosong dapat terkait dengan encoding audio. Berikut beberapa alat dan hal lain yang dapat dicoba:

  1. Putar file dan dengarkan outputnya. Apakah audionya jelas dan ucapan dapat dipahami?

    Untuk memutar file, Anda dapat menggunakan perintah play SoX (Sound eXchange). Beberapa contoh berdasarkan encoding audio yang berbeda ditampilkan di bawah ini.

    File FLAC menyertakan header yang menunjukkan frekuensi sampel, jenis encoding, dan jumlah saluran, serta dapat diputar sebagai berikut:

    play audio.flac

    File LINEAR16 tidak menyertakan header. Untuk memutarnya, Anda harus menentukan frekuensi sampel, jenis encoding, dan jumlah saluran. Encoding LINEAR16 harus 16-bit, integer bertanda, little-endian.

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

    File MULAW juga tidak menyertakan header dan sering kali menggunakan frekuensi sampel yang lebih rendah.

    play --channels=1 --rate=8000 --encoding=u-law audio.raw
  2. Pastikan encoding audio data Anda cocok dengan parameter yang Anda kirim di RecognitionConfig. Misalnya, jika permintaan Anda menentukan "encoding":"FLAC" dan "sampleRateHertz":16000, parameter data audio yang dicantumkan oleh perintah play SoX akan cocok dengan parameter tersebut, seperti berikut:

    play audio.flac

    harus mencantumkan:

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

    Jika listingan SoX menampilkan Sampleratehertz selain 16000Hz, ubah "sampleRateHertz" di InitialRecognizeRequest agar cocok. JikaEncoding bukan FLAC atau Channels bukan 1 @ 16-bit, Anda tidak dapat menggunakan file ini secara langsung, dan perlu mengonversinya ke encoding yang kompatibel (lihat langkah berikutnya).

  3. Jika file audio Anda tidak ada dalam encoding FLAC, coba konversikan ke FLAC menggunakan SoX, dan ulangi langkah-langkah di atas untuk memutar file tersebut serta memverifikasi encoding, sampleRateHertz, dan saluran. Berikut beberapa contoh yang mengonversi berbagai format file audio ke encoding FLAC.

    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

    Untuk mengonversi file mentah ke FLAC, Anda perlu mengetahui encoding audio file tersebut. Misalnya, untuk mengonversi little-endian bertanda 16-bit stereo pada 16000 Hz ke FLAC:

    sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw --channels=1 --bits=16 audio.flac
  4. Jalankan contoh Panduan Memulai atau salah satu Aplikasi Sampel dengan file audio sampel yang disediakan. Setelah contoh berhasil berjalan, ganti file audio sampel dengan file audio Anda.

Konfigurasi model dan bahasa

Pemilihan model sangat penting untuk mendapatkan hasil transkripsi yang berkualitas tinggi. Speech-to-Text menyediakan beberapa model yang telah disesuaikan dengan berbagai kasus penggunaan dan harus dipilih agar paling cocok dengan audio Anda. Misalnya, beberapa model (seperti latest_short dan command_and_search) adalah model berdurasi singkat, yang berarti lebih cocok untuk audio dan perintah pendek. Model ini cenderung akan menampilkan hasil segera setelah mendeteksi periode senyap. Di sisi lain, model format panjang (seperti latest_short, phone_call, video and default) lebih cocok untuk audio yang lebih panjang dan tidak sensitif untuk menafsirkan keheningan sebagai akhir audio.

Jika pengenalan Anda berakhir terlalu tiba-tiba atau tidak segera ditampilkan, sebaiknya periksa dan bereksperimen dengan model lain untuk melihat apakah Anda bisa mendapatkan kualitas transkripsi yang lebih baik. Anda dapat bereksperimen dengan beberapa model menggunakan UI Ucapan.

Error waktu tunggu habis

Sebagian besar masalah ini disebabkan oleh kesalahan konfigurasi atau penyalahgunaan Speech-to-Text.

LongRunningRecognize atau BatchRecognize

  • Masalah: Anda menerima TimeoutError: Operation did not complete within the designated timeout.

  • Solusi: Anda dapat mengirim transkripsi ke bucket Cloud Storage atau memperpanjang waktu tunggu dalam permintaan.

Masalah ini terjadi saat permintaan LongRunningRecognize atau BatchRecognize tidak selesai dalam waktu tunggu yang ditentukan dan bukan error yang menunjukkan kegagalan dalam transkripsi ucapan. Artinya, hasil transkripsi belum siap diekstrak.

StreamingRecognize

  • Masalah: Anda menerima Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.

  • Solusi: Waktu antara pengiriman potongan audio harus dikurangi. Jika Speech-to-Text tidak menerima potongan audio baru setiap beberapa detik, Speech-to-Text akan menutup koneksi dan memicu error ini.

StreamingRecognize 409 dibatalkan

  • Masalah: Anda menerima error 409 Max duration of 5 minutes reached for stream.

  • Solusi: Anda mencapai batas pengenalan streaming sebesar 5 menit audio. Jika Anda hampir mencapai batas ini, tutup streaming dan buka streaming baru.

Kualitas transkrip rendah

Automatic Speech Recognition (ASR) mendukung berbagai kasus penggunaan. Sebagian besar masalah kualitas dapat diatasi dengan mencoba opsi API yang berbeda. Untuk meningkatkan akurasi pengenalan, ikuti panduan di Praktik Terbaik.

Ucapan singkat tidak dikenali

  • Masalah: Ucapan singkat pengguna akhir seperti "Ya", "Tidak", dan "Berikutnya" tidak direkam oleh API dan tidak ada dalam transkrip.

  • Solusi: Lakukan langkah-langkah berikut.

    1. Uji permintaan yang sama dengan model yang berbeda.

    2. Menambahkan adaptasi ucapan dan meningkatkan kata yang hilang.

    3. Jika Anda menggunakan input streaming, coba tetapkan single_utterance=true.

Kata atau frasa yang tidak dikenal secara konsisten

  • Masalah: Kata atau frasa tertentu terus-menerus salah dikenali, seperti a dikenali sebagai 8.

  • Solusi: Lakukan langkah-langkah berikut.

  1. Uji permintaan yang sama dengan model yang berbeda.

  2. Menambahkan adaptasi ucapan dan meningkatkan kata yang hilang. Anda dapat menggunakan token class untuk meningkatkan seluruh kumpulan kata seperti urutan angka atau alamat. Periksa token class yang tersedia.

  3. Coba tingkatkan max_alternatives. Kemudian, periksa SpeechRecognitionResult alternatives dan pilih yang pertama yang cocok dengan format yang Anda inginkan.

Pemformatan dapat menjadi tantangan bagi ASR. Adaptasi ucapan sering kali membantu mendapatkan format yang diperlukan, tetapi pascapemrosesan mungkin diperlukan agar sesuai dengan format yang diperlukan.

Input campuran atau multibahasa

  • Masalah: Audio berisi ucapan dalam beberapa bahasa, seperti percakapan antara penutur bahasa Inggris dan Spanyol yang menghasilkan transkripsi yang salah.

  • Solusi: Fitur ini tidak didukung. Speech-to-Text hanya dapat mentranskripsikan satu bahasa per permintaan.

Izin ditolak

  • Masalah: Anda menerima error berikut.

    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).
  • Solusi: Berikan izin bagi PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.com untuk mengakses file di bucket BUCKET-PATH.

Argumen tidak valid

  • Masalah: Anda menerima error berikut.

    {
      "error": {
        "code": 400,
        "message": "Request contains an invalid argument.",
        "status": "INVALID_ARGUMENT"
      }
    }
  • Solusi: Periksa argumen dan bandingkan dengan dokumentasi API, lalu validasikan bahwa argumen tersebut sudah benar. Pastikan endpoint yang dipilih cocok dengan lokasi dalam permintaan / resource.

Resource sudah terlampaui

  • Masalah: Anda menerima error berikut.

    RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
  • Solusi: Lihat cara meminta penambahan kuota.

Potongan streaming terlalu besar

  • Masalah: Anda menerima error berikut.

    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." }']
  • Solusi: Anda perlu mengurangi ukuran potongan audio yang dikirim. Sebaiknya kirimkan potongan berdurasi 100 md untuk latensi terbaik dan agar tidak mencapai batas audio.

Logging data

  • Masalah: Speech-to-Text tidak menyediakan Cloud Logging.

  • Solusi: Karena Speech-to-Text menonaktifkan logging data secara default, pelanggan harus mengaktifkannya di tingkat project.