Speech recognition(음성인식) (2) 특징 추출(feature extraction)

이전 포스트에서는 음성인식의 개요와 사람이 어떻게 음성을 인식하는지에 대해 다루어 보았다 이번 포스트에서는  공학적으로 음성 인식을 어떻게 적용할지에 대하여 다우어 보겠다.

이전 포스트에서 위 waveform에서 어떻게 word sequence 를 추출할지에 대하여 질문을 던졌다.

위 그림만 봐서는 어떤 word인지 감을 잡을 수 없으나 무었인가 규칙이 있을 것 같다.

bird1
bird2

위는 각기 다른사람이 bird를 발음 한것이다. 

음운적으로 비슷한가? 그러면 waveform으로 충분히 구분 가능한 특징이 존재 할 것 같다. 

bird1
bird2

그러나 위의 waveform 만 이용하여 찾는것은 무모하며 특징을 찾는 것이 쉽지 않다. 그렇기에 보통은 주파수 영역으로 변환하여 특징을 찾게된다.

frequency bird  1
frequency bird  2

위 waveform 보다 특징을 추출하는 것이 조금더 편해졌으나 아직은 부족하다. 

위의 audio 파일을 잘 듣게 되면 약간의 잡음이 섞인 것을 알 수 있다.  이러한 잡음을 제거하는 과정과 사람의 인식에 유사하게 바꾸어줄 필요가 있다.

잡음은 보통 신호처리에서 사용하는 필터등을 사용한다. waveform을 보면 잡음은 보통 일관되게 들어오는 것을 알 수 있다(떨림이 일관되게 있다.) 그 값을 상쇄하는 방법 등으로 잡음을 제거한다.

사람의 인식과 비슷하게 만든다는 것은 무슨 소리인가 싶을 것인데 2가지의 방법으로 구현을 한다. 

사람의 가청주파수는 20hz~ 20khz 정도이다 때문에 주파수가 이 이상 혹은 이 이하일 필요가 없으므로 그 주파수를 제한한다. 또한 위에서 waveform을 주파수로 바꾼 그림에서 주파수는 0~8000이다. 

이는 사람이 보통 낼 수 있는 한계 주파수가 4khz이므로 sampling theorem 에 따라서 8khz이면 완벽하게 이를 복원 가능하므로 이렇게 설정한 것이다. 

그렇기에 이 이외의 주파수는 의미가 없으므로 ( 사람이 내는 소리가 아님) 버리는 것이다.

이렇게 처리를 한 다음 필터를 통과시킨다. 사람은 보통 모든 주파수에 대하여 같은 자극을 느끼지 못한다. 이는 달팽이 관의 구조때문인데 저주파는 구분을 잘하지만 고주파는 구분을 잘 하지 못한다. 그렇기에 이를 반영하여  Mel Filter bank라는 필터를 통과시킨다.(아래 그림과 같음)

출처: https://m.blog.naver.com/PostView.nhn?blogId=mylogic&logNo=220988857132&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

위 필터를 적용한뒤 그대로 사용하기도 하지만 약간의 처리를 더 거쳐 Cepstral Coefficient 를 구한 후 사용하기도한다. 전자를 Mel Frequency Spectrogram 후자를 Mel Frequency Cepstral Coefficient 이라고한다.

아래는 위 bird의 Mel Frequency Spectrogram  Mel Frequency Cepstral Coefficient 이다.

bird1
bird2
bird2

음성에서 구분을 가능하게 처리하는 방법에 대하여 알아보았다. 

다음은 위에서 추출한 특징으로 단어 수준의 특징을 추출하는 법에 대하여 알아보겠다. 

우리가 필요한 feature을 추출하여 decoding 하는데에는 아래의 전통적으로 3가지 방법이 존재한다.

  • 음운학적 모델: 어떠한 음운적 특징이 관찰시에 모델이 발생할 가능성을 이용
  • 언어적 모델: 어떠한 단어의 연속이 이어질 가능성을 이용한 모델
  • 사전 편찬 모델: 단어를 sub-word 에 mapping

우리가 위의  waveform에서 추출 가능한 것은 feature이다. 그리고 위 waveform을 통해서 얻으려고 하는 것은 word이다.

그러므로 아래의 2가지 sequences들을 고려해야한다.

  • features: $x_{1:T}={x_1,x_2,…,x_T}$
  • words: ${\omega}_{1:L}={{\omega}_1,{\omega}_2,…,{\omega}_L}$

(Note $L\leq T$)

그러므로

  • $P({\omega}_{1:L})$ 은 language model이 되며
  • $P(x_{1:T}|{\omega}_{1:L})$은 acoustic model이 된다.

Acoustic Model: Hidden Markov Models

Acoustic model은  설명한 waveform을 변환 시키는 방법으로 통하여 특징을 뽑아낸 후 단어 특징을 뽑아 내기 위하여 사용되는 모델이다. 설명하기에 앞서서 hidden markov model에 대하여 간단하게 설명하고 가면 

현 상태의 변화가 오직 이전 상태에만 영향을 받는 연쇄변화를 말한다. 예를 들자면 오늘 날씨는 하루 전, 이틀 전 ,그 보다 더이전에 영향을 받지만 (예를 들어 습도, 기압등의 영향이 있을것이다.) 전등이 꺼졌는지 켜졌는지는 오직 그 이전에 전등이 켜졌는지 꺼졌는지에만 영향을 받는다.  보통 날씨 같은 경우 그 이전의 상태도 고려해야하지만 그 이전 상태가 주는 영향이 지대할시에 markov하다고 가정하여 문제를 해결한다. markov를 적용시에 $s_t$ 는  
$s_{t-1}$에만 의존하게 된다.

아래 표는 markov state를 이용하여 확률천이를 나태난 것이다.


$s_1$

$s_2$

$s_3$
$s_1$001

$s_2$
1/21/20

$s_3$
1/32/30

HMM(Hidden Markov Models)

우리는 음성인식을 하기위하여 speech 즉 음성 데이터를 받게된다. 이러한 데이터의 특징을 우리는 가지고 있지만 ( 보통 MFCC와 같은 기법을 통하여 추출한다.)이 것만을 가지고 Feature를 이해하여 그 모델을 알기는 힘들것이다. 왜냐하면 그 모델의 천이는 감추어 져있기 때문이다. Markov state에서는 그 모델에 대하여 직접적인 관찰이 가능했으나, HMM에서는 그 모델을 직접적으로 관찰하는 것이 불가능하다. 아래의 설명과 사진을 보면 이해가 될것이다.

은닉 마르코프 모델의 이산적인(Discrete) 관점에서 은닉 마르코프 모델은 복원 추출을 하는 항아리 문제를 일반화 시킨 것이라고 볼 수 있다.[16] 다음과 같은 예제를 생각해 보자. 관측자에게 보이지 않는 방이 있고, 그 안에 요정이 있다. 방에는 항아리 $X_{1},X_{2},X_{3},…$가 존재한다. 각각의 항아리에는 $ y_{1},y_{2},y_{3},…$으로 이름이 붙은 공들이 섞여서 들어가 있고, 항아리의 공들이 섞인 상태는 알려져있다. 요정은 방 안의 항아리를 하나 고르고, 항아리 안에서 무작위로 공을 하나 꺼내어 컨베이어 벨트에 올려둔다. 관측자는 컨베이어 벨트 위의 공의 순서를 관측할 수는 있지만, 해당 공들이 뽑혔던 항아리의 순서는 알 수 없다. 요정이 공을 뽑을 항아리를 고를 때는 다음과 같은 특별한 규칙을 따른다 : $ n$번째 공을 뽑기 위한 항아리는 무작위 숫자와 $(n-1)$번째 공을 뽑기 위해 선택한 항아리에만 영향을 받는다. 현재 항아리로부터 하나보다 더 전에 선택된 항아리는 현재 항아리의 선택에 직접적으로 영향을 주지 않는다. 이러한 규칙은 주로 마르코프 특성 (Markov Property)이라 불리며, 따라서 이것은 마르코프 과정 (Markov Process) 이라고 불린다. 이에 대한 설명은 그림 1의 위쪽에 잘 나타나있다.
마르코프 과정 자체는 관측될 수 없고 오직 컨베이어 벨트 위의 공의 나열만 관측이 가능하기 때문에 “은닉 마르코프 과정”이라고 불린다. 이는 그림 1의 아래 부분에 잘 나타나있다. 그림에서 묘사된 바와 같이, 관찰자는 각 상태에서 뽑혀 나온 $y_{1},y_{2},y_{3},y_{4}$만을 관측할 수 있다. 심지어 관찰자가 항아리들의 내부의 공들의 비율을 알고 있고 $y_{1},y_{2},y_{3}$의 세 공들을 관측했더라도 관측자는 여전히 요정이 세 번째 공을 뽑은 항아리(= 상태)를 알 수는 없다. 다만 관측자는 세 번째 공$y_{3}$이 각 항아리에서 뽑혔을 가능도(likelihood)와 같은 정보들에 대해서는 계산을 할 수 있을 뿐이다.

정리하자면 다음과 같다.  음성에서 “bird”는 “bɜːrd” 와 같은 발음 모델을 가진다. 이는 사람마다 차이는 있지만 같을 것이다. 이 음성데이터를 분석하면 시간별로 b,ɜ,ː,r,d 라는 특징이 나타나는 것을 발견 할 수 있을 것이며 우리는 이 모델을 직접적으로 관찰 불가능 하지만 이는 Markov model의 특징을 가진다.(bird에서 이전의 발성과는 상관없이 바로 전 발성에만 특징의존을 함) 그렇게에 우리는 입력 데이터를 이용하여 (스펙트럼 혹은 MFCC) 그 모델이 무었인지 알게되면 발음이 의미하는 것이 무었인지 알 수 있게된다.  이것을 모델링하는 방법에는 많은 방법이 있으니 그것은 다음과 알아보겠다. 

Language Model (N-grams)

위에서 보는 것 처럼 이전 단어를 이용 그 다음에 올 단어를 생성하는 모델이다.  이는 단어 수준의 특징이 추출된 후 문장의 특징을 추출 및 단어 특징 추출을 위하여 사용된다. 앞의 단어의 사전확률을 이용하여 위 단어가 발생할 사전을 가지고 확률을 구한다. 사전으로 모델을 만들기 때문에 자주 사용되는 문장의 경우 성능이 잘나올 것이나 드문 모델의 경우 정확도가 좋지 못할 것이다. 이 모델의 사용예시는  Acoustic model을 통하여 “그 산 가 너무가 많다.” 라는 문장이 생성 되었다면 이를 “그 산은 나무가 많다” 라는 결과로 고치는 역할을 한다.

수식으로 표현하면 다음과 같다.

$$P({\omega}_{1:L})={\Pi}^{L}_{i=1}P({\omega}_{i}|{\omega}_{1:i-1})  {\approx}  {\Pi}^{L}_{i=1}P({\omega}_{i}|{\omega}_{i-N+1:i-1}) $$

여기까지 이론에대한 설명이고 다음 포스팅 부터는 본격적으로 음성인식을 해보도록 하겠다.

references

http://lxmls.it.pt/2017/talk.pdf


댓글을 남겨주세요~