비전공자도 이해할 수 있는 AI지식 -컴퓨터는 어떻게 사람의 목소리를 이해하는가-

1. 음성인식은 생각보다 어려운 일이다

 

'음성인식'부터 살펴보겠습니다. 스피커는 어떻게 인간의 말을 알아듣는걸까요? 

 

대번에 잘 알아듣는 것처럼 보이지만 사실 인간의 말을 알아듣는 과정은 생각보다 훨씬 복잡하고 정교합니다.

 

사람은 보통 문자보다 말을 먼저 익히기 때문에 음성인식이 문자인식보다 쉽지 않을까 생각할 수도 있지만 오히려 반대입니다.

 

우리가 모국어가 아닌 언어를 성인이 되어서 배울 때는 말보다는 글이 더 쉽게 느껴집니다.

 

컴퓨터도 마찬가지입니다. '모라벡의 역설'을 떠올리면 이해가 쉽습니다.

 

말을 배우는 것은 다섯 살배기 아이도 쉽게 하지만 컴퓨터는 그렇게 하지 못합니다.

 

더구나 컴퓨터 입장에서는 음성 언어의 가변성과 음성 자체에 내재하는 소음 등 여러 이유로 음성 인식이 문자인식보다 훨씬 더 까다롭습니다.

 

사실 소음 속에서 신호를 구별하고 적절한 문자로 이해하는 작업은 컴퓨터뿐만 아니라 성인에게도 쉽지 않은 일입니다.

 

우리말로 된 유튜브 영상을 볼 때도 자막이 없으면 내용을 이해하기 힘들 때가 있죠.

 

가만 생각해보면 우리가 다른 사람의 말을 이해하는 과정은 단순히 음성을 듣는 일만 포함하는 것이 아닙니다.

 

함께 대화하고 있는 장소, 처해있는 상황, 상대의 표정, 입 모양, 손짓에 담긴 수많은 메시지를 종합적으로 이해한 결과입니다.

 

단지 음성만 듣고 대화의 내용을 알아내는 것은 사람에게도 매우 힘든 일입니다.

 

당장 옆사람과 등을 대고, 대화 주제를 정하지 않은 채 갑자기 아무 말이나 한다고 생각해보세요.

 

상대방이 무슨 얘기를 하는지 알아차리는데 시간이 좀 걸릴 거에요.

 

이처럼 음성만으로 내용을 정확하게 인식하는 작업은 인간에게도 매우 벅찬 일이고, 컴퓨터에게는 더욱 어려운 일이죠

 

 

2. 사람의 음성을 규칙으로 프로그래밍 할 수 있을까

 

그렇다면 실제 음성인식 과정을 살펴봅시다. 음성인식은 한마디로 시간의 흐름에 따라 역동적으로 변동하는 음성의 파형을 다루는 일입니다.

 

과거에는 소리의 최소 단위인 음소가 결합하여 단어와 구문을 만드는 규칙을 언어학자들이 분석해 if-then 규칙으로 프로그래밍했습니다.

 

그러니까 음성의 파형에서 음소를 인식한 다음, 음소의 고유한 배열을 기반으로 단어를 인식했죠

 

이 방식은 철저하게 규칙에 따라 음성을 인식했지만 곧 한계를 드러내고 맙니다. 

 

사람들은 제각각 음소를 다르게 발음하고, 음소의 패턴은 가까이 있는 음소에 영향을 받으며 생략되는 음소도 많습니다.

 

심지어 같은 사람이라도 발음하는 방식이 늘 일정하지 않죠. 

 

언제나 일정한 규칙으로 또박또박 발음하는 건 방송에 나오는 아나운서들에게나 해당하는 얘기입니다. 

 

초기에는 단어 사이에 명확한 공백이 존재할 거라 예상했지만 실제로는 그렇지 않다는 점도 문제를 복잡하게 만들었습니다.

 

말소리의 크기나 어조가 단어의 의미를 바꾸는 것도 문제였죠

 

동음이의어나 구문을 구별하는 문제도 까다롭습니다.

 

이 밖에도 앞서 얘기한 것처럼 음성 외에 여러가지 요소를 종합적으로 고려해야합니다.

 

화자가 누구인지, 어떤 상황에서의 대화인지, 앞선 대화의 맥락이 무엇인지 등등 분석을 어렵게 하는 요인은 무척 많습니다.

 

이러한 음성의 극단적인 유연함은 도저히 규칙으로 정리할 수 있는 것이 아니었죠

 

 

3. 통계를 이용하면 음성인식을 할 수 있을까

 

음성인식의 역사를 거슬러 올라가보죠. 앞서 자율주행차의 역사가 시작되는 데 큰 역할을 했던 다르파가 이번에도 등장합니다.

 

다르파는 1971년부터 5년간 음성인식 기술을 겨루는 개발 대회를 주최하고, 참가팀들에게 연구 기금을 적극적으로 지원했습니다.

 

스티브 잡스와 그의 친구들이 차고에서 첫 개인용 컴퓨터인 애플 1을 만들어 창업한 때가 1976년이니,

 

혁신적인 연구를 지원하는 다르파답게 개인용 컴퓨터의 시대가 열리기도 전에 음성인식 대회를 치른 셈입니다.

 

하지만 음성인식 기술은 오랫동안 큰 진전이 없었습니다.

 

음성의 파형을 규칙으로 구분하려는 시도가 생각보다 좋은 성과를 내지 못했죠.

 

규칙 기반보다 통계 기반이 더 좋은 성능을 낼 것으로 생각한 연구자들이 1970년대 중반부터 은닉 마르코프 모델(hidden markov model)이라는 방법을 응용하기 시작합니다.

 

은닉 마르코프 모델은 말 그대로 은닉된 상태와 관찰 가능한 결과로 구성된 통계적 모델입니다.

 

간단하게 예를 들어보면 날씨에 따른 행동 결과를 다음과 같이 표현할 수 있습니다.

 

 

여기서 은닉된 상태는 날씨입니다.

 

즉 보이지 않는 상태를 말하는 데, 예를 들어 창문이 없는 방 안에 갇힌 채로 며칠간의 날씨를 예측해본다고 하죠.

 

날씨를 눈으로 확인할 수는 없지만 다행히도 동거인이 있습니다.

 

동거인은 매일 날씨를 확인하고 그날의 일정을 결정하기 때문에 며칠간 동거인의 행동을 보면 날씨를 확률적으로 예측할 수 있습니다.

 

예를 들어 비가 오는 날에 동거인은 50%확률로 청소를 하지만 산책을 할 확률이 10%밖에 되지 않습니다.

 

반대로 날씨가 맑을 때는 청소를 할 확률이 10%이지만 산책할 확률이 60%나 됩니다.

 

또한 날씨가 변할 확률은 미리 계산할 수 있습니다. 

 

해당 지역에 비 올 확률은 60%이고 비가 온 다음 날 다시 비가 올 확률은 70%, 맑을 확률은 30%라면 여기에 지난 며칠간의 행동을 관찰해 얻은 확률을 더해 모델을 만들어 날씨를 예측할 수 있지 않을까요?

 

그래서 동거인이 지난 5일간 한 행동을 관찰해봤습니다.

 

동거인이 '청소-청소-쇼핑-산책-청소'를 했다고 한다면, 지난 5일간의 날씨는 과연 어땠을까요?

 

확률 모델을 이용해 은닉된 상태인 날씨의 확률을 알아내는 것을 디코딩이라고 합니다.

 

디코딩 과정을 거쳐 가장 가능성이 높은 날씨를 확률적으로 추정해볼 수 있죠

 

이 경우 날씨가 '비-비-비-맑음-비'일 가능성이 가장 높습니다.

 

이처럼 관찰 결과에 따라 은닉된 상태를 확률적으로 예측할 수 있으며, 이러한 확률적 표현을 앞서 얘기한 은닉 마르코프 모델이라고 합니다.

 

그리고 동일한 원리를 음성인식에도 적용할 수 있습니다.

 

어떤 특정 파형(관찰한 결과)이 '에이-비-시'라면 해당 발음(은닉된 상태)은 'A-B-C'일 가능성이 가장 높다는 식으로 예측할 수 있는 거죠.

 

이렇게 은닉 마르코프 모델을 적용한 통계 기반은 규칙 기반보다 훨씬 더 좋은 성능을 보여줬습니다.

 

하지만 이러한 노력에도 불구하고 1990년대 중반까지는 음성의 40%이상을 잘못 인식했습니다.

 

이후 점차 개선되었으나 2010년 무렵까지도 여전히 15%정도의 오류율을 보였죠.

 

이제 기존 방식을 넘어설 또 다른 혁신이 필요했습니다.

 

 

4. 딥러닝, 음성인식의 구원투수가 될 수 있을까

 

이 무렵부터 연구자들은 딥러닝에 기반한 접근법을 연구하기 시작했습니다.

 

물론 이전에도 인공 신경망을 음성인식에 도입하려는 시도는 여러 차례 있었습니다.

 

하지만 당시에는 제대로 학습하는 방법을 알지 못했죠.

 

무엇보다 음성의 파형은 시간의 흐름에 따라 순서대로 구성되는 데이터인데, 당시의 인공 신경망은 이런 시계열 구조를 제대로 학습하지 못했습니다.

 

하지만 딥러닝이 이미지 인식 분야에서 좋은 성과를 내기 시작하면서 이를 지켜본 음성인식 과학자들의 행보 또한 빨라졌습니다.

 

음성인식은 이미지나 영상인식과 마찬가지로 음성의 파형이라는 방대하고 복잡한 데이터를 다루는 일입니다.

 

인공신경망이라는 거대한 모델이 마찬가지로 탁월한 능력을 발휘할 수 있을 거라 생각했죠.

 

뿐만 아니라 시간의 흐름에 따라 순서대로 구성되는 시계열 형식도 학습할 수 있는 순환 신경망(RNN, Recurrent Neural Network)이라는 인공 신경망 구조도 고안해냅니다.

 

딥러닝이 위력을 발휘하기 위해서는 많은 데이터가 필요했습니다.

 

하지만 문제는 없었습니다. 인터넷 세상이 열리면서 음성 데이터 또한 폭발적으로 늘어났거든요.

 

뿐만 아니라 음성 데이터를 변조해 학습 데이터를 보강하기도 했습니다.

 

녹음된 음성을 이리저리 늘리거나 높낮이를 바꾸거나 잡음을 추가하는 방법 등으로 데이터의 양을 몇 배나 더 늘릴 수 있었죠.

 

이제 딥러닝과 빅데이터를 이용해 성능이 뛰어난 음성인식 모델을 만들 수 있게 되었습니다.

 

이를 음성의 파형으로 단어를 인식하는 음향 모델(acoustic model)이라고 합니다.

 

그리고 딥러닝이 좋은 성과를 내기 시작하면서 음향 모델의 성능도 급격히 좋아졌습니다. 

 

그렇다면 이렇게 훌륭한 음향 모델로 이제 음성인식 기술은 완성된 걸까요?

 

 

5. 잘못 알아 들은 단어도 보정해서 이해할 수 있다면..

 

과거의 음성인식은 앞서 얘기한 것처럼 음소의 특징과 예상 지속 시간을 표시한 파라미터를 수작업으로 일일이 입력해서 처리하는 방식이었습니다.

 

하지만 이런 방식에는 한계가 있었습니다.

 

예컨대 실제 대화에서는 음성단어에서 특정 음소가 생략되는 일들이 벌어졌기 때문이죠.

 

'going'을 빠르게 발음하면 'goin'이 될 수 있음을 알게 된다면, 마찬가지로 'driving'을 'drivin'으로 발을 할 수 있다는 사실도 터득할 수 있습니다.

 

그렇게 발음하는 것을 들어보지 못했어도 추론할 수 있죠.

 

인간의 인식 능력은 생각보다 뛰어납니다. 사진의 일부분이 지워지거나 왜곡되어도 사진 속 인물의 정체를 금방 알아볼 수 있죠.

 

우리 뇌는 패턴을 인지하기 때문입니다.

 

정보의 일부분만 인지하더라도 우리 인지 능력은 패턴의 변하지 않는 특징을 정확하게 감지해냅니다.

 

이 같은 인간의 인지 능력을 적극 활용하는 예술 분야가 바로 캐리커처입니다. 

 

화가가 코나 귀 같은 얼굴의 특정 부위를 과장해서 그린다 해도 얼굴의 전체적인 분위기가 남아 있다면 그를 아는 사람은 누구나 금방 알아차릴 수 있습니다.

 

인간의 인지 능력 덕분이죠

 

https://blog.naver.com/kkwac/150139541320

 

 

인간의 인지 능력은 우리가 언어를 이해할 때도 작동합니다.

 

잘못 알아들은 단어도 상식에 기반해 보정해서 이해합니다.

 

그동안 규칙 기반의 음성인식이 좋은 성과를 내지 못했던 이유는 이처럼 오인식을 보정할 수 있는 두뇌의 역할이 결여되어 있었기 때문이기도 합니다.

 

만약 음성을 잘못 인식하더라도 그동안의 학습 결과를 토대로 사용할 확률이 높은 단어로 보정해준다면, 훨씬 더 좋은 성과를 낼 수 있겠죠

 

이것이 바로 언어모델(language model)의 역할 입니다.

 

눈을 가리고 말을 하면 무슨 얘기인지 알아듣기가 쉽지 않습니다.

 

상대방의 표정이나 입 모양을 볼 수 없기 때문이기도 하지만 어떤 주제로 대화 중인지 알 수 없기 때문이기도 하죠

 

만약 극장에서 영화를 보고 나왔거나 머리가 아파 약국에 들어간 상황이라면 훨씬 더 대화하기가 수월할 거에요.

 

언어 모델은 영화나 두통 같은 사전 지식의 역할을 합니다.

 

약국에서 머리가 너무 아파 말을 조리 있게 못해도 약사는 상황을 충분히 인지하기 때문에 적절한 약을 처방해줄 수 있을 거에요.

 

 

6. 언어의 사전 지식은 무엇인가

 

그렇다면 사전 지식에 관해 좀 더 알아봅시다. 

 

여러분이 아무리 청력이 좋고 영어가 익숙하다 해도 영어를 모국어로 쓰는 사람들보다 영어를 정확하게 이해하기는 힘듭니다.

 

왜냐하면 영어가 모국어인 사람들은 단어가 잘 들리지 않더라도 그 앞에 들은 단어를 바탕으로 단어를 유추할 수 있기 때문입니다.

 

이는 영어에 대한 사전 지식이 풍부하기 때문입니다.

 

그리고 이것이 바로 언어 모델의 역할이죠. 또한 해당 단어가 동음이의어일 때는 언어 모델이 더욱더 위력을 발휘합니다.

 

'I want to get two books, too'라는 문장은 우리에게 '아이 원 투 겟 투 북스, 투'로 들립니다.

 

'투'라는 발음이 세 군데나 있죠.

 

만약 영어를 잘 못하는 사람이라면 각각의 '투'를 제대로 들었다고 하더라도 무슨 단어인지 정확하게 알아내기 쉽지 않습니다.

 

 

 

이 경우 to는 동사 앞에 위치하고, two는 명사 앞에 나올 가능성이 높고, too는 보통 문장 맨 마지막에 나온다는 언어 규칙을 미리 인지하고 있어야 이 발음들을 이해할 수 있습니다.

 

물론, 원어민이라면 굳이 이런 문법 규칙을 숙지하지 않더라도 자연스럽게 이해할 수 있습니다.

 

심지어 명사와 동사를 구분하지 못하더라도 그동안 익힌 언어 습관으로 당연하다는 듯 to, two, too라는 걸 알아차릴 수 있습니다.

 

이것이 바로 사전 지식을 학습한 언어 모델이 하는 일입니다.

 

그리고 우리가 영어를 원어민보다 잘 하지 못하는 이유이기도 하죠.

 

이번에는 우리말로 살펴보죠. 스피커에게 한번 "오늘 날씨 엿 돼?"라고 물어봅시다.

 

과연 스피커가 "엿 돼"를 그대로 "엿 돼"로 인식할까요?

 

실제로 빅스비에 써봄..

 

물론 음향 모델은 이렇게 인식할 수 있습니다. 

 

하지만 언어 모델은 절대로 이렇게 인식하지 않습니다.

 

언어 모델은 즉 사전 지식이라고 했죠. 언어 모델은 "날씨가 엿 돼"라는 문장을 사전에 본 적이 없습니다.

 

따라서 관련한 지식을 갖고 있을 리가 없죠.

 

분명히 언어 모델은 "날씨가 어때"라는 문장을 수없이 보았을 것이고 사전 지식을 갖고 있습니다.

 

따라서 "오늘 날씨가"라는 문장 뒤에는 "어때"가 등장할 가능성을 이미 높은 확률로 인지하고 있습니다.

 

언어 모델은 음향 모델이 목소리를 잘못 인식하더라도 이를 확률 기반으로 다시 보정합니다.

 

"오늘 날씨가 엿 돼"를 우리가 흔히 묻는 "오늘 날씨가 어때"로 보정하는 거죠

 

이번에는 기계가 아니라 사람에게 물었다고 가정해보죠. 

 

친구에게 "주말에 넌닌맨 봤어?"라고 물어봅니다.

 

친구는 "넌닌맨"이 뭐지?라고 생각하겠죠. 일단, "봤어?"라고 묻는 걸 보니 뭔가 보는 것 같군요.

 

그렇다면 뉴스나 TV 프로그램일 가능성이 높겠죠. 그런데 앞에 수식어가 "주말에"입니다.

 

그렇다면 주말에 볼 수 있는 무언가군요. 주말에 보는 뉴스? 주말에 보는 TV 프로그램? 

 

아, 주말에 하는 유명한 TV 연예 프로그램 "런닝맨"이 떠오릅니다. 발음도 비슷해보입니다.

 

그렇다면 분명히 귀로는 "넌닌맨"이라고 들었던 단어가 사실은 "런닝맨"일 가능성이 높겠죠. 

 

따라서 친구의 질문은 "주말에 런닝맨 봤어?"일 겁니다.

 

사람은 이렇게 뇌의 인지 작용을 거쳐 오류를 보정하고 제대로 알아듣습니다.

 

흔히 우리말로는 "개떡같이 말해도 찰떡같이 알아듣는다"라고 표현합니다. 

 

실제로 인간의 뇌는 찰떡같이 알아듣죠. 같은 질문을 기계에게 해보죠.

 

분명히 음향 모델은 "넌닌맨"으로 인식하겠지만 언어 모델을 적용하면 결과의 확률이 변하게 됩니다.

 

"넌닌맨" = 음향모델 80% + 언어모델 1%

 

"런닝맨" = 음향모델 22% + 언어모델 90%

 

이렇게 되면 전체 확률은 "런닝맨"이 훨씬 더 높기 때문에 기계는 "런닝맨"으로 인식합니다.

 

빅스비에 진짜로 말해봄..

 

 

7. 컴퓨터는 어떻게 언어의 사전 지식을 공부하는가

 

언어 모델은 우리가 일상에서 자주 쓰는 문장에서 출현하는 단어의 확률을 학습합니다.

 

보통은 책이나 뉴스의 문장으로 학습해서 책이나 뉴스에 많이 나오는 단어일수록 더 높은 점수를 부여하죠

 

"넌닌맨"으로 들었지만 책이나 뉴스에서 "넌닌맨"이라는 단어를 본 적이 없기 때문에 언어 모델은 "넌닌맨"일 확률은 1%이며 대신에 "런닝맨"일 가능성이 90%라고 말합니다.

 

아마 연예 뉴스에 "런닝맨"이라는 단어는 자주 등장했을 거에요.

 

게다가 여러 문장에서 "런닝맨" 단어 근처에는 "주말"이나 "보다"같은 단어가 있었을 겁니다.

 

따라서 "주말"다음에 "런닝맨"이 나올 가능성에 매우 높은 가중치를 부여한 거죠.

 

무려 90% 확률로 판단하고 있네요. 이제 기계도 잘못 알아들었더라도 사람과 마찬가지로 이를 보정할 수 있습니다.

 

사전 지식을 바탕으로 "찰떡같이" 알아듣는 거죠.

 

그렇게 해서 기계 역시 "주말에 넌닌맨 봤어?"를 "주말에 런닝맨 봤어?"로 알아듣게 됩니다.

 

요즘 나오는 스마트 스피커에는 화면이 달려 있기도 합니다. 음성인식 결과를 화면에 비춰주죠.

 

스마트폰으로 음성인식 기능을 사용할 때도 스마트폰 화면에 인식된 문장이 나오죠.

 

이때 화면을 자세 살펴보면 음성인식 결과를 들은 순서대로 출력하다가 인식이 끝나면 마지막에 문장 전체를 한번에 보정하는 과정이 보입니다.

 

(실제로 빅스비도 이렇게 되더라..)

 

예를 들어 "주말에" "넌닌맨" "봤어"라고 인식하다가 사용자가 말을 끝맺었다고 판단하면 출력한 문장이 갑자기 "주말에 런닝맨 봤어?"로 바뀌면서 명령이 실행되는 거죠

 

마지막 단계에서 문장을 보정하는 역할이 바로 언어 모델의 작동 방식과 유사합니다.

 

음향 모델이 단어를 인식하면 언어 모델은 보다 그럴듯하게, 실생활에서 쓰일 확률이 높은 문장으로 바꿔주죠

 

이처럼 화면이 있는 음성인식 기능을 사용하면 음향모델과 언어모델의 원리를 간접적으로나마 체험할 수 있습니다.

 

TAGS.

Comments