Mempelajari fitur pengenalan ucapan

Speech-to-Text adalah salah satu dari tiga API terlatih Vertex AI di Google Distributed Cloud (GDC) dengan air gap. Layanan Speech-to-Text mengenali ucapan dalam file audio dan mentranskripsikan audio menjadi teks. Speech-to-Text memenuhi persyaratan residensi dan kepatuhan data.

Tabel berikut menjelaskan kemampuan utama Speech-to-Text:

Kemampuan utama
Transkripsi Terapkan algoritma jaringan neural deep learning lanjutan untuk pengenalan ucapan otomatis.
Model Deploy model pengenalan yang berukuran kurang dari 1 GB dan menggunakan resource minimal.
Kompatibel dengan API Gunakan Speech-to-Text API dan library kliennya untuk mengirim audio dan menerima transkripsi teks dari layanan Speech-to-Text.

Encoding audio yang didukung untuk Speech-to-Text

Speech-to-Text API mendukung sejumlah encoding yang berbeda. Tabel berikut mencantumkan codec audio yang didukung:

Codec Nama Lossless Catatan penggunaan
FLAC Codec Audio Lossless Gratis Ya 16-bit atau 24-bit diperlukan untuk streaming
LINEAR16 PCM Linear Ya Encoding modulasi kode pulsa (PCM) linear 16-bit. Header harus berisi frekuensi sampel.
MULAW hukum μ Tidak Encoding PCM 8-bit
OGG_OPUS Frame audio yang dienkode Opus dalam container Ogg Tidak Frekuensi sampel harus salah satu dari 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz, atau 48.000 Hz

FLAC adalah codec audio dan format file audio. Untuk mentranskripsikan file audio menggunakan encoding FLAC, Anda harus menyediakannya dalam format file .FLAC, yang mencakup header yang berisi metadata.

Speech-to-Text mendukung file WAV dengan audio yang dienkode LINEAR16 atau MULAW.

Untuk mengetahui informasi selengkapnya tentang codec audio Speech-to-Text, lihat dokumentasi referensi AudioEncoding.

Jika Anda memiliki pilihan saat mengenkode materi sumber, gunakan encoding lossless seperti FLAC atau LINEAR16 untuk pengenalan ucapan yang lebih baik.

Fitur Speech-to-Text

Speech-to-Text di Distributed Cloud memiliki tiga metode berikut untuk melakukan pengenalan ucapan:

  • Pengenalan sinkron: mengirimkan data audio ke Speech-to-Text API, melakukan pengenalan pada data tersebut, dan menampilkan hasil setelah pemrosesan audio. Permintaan pengenalan sinkron dibatasi untuk data audio berdurasi satu menit atau kurang.

  • Pengenalan asinkron: mengirimkan data audio ke Speech-to-Text API dan memulai operasi yang berjalan lama. Dengan operasi ini, Anda dapat melakukan polling hasil pengenalan secara berkala. Gunakan permintaan asinkron untuk data audio dengan durasi hingga 480 menit.

  • Pengenalan streaming: melakukan pengenalan pada data audio yang disediakan dalam aliran dua arah. Permintaan streaming didesain untuk tujuan pengenalan real-time, seperti merekam audio live dari mikrofon. Pengenalan streaming memberikan hasil sementara saat audio direkam, sehingga hasil dapat muncul, misalnya, saat pengguna masih berbicara.

Permintaan berisi parameter konfigurasi dan data audio. Bagian berikut menjelaskan permintaan pengenalan ini, respons yang dihasilkannya, dan cara menangani respons tersebut secara lebih mendetail.

Permintaan dan respons sinkron

Permintaan pengenalan sinkron Speech-to-Text adalah metode paling sederhana untuk melakukan pengenalan atas data audio ucapan. Speech-to-Text dapat memproses data audio ucapan berdurasi hingga satu menit yang dikirim dalam permintaan sinkron. Setelah Speech-to-Text memproses dan mengenali semua audio, Speech-to-Text akan menampilkan respons.

Speech-to-Text harus menampilkan respons sebelum memproses permintaan berikutnya. Speech-to-Text biasanya memproses audio lebih cepat daripada waktu sebenarnya, rata-rata memproses audio berdurasi 30 detik dalam 15 detik. Jika kualitas audio buruk, permintaan pengenalan Anda dapat memerlukan waktu jauh lebih lama.

Permintaan pengenalan ucapan

Permintaan Speech-to-Text API sinkron terdiri dari konfigurasi pengenalan ucapan dan data audio. Contoh berikut menunjukkan permintaan:

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

Semua permintaan pengenalan sinkron Speech-to-Text harus menyertakan kolom config pengenalan ucapan berjenis RecognitionConfig. Objek RecognitionConfig berisi sub-kolom wajib berikut:

  • encoding: menentukan skema encoding untuk audio yang disediakan. Kolom ini berjenis AudioEncoding. Jika memiliki pilihan codec, sebaiknya Anda menggunakan encoding lossless seperti FLAC atau LINEAR16 untuk performa terbaik. Untuk mengetahui daftar format encoding audio yang didukung, lihat Encoding audio yang didukung untuk Speech-to-Text. Kolom encoding bersifat opsional untuk file FLAC dan WAV, yang menyertakan encoding dalam header file.
  • sample_rate_hertz: menentukan frekuensi sampel audio yang disediakan dalam Hertz. Untuk mengetahui informasi selengkapnya tentang frekuensi sampel, lihat Frekuensi sampel. Kolom sample_rate_hertz bersifat opsional untuk file FLAC dan WAV, yang mencakup frekuensi sampel dalam header file.
  • language_code: berisi bahasa dan wilayah yang akan digunakan untuk pengenalan ucapan audio yang disediakan. Kode bahasa harus berupa ID BCP-47. Kode bahasa terdiri dari tag bahasa primer dan subtag wilayah sekunder untuk menunjukkan dialek. Dalam contoh, en adalah untuk bahasa Inggris, dan US adalah untuk Amerika Serikat. Untuk mengetahui daftar bahasa yang didukung, lihat Bahasa yang didukung.

Untuk mengetahui informasi selengkapnya dan deskripsi sub-kolom opsional yang dapat Anda sertakan dalam kolom config, lihat RecognitionConfig.

Berikan audio ke Speech-to-Text melalui parameter audio dari jenis RecognitionAudio. Kolom audio berisi sub-kolom berikut:

  • content: berisi audio yang akan dievaluasi, yang disematkan ke dalam permintaan. Byte data audio dienkode menggunakan representasi biner murni. Representasi JSON menggunakan Base64. Lihat Konten audio yang disematkan untuk mengetahui informasi selengkapnya. Durasi audio yang diteruskan langsung dalam kolom ini dibatasi maksimal satu menit.

Frekuensi sampel

Anda harus menentukan frekuensi sampel audio di kolom sample_rate_hertz konfigurasi permintaan, yang harus cocok dengan frekuensi sampel konten audio yang terkait. Speech-to-Text mendukung frekuensi sampel antara 8.000 Hz dan 48.000 Hz. Anda dapat menentukan frekuensi sampel untuk file FLAC atau WAV di header file, bukan menggunakan kolom sample_rate_hertz. Namun, kolom sample_rate_hertz wajib diisi untuk semua format audio lainnya.

Jika Anda memiliki pilihan saat mengenkode materi sumber, rekam audio menggunakan frekuensi sampel 16.000 Hz. Nilai yang lebih rendah dapat mengganggu akurasi pengenalan ucapan, dan tingkat yang lebih tinggi tidak memiliki pengaruh yang signifikan terhadap kualitas pengenalan ucapan.

Namun, jika Anda merekam data audio dengan frekuensi sampel selain 16.000 Hz, jangan lakukan resampling pada audio menjadi 16.000 Hz. Sebagian besar audio telepon lama, misalnya, menggunakan frekuensi sampel 8.000 Hz, yang mungkin memberikan hasil yang kurang akurat. Jika Anda harus menggunakan audio tersebut, berikan audio tersebut ke Speech-to-Text API dengan frekuensi sampel aslinya.

Bahasa

Mesin pengenalan Speech-to-Text mendukung berbagai bahasa dan dialek. Tentukan bahasa (dan dialek nasional atau regional) audio Anda dalam kolom language_code pada konfigurasi permintaan menggunakan ID BCP-47.

Halaman Bahasa yang didukung memiliki daftar lengkap bahasa yang didukung untuk setiap fitur.

Pemilihan model

Saat mengirim permintaan transkripsi audio ke Speech-to-Text, Anda dapat memproses file audio menggunakan model machine learning yang dilatih untuk mengenali audio ucapan dari jenis sumber tertentu.

Untuk menentukan model pengenalan ucapan, sertakan kolom model dalam objek RecognitionConfig untuk permintaan Anda, dengan menentukan model yang ingin digunakan.

Speech-to-Text di Distributed Cloud mendukung dua model berikut:

  • default: mentranskripsikan audio yang bukan model audio tertentu, seperti audio panjang.
  • chirp: mentranskripsikan audio multibahasa saat memerlukan akurasi yang lebih tinggi. Chirp melakukan pengenalan ucapan otomatis dalam banyak bahasa, bahkan jika bahasa tersebut adalah bahasa dengan sumber daya rendah yang tidak memiliki banyak data berlabel yang tersedia untuk pelatihan.

Konten audio yang disematkan

Audio tersemat disertakan dalam permintaan pengenalan ucapan saat meneruskan parameter content dalam kolom audio permintaan. Untuk audio tersemat yang disediakan sebagai konten dalam permintaan REST, audio tersebut harus kompatibel dengan serialisasi JSON.

Anda dapat mengirim data secara langsung di kolom content untuk pengenalan sinkron hanya jika data audio Anda maksimum 60 detik dan 10 MB. Setiap data audio di kolom content harus dalam format Base64.

Saat membuat permintaan menggunakan library klien, Anda menulis data biner atau berenkode Base64 ini langsung dalam kolom content.

Sebagian besar lingkungan pengembangan dilengkapi dengan utilitas base64 untuk mengenkode biner ke dalam data teks ASCII, sehingga Anda memiliki alat dan dukungan yang diperlukan. Selain itu, Python memiliki mekanisme bawaan untuk konten encoding Base64. Contoh berikut menunjukkan cara mengenkode file:

Linux

Enkode file menggunakan alat command line base64. Cegah penggabungan baris dengan menggunakan flag -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

Di Python, Base64 mengenkode file audio sebagai berikut:

# 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)

Respons pengenalan ucapan

Respons Speech-to-Text API sinkron mungkin memerlukan waktu beberapa saat untuk menampilkan hasil. Setelah diproses, API akan menampilkan respons seperti dalam contoh berikut:

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

Semua respons pengenalan sinkron Speech-to-Text API menyertakan hasil pengenalan ucapan jenis RecognizeResponse. Objek RecognizeResponse berisi kolom berikut:

  • results: berisi daftar hasil berjenis SpeechRecognitionResult, dengan setiap hasil sesuai dengan satu segmen audio. Setiap hasil terdiri dari satu atau beberapa sub-kolom berikut:

    • alternatives: berisi daftar kemungkinan transkripsi jenis SpeechRecognitionAlternative. Alternatif pertama dalam respons selalu merupakan alternatif yang paling mungkin. Setiap alternatif terdiri dari sub-kolom berikut:

      • transcript: berisi teks yang ditranskripsikan. Jika alternatif berurutan disediakan, Anda dapat menyambung transkripsi tersebut.
      • words: berisi daftar informasi spesifik per kata untuk setiap kata yang dikenali.

Untuk informasi selengkapnya, lihat RecognizeResponse.

Permintaan dan respons asinkron

Permintaan Speech-to-Text API asinkron memiliki format yang sama persis dengan permintaan sinkron. Namun, alih-alih menampilkan respons, permintaan asinkron akan memulai operasi yang berjalan lama dan segera menampilkan operasi ini. Anda dapat menggunakan pengenalan ucapan asinkron dengan audio yang berdurasi maksimal 480 menit.

Berikut adalah contoh respons operasi:

{
  "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"
  }
}

Perhatikan bahwa hasil belum ditampilkan. Speech-to-Text terus memproses audio dan menggunakan operasi ini untuk menyimpan hasilnya. Hasil akan muncul di kolom response dari operasi yang ditampilkan setelah permintaan LongRunningRecognize selesai.

Berikut adalah contoh respons lengkap setelah permintaan selesai:

{
  "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
}

Perhatikan bahwa done ditetapkan ke True dan response operasi ini berisi sekumpulan hasil dengan jenis SpeechRecognitionResult—sama dengan jenis yang ditampilkan oleh permintaan pengenalan sinkron.

Permintaan dan respons streaming

Panggilan pengenalan Speech-to-Text API streaming dirancang untuk perekaman dan pengenalan audio secara real-time dalam aliran data dua arah. Aplikasi Anda dapat mengirim audio pada aliran data permintaan dan menerima hasil pengenalan sementara dan akhir secara real-time pada aliran data respons. Hasil sementara mewakili hasil pengenalan saat ini untuk suatu bagian audio, sedangkan hasil pengenalan final mewakili tebakan terakhir dan terbaik untuk bagian audio tersebut.

Permintaan pengenalan streaming

Tidak seperti panggilan sinkron dan asinkron, di mana Anda mengirim konfigurasi dan audio dalam satu permintaan, panggilan Speech-to-Text API streaming mengharuskan pengiriman beberapa permintaan. StreamingRecognizeRequest pertama harus berisi konfigurasi jenis StreamingRecognitionConfig.

StreamingRecognitionConfig terdiri dari kolom config, yang berisi informasi konfigurasi untuk audio berjenis RecognitionConfig dan sama dengan yang ditampilkan dalam permintaan sinkron dan asinkron.

Respons pengenalan saat streaming

Hasil pengenalan ucapan streaming menampilkan serangkaian respons jenis StreamingRecognizeResponse. Respons tersebut terdiri atas kolom berikut:

  • speech_event_type: berisi peristiwa jenis SpeechEventType. Nilai peristiwa ini menunjukkan kapan sebuah ucapan tunggal telah selesai. Peristiwa ucapan berfungsi sebagai penanda dalam respons aliran data Anda.
  • results: berisi daftar hasil, yang dapat berupa hasil sementara atau akhir dengan jenis StreamingRecognitionResult. Daftar results mencakup sub-kolom berikut:
    • alternatives: berisi daftar transkripsi alternatif.
    • is_final: menunjukkan apakah hasil yang diperoleh dalam entri daftar ini bersifat sementara atau final.
    • result_end_time: menunjukkan selisih waktu akhir hasil ini relatif terhadap awal audio.

Chirp: Model ucapan universal

Chirp adalah model Speech-to-Text generasi berikutnya di Google Distributed Cloud (GDC) dengan air gap. Merepresentasikan versi Universal Speech Model, Chirp memiliki lebih dari 2 miliar parameter dan dapat mentranskripsikan banyak bahasa dalam satu model.

Anda dapat mentranskripsikan file audio dalam bahasa lain yang didukung dengan mengaktifkan komponen Chirp.

Chirp mencapai Tingkat Kesalahan Kata (WER) canggih pada berbagai set pengujian dan bahasa publik, serta menawarkan dukungan multibahasa di Distributed Cloud. Model ini menggunakan encoder universal yang melatih model dengan arsitektur yang berbeda dari model ucapan saat ini, menggunakan data dalam banyak bahasa lain. Model ini kemudian di-fine-tune untuk menawarkan transkripsi dalam bahasa tertentu. Satu model menyatukan data dari beberapa bahasa. Namun, pengguna tetap menentukan model akan mengenali ucapan dalam bahasa yang dipilih.

Chirp memproses ucapan dalam potongan yang jauh lebih besar daripada model lain. Hasil hanya tersedia setelah seluruh ucapan selesai, yang berarti Chirp mungkin tidak cocok untuk penggunaan real-time yang sesungguhnya.

ID model untuk Chirp adalah chirp. Oleh karena itu, Anda dapat menetapkan nilai chirp di kolom model untuk objek RecognitionConfig permintaan.

Metode API yang tersedia

Chirp mendukung metode Speech-to-Text API Recognize dan StreamingRecognize.

Kedua metode ini berbeda karena StreamingRecognize hanya menampilkan hasil setelah setiap ucapan. Oleh karena itu, metode ini memiliki latensi dalam urutan detik, bukan milidetik setelah memulai ucapan, dibandingkan dengan metode Recognize. Namun, StreamingRecognize memiliki latensi yang sangat rendah setelah ucapan selesai, misalnya, dalam kalimat yang diikuti dengan jeda.