이 문서는 Speech-to-Text 사용에 대한 기본사항을 설명하는 가이드입니다. 이 개념 가이드는 Speech-to-Text에 보낼 수 있는 요청 유형, 해당 요청 작성 방법, 응답 처리 방법을 설명합니다. Speech-to-Text의 모든 사용자는 이 API를 사용하기 전에 이 가이드와 관련 가이드 중 하나를 읽는 것이 좋습니다.
Speech-to-Text 인식 요청
Speech-to-Text에는 음성 인식을 수행하는 세 가지 주요 방법이 있습니다. 이들 방법은 다음과 같습니다.
동기 인식(REST, gRPC)은 오디오 데이터를 Speech-to-Text API로 보내고 해당 데이터를 인식하고 모든 오디오가 처리된 후에 결과를 반환합니다. 동기식 인식 요청 대상은 길이가 1분 이하인 오디오 데이터로 제한됩니다.
비동기 인식(REST 및 gRPC)은 오디오 데이터를 Speech-to-Text API로 보내고 장기 실행 작업을 시작합니다. 이 작업을 사용하여 주기적으로 인식 결과를 폴링할 수 있습니다. 최대 480분 길이의 오디오 데이터에는 비동기식 요청을 사용하세요.
스트리밍 인식(gRPC만 해당)은 gRPC 양방향 스트림에 제공되는 오디오 데이터를 인식합니다. 스트리밍 요청은 마이크에서 라이브 오디오 캡처 용도와 같은 실시간 인식 용도로 설계되었습니다. 스트리밍 인식은 오디오 캡처 중에 중간 결과를 제공하므로, 사용자가 계속 말하는 중에도 결과를 표시할 수 있습니다.
요청에는 오디오 데이터는 물론 구성 매개변수도 포함됩니다. 인식 요청에는 저장되고 재사용할 수 있는 인식 구성인 인식기가 선택적으로 포함될 수 있습니다.
오디오 메타데이터
대부분의 오디오 파일의 경우 Speech-to-Text API에서 자동으로 오디오 메타데이터를 추론할 수 있습니다. Speech-to-Text는 파일의 헤더를 파싱하여 해당 정보에 따라 디코딩합니다. 지원되는 파일 형식은 인코딩 페이지를 참조하세요.
헤더 없는 오디오 파일의 경우 Speech-to-Text API를 통해 인식 구성에서 오디오 메타데이터를 명시적으로 지정할 수 있습니다. 자세한 내용은 인코딩 페이지를 참조하세요.
소스 자료를 인코딩할 때 선택할 수 있다면 16,000Hz 샘플링 레이트를 사용하여 오디오를 캡처하는 것이 좋습니다. 값이 이 값보다 낮으면 음성 인식 정확도가 손상될 수 있습니다. 레벨이 높아도 음성 인식 품질에 큰 영향을 주지 않습니다.
그러나 오디오 데이터가 16,000Hz가 아닌 기존 샘플링 레이트로 이미 녹음된 경우에는 오디오를 16,000Hz로 다시 샘플링하지 마세요. 예를 들어, 대부분의 이전 전화 통신 오디오는 8,000Hz 샘플링 레이트를 사용하므로 결과 정확도가 떨어질 수 있습니다. 이러한 오디오를 사용해야 하는 경우 오디오를 원래 샘플링 레이트로 Speech-to-Text API에 제공합니다.
언어
Speech-to-Text의 인식 엔진은 다양한 언어와 방언을 지원합니다. 요청 구성의 languageCode
필드에서 BCP-47 식별자를 사용하여 오디오 언어(그리고 국가 또는 지역 방언)를 지정합니다.
언어 지원 페이지에서 각 기능에 지원되는 언어의 전체 목록을 확인할 수 있습니다.
인식 기능
Speech-to-Text API에는 자동 구두점 및 단어 수준 신뢰도와 같은 추가 인식 기능이 있습니다. 이러한 기능은 요청의 인식 구성에서 사용 설정됩니다. 이러한 기능의 가용성은 위 링크와 언어 페이지에 제공된 샘플 코드를 참조하세요.
모델 선택
Speech-to-Text는 여러 머신러닝 모델 중 하나를 사용하여 오디오 파일의 텍스트를 변환할 수 있습니다. Google은 이러한 음성 인식 모델에 특정 오디오 유형 및 소스를 학습시켰습니다. 사용 가능한 모델 및 요청에서 모델을 선택하는 방법을 알아보려면 모델 선택 문서를 참조하세요.
삽입된 오디오 콘텐츠
요청의 audio_source
필드 내에 content
매개변수를 전달하면 삽입된 오디오가 음성 인식 요청에 포함됩니다. gRPC 요청 내에서 콘텐츠로 제공되는 삽입된 오디오의 경우, 해당 오디오는 Proto3 직렬화와 호환되고 바이너리 데이터로 제공되어야 합니다. REST 요청 내에서 콘텐츠로 제공되는 삽입된 오디오의 경우, 해당 오디오는 JSON 직렬화와 호환되고 먼저 Base64로 인코딩되어야 합니다. 자세한 내용은 [오디오를 Base64로 인코딩][base64 인코딩]을 참조하세요.
Google Cloud 클라이언트 라이브러리를 사용하여 요청을 작성하는 경우, 일반적으로 이 바이너리(또는 base-64로 인코딩된) 데이터를 content
필드에 직접 작성합니다.
URI 참조로 오디오 전달
보다 일반적으로는 다음 형식의 Cloud Storage에 있는 오디오 파일 (base64가 아닌 바이너리 형식)을 가리키는 Speech-to-Text API 요청의 audio_source
필드에 uri
매개변수를 전달합니다.
gs://bucket-name/path/to/audio/file
Speech-to-Text는 서비스 계정을 사용하여 Cloud Storage의 파일에 액세스합니다. 기본적으로 서비스 계정은 동일한 프로젝트의 Cloud Storage 파일에 액세스할 수 있습니다.
서비스 계정 이메일 주소는 다음과 같습니다.
service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com
다른 프로젝트의 Cloud Storage 파일을 텍스트로 변환하려면 이 서비스 계정에 다른 프로젝트의 Speech-to-Text 서비스 에이전트 역할을 부여하면 됩니다.
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
--role=roles/speech.serviceAgent
프로젝트 IAM 정책에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
또한 서비스 계정에 특정 Cloud Storage 버킷에 대한 권한을 부여하여 보다 세분화된 액세스 권한을 제공할 수 있습니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
--role=roles/storage.admin
Cloud Storage의 액세스 관리에 대한 자세한 내용은 Cloud Storage 문서의 액세스 제어 목록(ACL) 생성 및 관리를 참조하세요.
Speech-to-Text API 응답
오디오가 처리되면 Speech-to-Text API는 동기의 경우 SpeechRecognitionResult
메시지의 변환 결과와 일괄 요청을, 스트리밍 요청의 경우 StreamingRecognitionResult
메시지의 변환 결과를 반환합니다. 동기 및 일괄 요청에서 RPC 응답에는 결과 목록이 포함됩니다. 인식된 오디오 목록이 연속된 순서로 표시됩니다. 스트리밍 응답의 경우 is_final
로 표시된 모든 결과가 연속 순서로 표시됩니다.
대체 값 선택
성공적인 동기 인식 응답 내의 각 결과에는 alternatives
가 하나 이상 포함될 수 있습니다(max_alternatives
가 1
보다 큰 경우). Speech-to-Text가 대체 변환 텍스트의 신뢰값이 충분하다고 판단하면 응답에 이 대체 변환 텍스트가 포함됩니다. 응답의 첫 번째 대체 변환 텍스트는 항상 최고의(가능성이 가장 높은) 대체 변환 텍스트입니다.
max_alternatives
를 1
보다 큰 값으로 설정하더라도 대체 텍스트 변환이 여러 개 반환된다고 암시하거나 보장하지 않습니다. 일반적으로 스트리밍 인식 요청을 통해 결과를 가져오는 사용자에게 실시간 옵션을 제공하기 위해서는 두 개 이상의 대체 텍스트 변환이 더욱 적합합니다.
변환 텍스트 처리
응답 내에서 제공되는 각 대체 텍스트 변환에는 인식된 텍스트를 포함하는 transcript
가 포함됩니다. 대체 텍스트 변환이 순차적으로 제공되면 이러한 텍스트 변환을 함께 연결해야 합니다.
신뢰값
confidence
값은 0.0과 1.0 사이의 추정치이며, 오디오의 각 단어에 할당된 '가능성' 값을 집계하여 계산됩니다. 숫자가 클수록 각 단어가 정확하게 인식되었을 가능성이 높아집니다. 이 필드는 일반적으로 최상위 가설에만 제공되며 is_final=true
인 결과에 대해서만 제공됩니다. 예를 들어 confidence
값을 사용하여 대체 텍스트 변환 결과를 사용자에게 표시할지 또는 사용자에게 확인을 요청할지를 결정할 수 있습니다.
그러나 이 모델은 confidence
점수뿐만 아니라 문장 컨텍스트와 같은 다른 여러 가지 신호를 기반으로 하여 '최상의' 결과를 결정합니다.
이러한 이유로 최상위 결과의 신뢰도 점수가 최고점이 아닌 경우가 있을 수 있습니다. 대체 결과를 여러 개 요청하지 않은 경우 반환된 하나의 '최상의' 결과는 예상보다 낮은 신뢰값을 가질 수 있는데, 예를 들어 많이 쓰이지 않는 단어가 사용되었을 때 이러한 경우가 발생할 수 있습니다. 희귀어는 올바르게 인식되더라도 낮은 '가능성' 값을 가질 수 있습니다. 컨텍스트에 따라 희귀어가 가장 적합한 옵션으로 결정되면 대체 옵션보다 confidence
값이 낮더라도 최상위에 결과가 표시됩니다.
다음 단계
- 클라이언트 라이브러리를 사용하여 선호하는 프로그래밍 언어로 오디오를 텍스트로 변환
- 짧은 오디오 파일의 스크립트 작성 연습
- 스트리밍 오디오의 텍스트 변환 방법 알아보기
- 긴 오디오 파일의 텍스트 변환 방법 알아보기