Speech-to-Text는 Google Distributed Cloud (GDC) 에어갭에 있는 3개의 Vertex AI 사전 학습된 API 중 하나입니다. Speech-to-Text 서비스는 오디오 파일의 음성을 인식하고 오디오를 텍스트로 변환합니다. Speech-to-Text는 데이터 상주 및 규정 준수 요구사항을 충족합니다.
다음 표에서는 텍스트 변환의 주요 기능을 설명합니다.
주요 기능 | |
---|---|
스크립트 작성 | 자동 음성 인식에 첨단 딥 러닝 신경망 알고리즘을 적용합니다. |
모델 | 크기가 1GB 미만이며 리소스를 최소한으로 사용하는 인식 모델을 배포합니다. |
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 인코딩된 오디오 프레임 | 아니요 | 샘플링 레이트가 8000Hz, 12000Hz, 16000Hz, 24000Hz, 48000Hz 중 하나여야 함 |
FLAC
는 오디오 코덱이면서 오디오 파일 형식입니다. FLAC
인코딩을 사용하여 오디오 파일을 텍스트로 변환하려면 메타데이터가 있는 헤더가 포함된 .FLAC
파일 형식으로 제공해야 합니다.
Speech-to-Text는 LINEAR16
또는 MULAW
인코딩 오디오가 있는 WAV
파일을 지원합니다.
Speech-to-Text 오디오 코덱에 대한 자세한 내용은 AudioEncoding
참조 문서를 확인하세요.
소스 자료를 인코딩할 때 선택할 수 있는 경우, 음성 인식 향상을 위해 FLAC
또는 LINEAR16
과 같은 무손실 인코딩을 사용하세요.
Speech-to-Text 기능
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는 일반적으로 실시간보다 빠르게 오디오를 처리하며, 30초 길이의 오디오를 평균 15초 내에 처리합니다. 오디오 품질이 나쁘면 인식 요청을 처리하는 데 시간이 상당히 오래 걸릴 수 있습니다.
음성 인식 요청
동기식 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
: 제공된 오디오의 샘플링 레이트(Hz)를 지정합니다. 샘플링 레이트에 대한 자세한 내용은 샘플링 레이트를 참고하세요. 파일 헤더에 샘플링 레이트가 포함된FLAC
및WAV
파일의 경우sample_rate_hertz
필드는 필수가 아닌 선택사항입니다.language_code
: 제공된 오디오의 음성 인식에 사용할 언어와 리전을 포함합니다. 언어 코드는 BCP-47 식별자여야 합니다. 언어 코드는 방언을 나타내는 기본 언어 태그와 보조 지역 하위 태그로 구성됩니다. 이 예에서en
는 영어,US
는 미국을 나타냅니다. 지원되는 언어 목록은 지원되는 언어를 참고하세요.
config
필드에 포함할 수 있는 선택적 하위 필드에 대한 자세한 내용과 설명은 RecognitionConfig
를 참고하세요.
RecognitionAudio
유형의 audio
매개변수를 통해 Speech-to-Text에 오디오를 제공합니다.
audio
필드에는 다음 하위 필드가 포함됩니다.
content
: 요청에 삽입된 형태의 평가 대상 오디오입니다. 오디오 데이터 바이트는 순수 바이너리 표현을 사용하여 인코딩됩니다. JSON 표현은 Base64를 사용합니다. 자세한 내용은 삽입된 오디오 콘텐츠를 참고하세요. 이 필드에서 직접 전달되는 오디오 길이는 1분으로 제한됩니다.
샘플링 레이트
요청 구성의 sample_rate_hertz
필드에서 오디오의 샘플링 레이트를 지정합니다. 이 샘플링 레이트는 연결된 오디오 콘텐츠의 샘플링 레이트와 일치해야 합니다. Speech-to-Text는 8,000Hz~48,000Hz의 샘플링 레이트를 지원합니다. sample_rate_hertz
필드를 사용하는 대신 파일 헤더에 FLAC
또는 WAV
파일의 샘플링 레이트를 지정할 수 있습니다. 하지만 다른 모든 오디오 형식에는 sample_rate_hertz
필드가 필요합니다.
소스 자료를 인코딩할 때 선택할 수 있다면 16, 000Hz 샘플링 레이트를 사용하여 오디오를 캡처하는 것이 좋습니다. 값이 이 값보다 낮으면 음성 인식 정확도가 손상될 수 있으며, 레벨이 높아도 음성 인식 품질에 큰 영향을 주지 않습니다.
그러나 오디오 데이터를 16,000Hz가 아닌 샘플링 레이트로 녹음한 경우에는 오디오를 16,000Hz로 다시 샘플링하지 마세요. 예를 들어 대부분의 기존 전화 통화 오디오는 8,000Hz 샘플링 레이트를 사용하므로 결과 정확도가 떨어질 수 있습니다. 이러한 오디오를 사용해야 하는 경우 원래 샘플링 레이트로 Speech-to-Text API에 제공합니다.
언어
Speech-to-Text의 인식 엔진은 다양한 언어와 방언을 지원합니다. 요청 구성의 language_code
필드에서 BCP-47 식별자를 사용하여 오디오의 언어 (및 국가별 또는 지역별 방언)를 지정합니다.
지원되는 언어 페이지에는 각 기능에 지원되는 언어의 전체 목록이 나와 있습니다.
모델 선택
Speech-to-Text에 오디오 텍스트 변환 요청을 보낼 때 특정 소스 유형의 음성 오디오를 인식하도록 학습된 머신러닝 모델을 사용하여 오디오 파일을 처리할 수 있습니다.
음성 인식 모델을 지정하려면 요청의 RecognitionConfig
객체에 model
필드를 포함하여 사용할 모델을 지정합니다.
Distributed Cloud의 Speech-to-Text는 다음 두 모델을 지원합니다.
default
: 특정 오디오 모델이 아닌 오디오(예: 긴 형식 오디오)를 텍스트로 변환합니다.chirp
: 정확도가 더 필요한 경우 다국어 오디오를 텍스트로 변환합니다. Chirp는 학습에 사용할 수 있는 라벨이 지정된 데이터가 많지 않은 리소스 부족 언어인 경우에도 여러 언어로 자동 음성 인식을 실행합니다.
삽입된 오디오 콘텐츠
요청의 audio
필드 내에 content
매개변수를 전달하면 삽입된 오디오가 음성 인식 요청에 포함됩니다. REST 요청 내에서 콘텐츠로 제공되는 삽입된 오디오의 경우, 해당 오디오는 JSON 직렬화와 호환되어야 합니다.
오디오 데이터가 최대 60초 10MB인 경우에만 동기식 인식을 위해 content
필드에 데이터를 직접 보낼 수 있습니다. content
필드의 모든 오디오 데이터는 Base64 형식이어야 합니다.
클라이언트 라이브러리를 사용하여 요청을 작성하는 경우 이 바이너리 또는 Base64로 인코딩된 데이터를 content
필드에 직접 작성합니다.
대부분의 개발 환경에는 바이너리를 ASCII 텍스트 데이터로 인코딩하는 base64
유틸리티가 포함되어 있어 필요한 도구와 지원을 제공합니다.
또한 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
는 RecognitionConfig
유형의 오디오 구성 정보를 포함하며 동기식 및 비동기식 요청에 표시되는 것과 동일한 config
필드로 구성됩니다.
스트리밍 인식 응답
스트리밍 음성 인식 결과는 StreamingRecognizeResponse
유형의 일련의 응답을 반환합니다.
이러한 응답은 다음 필드로 구성됩니다.
speech_event_type
:SpeechEventType
유형의 이벤트를 포함합니다. 이러한 이벤트 값은 단일 발화가 완료된 시점을 나타냅니다. 음성 이벤트는 스트림 응답 내에서 마커로 작동합니다.results
:StreamingRecognitionResult
형식의 중간 또는 최종 결과인 결과 목록이 포함됩니다.results
목록에는 다음과 같은 하위 필드가 포함됩니다.alternatives
: 대체 변환 텍스트 목록이 포함됩니다.is_final
: 이 목록 항목에서 얻은 결과가 중간 또는 최종 결과인지 나타냅니다.result_end_time
: 오디오 시작을 기준으로 이 결과가 끝나는 시점의 시간 오프셋을 나타냅니다.
Chirp: 범용 음성 모델
Chirp은 에어 갭이 적용된 Google Distributed Cloud (GDC)의 차세대 Speech-to-Text 모델입니다. 범용 음성 모델의 버전을 나타내는 Chirp에는 20억 개 이상의 매개변수가 있으며 단일 모델에서 여러 언어를 텍스트로 변환할 수 있습니다.
Chirp 구성요소를 사용 설정하면 지원되는 다른 언어로 오디오 파일을 텍스트로 변환할 수 있습니다.
Chirp는 다양한 공개 테스트 세트와 언어에서 최첨단 단어 오류율 (WER)을 달성하며, 분산 클라우드에서 다국어 지원을 제공합니다. 이 모델은 현재 음성 모델과 다른 아키텍처로 모델을 학습시키는 범용 인코더를 사용하며, 다양한 언어의 데이터를 사용합니다. 그런 다음 모델을 미세 조정하여 특정 언어의 텍스트 변환을 제공합니다. 단일 모델은 여러 언어의 데이터를 통합합니다. 하지만 사용자는 여전히 모델이 음성을 인식해야 하는 언어를 지정합니다.
Chirp은 다른 모델보다 훨씬 큰 단위로 음성을 처리합니다. 결과는 전체 발화가 끝난 후에만 제공되므로 Chirp은 실제 실시간 사용에는 적합하지 않을 수 있습니다.
Chirp의 모델 식별자는 chirp
입니다. 따라서 요청의 RecognitionConfig
객체의 model
필드에 chirp
값을 설정할 수 있습니다.
사용 가능한 API 메서드
Chirp는 Recognize
및 StreamingRecognize
Speech-to-Text API 메서드를 모두 지원합니다.
StreamingRecognize
는 발화가 끝난 후에만 결과를 반환하므로 두 메서드는 서로 다릅니다. 따라서 이 메서드는 Recognize
메서드와 비교할 때 음성 시작 후 지연 시간이 밀리초가 아닌 초 단위입니다. 하지만 StreamingRecognize
는 발화가 끝난 후(예: 문장 뒤에 일시중지가 오는 경우) 대기 시간이 매우 짧습니다.