CTC Dynamic Programming

 

 단순히 학습이 끝난 마지막 지점에서 Greedy하게 x spectogram이 나왔을 때 argmax해서 나온 path를 선택하는 것이 적절하지 않은 방법이 아니고, relavant한 path가 많은데 좋은 path를 찾는 방법을 모두 연산하자니 가능한 path가 너무 많아진다는 문제가 발생한다.

 

 CTC의 속성에 따라서 valid alignments는 marginalize했을 때  Y label이 나와야 한다.

 

CTC의 속성

이 성질을 생각하며 아래 그림을 확인한다.

 

Example of the computation performed by the dynamic programming algorithm

 데이터에 의하면 사람들은 [a,b]라고 발음하고, 우리가 알고 있는 모든 전체 집합 상에만 계속 묵음이 존재한다고 나오는 것이다. 그렇다면 데이터를 통해 학습을 하면 적어도 4번에는 a가 나온다는 것이다. data의 distribution 상 5번이나 6번에는 묵음이 존재하지 않다는 것이다. 

 모든 path를 생각해보면 앞서 정의했던 CTC characteristic에 의해 어느 정도 path는 고정이 되어 있다. 우선, component의 output length에 맞게 단어가 등장해야 하고, 단어에 의해 순서가 어느 정도 강제되며, epsilon도 나와야하는 label이 존재하지 않는데 epsilon이 나올 순 없으며, legnth가 input length에 맞춰 발음되어야 한다는 것이 rule이다. 이 rule에 따르면 모든 path가 존재한다고 해도 가능한 path는 한정적이게 된다. 이를 수학적으로 표현한 식은 다음과 같다.

 

Forward variable 알파(s)

시간 t에서 모든 paths의 시퀀스 1부터 p까지의 확률이다.

 

CTC probability는 두 개의 valid한 subsequence의 합으로 나타낸다.

 두 개의 case로 recursive하게 form을 설명할 수 있다.

결론적으로, 기본 데이터에 대해 가장 relevant한 path는 마지막 time sequence의 alpha값으로 설명할 수 있다고 말하고 있다.

 

 CNN쌓고 RNN 쌓아서 encoding 잘 된 애를 fully connected 통과한 후 거기에 맞춰 softmax 시켰더니 time sequence 별로 probability distribution이 나오고 이것이 CTC에 의해 어떤 relevant한 path를 찾을 수 있다!

 

이 다음에 나온 모델이...

 

LAS

Attention을 사용해보자!

Listener (Encoder) : BLSTM을 Pyramidal 형식으로 붙여 쓴다. = pBLSTM

왜 Pyramidal하게 사용하는가? 왜냐하면 pBLSTM 1개당 연산속도를 2배로 줄여주기 때문.

 

LAS는 이전 Step에서 디코딩된 정보를 받아 현재 Input Sequence와 결합해 다음 Sequence를 예측하는 구조로 Decoding한다. 이런 방식을  Auto-regressive 방식이라고 한다.

 

디코딩의 output이 다음 디코더를 예측하는 대 사용하는 Auto regressive한 형태를 띄고 있다!

 

이후의 논문들...

Towards End-to-End Speech Recognition with Recurrent Neural Networks

Joint CTC(CTC+LAS)

Korean speech recognition using deep learning

CTC (Connectionist Temporal Classification)

 

Speech Recognition에서 데이터셋으로 오디오 클립과 Transcript(Text) pair가 들어온다. 문제는 Audio와 Transcript 사이의 Alignment는 다 맞지 않는다. 문제는 우리가 Alignment를 알아야 Input 오디오와 Output 텍스트 사이의 Mapping을 찾을 수 있다는 것이다. 그렇지만 사람들마다 발화의 의미는 같은데 표현이 다 다르다. 오디오 데이터는 다른데 같은 레이블을 갖게 되는 데이터셋이 존재하고, 해당 레이블셋에 대해 오디오의 distribution을 찍으면 pattern이 나오는데 이를 커버할 수 있는 mapping을 찾는 것이 주된 목표.
CTC는 input과 output 사이 Alignment가 되어 있지 않은 데이터셋에서 alignment를 맞춰보자고 해서 나온 것이고, 이에 대한 근본적인 해결책으로 제시한 것은 둘 사이의 모든 valid한 Alignment의 가능성을 합산해보자는 것이다.

 

input, output 사이의 가능한 Align을 모두 뽑아 Marginalize하자! 그러면 우리가 찾는 Align이 존재할 것이다.

 

utterance같은 경우는 띄어쓰기가 존재할 수 있고, silence가 존재할 수도 있다. 그렇기 때문에 모든 output 사이사이 묵음같은 것이 존재할 수 있다고 가정하고 해야 한다. 토큰 하나를 추가해서 넣는다고 생각하면 된다. 이를 epsilon이라고 할 것이다. CTC같은 경우는 input과 같은 길이의 Alignment를 만들고 y로 mapping하며 epsilon들을 다 제거해버리면 해당 output과 length가 똑같은 결과를 얻을 수 있다고 한다.

Audio Auto Tagging

유저의 맥락을 이해할 때 super vision을 준다!
말하지 않아도 제공할 수 있는 서비스에 대한 단서가 될 것.
ex) 사람이 싸우면 고성이 오고갈 것이다. 이 때 tag를 conflict라고 하고, 이에 걸맞은 적절한 서비스를 알아서 제공해준다.

label-weighted label-ranking average precision

information retrieval(정보 검색) part에서 많이 쓰는 measure를 사용.
검색을 통해 return되는 전체 집합을 통해 relevant한 document가 뭐가 있느냐를 통해 precision(정밀도)recall(재현율)을 나눠 연산. precision과 recall을 같이 볼 수 있는 metric은 F1 score / roc curve / average precision이 있다.

FC Layer

linear한 dot product를 진행하고, bias를 연결 layer dimension에 맞게 더해주는 연결 패턴

Back Propagation

연산값이 틀리면 틀릴 수록 cost가 높아지고, cost값이 다시금 미분 형태로 back propagation을 거치게 된다.
back propagation은 어떤 weight가 output cost에 영향을 끼쳤는지 연산하게 된다.
initialize되는 weight가 실제 label과 neural net output사이에 얼마만큼 기여했는지 나오게 되고, 이 weight값을 통해 learning rate를 곱하여 weight를 업데이트하게 된다.

CNN

Convolution Layer : 입력데이터를 weight를 갖고 있는 필터가 순회하며 합성곱을 계산하게 되고, 그 계산 결과를 feature map이라고 한다.
Pooling Layer : feature map을 다운샘플링하게 된다.

CNN의 invariant한 성격이 오디오로 가면 어떻게 될까?

ex ) 안녕하세요, 저는 도서관입니다.
저는 도서관입니다. 안녕하세요.

'안녕'이라는 time과 frequency 영역 내에서 정해진 pitch값이 있을텐데 그 frequency값이 time이 뒤에 있건, 앞에 있건 '안녕'이라고 인식할 수 있게 되는 것이다. 그래서 오디오에서 CNN이 적절하다고 하는 것이다.

RNN

hidden state vector를 initialize해주고 time step을 기준으로 for loop를 통해 RNN cell을 돌려준다.

+ Recent posts