인공지능관련/EM

음성인식 소개1

학위논문통계 2017. 2. 6. 02:05

 

 

 

0.

 

포커에서도 인공지능이 이겼다고 나오는데 이건 알파고보다 별로 인상적이지 않네요. 통계 전공하는 입장에서는 이건 알파고보다 훨씬 쉬운 문제라 보입니다. 더군다나 계임한 포커 선수들이 이전 게임 정보를 알고 있으면 속임수하는 것도 별 어려운 문제라 보이지 않습니다. 단순한 확률문제나 패턴 추적 문제에 불과한 것 같고요.

 

알파고는 선수 개인의 특징을 알아도 이걸 프로그램에 구현하기 힘듭니다. 사람은 알파고 시합을 많이 봐서 그 특징을 알아내면 그 약점을 파고 들기 쉽습니다. 그러나 알파고는 개별 사람의 약점을 파악해도 알고리즘상 이걸 이용하기 힘들다는 것이죠.

 

 

알파고나 포커게임 인공지능이나 상업적으로는 거의 도움이 안됩니다. 그러나 이런 개발 과정에서 많은 공부와 경험을 쌓게 된다는 것이죠.

 

 

 

1. GMM(박쥐소리 인식)과 HMM(음성인식)에서 오류 수정

 

앞에서 쓴 글 중에 좀 오류가 있는 것 같아서요. 현재 판단하기에는 그렇습니다.

 

우리가 혼합모형에서 설명할 때 은닉변수 U가 성별이나 남녀, 또는 연령대이면 청소년, 성인 이런 식으로 은닉변수에 어떤 의미를 부여했습니다. 또 HMM일 경우 은닉변수가 날씨라면 맑음, 흐림, 비/눈 이런 식으로 분류하는 등 은닉변수에 대한 의미를 부여했고요.

 

음성인식에서 여기를 방문한 분이 올린 내용 중에서는 이런 것이 있었습니다.

 

 

 [출처] 부산대학교  한국어 정보처리 연구실 - 품사태거 - 정성원 

 

 

 

초록색 사각 부분이 우리가 관찰하는 data이고 아래가 히든변수라고 생각할 수 있습니다.

 

좀 간단한 예를 들어 보면 영어에서 히든 변수가 주어, 서술어, 목적어 이렇게 세 개 유형이 있다고 보죠. 먼저 말한 사람의 음성을 듣고 단어를 인식합니다. 이게 다음의 2가지가 유력하게 나왔다고 보죠

 

1. " I bought books"

 

2. " I boat books"

 

 

단어 인식시 두 번째 단어에서 bought 보다 boat일 가능성, 확률이 더 높게 나왔어도 우리의 인식은 1번 “I bought books"가 맞다고 판단할 것입니다. 이게 우리가 지금껏 배운 문법구조와 일치하니까요. HMM에서 2번 대신 1번을 선택하게끔 하는 게 히든 변수인 문장구조론입니다.

 

 

그래서 히든변수를 어떻게 정의하느냐가 매우 중요한 문제라고 생각할 수 있습니다.

 

그럼 단어 인식에서는 이 히든 변수를 어떻게 정의할 것인가 하는 문제가 부딪칩니다. 문장을 인식하기 위해서는 그 이전에 단어에 대한 인식이 선행이 되어야 하죠. 물론 단어 인식을 하지 않고 문장 인식을 할 수도 있겠지만 이건 그리 쉽지 않을 것이라 생각합니다.

 

즉, 먼저 단어 인식부터 하고 다음으로 문법적으로 맞는 문장인식을 하고 그 다음 가장 어려운 단계인 여러 가지 문맥적인 해석 문제로 넘어가는 것이죠.

 

 

다음은 “Show all alerts"라는 문장을 HMM을 적용하여 음소단위로 인식하는 경우입니다.

 

 

 

 

실제로는 이런 문장 단위로 분석을 할 것 같지 않습니다. 일단 단어별로 음소 단위로 인식하는 것으로 알고 있습니다. 물론 text-dependent헌 경우, 즉 사람이 뭘 말할지 이미 아는 경우, 요새 나오는 음성 인식 전자 제품의 경우이죠. 할 수 있는 기능이 몇 개 안되니까 사람들이 기계에 말 할 수 있는 문장도 몇 개 안됩니다. 이런 경우 문장 단위로 분석하고 음성 특성 변수도 간단하게 몇 개 뽑아 모형도 복잡하게 하지 않고 숫자 인식 처럼 간단한 뉴런넷으로 해도 충분할 겁니다.

 

 

그래서 전부터 단어 인식할 때 이 히든변수를 뭘로 정의할까 매우 궁금했습니다. 그러나 지금 읽어 본 바로는 단어 인식의 경우 히든 변수에 특별한 의미를 부여하지 않는 것 같습니다.

 

 

우리가 연구하는 단어 모임을 만들고 그리고 각 단어마다 각각의 HMM 모형을 설정합니다. 예를 들어 사람이 말하는 숫자 인식의 경우 “영”, “일”, “이”, ...,“구” 이렇게 10개의 단어 모임장을 설정하고 각각의 단어에 대해 따로 HMM을 모형을 만들어 적용한다는 것이죠. 각각의 단어에 대해 모수 추정은 어떤 사람에게 계속 읽어 보라든지, 아니면 수 많은 사람들이 발음한 것을 가지고 이 데이터(즉 표본)를 가지고 모수 추정을 한다는 것이죠.

.

스포츠 뉴스에 대해 음성 인식을 한다면 스포츠 뉴스에 많이 나오는 단어들의 모임(사전)을 먼저 설정하고 이 사전에 있는 단어별로 각각 HMM 모형을 적용한다는 것이죠.

 

 

그럼 각 단어마다 HMM을 적용하는데 여기서 히든 변수는 무슨 의미가 있을가요? 현재 제가 읽은 본 바로는 아무런 의미가 없는 것 같습니다. 단지 분포 가정에서 단순한 하나의 분포보다 복잡한 분포, 즉 몇 개의 분포의 결합 즉 혼합모형을 쓴다는 의미 밖에 없습니다.

 

 

즉 관찰치 Y가 정규분포라고 하는 단순한 가정을 하면 데이터가 분포f(y)=N(m, S)을 한다고 가정하는 것이고 이걸 히든변수가 있는 혼합분포를 가정하면 f(y)=a1*N(m1, S1)+a2*N(m2, S2)+a3*N(m3, S3) 이런식으로 가정한다는 것이죠.

 

두 개의 분포의 차이를 그림으로 그려 보면 다음과 같습니다. 우리나라 박사 논문에서 뽑았습니다.

 

 

 

 

 

 

첫 번째는 일반적인 정규분포이고 산 정상이 하나입니다. 그림의 윗쪽이고요, 두 번째 3개의 정규분포의 결합 형태는 아래쪽에 있는 그림으로 뚜렷한 산 정상이 3개인 경우입니다. 정규분포의 결합이지만 정규분포는 아니지요. 회색부분이 실제 현실에서 분포입니다. 이럴 경우 위쪽 single mixture로는 실제 분포를 잘 추정할 수 없죠. 그러나 3개의 component가 있는 아래쪽의 정규분포 결합 분포의 경우 실제 분포를 잘 추정할 수 있겠죠. 그래서 이런 경우 히든변수 상태가 가지고 있는 의미는 중요하지 않습니다. 단지 현실 분포에 잘 적합할 수 있는 혼합모형을 쓴다는 뿐입니다.

 

 

앞에서도 계속 강조했지만 이렇게 복잡하게 하면 현실에 잘 적합할 수 있지만 나중에 다른 데이터에서는 엉망이 될 수 있고, 추정이나 계산에서 여러 가지 문제가 생길 수 있습니다.

 

 

실제로는 각 변수가 다변량 정규분포를 가정합니다. 소리에서 각 프레임 당 특징변수를 여러 개 뽑는다는 것이죠. 단지 여기서는 단일 정규분포와 정규분포의 선형결합 분포가 어떻게 다른지 보여준 것입니다.

 

 

이 혼합모양에서 분포 가정은 세 개의 정규분포를 갖는 확률변수 X, Y, Z의 선행결합인 W의 분포와는 다릅니다. 즉 W라는 확률변수를 다음과 같이 정의하면

 

W=a1*X+a2*Y+a3*Z

 

이때 W의 분포 역시 정규분포를 합니다. 즉 그림의 위쪽 모양을 합니다.

 

 

 

 

2. 박쥐소리 인식(GMM)

 

박쥐소리 인식에서 지난번 글에서 class를 히든변수의 정의에 나오는 component로 잘못 해석했습니다. 여기서도 단어 인식의 개별 단어와 마찬가지로 그냥 상황 분류에 해당합니다. 예를 들어 class가 세 개, 즉 짝지기, 음식, 고립 이 세 가지 상황, class가 있다고 하면 각각의 상황(class)마다 각각 GMM 모형을 적용합니다. 각 상황마다 혼합 정규분포를 가정한다는 것이죠. 이 논문에서는 MFCC 계수를 64개 뽑았다고 합니다. 그러면 각 component마다 64차원 다변량 정규분포를 가정을 한다는 것이죠. 각 상황마다 16개의 component의 결합 다변량 정규분포를 한 것으로 나옵니다. 즉 64개 차원의 다변량 정규분포가 16개 결합된 것을 각 상황에서 소리 특성들의 분포로 가정을 했다고 합니다.

 

하여간 이 논문은 구체적인 면에서 조금 이상합니다. 저렇게 복잡하게 하면 모수의 수가 어마어마하게 많아지거든요. 이걸 제대로 추정할 수 있는지 궁금합니다.

 

 

 

3. 음성 인식 과정

 

 

음성인식은 저도 옛날에 공부한 적이 없기 때문에 지금 인터넷에서 자료를 찾아서 배우고 있습니다. 아직까지 많이 헷갈리는 부분이 많습니다. 잘못 이해하고 있는 부분은 계속 조금씩 수정해서 쓰겠습니다.

 

지금까지 읽어 본 바로는 음성 인식 과정은 다음과 같습니다. 앞 부분은 하드웨어에 전기, 전자적으로 구현해야 하는 부분이 많기 때문에 사실 이 인공지능은 전기, 전자과에서 많이 연구를 합니다. 특히 전산학과는 소프트웨어적인 부분을 많이 연구하고요.

 

제 블로그을 계속 읽은 분들은 느끼겠지만 이쪽은 전산은 그리 크게 요구하지 않습니다. 수학, 통계학이 더 중요합니다. 공학쪽에서는 자동제어 분야 정도이겠죠. Laplace 변환이나 퓨리에 변환이 공학에서 어떻게 응용되는지 알려면 자동제어 책을 공부하시면 됩니다. 전산에서 언급한다면 수치해석 분야 정도고 자연어 처리는 전산 학부 나오면 누구나 다 할 줄 안다고 봐야 합니다.

 

 

문재인과 안철수가 4차 산업혁명으로 논쟁하는 모양인데 참 코메디하고 있습니다. 지금 전산 출신 대부분 사실상 “밤샘하는 비정규직 책상 노가다” 신세입니다. 이런 것부터 해결하지 못하면서 뭔 4차 산업혁명을 하겠다고 하는지.

 

 

다음은 음성인식의 전반적인 과정입니다.

 

1) 아나로그를 디지털로 전환합니다. 이건 A/D 또는 C/D 컨버터라고 하드웨어적으로 구현 되어 있죠.

 

2) preprocess를 합니다. 노이즈 제거라든지, 아니면 묵음을 제거한다든지 하는 작업입니다.

 

3) 단어 인식의 경우 대부분 한 단어 발음하는데 1초 내외 걸릴겁니다. 어떤 단어를 발음하는데 1초가 걸렸다고 하죠. 그럼 이 1초내 디지털 소리를 전부 다 분석하는 것이 아니라 여러 프레임으로 짤라 냅니다. 이렇게 프레임을 짤라 내는 것은 1초 내 디지털 데이터를 전부 다 FFT를 하려면 시간이 너무 많이 걸린다고 합니다.

 

그리고 이 프레임을 짜를 때 서로 overlapping이 되게끔 한다고 합니다. 몇 개의 프레임으로 할 지, 그리고 각 프레임 내에서 몇 개의 디지털 소리를 sampling할지, 또 프레임간의 overlapping하는 정도는 어떻게 설정할지는 인터넷 자료마다 설명이 다 다르네요.

 

각 프레임 마다 데이터를 샘플할 때 통상 2M 형태로 뽑는다고 합니다. 그래야 푸리에 변환이 빠르게 계산된다고 합니다. 만약 각 프레임에서 뽑은 데이터 개수가 2M이 되지 않으면 양쪽에 가짜 숫자인 0으로 패딩한다고 합니다.

 

 

 

박쥐논문에서는 각 프레임을 20ms(ms=1/1000초)로 하고 겹치는 부분은 19ms으로 했다고 하는데 좀 이상하네요. 겹치는 부분이 너무 크다는 것이죠. 프레임은 20ms로 하고 만약 겹치는 부분이 없으면 1초에 50개의 프레임이 되죠. 각 프레임당 data를 몇 개 뽑았는지는 나오지 않고 전체적으로 sampling rate가 256KHz로 나오네요.

 

 

HMM이 설명되어 있는 음성인식의 고전적인 논문인 Lawrence 논문(1989)에서는 각 프레임당 300개 데이터를 뽑고, 또 이 프레임은 45ms에 해당합니다. 그리고 이 데이터 100개 이후에 300개 데이터의 새로운 프레임을 뽑습니다. 그래서 프레임이 중첩되는 부분은 30ms에 해당합니다.

 

 

4) 각 프레임 마다 윈도우를 취합니다. 통계학 시계열 분석에서는 taper한다고 합니다. 연속형 시그널을 일정 구간에서 디지털로 전환하면 그 구간 안에서 값들은 점프를 합니다. 불연속 데이터가 되는 것이죠. 이 점프가 크면 퓨리에 전환을 하면 정확한 주파수를 파악하기 힘듭니다. 이걸 spectral leakage라고 합니다. 이 현상을 줄이기 위해 window 또는 taper라는 것을 곱합니다. 윈도우 취하는 것은 이미지 프러세싱에서 마스크를 취하는 것과 같습니다.

 

다음의 window의 종류입니다.

 

 

 

 

 

사실 여기까지는 통계학 하는 사람이 잘 몰라도 되는 부분입니다. 이 이후에 실제 모형에 들어가는 변수를 찾아내는 부분이기 때문에 통계학 하는 사람들에는 중요한 부분입니다.

 

 

5)

 

시간 흐름에 따를 주파수 변화를 추적하는 spectrogram를 만든 후 여기서 cepstrum을 찾습니다. 여기서 여러 가지 방법이 있는데 최근에는 MFCC를 많이 쓴다고 합니다. 이것도 인터넷 자료 마다 전부 설명이 다르네요. 하여간 이 부분 부터는 통계학에서 중요한 부분이니까 나중에 조금 자세히 설명하겠습니다.

 

 

경제학에 한계효용체감의 법칙이 있죠. 처음 단 것을 먹을 때는 기분 좋다가 단 걸 계속 먹으면 단 맛의 효용이 떨어지죠. 이게 일반 자연 현상에서도 있습니다. “Weber-Fetch law"라는 것인데요. 옛날 화장실 갈 때 시간이 지날수록 냄새에 둔감해진다든지 또는 어두운 극장에서 나와 햇별을 볼 때 시간이 지날수록 적응된다든지 이런 것이죠. 그래서 인간이 느끼는 것과 물리적인 현상은 다음과 같이 설명됩니다.

 

인간의 인지=log(물리적 현상)

 

 

통계학에서 log을 취하는 경우가 많은데 이것도 이런 법칙의 적용이라 할 수 있습니다. log을 취하면 계산상의 편리함이 많기도 하지만 데이터가 주는 물리적인 증거의 힘과 인간이 느끼는 증거의 힘은 log 관계가 있다는 것이죠. 예를 들어 처음 최순실 사건이 터질 때 여기서 받는 충격은 매우 크지만 나중에 추가로 나오는 사건이 우리에게 주는 충격은 점점 줄어든다는 것이죠.

 

소리도 마찬가지로 합니다. 고주파의 경우 우리는 매우 덤덤하게 반응하고 저주파에 민감하게 반응한다고 합니다. 고주파의 대표적인 예가 노이즈인데 예를 들어 주변에서 “잉잉”거리는 소리이죠. 이 “잉잉”거리는 소리에는 우리가 평상시 매우 둔감하다는 것이죠.

 

그래서 이 cepstrum 분석에서는 log를 취하고 이 인간이 민감하게 반응하는 저주파의 특성을 뽑아내려는 것입니다.

처음 하는 작업이 spectrogram을 찾는 것입니다.

 

 

퓨리에 변환은 원 시그널 즉 시간(x축)에 따른 소리의 높이(y축)를 주파수(x축)에 따른 power spectrum(y축)으로 만들어 줍니다. 그러나 우리가 원하는 것은 시간(x축)에 따른 주파수(y축)입니다. 이 시간에 따른 주파수(y축) 그래프를 spectrogram이라 합니다.

 

다음 그림을 보죠.

 

 

 

 

 

분석 영역 시간대에서 프레임으로 쪼갭니다. 이 쪼개진 프레임마다 FFT을 적용하여 주파수 흐름(x축)에 따른 세기(power spectrum:y 축)을 그립니다.

 

 

각 프레임에서 구해진 퓨리에 변환 결과를 0-255까지 디지털 값을 줍니다. 즉 세기가 가장 높은 것은 255, 검은색, 세기가 가장 낮은 것은 0, 즉 흰색으로 표시한다는것이죠. 이걸 시간별로 줄 늘어 놓으면 spectrogram이 됩니다. 다음 그림을 보죠.

 

 

 

 

 

 

 

 

 

 

다음 그림의 아래 부분이 논문에서 자주 나오는 그림입니다.

 

 

 

 

시간에 따라 이 spectrogram의 변화를 한 번 보죠.

 

 

 

 

 

그럼 단어 인식에서 각 단어 마다 spectrogram이 어떻게 다른지 한번 그림을 볼까요.

 

 

 

 

 

 

 

 그림에서 각 단어별로 MFCC를 구해 혼합 HMM 모형을 각각 적용시킵니다.  실제 MFCC 값이 어떤 것인지 한 번 볼까요. 다음 그래프에서 산 정상에 있는 빨감 점이 MFCC입니다.

 

 

 

앞에서 이야기 했지만 cepstrum은 로그를 취합니다. 그래서 위의 작업은 log를 취해서 작업을 해야 합니다. 다음에 조금 자세히 쓰죠.

 

 

그런데 제일 문제는 각 프레임당 MFCC를 구했는데 이걸 실제 어떻게 변수화해야 하는 문제가 생깁니다. 예를 들어 박쥐에서는 프레임 당 64개 MFCC를 구하였는데 음소당 10개 프레임이 있다고 하면 64*10이라는 어마어마한 변수가 생깁니다. 즉 640차원의 다변량 정규분포를 가정해야 한다는 것이죠. 거기에다 이런 다변량 분포의 16개의 결합시킨다는 것이죠. 왜냐하면 혼합모형이기 때문이죠.

 

실제 분석에 들어가는 변수 설정에서 분석 단위인 음소와 프레임을 어떻게 연결할 지, 그리고 HMM에서 시간의 흐름을 음소와 프레임과 어떻게 연결할 지 이런 문제에 대한 해답이 인터넷 자료에서 명확하게 설명하고 있지 않네요.

 

 

 

하여간 어떤 식으로 변수(즉 음성 시그널의 특성치)가 정의되었다고 하면 이걸 기존 통계학 방법론인 PCA(주성분 분석, SPSS에 있는 요인분석과 비슷함), MDS, 또는 군집분석 등 다양한 분석을 결합해서 다른 분석들을 할 수 있습니다. 박쥐논문에서는 PCA를 써서 변수를 축약해서 분석한 것들이 있네요.

 

 

또는 이 변수들은 신경망 분석에서 투입변수로 넣어 신경망을 적용할 수 있을 겁니다. 이렇게 한 논문은 아직 읽어 보지는 못했습니다.

 

 

 

6)

 

단어장에 있는 각 단어마다 혼합모형 HMM을 설정하여 모수를 추정한 다음 음성 데이터 상(즉 우리가 뽑은 MFCC 계수 값) 어떤 모형(어떤 단어)가 가장 적절한지, 가능성 함수 값이 가장 큰 지 등을 조사하여 단어를 범주화합니다. 박쥐소리에서는 UBM이라는 것을 사용했고요.

 

예를 들어 “I", "love", "you" 이렇게 3개의 단어를 구별하는 문제라고 하죠. 그럼 ”I"에 해당하는 혼합 HMM 모형을 만들어 여기에서 모수들을 추정하고요. 이 모형을 모형1이라 하고요. “love"에 해당하는 혼합 HMM 모형을 모형2라고 하고, ”you"에 해당하는 혼합 HMM 모형을 모형3이라 합니다. 이 3개의 모형의 모수들을 각각 추정하고요. 물론 이 모수들을 추정할 때 특정 사람이나 또는 여러 사람들에게 발음을 하라고 해서 training data를 만들어 각 모형별로 모수 추정을 합니다.

 

그럼 다음 어떤 사람이 발음을 했다고 하죠. 이 발음 data(MFCC 등)를 y라고 하면

 

 

f(y|모형1), f(y|모형2), f(y|모형3) 값을 구해서 가장 큰 값이 나오는 것을 선택하면 됩니다. 즉 f(y|모형2)가 가장 큰 값이 나오면 이 발음을 듣고 “아 사람이 love라고 말했구나” 이렇게 판단한다는 것이죠. 하여간 이 방법은 주류 통계학 개념이고 베이지안 개념은 아닙니다.

 

 

박쥐논문에서는 LRT를 이용한 UBM(universal background model)이라는 것을 썼습니다. 이 UBM도 인터넷에서 뒤져서 읽어 봤는데 자세하게 설명한 자료는 없는 것 같습니다. 그러나 대강 추측은 됩니다. 나중에 조금 자세히 설명하겠습니다.

 

통상 통계학에서 많이 쓰는 AIC(아카이케 정보 기준) 계통과 어떻게 다른지 모르겠고요. 이런 것 논문 써도 한국에서 박사 논문 정도는 줄 것 같은데요.

'인공지능관련 > EM' 카테고리의 다른 글

HMM계산1  (0) 2017.02.13
인간감정인식:박쥐소리 인식  (0) 2017.01.18
HMM  (0) 2016.12.28
혼합모형 EM simulation  (0) 2016.12.14
PET, 뇌촬영, EM2  (0) 2016.12.12