제 글이 값어치[가버치]를 하고 있나요? 글이 쌓고 [싸코] 쌓여 [싸여] 더 많은 지식이 여러분께 전달되었으면 좋겠네요.

이렇게 우리가 언어를 쓰는 방식은 실제로 발음하는 방식과 다를 때가 많습니다. 모국어의 경우 자연스럽게 위 예시 같은 묵음을 생각하지 않고 발음하게 습관이 되어있지만, 새로 배우는 언어의 경우 쓰여있는 그대로 읽다가 지적을 받을 때가 있습니다. 예를 들어, 영어에서 knight, knee, knowledge의 k는 왜 묵음으로 처리가 되는 걸까요? 사실 저도 잘 모릅니다. 이유가 무엇이든 간에 확실히 이러한 패턴은 음성 인식(ASR) 모델을 학습시키는데 일을 더 어렵게 만들 것 같습니다.

오늘은 지난주에 시작한 ASR 이야기를 마무리 지으려고 합니다. 지난주에는 ASR이 Bayes' Rule이라는 확률 통계학 법칙을 통해 acoustic model (AM)과 language model (LM)로 나뉘어있으며, n-gram 같은 이전에 배운 LM 모델이 쓰인다는 것을 알아보았습니다.

이 글에서는 AM에 대해 간략하게 집고 넘어가고, 가장 최근 ASR 연구들은 어떠한 방향으로 가고 있는지 알아보겠습니다.

Phoneme이란?


발음의 가장 기본 단위는 무엇일까요? 바로 음운 (phoneme)입니다. 조금은 옛날 사람(?)이면 영어 공부를 할 때 영한사전에 단어를 어떻게 발음하는지 알파벳과는 조금은 다른 방식으로 써져있던 것을 기억하실 겁니다.

이런 phoneme을 정리해놓은 것이 phoneme dictionary입니다. 가장 유명한 것은 CMU Pronunciation Dictionary (CMUdict) 그리고 International Phonetic Alphabet (IPA) 입니다. CMUdict는 ASR 시스템을 만들기 위해 많이 쓰이기 위해 만들어진 것인 반면, IPA는 전 세계의 모든 언어의 발음을 위해 만들어져 교사, 언어학자, 가수, 배우, 번역가 등 다양한 분야에서 쓰이고는 합니다.

위가 단어, 아래가 phoneme 표기 (CMUdict)

위 예시처럼 knee의 k, whistle의 t 같은 묵음들이 phoneme에서는 나타나지 않는 것을 보일 수 있습니다. CMUdict의 홈페이지에 들어가 직접 이 단어 저 단어의 발음 표기 방법을 알아보세요!

AM은 주어진 음성 (waveform)을 연속된 phoneme으로 변환하는 모델입니다. 이 단계에서는 과거에는 Hidden Markov Model (HMM), Dynamic time warping (DTW) 등의 모델들이 쓰이다가 지금은 deep learning 모델로 변환되는 추세인데요. NLP보다는 signal & speech processing의 영역이기 때문에 여기서는 깊게 다루지 않겠습니다.


AM에서 예측된 phoneme 들을 LM과 연계하여 우리가 읽을 수 있는 단어로 바꿔주는 것이 ASR의 마지막 단계입니다. 예를 들어, knight와 night의 발음은 같기 때문에, 주변에 어떤 단어들이 같이 쓰였는지에 보아야 무슨 단어인지 정확히 결정할 수 있겠죠?

End-to-end ASR


End-to-end (E2E)는 deep learning과 big data가 떠오르면서 거의 모든 분야에서 나오는 단어인데요. 복잡하게 여러 문제, 모델 나누지 말고 한 번에 해결할 수 있는 큰 모델을 만들자는 머신러닝의 철학(?) 같은 방법론입니다.

예를 들어, ASR 같은 경우 위에 소개한대로, phoneme acoustic model, language model 등 과정을 나누어 여러 모델을 결합하는 것이 기존의 방식이었습니다. 하지만 CNN이나 RNN 같이 엄청나게 많은 parameter로 엄청나게 복잡한 패턴 및 관계도 한방에 배울 수 있는 deep learning이 떠오르면서 ASR 역시 E2E 방식이 새로운 연구들로 시도되었습니다.

E2E 모델은 음성(raw waveform) 그리고 이에 해당하는 텍스트 (text)만 있는 데이터를 가지고만 모델을 학습시킵니다. 일단 이러한 학습 데이터를 넣어주면 중간에 phoneme이든 language model이든 필요 없이 모델이 알~아서 다 배울 수 있다는 가설에서 시작합니다.  

놀랍게도 이 방법은 최근에 엄청난 성능을 보여줍니다. 2014년에 Google Deepmind와 University of  Toronto에서 공동으로 연구한 Connectionist Temporal Classification (CTC)라는 알고리즘이 처음으로 E2E ASR에 성공적으로 적용되면서 이후에 모든 연구실이 경쟁적으로 이 방향으로 뛰어들었습니다. 현재는 Baidu,  Google DeepMind, Facebook 등 여러 회사들이 경쟁적으로 E2E ASR의 성능을 높이고 있습니다.

근데 E2E ASR의 단점은 무엇일까요? 바로 미친 듯이 많은 데이터가 필요하다는 것입니다.  예를 들어 Baidu의 DeepSpeech는 무려 10,000 시간의 데이터로 학습되었다고 합니다. 이렇게 엄청난 양의 텍스트가 붙은 음성 데이터를 확보하기 위해서는 정말 많은 돈이 필요하기 때문에 이 경쟁에서 나오는 이름들은 전부 글로벌 대기업인 것입니다.

앤드류 응 교수 바이두 시절 (출처)


ASR의 성능은 어떻게 잴까?

ASR의 성능은 Word Error Rate (WER)로 계산됩니다. 말한 단어 중에 몇 퍼센트의 단어를 틀리게 알아듣냐는 건데요. 만약  제가 10 단어를 말했을 때, 친구가 한 단어를 잘 못 알아들으면 WER는 10%로 계산이 됩니다. 정말 제 발음이 안 좋거나 친구가 사오정이면 WER는 올라가겠죠.

WER는 주변 환경, 언어, 말하는 주제, 발음 등 에 따라 정말로 많이 달라집니다. 그렇기 때문에 연구자들은 자신들의 모델을 비교하기  위해 몇 개의 데이터 셋을 정해 놓고 WER를 계산하는데요. 이러한 standard dataset들에서 현재 최고의 ASR 모델들은 약 5% 정도의 WER을 보인다고 합니다. 즉 100 단어를 얘기하면 95 단어는 다 알아듣는다는 것이죠! Human performance, 즉 사람은 실제로 WER가 더 높게 나온다고 합니다.


오늘은 ASR 이야기를 마무리해보았습니다. 이제는 정말 스마트폰과 AI 스피커를 통해 익숙해진 ASR 기술이지만, 제가 느끼기에는 아직 완벽하지는 않은 것 같습니다. 단순히 몇몇 데이터에서 WER가 인간보다 낫다고 해도 시끄러운 카페에서 친구의 말을 알아 쏙쏙 알아듣는 우리에 비하면 갈 길이 좀 있습니다.

원래는 Language Modeling (LM)이 어떤 곳에 쓰이는지 알아보기 위해 ASR 이야기를 시작했는데 무려 2주 치나 썼네요. 다음 주에는 다시 LM의 주제로 돌아가려고 합니다. 지난번에는 n-gram LM을 이야기했는데 이보다 더더더 중요한 neural language modeling (NLM) 이야기를 시작하려  합니다. NLM은 NLP의 가장 파급력 있는 혁신인 기계번역(NLP), pretrained modeling (ELMO & BERT)의 기초가 되는 기본이라 아주 중요하다고 볼 수 있습니다. 꼭 아래 폼 통해 구독하셔서 놓치지 않으셨으면 좋겠습니다!

Reference