Speech-to-Text 是 Google Distributed Cloud (GDC) 氣隙隔離環境中的三項 Vertex AI 預先訓練 API 之一。Speech-to-Text 服務可辨識音訊檔案中的語音,並將音訊轉錄成文字。文字轉語音服務符合資料落地和法規遵循規定。
下表說明 Speech-to-Text 的主要功能:
主要功能 | |
---|---|
語音轉錄 | 運用先進的深度學習類神經網路演算法,提供自動語音辨識功能。 |
模型 | 部署小於 1 GB 且耗用最少資源的辨識模型。 |
與 API 相容 | 使用 Speech-to-Text API 和其用戶端程式庫傳送音訊,並接收 Speech-to-Text 服務傳回的文字轉錄內容。 |
Speech-to-Text 支援的音訊編碼
Speech-to-Text API 支援一些不同的編碼方式。下表列出支援的音訊轉碼器:
轉碼器 | 名稱 | 無損 | 使用須知 |
---|---|---|---|
FLAC |
自由無損音訊轉碼器 | 是 | 串流需要 16 位元或 24 位元 |
LINEAR16 |
線性 PCM | 是 | 16 位元線性脈衝編碼調變 (PCM) 編碼。標頭必須包含取樣率。 |
MULAW |
μ-law | 否 | 8 位元 PCM 編碼 |
OGG_OPUS |
位於 Ogg 容器中並採 Opus 編碼的音訊 | 否 | 取樣率必須為 8000 Hz、12000 Hz、16000 Hz、24000 Hz 或 48000 Hz 之一 |
FLAC
既是音訊轉碼器,也是音訊檔案格式。如要使用 FLAC
編碼轉錄音訊檔案,您必須提供 .FLAC
檔案格式的音訊檔案,包括內含中繼資料的標頭。
Speech-to-Text 支援 WAV
檔案,以及 LINEAR16
或 MULAW
編碼音訊。
如要進一步瞭解 Speech-to-Text 音訊轉碼器,請參閱AudioEncoding
參考說明文件。
如果您在編碼來源材料時可以選擇,請使用例如 FLAC
或 LINEAR16
等無損編碼方式,以獲得更佳的語音辨識效果。
語音轉文字功能
Distributed Cloud 上的 Speech-to-Text 提供下列三種語音辨識方法:
同步辨識:將音訊資料傳送至 Speech-to-Text API,對該資料執行辨識,並在音訊處理完成後傳回結果。同步辨識要求的音訊資料時間長度上限不超過 1 分鐘。
非同步辨識:將音訊資料傳送至 Speech-to-Text API,並啟動長時間執行的作業。 您可以使用這個作業,對辨識結果進行定期輪詢。請針對任何長度最多為 480 分鐘的音訊資料使用非同步要求。
串流辨識:對雙向串流中提供的音訊資料執行辨識。串流要求的用途是即時辨識,例如擷取麥克風的即時音訊。串流辨識會在擷取音訊時提供暫時結果,進而在例如使用者還在說話時顯示結果。
要求包含設定參數和音訊資料。下列各節將詳細說明這些辨識要求、產生的回應,以及如何處理這些回應。
同步要求和回應
Speech-to-Text 同步辨識要求是對語音資料執行辨識最簡單的方法。Speech-to-Text 可處理同步要求中所傳送最長 1 分鐘的語音資料。Speech-to-Text 處理及辨識所有音訊之後,會傳回回應。
Speech-to-Text 必須先傳回回應,才能處理下一個要求。Speech-to-Text 處理音訊的速度通常比即時要快,平均 15 秒處理 30 秒的音訊。如果音訊品質不佳,您的辨識要求可能會花費相當長的時間。
語音辨識要求
同步 Speech-to-Text API 要求包含語音辨識設定和音訊資料。以下範例顯示要求:
{
"config": {
"encoding": "LINEAR16",
"sample_rate_hertz": 16000,
"language_code": "en-US",
},
"audio": {
"content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
}
}
所有 Speech-to-Text 同步辨識要求都必須包含類型為 RecognitionConfig
的語音辨識 config
欄位。RecognitionConfig
物件包含下列必要子欄位:
encoding
:指定所提供音訊的編碼配置。這個欄位的類型為AudioEncoding
。如果可以選擇轉碼器,建議使用FLAC
或LINEAR16
等無損編碼方式,以獲得最佳效能。如需支援的音訊編碼格式清單,請參閱「Speech-to-Text 支援的音訊編碼」。針對編碼包含在檔案標頭中的FLAC
與WAV
檔案,您可以選擇是否要使用encoding
欄位。sample_rate_hertz
:指定所提供音訊的取樣率 (單位為赫茲)。如要進一步瞭解取樣率,請參閱「取樣率」。針對檔案標頭包含取樣率的FLAC
和WAV
檔案,您可以選擇是否要使用sample_rate_hertz
欄位。language_code
:包含用於所提供音訊語音辨識的語言和地區。語言代碼必須為 BCP-47 ID。語言代碼由主要語言標記與次要地區子標記組成,用於表示方言。在範例中,en
代表英文,US
則代表美國。如需支援的語言清單,請參閱「支援的語言」。
如要進一步瞭解及查看可納入 config
欄位的選用子欄位說明,請參閱 RecognitionConfig
。
透過 RecognitionAudio
類型的 audio
參數,將音訊提供給 Speech-to-Text。
audio
欄位包含下列子欄位:
content
:包含要評估的音訊,且嵌入在要求中。音訊資料位元組會以純二進位表示法編碼。JSON 表示法使用 Base64。詳情請參閱「嵌入音訊內容」。在這個欄位內直接傳送的音訊內容時間長度上限為 1 分鐘。
取樣率
您可以在要求設定的 sample_rate_hertz
欄位中指定音訊的取樣率,且它必須與相關聯音訊內容的取樣率相符。Speech-to-Text 支援介於 8000 Hz 和 48000 Hz 之間的取樣率。您可以在檔案標頭中指定 FLAC
或 WAV
檔案的取樣率,而不必使用 sample_rate_hertz
欄位。不過,所有其他音訊格式都必須填寫 sample_rate_hertz
欄位。
如果可以選擇編碼來源材料的方式,請使用 16000 Hz 的取樣率擷取音訊。取樣率過低可能會影響語音辨識準確度,取樣率過高則對語音辨識品質沒有明顯影響。
不過,如果音訊資料是以 16000 Hz 以外的取樣率錄製,請勿將音訊重新取樣為 16000 Hz。舉例來說,大多數舊版電話音訊使用的取樣率為 8000 Hz,這可能會導致結果準確度降低。如果必須使用這類音訊,請以原始取樣率提供給 Speech-to-Text API。
語言
Speech-to-Text 的辨識引擎支援各種語言與方言。您可以在要求設定的 language_code
欄位內,使用 BCP-47 ID 指定音訊的語言 (以及國家或地區方言)。
如需各項功能支援的語言完整清單,請參閱「支援的語言」頁面。
多種模型供您選擇
傳送音訊轉錄要求至 Speech-to-Text 時,您可以透過經過訓練的機器學習模型處理音訊檔案,辨識來自特定來源類型的語音。
如要為語音辨識指定模型,請將 model
欄位加入要求的 RecognitionConfig
物件中,即可指定要使用的模型。
Distributed Cloud 上的語音轉文字服務支援下列兩種模型:
default
:轉錄非特定音訊模型 (例如長篇音訊) 的音訊。chirp
:需要較高的準確度時,轉錄多語言音訊。 Chirp 支援多種語言的自動語音辨識,即使是資源較少的語言,沒有大量標記資料可供訓練,也能順利辨識。
嵌入的音訊內容
在要求的 audio
欄位中傳遞 content
參數時,語音辨識要求會納入內嵌音訊。如果嵌入音訊並以 REST 要求中的內容形式提供,該音訊必須與 JSON 序列化相容。
只有在音訊資料最多 60 秒和 10 MB 時,才能直接在 content
欄位中傳送資料,進行同步辨識。content
欄位中的所有音訊資料都必須採用 Base64 格式。
使用用戶端程式庫建構要求時,您會直接在 content
欄位中填入這項二進位或 Base64 編碼資料。
大多數開發環境都隨附 base64
公用程式,可將二進位編碼為 ASCII 文字資料,提供您必要的工具和支援。此外,Python 內建 Base64 編碼內容的機制。下列範例說明如何編碼檔案:
Linux
使用 base64
指令列工具編碼檔案。使用 -w 0
標記防止換行:
base64 INPUT_FILE -w 0 > OUTPUT_FILE
Python
在 Python 中,Base64 編碼的音訊檔如下:
# 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)
語音辨識回應
同步 Speech-to-Text API 回應可能需要一段時間才能傳回結果。處理完畢後,API 會傳回類似下列範例的回應:
{
"results": [
{
"alternatives": [
{
"transcript": "how old is the Brooklyn Bridge",
"words": [
{
"word": "how"
},
{
"word": "old"
},
{
"word": "is"
},
{
"word": "the"
},
{
"word": "Brooklyn"
},
{
"word": "Bridge"
}
]
}
]
}
]
}
所有 Speech-to-Text API 同步辨識回應都包含 RecognizeResponse
類型的語音辨識結果。RecognizeResponse
物件包含下列欄位:
results
:包含SpeechRecognitionResult
類型的結果清單,當中每一項結果都會對應到一段音訊。每項結果都是由下列一或多個子欄位組成:alternatives
:包含可能的轉錄清單 (類型為SpeechRecognitionAlternative
)。回應中的第一個替代轉錄一律為最可能的結果。每個替代轉錄都包含下列子欄位:transcript
:包含轉錄的文字。如果系統提供連續替代方案,您可以將這些轉錄內容串連在一起。words
:包含每個辨識字詞的字詞特定資訊清單。
詳情請參閱 RecognizeResponse
。
非同步要求和回應
非同步 Speech-to-Text API 要求的形式與同步要求相同。不過,非同步要求不會傳回回應,而是啟動長時間執行的作業,並立即傳回這項作業。非同步語音辨識功能支援長度最多 480 分鐘的音訊。
以下是作業回應範例:
{
"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"
}
}
請注意,目前尚未顯示任何結果。Speech-to-Text 會繼續處理音訊,並使用這項作業儲存結果。LongRunningRecognize
要求完成時,結果會顯示在傳回作業的 response
欄位中。
要求完成後的完整回應如下所示:
{
"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
}
請注意,done
已設為 True
,且作業的 response
包含一組類型為 SpeechRecognitionResult
的結果,這種類型與同步辨識要求傳回的類型相同。
串流要求和回應
串流 Speech-to-Text API 辨識呼叫的用途是即時擷取雙向串流中的音訊並進行辨識。應用程式可以在要求串流中傳送音訊,並在回應串流中接收即時的暫時和最終辨識結果。暫時結果代表音訊片段的目前辨識結果,最終辨識結果則代表該音訊片段的最後最佳猜測。
串流辨識要求
與同步和非同步呼叫不同,您在同步和非同步呼叫中,會在單一要求中傳送設定和音訊,但呼叫串流 Speech-to-Text API 時,則需要傳送多個要求。第一個 StreamingRecognizeRequest
必須包含類型為 StreamingRecognitionConfig
的設定。
StreamingRecognitionConfig
包含 config
欄位,其中含有音訊的設定資訊 (類型為 RecognitionConfig
),且與同步和非同步要求內顯示的設定相同。
串流辨識回應
串流語音辨識結果會傳回一系列 StreamingRecognizeResponse
類型的回應。這類回應包含下列欄位:
speech_event_type
:包含SpeechEventType
類型的事件。這類事件的值會指出何時將單一語音內容判斷為已完成。語音事件會在您的串流回應中做為標記使用。results
:包含結果清單,這些結果可能為暫時結果,也可能為類型StreamingRecognitionResult
的最終結果。results
清單包含下列子欄位:alternatives
:包含替代轉錄的清單。is_final
:表示在這個清單項目內取得的結果是暫時結果還是最終結果。result_end_time
:表示這項結果的結束時間偏移值 (相對於音訊開頭)。
Chirp:通用語音模型
Chirp 是 Google Distributed Cloud (GDC) 氣隙隔離環境中的新一代語音轉文字模型。Chirp 是通用語音模型的一個版本,包含超過 20 億個參數,並能以單一模型轉錄多種語言。
如要轉錄其他支援的語言的音訊檔案,請啟用 Chirp 元件。
Chirp 在各種公開測試集和語言中,都能達到頂尖的字詞錯誤率 (WER),並在 Distributed Cloud 上提供多語言支援。這項技術採用通用編碼器,以不同於現有語音模型的架構訓練模型,並使用多種其他語言的資料。接著微調模型,提供特定語言的轉錄服務。單一模型可整合多種語言的資料。不過,使用者仍須指定模型辨識語音的語言。
Chirp 處理語音時,會將語音切分成比其他模型更大的區塊。只有在完整說完話後,系統才會提供結果,因此 Chirp 可能不適合用於真正的即時通訊。
Chirp 的型號 ID 為 chirp
。因此,您可以在要求 RecognitionConfig
物件的 model
欄位中設定 chirp
值。
可用的 API 方法
Chirp 支援 Recognize
和 StreamingRecognize
Speech-to-Text API 方法。
這兩種方法有所不同,因為 StreamingRecognize
只會在每次發言後傳回結果。因此,與 Recognize
方法相比,這個方法在開始說話後,延遲時間會以秒為單位,而非毫秒。不過,StreamingRecognize
在語音結束後 (例如句子後方有停頓) 的延遲時間非常短。