아틀라스랩스의 음성인식 기술, 더 나아가 AI 음성인식 기술에 대한 이해를 돕기 위해 4개의 아티클로 구성된 ‘아틀라스랩스 음성인식 리포트’의 첫번째 아티클 데이터편 LAS(Long Audio Segmentation)입니다.
한눈에 알아보는 3문장 요약
데이터 전처리 과정의 배경
음성 인식기를 학습시키기 위한 데이터는 음성 데이터와 그 음성 데이터를 전사(Transcription)한 텍스트 데이터로 구성됩니다. 음성 인식기에 데이터를 학습시키기 위해서는 데이터 전처리과정이 필요합니다. 그 이유는
첫째로, kaldi를 기반으로 한 음성 인식기의 학습 및 디코딩에는 학습 혹은 디코딩 성능을 최대화하기 위한 오디오 입력의 최대 길이를 제한하는 것이 중요합니다. 30초 ~ 1분 이내의 오디오를 보통 사용하며, 그 이상의 길이의 오디오를 학습하려면 학습이 느려져 시간이 더 오래 걸리고, 더 많은 메모리가 소모됩니다. 따라서 학습을 위해 준비된 오디오의 길이가 매우 길다면 해당 오디오를 적당한 길이로 자르고, 잘린 오디오에 맞는 텍스트를 추출하는 방식이 꼭 필요합니다.
둘째로 전사 결과물은 음성인식 학습의 관점에서는 많은 부분 틀려있는 데이터가 대부분이며, 아래와 같은 유형입니다. 그렇기 때문에 데이터 전처리를 통해 부정확한 데이터를 수정해주는 작업이 필요합니다.
- 오디오가 잘렸지만 사람이 내용을 유추해서 다 전사하는 경우
- 오디오의 내용과 다른 텍스트로 전사한 경우
- 동시발화를 유추해서 전사하는 경우
- 발음이 부정확해 알아듣기 힘들지만, 문맥상 유추해서 전사하는 경우
- 사투리를 소리 나는 대로 전사하지 않는 경우
- 전사 업체마다 전사 규칙이 다른 경우
일반적으로 전사된 학습데이터는 매우 길고 텍스트가 오디오의 어디쯤 위치하는지 정보를 찾기 어렵습니다. 그렇기 때문에 텍스트가 오디오의 어디쯤 위치하는지 오디오를 자르면서 알아내는 과정이 필요합니다. 이 과정을 LAS(Long Audio Segmentation)라고 합니다.
LAS(Long Audio Segmentation) 정의 및 중요성
LAS 작업을 수행하기 위해서 일반적으로는 음성인식기에 의해 디코딩된 결과(hypothesis text)를 원본 문장(reference text)에 맞추어(align) 해당 텍스트가 실제 오디오에서 어디에 위치하는지를 정확히 확인해야 합니다. 이렇게 하는 경우 디코딩 결과 중, 오디오와 텍스트 데이터가 일치하지 않은 데이터의 경우 학습 데이터에서 배제하기 때문에 약간의 데이터의 손실을 감수해야 합니다.
학습에 사용될 수 있는 텍스트 및 오디오를 뽑아내는 과정은 매우 중요하며, 학습된 결과물의 정확도와 음성인식기 오동작 확률을 줄이는 데 큰 도움이 됩니다.
Zeroth 음성인식기에 적용된 LAS를 아래 예시를 통해 확인해보겠습니다.
LAS 진행 과정
0. Raw data 소개
사용된 학습 데이터는 45분가량의 PodCast 오디오 파일과 해당 파일의 전사(transcription) 텍스트입니다.
아래 데이터는 학습데이터를 Zeroth를 통해 디코딩한 결과입니다. 참고로 ‘|’ 기호는 띄어쓰기 기호이며 현재 ‘|’ 기호 이외의 띄어쓰기가 되어있는 부분은 이후 결과 값에서 다 붙어서 나오는 결과입니다. LAS를 진행하지 않았기 때문에 디코딩 결과 값이 길게 늘어져 있습니다.
$ soxi ./nf20180903002.mp3 Input File : './nf20180903002.mp3' Channels : 2 Sample Rate : 48000 Precision : 16-bit Duration : 00:44:49.70 = 129105792 samples ~ 201728 CDDA sectors File Size : 37.7M Bit Rate : 112k Sample Encoding: MPEG audio (layer I, II or III) $ cat text nf20180903002 |통계청장 |교체 |문제가 |정치적 |이슈가 |됐죠 |지난 |몇 |주간 |이 |문제를 |정치적 |관점 이 |아니라 |정말 |통계 전문가의 |관점에서 |보면 |어떻게 |보이는 지 |한번 |짚어보 겠습니다 |통계학 의 |세계적 |권위자 죠 |한 |학기 는 |카이스트 에서 |한 |학기 는 |미국 |아이오 |아이오와 대에서 |통계학 을 |가르치 고 |계시 는 |김재광 |교수님 |연결 해 보겠습니다 |안녕하십니까 |안녕하세요 |공장 장님 |네 |오랜만 입니다 |교수님 |네 |오랜만 입니다 |네 |지금은 |한국 에 |계 십니까 |네 |이번 |학기 는 |한국 에 |있습니다 |네 |예 |한 |학기 씩 |그렇게 |하는 |경우가 |세계 적으로 |있습니까 |잘 |좀 |드물 긴 |한데요 |네 |미국 에는 |좀 |있습니다 |카이스트 엔 |처음 이고요 |예 |그만큼 |잘나가 시는 |거죠 |그 |점을 |제가 |강조 해 |놓고 |이 게 |이 제 |정치적 |공방이 |되니까 |뭐가 |뭐가 |뭔지 |잘 |못 |알아듣 는 |얘기 가 |자꾸 자꾸 |누적 돼서 |점점 |이 |혼란 으로 |빠지 는데 |그래서 |저희 가 |이건 |통계학 의 |진짜 |전문가 한테 |여쭤 봐야 |되겠다고 |시간을 |좀 |마련해 |봤습니다 |우선 |이 |가계 |동향조사 라는 |거 |예 |이 게 |뭣 |땜에 |하는 |겁니까 |그 |인제 |가계 |동향조사 는 |우리나라 |그 |가구의 |그 |소득과 |소비 |수준을 |인제 |분기 별로 |파악 하기 |위해서 |시작된 |통계조사 인데요 |네 |크게 |두 |가지 |용도로 |쓰여 |왔습니다 |첫 |번째 는 |그 |소비자물가지수 |작성 을 |위한 |가중치 를 |계산 하는 |기초자료 로 |사용되었 었고요 |예 |두 |번째 론 |지니계수 와
1. 전사되지 않은 오디오 처리
이제 LAS를 통해 데이터를 정리하겠습니다. 아래의 데이터는 LAS를 진행한 데이터입니다. 긴 오디오 파일을 적당한 길이로 분할하고, 잘린 부분에 해당하는 텍스트를 원본 전사 자료로부터 추출합니다. nf20180903002
라는 여러 파일로 세그먼트를 진행했으며, 파일명 옆의 숫자는 초시를 나타냅니다. 오디오가 시작되는 부분의 초와 끝나는 부분의 초로 데이터가 30초 이내로 잘려진 것을 확인하실 수 있습니다. 또한 해당 오디오가 어떤 텍스트를 나타내는지 text부분에 나타난 디코딩 결과를 통해서 알 수 있습니다.
위 작업 이후 데이터를 가공하는 작업을 진행합니다. 먼저 전사되지 않는 오디오를 처리하는 방법에 대해서 알아보겠습니다. 아래 오렌지 색깔로 표기된 부분은 팟케스트 광고 부분입니다. 전사 규칙에 의해 광고를 따로 받아적지 않기 때문에 원본 전사 자료에 광고 부분에 해당하는 텍스트가 없으며, 세그멘테이션을 거친 이후에 학습에 좋지 않는 데이터로 남아 있는 것을 볼 수 있습니다. 즉, 오디오를 전사한 데이터와 디코딩된 데이터가 일치하지 않는 데이터의 경우 색으로 표시됩니다. 이렇게 색깔로 표기된 데이터를 학습 과정 전에 골라내는 작업을 진행하여 학습에 좋은 데이터로 만들어 줍니다.
$ head segments text ==> segments <== nf20180903002-00002500-00005500-1 nf20180903002 25 53.82 nf20180903002-00007500-00010500-1 nf20180903002 99.31 105 nf20180903002-00012500-00015500-1 nf20180903002 126.15 133.66 nf20180903002-00012500-00015500-2 nf20180903002 134.34 142.9 nf20180903002-00012500-00015500-3 nf20180903002 142.62 150.58 nf20180903002-00012500-00015500-4 nf20180903002 150.54 154.69 nf20180903002-00015000-00018000-1 nf20180903002 154.78 157.67 nf20180903002-00015000-00018000-2 nf20180903002 157.39 166.13 nf20180903002-00015000-00018000-3 nf20180903002 166 174.41 nf20180903002-00015000-00018000-4 nf20180903002 174.61 179.84 ==> text <== nf20180903002-00002500-00005500-1 |결국 <UNK>* nf20180903002-00007500-00010500-1 |예 |미국 nf20180903002-00012500-00015500-1 |통계청장 |교체 |문제가 |정치적 |이슈가 |됐죠 |지난 |몇 |주간 nf20180903002-00012500-00015500-2 |이 |문제를 |정치적 |관점 이 |아니라 |정말 |통계 전문가의 |관점에서 |보면 |어떻게 |보이는 지 |한번 |짚어보 겠습니다 nf20180903002-00012500-00015500-3 |통계학 의 |세계적 |권위자 죠 |한 |학기 는 |카이스트 에서 |한 |학기 는 |미국 |아이오 |아이오와 대에서 nf20180903002-00012500-00015500-4 |통계학 을 |가르치 고 |계시 는 |김재광 |교수님 |연결 해 보겠습니다 |안녕하십니까 |안녕하세요 nf20180903002-00015000-00018000-1 |안녕하세요 |공장 장님 |네 |오랜만 입니다 |교수님 nf20180903002-00015000-00018000-2 |네 |오랜만 입니다 |네 |지금은 |한국 에 |계 십니까 |네 |이번 |학기 는 |한국 에 |있습니다 |네 |예 |한 |학기 씩 |그렇게 |하는 |경우가 |세계 적으로 |있습니까 |잘 nf20180903002-00015000-00018000-3 |좀 |드물 긴 |한데요 |네 |미국 에는 |좀 |있습니다 |카이스트 엔 |처음 이고요 |예 |그만큼 |잘나가 시는 |거죠 nf20180903002-00015000-00018000-4 |그 |점을 |제가 |강조 해 |놓고 |이 게 |이 제 |정치적 |공방이 |되니까 |뭐가 |뭐가
*<UNK>는 음성인식기가 확인할 수 없는 데이터로 UNKNOWN으로 표시된 내용입니다.
2. 전사 되었지만 발화 순서가 뒤집히거나 잘려진 오디오와 싱크가 맞지 않는 부분에 대한 처리
앞서 전사가 되지 않은 데이터를 정리했다면, 이번에는 전사가 되었지만 오류가 있는 데이터를 정리하는 과정을 살펴보겠습니다.
세그멘트 결과중 nf20180903002-00265000-00268968-4
라는 utt_id
부분은 디코딩 결과를 통해 미리 ‘잘못 전사된 데이터일 확률이 높다'(High Risk) 라는 것을 확인한 상태입니다. 이 부분을 학습에 사용하기 위해서는 잘려진 오디오 부분이 알고리즘을 통해 연결 된 텍스트와 실제로 일치하는지 확인할 필요가 있습니다. 오랜지색으로 칠해진 부분은 실제 오디오 텍스트가 다르며, 음성인식기 학습에 좋은 영향을 미치지 못합니다.
$ grep -r "nf20180903002-00265000-00268968-4" segments text
segments:nf20180903002-00265000-00268968-4 nf20180903002 2672.02 2684.61
text:nf20180903002-00265000-00268968-4 |하다 |못해 는 |아니지만 |백 |불 씩 |해서 |천 |불 |들고 |가 도 |됩니까 |백 |불 |스트롱 |머니 입니다 |아니 |강한 |돈 입니다 |아 |그래요 |왜냐 면 |백 |불 은 |신고 할 |필요 도 |없어 |스트롱 머니 구나 |예 |미국 에 |돈을 |주면 은 |누가 |어떤 |사람이 |줬다는 |걸 |밝혀 야 |되는데 |자 |백 |불 |이 하는 |안 |밝혀 도 |돼요 |시간 |다 |됐습니다
2-1. Clean-up 과정
LAS 과정을 거치면 전사된 텍스트를 신뢰하는 상태에서 세그먼트 부분의 디코딩 결과와 가장 유사한 부분을 찾습니다. 하지만 일반적으로 전사된 텍스트를 신뢰하기는 어렵기 때문에 추가적으로 정제하는 과정이 필요하고, 이 과정에서 디코딩을 통해 인식된 결과와 전사 결과를 비교해 봤을 때, 신뢰할 수 없는 부분들을 삭제하면서 세그멘트를 재배치합니다.
2-2. Clean-up 이후 과정
앞서 오디오와 텍스트가 일치하지 않았던 세그먼트 nf20180903002-00265000-00268968-4
를 다시 보면, clean-up 을 거친 이후에는 매우 정확하게 세그먼트가 정의된 것을 확인할 수 있습니다. 오렌지색으로 표기된 부분을 <UNK>로 Clean up과정을 통해 삭제하였습니다. 이에 따라 오디오 길이도 수정되었습니다. 이 과정을 통해 정제된 데이터를 음성 인식기에 학습시키면 잘못된 부분에 대한 학습을 진행하지 않음으로서 데이터 신뢰도가 높아집니다.
$ grep -r "nf20180903002-00265000-00268968-4" segments text segments:nf20180903002-00265000-00268968-4-1 nf20180903002 2672.02 2676.82 segments:nf20180903002-00265000-00268968-4-2 nf20180903002 2677.04 2684.59 text:nf20180903002-00265000-00268968-4-1 |하다 |못해 는 |아니지만 |백 |불 씩 |해서 |천 |불 |들고 |가 도 |됩니까 |백 |불 |스트롱 |머니 입니다 |아니 |강한 |돈text:nf20180903002-00265000-00268968-4-2 |백 |불 은 |신고 할 |필요 도 |없어 |스트롱 머니 구나 |예 |미국 에 |돈을 |주면 은 |누가 |어떤 |사람이 |줬다는 |걸 |밝혀 야 |되는데 |자 |백 |불 |이 하는 |안
아틀라스랩스의 차별성
LAS 과정에서는 얼마나 데이터의 손실을 줄이고 정확하게 가공하는 것이 중요합니다. 아틀라스랩스는 LAS 과정에서 세그먼트 성능을 최대한 올릴 수 있는 방법으로 최적화된 스크립트를 사용합니다. 즉, 아틀라스랩스는 음성 인식기의 성능을 최대한 높일 수 있는 방법으로 학습 데이터를 정확하게 세그먼트하고 가공하여 더 높은 음성 인식률을 만들어 낼 수 있습니다.
이 외에도 아틀라스랩스에서는 앞서 언급된 방식과는 정반대로, 원본 문장을 디코딩 결과에 맞추어 세그먼트를 진행하는 방식도 사용합니다. 이 경우에는 전사 결과가 충분히 믿을만하다고 여겨지는 경우에 사용할 수 있으며, 학습 데이터의 손실을 줄이면서, 다양한 화자가 존재하거나, 발화자와 마이크의 거리가 다양한 데이터를 학습하는 데 도움이 됩니다. 또한 볼륨이 다양하여 전사를 수행한 사람에게는 들리지만, 기존의 음성인식기가 반응하지 않는 경우(오디오 input이 없는 경우로 판단)에도 성능을 끌어올리는 방안으로 적용할 수 있습니다.