d라이브러리









인간이 다른 동물과 다른점이 있다면 무엇일까. 많은 것이 있겠지만 그 중에서 가장 중요하다고 할 수 있는 것은 '말'일 것이다. 개가 짖거나, 새가 노래하거나, 돌고래가 초음파로 서로 의사소통을 한다. 하지만 아직까지 인간처럼 복잡한 내용을 담은 음성을 사용해 의사소통을 하는 동물은 없는 것 같다. 아마도 말은 동물이 가진 능력 중에서 가장 진보된 기능이라고 할 수 있을 것이다.

하지만 미래사회를 그리면서 인간과 대화하는 컴퓨터를 생각하는 것은 더 이상 낯설지 않게 됐다. 오늘날 인간은 자식에게 말을 가르치듯이 기계에게 말을 가르치려 하고 있다. 컴퓨터에게 어떻게 인간의 말을 알아듣게 하는지 살펴보기로 하자.
 

인간의 기술


말소리를 0과 1 디지털로

영어를 배우기 시작한 사람이 가장 먼저 하는 일은 바로 알파벳을 익히는 것이다. 그러나 알파벳 하나씩은 소리를 만들지 못한다. 자음과 모음이 결합해 소리의 단위를 이룰 때만 비로소 음성, 혹은 말이라고 할 수 있다. 이러한 말소리의 단위를 음소라고 한다.

말 속에 들어 있는 음소들을 하나하나 인식하려면 어떻게 하면 좋을까. 우선 소리라고 하는 것은 물체의 떨림이므로 사인파와 같은 파형을 상상할 수 있다. 다만 소리는 단순한 하나의 파가 아니라 수많은 사인파들이 합쳐져 상당히 불규칙하게 보이는 파동이다.

컴퓨터는 0과 1이라는 디지털 언어를 사용하므로 음성을 컴퓨터에 넣으려면 파동을 디지탈 형태로 바꾸어야 한다. 즉 연속적인 파형을 토막토막 잘라서 숫자로 바꾼 다음 입력해야 하는데, 이것을 표본화(sampling)라고 한다.

일반적으로 음악을 들을 때 사용하는 CD 플레이어는 약 44kHz로, 즉 1초를 약 4만4천 조각내 저장한다. 그러나 음성은 16kHz 이하로 조각을 적게 나누어도 본래음을 크게 왜곡시키지 않고 저장할 수 있다. 잘게 자르면 자를수록 본래음에 가까워지지만, 그러면 데이터의 양이 많아져 기억용량이 많이 필요하다.
 

(그림1) 음성의 표본화와 프레임


모음보다 자음이 구별 어려워

소리를 디지털 신호로 분리해내는 이러한 기능은 컴퓨터에 흔히 쓰이는 사운드카드가 해준다. 사운드카드에 마이크를 연결해 소리를 주면 사운드카드는 음성을 모두 조각내 디지털 신호로 분해한 다음, 이것을 메모리 또는 하드디스크에 저장한다.

음성을 음소단위로 나누어 저장하려고 할 때 음소가 장음, 단음 등 길이가 서로 달라 어려움이 따른다. 그래서 음성을 약 10-20밀리초(msec, 1백분의 1초)의 일정한 길이로 나누는데, 이것을 프레임이라고 부른다.

이제 이 조각들에서 주파수 스펙트럼을 구한다. 피아노 건반을 여러 개 동시에 누르면 화음이 들리는데, 이것을 다시 각각의 음으로 나누어 펼치는 것과 같다. 백색광인 햇빛이 프리즘을 통과하면 무지개 색으로 나누어지는 것처럼 들리는 소리도 한가지 파동으로 된 것이 아니라 여러 파동이 겹쳐있는 것이다.

음파를 분리시킬 때는 특정한 주파수의 소리만 통과시키는 필터나, 푸리에 변환 등 몇가지 방법이 있는데, 복잡한 계산을 필요로 하므로 여기서는 설명을 생략한다. 실제로는 주파수 스펙트럼 뿐만 아니라 선형예측계수, 켑스트럼 등 여러 가지 복잡한 기술이 사용되고 있다. 이러한 것들을 통틀어 특징 파라미터라고 부른다.

이그림은 에너지의 크기를 색의 변화로 표시해 시간별로 나타낸 스펙트로그램이다.

모음은 주로 낮은 주파수에서 에너지가 크고, 자음은 주로 높은 주파수에서 에너지가 크다. 특히 모음의 경우는 여러 개의 산봉우리 모양을 하고 있는데, 봉우리의 위치를 보면 어떤 음인지 구별할 수 있다. 이에 반해 자음은 상당히 불규칙한 모양을 하고 있어 구별하기가 어렵다.
 

(그림2) 음성 파형(위)과 스펙트로그램(아래)^그림은 '과학동아'를 발음했을 때의 음성파형과 에너지의 크기를 색깔로 나타낸 스펙트로그램이다.


영어가 잘 안들리는 이유

지금 시판되고 있는 말로 거는 전화기는 사용하기 전에 몇 개의 단어를 미리 등록해 놓아야 한다. '우리집'이라고 말한 다음 전화번호를 누르고, 다음에는 '본부'라고 말한 다음 전화번호를 누른다. 나중에 '우리집'하면 우리집으로, '본부' 하면 본부로 전화가 걸린다.

우리집, 본부 등을 기계가 구별할 수 있는 것은 처음에 발음할 때 각각의 소리에 대해 특징 파라미터를 구해 저장해 놓았기 때문이다. 이처럼 비교를 위해 미리 등록해 놓은 파라미터를 표준패턴이라고 한다. 기계는 이제 새로 들은 음성의 특징 파리미터를 구한 다음, 먼저 저장해 놓은 것들과 차례로 비교해서 가장 비슷한 것을 그 말로 인식하는 것이다.

그런데, 문제는 사람이 음악시간에 발성연습을 하듯이 모음을 하나하나 발음하지 않는다는 점이다. 말을 할 때는 몇 개의 자음과 모음을 번갈아 가며 발음하는데, 이렇게 음소들이 이어지면 특징 파라미터의 모양이 조금씩 변해 버리는 것이다. 즉 음성은 연속해서 발음되기 때문에 음소들 사이에서 이것도 저것도 아닌 애매한 특성이 나오게 된다. 영어 공부를 할 때, 아무리 애를 써도 미국인이 발성하는 모든 음소를 받아 적을 수 없는 것도 이 때문이다.

이 문제점 때문에 음소를 하나하나 인식하는 것보다 아예 단어를 통째로 인식하는 방법이 개발됐다. 단어를 인식하려 할 때도, 앞서와 같이 발음된 단어를 프레임으로 나눈 다음 특징 파라미터(벡터)값을 계산해 이 값들의 열을 구하면 된다.

그래서 그림와 같이 미리 저장해 놓은 단어의 파라미터값과 처음부터 하나씩 차례로 비교해 가장 가까운 것을 찾는 것이다.
 

(그림3) 각 소리에 따른 주파수 스펙트럼


언제나 똑같이 발음해야

이 방법에서도 문제는 단어를 발음하는 시간이 항상 같지 않다는 것이다. 단어를 아주 빨리 발음하면 프레임 수가 적어지고 천천히 발음하면 프레임 수가 많아진다. 이렇게 되면 서로 비교해야 할 파라미터값의 수가 서로 달라진다. 그래서 프레임 수가 너무 많으면 중간에서 일정한 간격으로 빼 버리고, 너무 적으면 중간에 같은 프레임들을 집어 넣어 그 개수를 맞춘다.

'과학동아'를 '과아학동아'라고 앞을 길게 발음하고, 또 한번은 '과학도옹아'라고 뒤를 길게 발음하면 어떻게 될까. 차례로 비교하게 될 파라미터값들이 서로 어긋나서 차이값의 총합이 많게 나올 것이다. 그러면 앞 단어에서 '과아' 부분을 줄이거나 뒤의 단어에서 '과' 부분을 늘여야 한다.

혹은 앞 단어에서 '동'을 늘이거나 뒤의 단어의 '도옹'을 알맞게 줄여야 할 것이다. 이 단어들을 어디서 어떻게 늘이고 줄여야 할지 쉽게 알 수 없으므로 이렇게 저렇게 바꾸어 봐야 한다. 그렇게 하다 보면 단어 하나를 인식하는 데 하루 종일 걸릴 수도 있다. 사람의 머리 속에서는 조금씩 다른 발음들이 순간적으로 자연스럽게 인식되는 것을 보면 정말 신기한 일이다.

옆의 그림을 보자. 비교해야 할 두 단어의 파라미터값들이 가로와 세로로 배열돼 있다. 빈 간에 점을 찍어 그 행과 열의 위치에 있는 파라미터값들을 비교해보자. 잡음이 없이 순수하게 단어만 있다면, 발음을 늘이더라도 단어의 시작점과 끝점은 당연히 맞아야 한다.

그래서 이 문제는 단어의 시작점에서 끝점까지 비용이(대응하는 파라미터값 사이의 차이값의 합) 적은 경로를 찾아가는 문제로 생각할 수 있다. 그러나 모든 경로를 계산해서 가장 잘 맞는 것을 찾으려면 하루종일 계산해야 한다. 그러면 컴퓨터에게 말을 한 사람은 컴퓨터가 알아듣기도 전에 이미 먼 길을 떠난 후일 것이다.
 

(그림4) 동적 접합법(dynamic matching)&발음된 음성의 길이가 다르더라도 두 단어를 비교해 인식할 수 있다.


표준과 비교해서 목소리 알아

여기서는 전산학 알고리즘 분야에서 아주 흔하게 쓰이는 동적 프로그래밍이라는 것을 사용한다. 이 원리는 간단하다. 서울에서 대전을 거쳐 부산까지 가는 데 드는 최저비용은, 서울에서 대전까지의 최저비용과 대전에서 부산까지 최저비용을 합한 것이다.

대구를 거쳐가는 방법도 그렇고, 광주를 거쳐 가는 방법도 그렇다. 시작점에서 어느 한 위치까지의 최소 누적 거리와 이 점에서 끝점까지의 누적거리를 합한 것은 시작점에서 끝점가지의 최소 누적 거리와 같다. 따라서, 그림에서도 모든 점에 대해 처음부터 차례로 시작점에서 이 점까지의 최소 누적 거리, 이 점에서 끝점까지의 최소 누적 거리를 찾으면 된다.

여러 단어 중에서 하나를 골라내는 방법은 다음과 같다. 사용하고 싶은 단어들, 예를 들어 우리집, 본부, 학교를 한번씩 발음해 파라미터를 저장해 놓는다. 다음에 '우리집'이라고 발음했다고 하자. 기계는 이 소리의 파라미터를 구하고, 이것을 앞서의 우리집, 본부, 학교와 차례로 비교한다.

파라미터의 차이값을 합해서 파라미터 차이값의 합이 가장 작은 단어가 지금 소리구나 하고 인식하면 된다. 이 방법을 사용하면 현재 말로 거는 전화기와 같은 기능을 하는 프로그램을 만들 수 있다. 표준패턴을 만들 때 하나의 단어를 몇 번씩 발음해 조금 다르게 발음하더라도 비교할 파라미터를 만들어 놓으면 말소리를 인식하는 성능이 더 좋아질 것이다.

온가족 알아보는 기계

말로 거는 전화기에 어머니 목소리를 등록해 놓으면 아버지 목소리는 잘 인식하지 못한다. 우리가 영어를 잘 알아들으려면 여러 사람의 음성으로 듣는 연습을 하듯이 컴퓨터도 인식률을 높이려면 많은 사람의 목소리를 학습해야 한다.

많은 사람이 사용하려면 수많은 사람의 목소리를 등록해야 하는데, 만일 1천명의 목소리를 녹음한다면 그 메모리의 값도 문제지만, 하나씩 비교하는 시간도 엄청날 것이다.

이를 위해 제안된 것이 은닉 마르코프 모델(hidden Markov model, HMM)이다. HMM을 사용하면 수 많은 사람의 목소리를 모두 학습할 수 있다. 이 방법은 현재 가장 성능이 좋은 방법으로 알려져 있으며, 가장 많이 사용되고 있는 그야말로 음성인식계의 '슈퍼 모델'이다.

이 모델을 이해하기 위해 작은 우리동네를 생각하자. 동네에는 슈퍼마켓, 약국, 문방구, 편의점, 식료품점, 과일가게, 생선가게, 서점, 완구점 등이 있고, 서로 왕래할 수 있게 길이 나 있다.

동네에는 회사 다니는 아빠, 가정 주부인 엄마, 대학생 언니, 고등학생 오빠와 초등학교 다니는 영희가 있다. 이 중에서 한 사람이 이곳 저곳을 돌아다니며 배추, 무, 고등어, 여성잡지를 차례로 샀다고 하자. 이 사람은 어디 어디를 들렀으며, 누구일까?

답이 엄마라고 하는 사람이 많을 것이다. 이런 것들을 사는 사람이 엄마일 확률이 가장 크기 때문이다. 이 상황을 말하는 사람과 이를 인식하는 컴퓨터로 바꿔보면, 다섯 명의 사람은 각기 다른 다섯 개의 단어라고 할 수 있다. 배추, 고등어, 잡지 등은 사람이 말을 할 때 입에서 나오는 여러가지 형태의 소리, 즉 앞서 설명한 프레임이다. 말을 하는 사람은 문제를 내는 사람이고, 말을 인식하는 컴퓨터는 문제를 맞추는 사람이다.

확률로 음성 알아맞혀

HMM에서는 사람이 발음한 프레임들을 늘어놓고, 이 소리들이 과연 어느 단어에서 나올 확률이 가장 클까를 계산하는 것이다. 예를 들어 누가 '텔레비전'이라고 했다면 컴퓨터에게는 이 단어가 잘게 잘라진 프레임들의 연속으로 들린다.

컴퓨터는 텔레비전을 이루는 각 프레임들이 연결돼 텔레비전이라는 단어로 될 확률이 라디오, 수박 같은 다른 단어로 될 확률보다 훨씬 높다는 것을 계산할 수 있다. 따라서 이 음성은 텔레비전으로 인식되는 것이다.

그런데 문제의 답이 엄마라고 대답한 사람은 미리 엄마일 경우에 그런 배열의 일을 할 확률이 많다는 것이 학습돼 있기 때문이다. 그렇다면 컴퓨터는 어떻게 확률을 알 수 있을까.

컴퓨터는 말을 들으면서 경험을 통해 학습하지 못하므로 미리 각각의 프레임들이 연결돼 의미있는 단어를 만들 확률을 미리 계산해 놓아야 하는 데, 이것을 학습이라고 한다. 이제 수 많은 사람의 목소리를 녹음해 각 확률값들을 계산해 놓는다.

이를 좀더 단순화시켜 보면, 컴퓨터에 미리 수많은 사람의 목소리를 녹음해서 텔레비전이 텔레비젼, 텔레비죤, 테레비죤, 텔리비전 등으로 소리가 날 수도 있음을 학습시켜 이 소리들을 대표하는 값이 텔레비전이라는 것을 알게 하는 것이다.

잡음까지 극복해야

이 밖에도 음성을 인식하는 방법은 매우 다양하다. 앞서 설명한 동적정합법이나 HMM 이외에도 신경회로망을 이용한 인식 방법이나 전문가 시스템을 이용한 방법 등이 있다.

지금까지 음성을 인식하는 방법을 간단하게 소개했지만, 이것은 음소나 단어를 인식하는 방법에 관한 것으로, 음성을 인식하기 위한 기술의 극히 일부분에 지나지 않는다. 완전한 문장을 인식하기 위해서는 문법이 사용돼야 한다. 우리가 영어의 문법을 모르는 채 수십만 단어를 모두 외운다고 해서 영어를 이해할 수 없는 것과 같다.

또한 내용의 이해가 병행돼야 애매한 소리도 충분히 인식할 수 있다. 이외에도 기침소리나 "에--"하는 소리와 같은 의미없는 소리와 말을 구별하는 문제, 소음이 심한 차 안에서의 음성을 인식하는 방법 등 앞으로도 풀어야 할 과제는 너무나도 많다.
 

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1998년 03월 과학동아 정보

    🎓️ 진로 추천

    • 컴퓨터공학
    • 언어학
    • 정보·통신공학
    이 기사를 읽은 분이 본
    다른 인기기사는?