2019년 7월 31일 수요일

Acoustically grounded word embeddings for improved acoustics-to-word speech recognition

E2E를 위한 훈련조건인 CTC를 활용한 Acoustic-to-Word Model에 관한 논문이다.

기존에 CTC는 연구자들의 번거로움을 덜어주기 위해 제안된 방법으로
궁극적으로 output에서 character 단위의 정보를 뱉어내게 하고 이를 특정한 search 알고리즘으로 인식된 단어열을 찾도록 하기 위한 것이었다.

하지만 실험을 해보니 인식 성능이 높지 않았고, 결국엔 vocabulary에 저장된 단어만을 decoding하던지 추가적으로 LM을 고려해야 기존 cross entropy기반으로 훈련된 모델의 인식율을 따라잡을 수 있는 정도였다.

인식율이 기대에 미치지 못하니,
연구자들은 character 대신에 단어를 뱉어내도록 하는 CTC를 연구했다.
그것이 Acoustic-to-Word(A2W) model이 되시겠다.
사실 Character 단위로 훈련을 하게 되면 잠정적으로 OOV 문제를 어느정도 커버할 수 있다는 장점이 있는데 A2W로 오면서 다시 OOV 문제를 생각해야 하는 상황이 발생하게 되고,
요새는 OOV를 검출할 수 있는 node를 추가하여 OOV를 발견하게 되면 character 단위의 정보를 통해 단어를 decoding 할 수 있도록 하는 방법을 사용하기도 한다.
이 경우 당연히 loss가 2개가 된다.

근데 이 A2W model은 output layer의 size가 커지다보니, DB의 size가 크면 좋은 성능을 발휘하지만, DB의 양이 적으면 E2E 모델의 고질적인 성능 저하의 문제가 발생한다.

A2W model의 경우, 각 output node가 하나의 단어를 대표하고 그에 따라 각 node에 연결된 weight를 word embedding으로 간주할 수 있게된다. 물론 실제 distributed representation과 같이 semantic 한 유사도를 가지고 표현되는지는 알수 없다.

이러한 가정하에 기존에는 output layer의 weight를 GloVe로 훈련된 word embedding을 사용하여 초기화한 뒤 A2W model을 훈련시키는 방법이 제안되었다.

본 논문에서는 acoustic 정보와는 괴리된 word embedding을 쓰는 것 대신에, acoustic 정보를 고려한 word embedding을 사용하여 A2W model을 초기화하는 방법을 제안한다.
기본적인 idea는 ICLR 2017에 발표된 "Multi-view recurrent neural acoustic word embedding"으로부터 착안하였다. 해당논문은 acoustic word의 각 단어간 차별성을 높여 이를 통해 음성인식이나 핵심어 검출에 활용하기 위한 방법을 제안한 것으로 embedding을 추출하기 위한 전체적인 구조는 본 논문과 유사하나 활용도 면에서는 다른 측면을 가지고 있다.

본 논문에서의 embedding을 추출하기 위한 전체적인 구조는 아래와 같다.
< Fig. 1 from this paper >

위 그림의 f(x)는 acoustic word embedding을 뽑기 위한 network 이며
g(c)는 acoustically-grounded word embedding, 즉 acoustic 정보를 반영한 word embedding 정보를 추출하기 위한 network가 되시겠다.

f(x) 그림에서 보는 바와 같이 BLSTM을 사용하고 있고,
acoustic word의 경계는 f(x) 출력 정보를 토대로 계산하는 것이 아닌,
기 훈련된 음향 모델을 통해 얻어진 forced alignment 정보를 사용했다고 한다.
이러한 단어간 경계 정보를 통해 acoustic word embedding은 정해진 구간의 hidden output의 평균을 통해 구하게 된다.

g(c)의 경우 text 정보를 통해 word embedding을 뽑아내는 network이다.
g(c)의 입력은 기 훈련된 character 단위의 embedding이며
이를 BLSTM으로 구성된 g(c)에 입력한다.
g(c)는 단어간 연결은 없으며 단어내 연결만이 존재한다.
각 단어별 embedding은 마지막 character 입력에 대한 BLSTM 출력을 사용한다.

최종적으로 f(x)의 출력과 g(c)의 출력은 선형변환된 형태로 얻어지게 되며 이 둘을 가깝게 하는 조건을 통해 각각의 network들이 훈련된다.
사실 위 그림은 각각의 network로부터 선형변환된 결과를 f(x), g(c)라고 명명했으나 편의상 f(x)와 g(c)를 각각의 network를 호칭하는 것으로 하였으며 그 이유는 최종적인 선형변환 행렬이 공유되는 형태이기 때문이다. 그렇기에 f(x)와 g(c)의 출력의 차원은 동일하다.

아래는 f(x)와 g(c)를 훈련하기 위한 훈련조건이다.
< Eq. 1 from this paper >

수식 자체는 margin을 고려한 일반적인 형태의 triplet loss이다.
Distance 함수 d(f(x), g(c))는 cosine distance를 사용하여 범위는 0부터 2까지의 범위를 가진다.
대괄호 뒤의 +는 hinge loss를 의미한다.
negative input은 mini-batch 내에서 최소 거리를 가지는 단어로 선정한다.
마진을 제외하고 생각하면 positive input의 거리가 negative input의 거리보다 클 경우 양수가 되고 이를 통해 gradient를 형성한다.
반대의 경우 음수가 되고 gradient를 형성되지 않는다.
양수의 마진 m을 고려하면 positive input의 거리가 negative input의 거리보다 -m만큼 작지 않으면 positive input의 거리는 가깝게 negative input의 거리는 더 멀게 하기 위한 gradient가 계속 생성된다.
Hinge loss는 마진 m과 결합하여 negative input의 거리가 충분히 멀어졌는데도 쓸데없이 멀게 만들기 위한 훈련을 방지하고자 하는 "don't care region" 을 형성한다.

위 수식에는 두개의 조건이 있는데
위의 조건은 negative input이 g(c)로부터 나오는 경우 g(c)를 f(xi)로부터 멀어지도록 하는 조건이며,
아래의 조건은 negative input이 f(x)로부터 나오는 경우 g(ci)로부터 f(x)를 멀어지도록 하는 조건이다.

이러한 조건으로 훈련이 완료되면, 각 단어별 선현변환된 g(c) 정보를 A2W model output layer의 초기 parameter로 사용하게 된다.
ICLR 2017 논문에서는 단어간 차별성이 높은 f(x)를 구하기 위한 목적이었다면, 본 논문에서는 A2W의 pretraining으로 f(x)와 g(c)를 훈련하여 사용한다는 데에 차이가 있다.

논문에서는 A2W model의 초기화를 위해 은닉층과 그 위의 선형 변환층까지 f(x)의 network 사용하였고, 출력층은 g(c)의 출력을 사용하였다.

자 그럼 이걸로 A2W를 훈련하기 위한 훈련 조건은 다음과 같다.
< Eq. 2 from this paper >

훈련 조건은 regularized 형태로 기본적인 CTC loss와 output layer의 parameter가 초기 설정된 word embedding으로부터 많이 멀어지지 않도록 하는 L2 loss로 구성되어 있다.

아래는 음성인식 실험결과이다.

< Table 3. from this paper >

실험 결과중 frozen은 OOV rescoring을 위해 output layer parameter를 고정한 결과이다. Intermediate size를 사용하여 성능 향상도가 크지는 않아보이지만, 그래도 안한것 보다는 낫다.

실험결과는 기 수행되어야 하는 사전작업의 양에 비추어 봤을때 향상도가 미미한 수준이라고 할 수 있겠다.

준비물:
1. Forced Alignment를 위한 음성인식 모델
2. Character-level embedding
3. 1, 2를 통한 acoustically-grounded word embedding 훈련
으윽.... 이걸 언제다;;;;;

논문에서 제안한 방법보다는
Triplet loss를 좀 더 색다른 방식으로 활용할 수 있다는 점에서 매력적인 방법이었다.