음성인식에서 가장 중요한 부분은 음향모델의 입력값 잡음제거에 있다.
잡음제거를 하기 위해선 음원의 위치를 추정해야 하는데 이를 통해 잡음까지 증폭되는 것을 방지하고 순수하게 인식의 대상인 사용자의 목소리를 정확히 인지할 수가 있다.
하지만 여기서 끝은 아니다.
사람의 음성은 시계열 패턴이다.
시계열 패턴이라는 것은 선후 관계가 있다는 말인데 음성은 그렇기 때문에 20ms의 구간별 분리를 진행하여 다음에 진행될 패턴을 선인지해야 한다.
그렇기 때문에 Input Data의 특성에 민감할 수 밖에 없고 이러한 Input Data는 전기적 처리를 통해 저장매체에 저장된다.
저장매체에 저장될 때 준용하는 방식은 Sampling Rate * Sample된 Byte이다.
이를 토대로 13차 Vector Sequence 형태로 Frequency Domain에 Mapping된다.
이것을 스펙트럼이라고 부른다.
실제 음성을 분석하기 위한 용도로는 스펙트로그램이 사용된다.
스펙트로그램(Spectrogram)은 소리나 파동을 시각화하여 파악하기 위한 도구로, 파형(waveform)과 스펙트럼(spectrum)의 특징이 조합되어 있다.
Input Layer의 값은 이론적으로는 15 Frame * 13차 MFCC = 195 로 이루어지나 이를 개선하여 일반적으로 15 Frame * 40 ( filterbank outputs ) = 600 으로 구성되어진다.
Hidden layer의 경우에는 5~8 ( Layer 당 units는 2,048 units )로 구성되지만 데이터의 양과 종류에 따라 최대 20개의 layer까지 생성하는 것이 실험적으로 나온 hidden layer의 개수이다.
Output layer의 경우 64,000 * 3 = 192,000 개이나 구분이 가능한 seen tri-phone의 개수는 10,000 * 3 = 30,000개 정도로 추산되고 이를 tied states수로 정제하게 되면 6,000~10,000개 정도로 정해진다.
tied states를 산출하기 위해서는 Decision Tree Algorithm을 활용하여 entropy가 최소가 되는 대답을 얻을 때 까지 분기처리를 수행하는데 이는 Overfitting의 위험이 있어 데이터가 많을 경우 Evaluation Set을 활용하여 방지하거나 데이터가 적을 경우에는 Cross Validation을 활용하여 방지한다.
이를 토대로 Input layer와 output layer를 가늠해 보고 해결하고자 하는 문제에 걸맞는 hypothesis를 수립한 후 해결하고자 하는 문제에 적합한 Neural Net Architecture를 설계 후 Parameter tunning을 수행하면서 목적식을 변경해 가며 실험해 나가야 한다.
이 실험을 바탕으로 Optimization Point와 Loss Function에 대한 정립이 필요하다.
하지만 여기서 끝은 아니다.
음성인식의 전체 모델링 관점에서 음성인식의 정확도를 측정하기 위해서는 하기와 같은 다양한 측면의 고려가 필요하다.
즉 음성인식의 전체 모델은 음향모델의 생성확률 * 언어모델의 생성확률로 이루어지고 이를 토대로 문장의 생성확률이 최대가 되는 것을 찾는데 있다.
이에 언어모델에 대하여 살펴보자
언어모델에서 사용하는 n-gram 언어모델은 통계적 모델로써 계산은 간편하나, n의 제약으로 인하여 longer history에 대한 정보를 표현하지 못하는 한계가 있다.
그리고 n-gram 언어 모델은 Memory문제(추정해야 하는 parameter 개수가 많다)와 학습 자료 부족 문제(아무리 Corpus를 모아도 학습자료가 부족)가 있다.
이는 언어모델을 정의하는 P(W)를 구성하는 분자/분모가 0이 되는 문제를 발생시키며 이를 해결하기 위하여 Discounting & Smoothing기법이 출현하게 되었다.
Discounting은 0의 값을 가지는 f(Wi-2, Wi-1, Wi)에 대해 작은 값으로 flooring시키는 것으로 n-gram의 근본적인 문제 추정해야 하는 Tuple Count는 많은데 아무리 Corpus를 모아도 적절하게 추정이 안되는 것을 방지하는 기법으로 활용되었다.
또한 ARPA Format을 도입하여 history를 가지는 모든 이론 상 가능한 bi-gram Tuple에 대해서 bi-gram의 확률의 값을 Back-off를 적용한 다음에 bi-gram 확률의값이 1이 되게 만들어 줌으로써 unseen tuple에 대한 탐지 능력을 확보하였다.
이 언어모델의 검증방안으로는 Perplexity가 사용되는데 이는 언어모델에 의해 추정되는 다음 단어의 평균 수 (average branching factor)로 이해할 수 있다.
또한 언어 모델 구축의 주요 문제점인 sparsensess를 해결하기 위해 카테고리 기반 언어 모델이 출현하여 추정해야 하는 파라미터 개수를 대폭 줄일 수 있었으나 단점으로 단어가 하나의 카테고리에 속하지 않는다는 한계점에 봉착하게 된다.
언어모델에서 추구하고자 하는 방향은 Input Layer 부분에서 입력 차원의 감소 (Word Vector Space) 이를 위해 미리 학습시켜서 경험적 단어 관계를 포함 / word간의 관계가 similarity를 통해 표현되고 Semantic 또는 Syntactic 관점에서 유사한 word들이 continuous vector space 상에서 서로 가깝게 표현되면 다양한 unseen word sequence를 포함하는 문장에 대해서도 generalization을 잘 표현하게 되는 부분에 대한 연구를 강화해야 한다.
Output Layer부분에서는 신경망 구조에서 output layer의 특정 output unit이 생성될 조건부 확률을 추정하는 경우 모든 output unit의 값 대비 특정 output unit의 값의 비율로 측정하는 normalization방법인 hierarchical softmax 방법을 사용해야 한다. 이는 Class-based 언어모델 연구에서 제안된 Auto-Clustering 기법이다.
디코더 부분에서는 크게 Lexical Tree 기반 디코딩과 wFST(Weighted Finite State Transducer) 기반 디코딩(decoding)을 이용한다.
Lexical Tree 기반 디코딩은 HMM, Context 정보, 발음열, 문법정보를 별도로 구현한 후 인식 시 네크워크를 만들어 가면서 탐색한다.
Lexical Tree는 음향학적 특성이 같은 노드들을 공유해 탐색공간을 줄일 수 있지만 leaf node에 도달하기 전에는 언어모델을 적용할 수 없어 인식률이 저하될 수 있다.
WFST는 HMM 모델, context 정보, 문법정보에 사용되는 망을 하나의 통일된 틀로서 결합하고 최적화할 수 있는 장점이 있다. 최근에 발표되는 대어휘(large vocabulary) 음성인식 엔진 대부분이 wFST 기반의 디코더 기술을 사용하고 있는 것으로 알려져 있다
WFST는 결합한 네트워크를 미리 만들어 놓고 탐색하는 방식으로 빠르고 정확하지만 어휘나 언어모델이 약간만 변경되어도 네트워크를 다시 구성해야 하고 어휘와 언어모델이 커지면 네트워크 수립 시에 많은 메모리가 필요하다.
WFST는 유한상태 오토마타(finite state automata)에 가중치와 출력 기호를 추가하여 확장한 것으로서, 기존의 HMM 기반 음향모델, 문맥 의존 음향모델, 인식 렉시컬 정보, 언어모델(또는 문법)에서 사용되는 망을 하나의 통일된 틀로서 결합하고 최적화할 수 있는 장점이 있다.
최근에 발표되는 대어휘 음성인식 엔진의 내부 구조는 대부분 WFST 기반의 디코더 기술을 사용하는 것으로 알려져 있다.
렉시컬 트리 기반 음성인식
렉시컬 트리 기반 음성인식에서는 음향 모델, 발음사전, 문법을 결합하여 하나의 커다란 트리가구성된다. 여기서, 문법은 바이그램을 사용하고, 발음사전은 한 단어가 여러 개의 발음을 가질 수 있으며, 이를 그래프로 표현한다고 가정한다. 어휘는 x, y, z의 세 단어로 구성되고 발음은 x=ab 또는 x=/a f/, y=/a c d/,z=/a c e/로 가정하였다. 음성인식 디코더는 이렇게 생성된 렉시컬 트리에서 음향벡터를 생성할 확률이 가장 높은 경로를 찾게 되며, 이 경로를 추적함으로써 최종적인 인식 단어열을 얻게 된다.
렉시컬 트리는 음향 문맥이 동일한 노드들을 공유함으로써 탐색공간을 줄일 수 있다는 장점이 있으나, 탐색 경로가 잎사귀 노드에 도달할 때까지 언어모델을 적용할 수 없어서 인식률 저하를 야기할 수 있다는 단점이 있다.
WFST 기반 음성인식
WFST 기반 음성인식에서는 문법(언어모델), 발음 사전, 문맥의존 음향모델, HMM으로부터 하나의 통합된 트랜스듀서를 생성한다. 렉시컬 트리에서와 마찬가지로 WFST 기반 음성인식 디코더는 통합된 트랜스듀서로부터 확률이 가장 높은 경로를 찾고 이 경로로부터 최종적인 인식 단어열을 얻게 된다.
weighted finite state transducers: (a) HMM (b) lexicon (c)grammar.
통합된 트랜스듀서를 얻기 위하여 결합 (composition),결정화 (determinization), 최소화(minimization) 알고리즘이 적용된다
결합(composition) 알고리즘은 언어모델, 다중발음 네트웍, 문맥의존 음향모델, HMM 상태 네트웍을 하나의 망으로 결합(composition)함 이를 다시 말하자면 Composite Algorithm은 발음 모델을 기반으로 가능한 모든 탐색 경로를 구성한다
결정화(determinization) 알고리즘은 하나의 노드에서 나가는 천이는 하나의 심볼에 대하여 하나만 존재하는 트랜스듀서로 변환해주며, 최소화 알고리즘은 오토마타의 노드 및 아크 개수를 최소화한다. 이를 풀어보자면 Determinization Algorithm은 동일한 입/출력값을 갖는 탐색 경로를 제거하여 입력 경로의 모호성을 제거한다.
최소화(minimization) Algorithm은 가중치를 고려해 동일한 출력을 갖는 탐색 경로를 단일화하는데 있다.
결합 연산은 두 네트웍을 결합하는 WFST에 대한 연산으로서, 트랜스듀서 T1과 트랜스듀서 T2의 결합 결과를 나타낸다. 그리고 문법, 발음사전, HMM 트랜스듀서와, 문법과 발음사전을 결합한 트랜스듀서를 나타낸다.
음성인식 디코더에 사용되는 최종 트랜스듀서는 각 아크를 HMM과 다시 결합함으로써 생성된다.
결합 과정에서 얻은 트랜스듀서는 NFA (nondeterministic finite automata)로 표현되어, 디코딩시 최적 경로를 구하기 위하여 메모리가 많이 필요하게 된다. 따라서 주어진 하나의 입력 기호에 대하여 단 하나의 경로만으로 천이가 제한되는 DFA (deterministic finite automata)로 변환하는 결정화 알고리즘이 필요하다.