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 berjenisAudioEncoding
. Jika memiliki pilihan codec, sebaiknya Anda menggunakan encoding lossless sepertiFLAC
atauLINEAR16
untuk performa terbaik. Untuk mengetahui daftar format encoding audio yang didukung, lihat Encoding audio yang didukung untuk Speech-to-Text. Kolomencoding
bersifat opsional untuk fileFLAC
danWAV
, 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. Kolomsample_rate_hertz
bersifat opsional untuk fileFLAC
danWAV
, 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, danUS
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 berjenisSpeechRecognitionResult
, dengan setiap hasil sesuai dengan satu segmen audio. Setiap hasil terdiri dari satu atau beberapa sub-kolom berikut:alternatives
: berisi daftar kemungkinan transkripsi jenisSpeechRecognitionAlternative
. 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 jenisSpeechEventType
. 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 jenisStreamingRecognitionResult
. Daftarresults
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.