2019년 6월 17일 월요일

Parameter uncertainty for end-to-end speech recognition

독특한 regularization 기법을 E2E 음성인식기에 적용한 논문이다.

해당 논문의 main idea는 google brain의 "Weight uncertainty in neural networks"에서 가져왔다. 여기서는 기존의 deterministic한 parameter를 통해 network를 구성하는 방법 대신에 network parameter를 확률적으로 정의하고 이를 통해 훈련을 수행하는 Bayesian Network에 관한 내용을 포함하고 있다. Parameter의 확률적 정의 및 훈련 방법은 variational autoencoder의 방법에서 힌트를 얻은 듯 하다.

본 논문은 "Weight uncertainty in neural networks"의 방법을 단순히 E2E 음향모델에 적용한 것이며 아래와 같이 간단하게 정리할 수 있다.

- 각 single model parameter의 분포를 표현하기 위해 Gaussian 분포를 활용한다.
- 따라서 single model parameter를 확률적으로 표현하기 위한 mean, variance가 필요하다.
- 훈련 시에 variational autoencoder에서 활용하는 reparameterization 기법을 통해 model parameter의 sampling을 수행하고, 이를 forward propagation에 활용한다.
- 본 논문에서는 output layer와 bias를 제외한 나머지 LSTM parameter만을 확률적으로 표현하였다.
- Parameter의 uncertainty를 regularization 관점에서 활용하였기 때문에, test 시에는 mean 값만을 활용하여 forward propagation을 수행한다.
- Learning criterion은 CTC를 사용하였으며 추가적으로 weight prior를 고려하기 위해 L2 regularization도 같이 활용하였다.

실험결과
- WSJ와 CHiME4 DB에서 실험하였다.
- 단순히 해당 DB를 가지고 실험한 결과에서는 deterministic model과 probabilistic model간의 성능 차이는 보이지 않았다.
- WSJ로만 비교할 수 있어 따져보면 아주 살짝 좋아지지만 parameter의 수가 2배로 늘어났으니 deterministic model의 parameter의 수를 늘리기만 해도 다다를 수 있는 수치로 보인다.
- 효과를 발휘한 쪽은 weight pruning과 adaptation 쪽이었다.
- Weight pruning의 경우, deterministic model의 절대값 크기가 작은 parameter를 제거한 것과, probabilistic model에서의 mean과 variance의 비율인 SNR이 작은 paramter를 제거한 것을 비교한 결과, pruning된 parameter의 비율이 증가함에 따라 발생하는 성능 열화에 대한 저항성이 probabilistic model에서 더 강하게 나타나는 것을 보였다.
- Adaptation의 경우, SI model parameter를 기준으로 하는 L2 regularization 기반의 방법을 활용하였을 경우, adaptation의 효과가 더 크게 나타나는 것을 보였다.

고찰
- 실용적이기 보단 실험적인 논문이었다. 아직 특별한 유용함이 드러나는 것은 아니지만, Bayesian network을 음성분야에 적용하는 사례가 많지 않았기에 누구든 한번쯤은 시도해봤어야 하는 방법이 아니었을까 라는 생각이 들었다.
아직 볼 논문이 많다. 더욱 간단하게 정리할 필요가 있겠다.

2019년 6월 5일 수요일

Component Fusion: Learning Replaceable Language Model Component for End-to-end Speech Recognition System

텐센트에서 나온 E2E 음성인식 시스템에 관한 논문이다. 오랜만에 보는 D. Yu의 논문.

원래 기존의 음성인식에서 AM과 LM은 따로 훈련되었고, 그걸 당연시 여겨왔다.
이것은 E2E 모델이 아무리 용가리 통뼈라고 해도 예외없이 적용되는 상황이었는데, 그래도 요새는 LM도 신경망으로 구축하는 시대이니 이 둘을 결합해야 하지 않겠느냐 하는 쪽으로 의견이 모아진 듯 하다. 동서양을 막론하고 새 술은 새 부대에 담고 싶은 모양이다.

변화의 시기에 보통 먼저 제안되는 방법은 예전의 방법을 지금의 조건에 맞추어 적용해보고 가능성을 가늠해보는 것이다. 그래서 최초로 제안된 방법이 shallow fusion이며 이는 AM과 LM의 score를 하나의 tunable parameter를 통해 가중합하는 방식이다.

다음으로 제안된 방법이 deep fusion이다. 이는 seq2seq 모델이 최초로 활용되었던 기계번역에서 제안된 방법으로, AM과 LM을 따로 훈련하고, LM의 output layer는 버린 후에, LM의 hidden layer 정보와 attention이 완료된 AM hidden 정보와 연결하여 최종 output layer의 입력으로 활용하는 것이다. Deep fusion에서는 output layer에서 AM과 LM이 결합되는 부분의 parameter를 적은 양의 훈련데이터를 통해서 훈련한다. 추가적으로 LM의 hidden layer 정보를 그대로 쓰는 것은 아니며 자기자신을 입력으로 하는 gating을 수행하여 필요한 정보를 뽑아내서 AM과 조합하는 것으로 되어 있다. 아, 그러고보니 gating에 해당하는 녀석도 fusion시 훈련이 이루어진다. Deep fusion에서는 AM과 LM의 몸통은 그대로 이며 머리 부분만 필요한 조건에 의해 훈련되는 과정을 거친다.

Cold fusion은 deep fusion의 고정된 몸통이 마음에 들지 않아 제안된 방법이다. 일반적인 LM은 범용 topic을 학습하였기 때문에 특정 domain의 성능을 극대화시키는데 활용하기에는 부족함이 있을 수 있다. Cold fusion에서는 LM으로는 부족한 domain dependent 정보를 AM 훈련 시 반영하는 훈련 방식을 취한다. 이를 위해 사전에 학습이 완료된 LM을 준비하고 deep fusion과 대동소이한 형태로 AM과 LM을 연결하고, AM에 해당하는 부분과 AM과 LM을 연결하는 부분의 parameter를 학습하는 방식을 취한다. 여기서 LM은 고정이다.


논문상에 각자의 fusion 방법에 대한 그림이 있으며 이들은 각각의 방식을 잘 나타내준다. 여기까지 언급한 fusion 기법들은 모두 AM과 LM을 잘 조합하여 음성인식율을 높이기 위한 방식이었다. AM과 LM이 잘 결합하면서 발생하는 한가지 단점은 이렇게 결합된 모델은 domain adaptation이 어려워지는 문제가 발생하게 된다. Adaptation을 위한 추가적인 훈련이 필요한 것이다.

이 논문에서는 fusion을 하는 데 있어 위에서 언급한 방법과는 조금 다른 방향성을 가지고 문제에 접근하고 있다. AM과 LM을 결합하는데 있어, in-domain에서의 음성인식률은 극대화 시키면서, 다른 domain에서의 adaptation도 쉽게 수행할 수 있도록 만들기 위해서는 AM과 LM의 동작이 완벽하게 분리된 형태로 학습이 되어야 한다고 말하고 있다. 다시 말하면 AM은 완벽하게 acoustic 특성만을 반영하기 위해 훈련되어야 하며, domain dependent한 특성은 LM을 통해서만 학습되어야 한다고 말하는 것이다.
이를 위해 이 논문에서는 cold fusion을 다른 방식으로 응용하고 있다. 우선 LM을 음성 corpus의 transcription을 이용하여 학습한 후 이를 고정한 채로 cold fusion의 방식을 통해 AM을 학습하게 되면, LM에서 이미 domain dependent information을 흡수한 상태이기 때문에 AM은 순수히 acoustic information만을 학습할 수 있다고 말하고 있다.
이렇게 훈련된 AM은 domain dependent한 요소가 최소화 되었기 때문에 좀 더 general한 음성을 표현하는 모델이 되었다 말할 수 있기 때문에, domain adaptation을 하는데 있어, 단순히 다른 분야의 text만을 통해 훈련된 LM을 사용하게 된다면 간단하게 해당 domain의 정보를 반영할 수 있게 된다고 말하고 있다. 아니면 LM만 적응하던가...

사실 계속 "말하고 있다"라는 표현을 쓰는 이유는 논문에서 저자들이 그러한 목적으로 모델을 구성하고 훈련을 하고 실험을 통해 그 효과를 입증할 뿐이며, 실제로 그렇게 동작해야만 하는 당위성은 수학적인 검증보단 단순한 썰을 통해서만 표현하고 있기 때문이다.


위의 그림이 논문상에서 제안한 방법이며 cold fusion과 크게 다르지 않다. 다만 gating을 수행하는 part에서 AM의 정보를 활용했었는데 deep fusion과 같이 LM의 정보만을 통해 gating을 수행하는 것으로 변경되었다.

첫번째 실험은 논문에서 목표하는 바대로 제안하는 방법이 out-of-domain에서 LM 교체를 통해 효과를 얻을 수 있겠는가에 대한 실험을 진행하였다.


여기서 보통은 AM과 LM의 정보를 concatenation할 때 attentional output과 결합을 하는데, 여기서는 decoder output과 결합을 한것에 대해 실험한 결과도 포함하였다.

뭐 in-domain 실험도 있지만 이건 생략한다.
Idea도 좋고 다 좋지만 먼가 좀 오타도 많고 성의 없이 쓴 논문을 보고 있노라면 별로 기분이 안좋다. 쓸데없는 짓을 한 것 같은 느낌이 강하게 들기 때문이다. 시간은 부족하고 봐야할 논문은 많은데 잘못 고른건가 싶은 생각이 들어서 그럴게다.

부디 이 포스팅이 쓸데없는 일이 아니었기를 빈다.
아니다. 쓸데없는 일은 아무것도 안하는 거다. 오늘도 나는 또 싸우는 구나.

오랜만에 attention model을 보니, 또 헷갈린다. 어디까지 복잡해 질지도 자못 궁금하다.
그럼 일기 끝.

2019년 6월 3일 월요일

Streaming end-to-end speech recognition for mobile devices_2

이 논문에서는 구글에서 음성인식의 응답속도를 줄이기 위해 RNN-T model을 활용한 on-device 형태의 음성인식 시스템을 제안하였는데, 이 때 server-based system 대비 발생할 수 있는 성능 열화를 줄이기 위해 활용했던 알고리즘을 중심으로 논문을 기술하고 있다. 아래는 서론부에서 언급한 그 알고리즘들의 리스트가 되시겠다.
  • Layer normalization to stabilize training
  • Large batch size
  • Word-piece targets
  • Time-reduction layer to speed up training and inference
  • Network parameter quantization to reduce memory footprint and speech up computation
  • Shallow-fusion approach (AM + LM)

(사실 적어놓고 보니 그냥 E2E 모델에서 사용되는 방법인거 같다.) 이것들은 일반적인 음향모델을 좀 더 잘 훈련하기 위한 방법들로서 언급했다면, 근원적인 on-device향 모델의 한계로서 숫자음 인식 문제를 해결하기 위한 방법으로 다음을 언급했다.

  • TTS system으로 합성된 다양한 숫자음을 훈련에 활용
저런 방법들을 다 쓰니, 속도와 더불어 성능까지 올라간다고 하고 있다. 기존의 Embedded CTC와 비교해서 말이다.

우선 CTC나 RNN-T는 설명이 잘 된 논문들이 많으니 각설하고,
논문에서 언급한 내용들을 정리해 보니

<Model architecture>
Unidirectional LSTM 8층을 쌓고
Projected LSTM을 썼고
- LSTM output을 선형변환하여 차원 축소
Time-reduction layer (TRL)를 사용 했고
- 특정 layer의 출력을 N개씩 묶어 다음 layer로 보내는 방법으로 훈련과 inference 시간 단축, chain model에서와 같은 frame rate 조정을 통한 속도 향상)
- 여기서 TRL이 입력의 frame rate를 조절하는 것과는 다른 동작을 한다고 얘기하는데, 아무래도 frame rate는 정보가 삭제되는 것이고, TRL은 그래도 훈련상에 이런 decimation process가 고려되어 훈련이 이루어 지니 그걸 의미하는 것 같다.
- 아무래도 이 녀석은 encoder의 하위 layer에 적용이 되는 것이 상위 layer의 계산량을 줄이는 데 도움이 되기 때문에, 2번째 LSTM 위에 적용한 듯이 보인다.

<Training optimization>
Layer normalization을 사용했고
- layer별 출력을 batch가 아닌 해당 layer의 각 time step별 전체 node의 평균과 분산으로 whitening하는 방법으로, RNN 훈련 안정화를 위해 사용
Output node에 word-piece subword units을 사용했고
- Grapheme보다 나은 성능
Tensor processing units에 적합한 batched computation에 의한 FB (or BW) algorithm을 썼으며

<Efficient inference - Run-time optimization>
Prediction network의 중복 계산을 없애고 (50 ~ 60% prediction network 계산 절감)
Thread를 Prediction network, before and after TRL 3개로 나누어 asynchrony하게 처리하여 속도 절약 (single thread 대비 28% 속도 향상)
- 와 이렇게까지 해야하는 구나를 배웠다.

<Parameter quantization>
32-bits floating-point precision -> 8-bits fixed-point

<Contextual biasing>
Device마다 저장된 사용자 별 데이터를 바탕으로 (이를테면 전화부, 노래, 앱, 위치 등등) 이를 고려하여 decoding시에 on-the-fly로 graph를 생성하고 음성인식을 수행

<Text normalization>
"navigate to two twenty one b baker street" -> "navigate to 221b baker street" 같은 decoding이 가능하도록 하게 만들기 위해, class-based LM을 활용하는 것과 유사한 방법으로 class에 대한 tag를 추가하여 이를 E2E model이 뱉어내도록 하고 이를 WFST로 올바른 written domain의 결과로 만들어 내는 방법을 사용하고 있다.
- 사실 이런 방법을 쓰기에는 데이터가 많지 않으므로, TTS를 활용하여 5백만 문장을 생성하여 이런 패턴의 문장을 학습하도록 하였다.

Image result for streaming end-to-end speech recognition for mobile devices
< table from this paper >

위 테이블에 논문에 언급된 방법들을 추가할때마다 인식 성능이 올라가는 것이 보인다. 뭐 이밖에도 TTS 데이터를 활용한 것과, RTF에 대한 결과들도 다 있지만, 여기선 생략하고 나중에 필요할 때 보는게 좋겠다.

중요한 것은 real time on-device 음성인식 시스템을 구축하기위해 얼마나 많은 기술들이 추가되어야 하는지 예상을 하며 준비해 나가야 한다는 것이다. 천하의 구글도 on-device 인식 시스템 개발을 위해 수년간 실험하고 노력한 결과로서 무언가를 내어 놓는데, 이것들이 단순히 방대한 양의 데이터를 활용한 정도의 결과로 치부해서는 안될 것이다.

물론 많은양의 데이터의 수집이 선행되어야 하는 것 맞는 말이다. 하지만 "그것이 전부다"라는 생각은 위험하다. 데이터 수집은 중요한 일이며 동시에 시간이 걸리는 일임을 인식하고 데이터를 모아가는 동시에 그것들을 요리할 수 있는 다방면의 기술 습득을 병행하지 않으면 힘들게 모은 데이터들이 무용지물 될 것이 뻔하기 때문이다.