본문 바로가기

Machine Learning/Transcribe

Amazon Transcribe 한국어 STT 변환

Amazon Transcribe은 S3에 담긴 오디오 파일의 음성을 번역해주는 프로그램이다.

 

현재 영어, 아랍어, 중국어, 불어, 독일어, 힌두어, 이태리어, 한국어, 포르투칼어, 러시아어, 스페인어를 지원한다.

?왜 일본어가 없지? 아무튼 2019-10-18 기준으로 Amazon Transcribe도 No Japan을 동참?하고 있다.

그리고 언어가 같아도 영국, 미국 억양이 다르듯이 옵션 값을 다르게 줄 수 있다.

 

오디오 포맷의 종류는 WAV, MP3, MP4 및 FLAC?를 비롯한 여러 오디오 인코딩을 지원한다. 또한 실시간 번역도 가능하다.

 

오디오 컨텐츠는 API 호출당 컨텐츠 길이 4시간이나 2GB로 제한된다. 따라서 동영상 파일의 경우 MediaConvert를 사용해서 음성 파일만 따로 추출하는 것을 권장한다. 아래 링크를 걸어둔다.

 

AWS MediaConvert(S3 event lambda)

AWS MediaConvert를 이용하여 VOD mp4 파일에서 블랙화면과 함께 Audio 파일만 추출한다. 아래 AWS Github의 샘플 코드를 이용한다. aws-samples/aws-media-services-vod-automation Sample code and CloudFormati..

blog.leedoing.com

 

 

[AWS 웹콘솔 데모]

그럼 백문이 불여일견 실제로 AWS 웹 콘솔에서 수행하도록 한다.

 

Transcription jobs

 

 

Custom vocabulary 아래 문서 참고

 

사용자 지정 어휘 - Amazon Transcribe

사용자 지정 어휘 사용자 지정 어휘를 작성하면 입력 파일의 음성을 처리하는 방법에 대해 추가 정보를 Amazon Transcribe에 제공할 수 있습니다. 사용자 지정 어휘는 Amazon Transcribe가 오디오 입력에서 인식하게 하려는 특정 단어의 목록입니다. 일반적으로 해당 분야의 전문 용어 및 구절이며, Amazon Transcribe가 인식하지 않는 단어 또는 고유 명사입니다. 사용자 지정 어휘는 특정 단어 또는 구절을 대상으로 사용하기에 가장

docs.aws.amazon.com

 

Maximum number of speakers는 10명 제한이 있다.

그 외 파라미터에 대한 설명은 직관적으로 이해할 수 있다. 

 

영상은 요새 핫한 곽철용의 명대사 3분짜리 mp4 파일을 이용했다.

 

묻고 더블로 가

 

 

근데 파라미터 넣을 것도 없는데 에러가 났다.

 

에러

 

윈도우 우클릭으로 확인한 44kHZ 기준으로 입력했는데... HZ 없이 입력하니 44100 HZ라고 결과 값에 나온다. 흐음?

아무튼 이어간다.

 

결과는 아래와 같이 Text나 화자가 분류된 Audio identification 형태로 확인할 수 있다.

 

결과 값

 

한 문장에 한 두개의 단어가 잘못 읽혀졌다.

[돈이라는 게 말이야  -> 돈이라는 게 마리의 토끼가] , [번째] -> [원체],  [제가 담] -> [제가 다음] 등

 

이러면 나가린데..?

 

몇 가지 오역을 custom-vacabulary를 이용해서 만들고 다시 돌려봤다.

 

뭐가 틀린거야 도대체

 

custom-vacabulary 포맷에 문제가 있는 것 같은데... 잘 모르겠다. 일단 AWS에 문의해봐야겠다.

 

또한 SKD를 활용하여 API를 사용하면 아래와 같은 Response를 받는다.

Response Key 값을 보면, Transcript에는 모든 STT의 결과를 그리고 Items 내에는 시간과 각 단어나 음절을 확인할 수 이다. 

{
"jobName":"sourceS3Key",
"accountId":"557652101750",
"results":{
"transcripts":[
{
"transcript":"젊은 친구 돈이라는 게 말이나 도끼."
}
],
"items":[
{
"start_time":"0.91",
"end_time":"1.2",
"alternatives":[
{
"confidence":"1.0",
"content":"젊은"
}
],
"type":"pronunciation"
},
{
"start_time":"1.2",
"end_time":"1.68",
"alternatives":[
{
"confidence":"1.0",
"content":"친구"
}
],
"type":"pronunciation"
},
{
"start_time":"3.6",
"end_time":"4.07",
"alternatives":[
{
"confidence":"0.9923",
"content":"돈이라는"
}
],
"type":"pronunciation"
},
{
"start_time":"4.07",
"end_time":"4.2",
"alternatives":[
{
"confidence":"0.9497",
"content":"게"
}
],
"type":"pronunciation"
},
{
"start_time":"4.2",
"end_time":"4.51",
"alternatives":[
{
"confidence":"0.3813",
"content":"말이나"
}
],
"type":"pronunciation"
},
{
"start_time":"4.51",
"end_time":"4.89",
"alternatives":[
{
"confidence":"0.4781",
"content":"도끼"
}
],
"type":"pronunciation"
},
{
"alternatives":[
{
"confidence":"0.4781",
"content":"."
}
],
"type":"punctuation"
}
]
},
"status":"COMPLETED"
}

custom-vacabulary를 사용하면 어느정도 오탈 단어들이 고쳐질 지 모르겠다.  뉴스와 같이 아나운서의 정확한 발음이 아닌 경우, 실제 프로덕에서 사용은 무리가 있어 보인다.

또한 결과 값을 이용해서 SMI 자막 파일을 만들 경우, 각 문장에 대한 형태소 분석도 추가로 필요하다.