모두의 연구소 음성인식 풀잎스쿨에서 공부한 내용을 바탕으로 작성되었습니다. 공부에 사용한 자료는 https://medium.com/@jonathan_hui/speech-recognition-weighted-finite-state-transducers-wfst-a4ece08a89b7 입니다.
WFST(Weighted Finite-State Transducers)
ASR(autiomatic speech recognition)에서 사용되는 HMM phonetic model, Context-dependent phones, Pronunciation lexicons and grammars를 transducer 형태로 표현하고 각각의 transducer를 결합하여 하나의 transducer로 만들어, 그것을 이용하여 sound를 decoding하는 일련의 구조.
기존에 HMM 모델이 단순하고 input sound 데이터의 크기가 작은 경우, Viterbi decoding을 이용해 Markov Chain을 정확하게 decode할 수 있었다. 그러나 LVCSR(Large vocabulary continuous speech recognition)에서는 모델이 복잡하고 크기가 커져 위와 같은 방식으로 decoding하기 어려워졌다. 이 문제를 해결하기 위해 고안해낸 방법이 WFST 이다.
전체적인 구조는 위 표와 같다. H, C, L, G 각각의 transducer를 결합해 decoder를 만든다. H부터 보면, input sequence로 HMM states가 들어가 CD phones(context-dependent phones)이 나오고, 이 아웃풋이 다시 tranceducer C에 인풋으로 들어가게 된다. C의 아웃풋이 다시 transducer L에 인풋으로 들어가고.. 이렇게 4개의 Transducer를 composition해서 하나의 Transducer로 만들어 decoding 하겠다는 아이디어! 다시 그림으로 살펴보면 다음과 같다.
각 Transducer의 구조와 위에서 언급한 composition을 비롯한 Transducer 연산 방식에 대해 알아보자
Transducer L(pronunciation lexicon transducer)
phone을 word로 decode한다. 예를 들어 맨 위에 transducer의 경우 /b/ /ih/ /l/ phones이 인풋으로 들어가 final state에 도달하면 아웃풋 라벨(word)인 bill을 출력한다.
Transducer G(word-level grammar transducer)
word sequence의 likelihood를 구한다. 즉, 단어들이 어떤 순서로 연결되야 의미를 가지고 문법적으로 맞을지를 확률로 계산한다. 위 그림은 Bigram language model.
Finite State Automation(Machine)
원은 state 화살표는 transition을 의미한다. 각 transition 마다 input/output label과 weight가 주어져있다. 첫번째 transition을 예로 보면, initial state 0에서 a라는 input이 들어오면, 0.6의 weight와 함께 state 1로 전이하고, 해당 flow가 final state에 도달하면, output label을 출력한다. (??)
Semirings(반환)
결합 교환 법칙을 만족하는 연산 대수 구조, Transducer(Finite State Machine)의 다양한 operation과 알고리즘을 적용하는데 사용된다. 그 중 확률 domain에서 semiring을 real semiring으로 정의한다.
real semiring에서 weight는 ⊗ operator로 연산되고, input sequence의 cost는 각 path끼리의 ⊕ operator로 계산된다. 예를 들어 위에 path에 input sequence (a, b)가 들어가면, 빨간색으로 칠해진 경로로 각 경로의 weight가 ⊗ 되고, 각 결과를 sum해서 최종 sum of all path 값을 계산하게 된다. 이를 일반화 하면 다음과 같다.
x에는 input sequence가 들어가고, 각 경로에 대한 (initial state weight * path 상의 weight * final state weight) 를 더해준다. 이러한 semiring을 통해, 많은 영역에서 Automata를 위와 같은 그림으로 표현할 수 있다. 위에서 정의한 Real semiring(Probability semiring)에서의 cost는 input 또는 input/output sequence가 관측될 확률이다. Tropical semiring은 Viterbi decoding에 쓰이는 minimum path나 most likely sequnce를 찾는 방법을 제공한다.
Finite-State-Acceptor(FSA)
FSA는 무한한 label 집합의 유한한 표현 방식이다. initial state에서 시작해 final state까지 도달하는 sequence는 accept되고 그렇지 못한 sequence는 reject된다.
위 그림을 보면, sequence [abca]는 initial state에서 출발해, state 1, 3, 5를 거쳐 final state에 도달하므로 accept된다. 하지만 sequence [abcb]의 경우, state 5에서 인풋 라벨 b로 transition할 state가 없어, final state에 도달하지 못하므로 reject된다.
위 그림과 같이, FSA에 weight가 추가되면 WFSA(Weighted-Finite-State-Acceptor)라고 정의한다. final state에도 weight를 줄 수 있다.
Empty label 을 ε 또는 “-” 또는 <eps>로 표기한다. 이 경우 FSA가 a, aa, aaa 를 accept 한다. Empty lable 이라 별도의 input 이 없어도 State 1로 가면 다시 state 0로 transition 된다.
Weighted Finite-State Transducers (WFST)
WFST는 WFSA에 input/output label을 표시해놓는 arcs가 있다. WFST 예제 두 가지를 살펴보자
첫번째 WFST는 language model이다. input/output label이 같음을 확인할 수 있다(using : using). 이 모델의 목적은 word sequence 확률을 계산하기 위함이다(Transducer G). 두번째 WFST는 Pronunciation lexicon(Transducer L) 이다. 이 모델은 phone(input)과 word(output)를 mapping 해준다. 예를 들어, /d/ /ey/ /t/ /ax/ 라는 phones이 input sequence로 들어가 final state에 도달해 accept 된다면, 아웃풋 label인 data를 출력한다.
Operation
인풋이 트랜듀서를 따라가 final state에 accept되면 해당 인풋 라벨(아웃풋)값을 출력한다
한 줄(seq) 이 transducer 하나인데, union operation을 통해 합칠 수 있다
밑에서 삿포로와 센다이는 둘다 s로 시작하기 때문에, 시작 노드에서 null과 삿포로(1,2번째 줄)로 분리해준다. 아니면, s로 간 뒤에 삿포로와 센다이로 분리하는 모델을 쓰기도 한다.
트렌듀서 product
트렌듀서 closure
개별 단어를 병렬적으로 연속단어로 연결시켜주는 역할
트랜듀서 composition
하나의 트랜듀서의 아웃풋을 다른 트랜듀서의 인풋으로 넣어 final state에 도달한다면 두 트랜듀서를 합칠수있다.
determinization + minimization
보통 trigram으로 하는데, data가 부족하면 bigram으로 back off 해줄때 가중치 A를 곱해준다.
subphone은 phone을 쪼개놓은것
triphone은 하나의 폰 앞뒤를 고려해서 보는 것 > 이걸 이용해서 HMM state를 distict하게 만든다
하나의 triphone에 여러개 HMM state를 만든다. 주로 3개 정도!(이론에서는 phone 하나당 하나의 state를 ㅡmapping하는걸로 배우지만..)
결국 HMM state가 phone보다 훨씬 많아진다!! , silence의 경우 5개 state로 mapping
HMM 트랜듀서는 음향모델(AM)을 다 만들고 나서, 디코딩 전에 미리 만들어 놓는다. 인풋이 HMM state가 들어간다.
음성 > MFCC > GMM(음향모델), 각각의 분포에 대해 likelihood를 구하고 > HMM > phone > 앞선 음향모델에서 discrete(MLE만)하게 HMM state 인풋으로 WFSF > 어떤 워드 seq랑 맞을 확률이 높아?
'Audio & Speech' 카테고리의 다른 글
[Sound AI #11] 오디오 데이터 전처리 (Python Coding) (12) | 2020.03.06 |
---|---|
[Sound AI #10] 오디오 데이터 전처리 (이론) (1) | 2020.03.06 |
음성 데이터의 활용 (0) | 2020.02.17 |
[음성인식] 5.1 Vector Quantization(VQ) (0) | 2020.02.15 |
[음성인식] 4.1 Acousitc Model (HMM-GMM) (0) | 2020.02.08 |