2019년 5월 31일 금요일

Streaming end-to-end speech recognition for mobile devices_1

또 구글 논문이다.
학회 논문 순서상으로 Tencent의 논문을 보려고 했었으나, 이전 포스트를 작성하면서 알게 되었던 논문이 인상적이어서 먼저 포스팅을 하기로 하였다.

이 논문의 저자 수가 자그마치 20명이다.
구글 연구원들이 학회에 참석하려면 공저자로라도 이름이 올라와야 된다는 규정이 있어서 팀원들이 모두 다 참석해서 가서 놀고 싶은 마음에 저자를 20명이나 했을리는 없을 것 같다. 저자명을 보니 굵직굵직한 이름들이 많이 포진되어 있다. 이전 논문에서도 그렇고 연구하는 방향이 일치하는 걸 보니 아마 mobile device 쪽의 음성인식 서비스를 강화하려는 움직임이 있는 듯하다.

본 논문에서 mobile device에서 빠른 음성인식이 가능하도록 하기 위해서는 기존의 server-based service는 효율적이지 못함을 인정하고 latency를 줄이기 위해 on-device 형태의 시스템이 독립적으로 동작하는 형태여야 함을 말하고 있다.

전통적인 방식의 음성인식 서비스에 필요한 정보라 하면 전처리, AM, Lexicon, LM, WFST 같은 것들이 있을텐데 이런 녀석들이 복합적으로 엮여서 동작을 하려면 음성인식기 하나 돌리자고 mobile device의 resource를 다 잡아 먹을수도 있기에, 음성 전송에 의한 latency가 발생하더라도 어쩔수 없이 server-based service를 사용하는게 일반적이다.

하지만 세상이 바뀌었고, E2E 모델의 등장으로 인해 가볍게 decoding을 수행할 수 있는 모델들이 등장하고 있기에, 구글에서는 이런 E2E 모델을 통해 음성인식 속도를 높이기 위한 연구를 진행하고 있는 듯 하며 그 유력한 후보로 RNN-T 모델을 밀고 있는 듯 하다. 구글에서는 입력 sequence를 잔뜩 모아두고 attention을 해야하는 E2E 모델보다는 frame 단위로 output이 튀어나오고 이를 통해 beam search를 수행하여 인식결과를 뱉어낼 수 있는 RNN-T 모델이 on-device에 더 적합하다고 판단한 듯하다. 또한 이전 포스트에서 언급한 바와 같이 RNN-T 모델은 자체적으로 EPD 기능을 탑재할 수 있는 장점도 가지고 있기에 RNN-T를 더 밀어주는 분위기이다. 


<figure from "https://ai.googleblog.com/2019/03/an-all-neural-on-device-speech.html">









위 그림은 동일한 음성입력에 대해 구글에서 개발한 RNN-T기반의 on-device 음성시스템의 극명한 응답 속도의 향상을 보여주고 있다. 물론 자사의 sever-based system과의 비교이다. 동일한 인식성능을 보여주면서 저 정도의 속도차이라면 당연히 on-device system을 써야 하지만 사실 동일한 정확도를 만들어내는 것은 아직까지는 불가능한 일일 것이다. 위의 그림은 완전히 정제된 음성입력에 대한 속도차이만 보여주는 것일게다.

On-device system을 구축하기 위한 숙제를 논문에서 언급하고 있는데 그것은 다음과 같다.
먼저, 기존 시스템 만큼의 정확도가 보장되어야 하고, 그러는 중에 latency가 증가되지 않아야 하며,
다음으로, 언급한 것은 숙제라기 보단 on-device system의 특성을 활용하여 인식 성능을 극대화하기 위한 방안으로 device 사용자의 context를 고려할 수 있는 시스템이어야 한다는 것이다. 예를 들면 폰에 저장된 연락처와 음악 list같은 것을 인식할 수 있도록 구성되어야 한다는 것이다.
마지막으로, 뭔가 mobile device이다 보니 개개인이 아무렇게나 발성하는 "비주류"의 문장들도 찰떡같이 알아 들어야 한다는 것이다. 이를 테면 영어의 경우 "call two double four triple six five" 를 발성 그대로만 인식하는 것이 아닌 "call 244-6665"의 형태로 인식할 수 있어야 한다는 것이다.

여기까지는 어떤 on-device system의 의의와 방향성 같은 것에 대해서만 언급을 하였다.
이 논문에서는 이것을 위해 대충 RNN-T 모델을 썼다 정도가 아니라 이를 실현하기 위해 적용한 여러 practical한 기술들이 많이 정리되어 있다. 사실 학회 논문에서는 핵심 기술위주로만 설명하기에 이런 실용적인 기술에 대한 언급이 많이 없는 바, 알아두면 매우 소중한 것들이라 판단되어 다음 포스팅에서 각각의 방법들을 정리할 예정이다.

2019년 5월 30일 목요일

Joint endpointing and decoding with end-to-end model

Google에서 EPD에 관한 논문들을 발표하는 것이 종종 보인다.
음성인식 결과의 응답속도를 줄이기 위한 노력의 일환으로 음성인식도 잘되지만
굳히기로 응답속도까지 신경을 쓰고 있는 듯하다.

이 논문 이전에는 아래 그림과 같이 frame 단위로 음성, 최초 silence, 중간 silence, 마지막 silence를 찾도록 하여 마지막 silence가 보이면 마이크 입력을 끝내고 음성인식 절차로 들어가도록 하는 방법을 취하여 EPD에 필요한 latency를 줄일 수 있는 방법을 제안했었다. 이 녀석의 이름을 end-of-query (EOQ) model이라고 불렀다.

Figure 2: CLDNN (left) and GLDNN (right).
<*Figure from "Endpoint detection using grid long short-term memory networks for streaming speech recognition">

본 논문에서는 앞서 언급한 EOQ 모델이 음성입력에만 의존하여 end point를 찾아내는 것을 단점으로 들었다. 또한 이후에 진행되는 음성인식 절차와 분리되어 end point를 찾아내는 것을 두번째 단점으로 들었다. 같은 말이다. 음성에만 의존적이라 음성인식결과를 반영할 수 없는 거니까.

여하튼, 이 논문에서는 이전과 다르게 streaming 입력으로부터 음성인식과 EPD를 동시에 수행할 수 있는 방법을 제안하였다. 준비물은 RNN-T 음향모델과 문장의 끝을 나타내는 special character </s>를 추가하여 훈련을 수행한 것이다. 

여기서 왜 attention 기반의 E2E 모델을 사용하지 않았는지 의문이었는데, 그것에 대한 이유는 논문에 나타나있다. Attention 기반의 E2E 모델에서는 decoding을 끝내기 위한 character <eos>가 이미 있기는 하지만 그것은 encoder와 decoder에서 생성하는 sequence가 다르기 때문에 사용되는 것으로 EPD를 위해 사용하기에는 부적합하다.
또한 Attention 기법 자체가 고정된 전체 입력 sequence를 decoder의 time step마다 가중합하는 방식을 취하기 때문에 모델 자체도 EPD와는 궁합이 좋지가 못하다.

RNN-T의 경우 CTC기반의 E2E 모델로서 frame 단위의 output을 생성하기 때문에 각 frame time step 별로 탐색 beam을 만들어 가면서 적은 latency로 또는 on-the-fly로 end point를 찾을 수 있게 되는 것이다.

다만 주의 할 것은 중간에 </s>가 튀어 나오는 것은 단순히 character 하나가 잘못 decoding 되는 것과는 무게감이 다르다. (문장 뒤쪽이 전부 날아가는 것이다.) 따라서 search beam을 구성하는데 아래와 같은 constraint를 둔다.
$$P(\big \langle /s \big \rangle|\mathbf x_{1...t},y_{0...u(t-1)})^\alpha \geq \beta$$
논문에서는 문장 끝을 나타내는 token </s>에 대한 사후 확률값이 \(\beta\)를 넘을 때에만 search beam에 포함시키는 조건을 두었다. 추가로 \(\alpha\)를 1보다 크게 설정할수 있도록 하여 왠만해서는 </s>가 search beam에 포함될 수 없도록 조치하였다.


결과를 보니 제안하는 방법에서 latency에 따른 오류율이 현전히 줄어듦을 보여주고 있다. 이 논문을 보기 전에 나는 CTC기반의 모델이 단지 attention기반 E2E 모델에 다다르는 징검다리 역할에 불과하다고 생각했는데, 이런 식의 장점이 있는 줄은 몰랐다. 역시 뭐든 끝까지 파는 놈이 뭔가를 건지는가 싶다.

대충 정리하고 싶었는데, 대충 정리가 안된다. 큰일이다. 이렇게 오래 걸리면 안되는데...


2019년 5월 29일 수요일

Bytes are all you need: E2E speech recognition and synthesis with bytes

Attention을 활용한 Sequence-to-Sequence(S2S) 모델은 기계번역쪽에서 제안된 모델이고
이걸 음성인식에 적용한게 요새의 End-to-End(E2E) 음향모델이다.

기계 번역쪽에는 attention을 LSTM 구조에서 활용 했을 때 훈련시 발생하는 latency가 맘에 들지 않아 self-attention 기법을 활용하는 구조인 "The Transformer"를 제안했고
sequential data modeling을 위한 구조는 필요없고 필요한건 오직 하나 attention만 있으면 된다는 의미의 공격적인 논문의 제목 "Attention is all you need"가 나왔다.
본 논문의 저자들은 요 Attention is all you need가 완전 cool하다고 생각했는지 어떻게든 이 title을 hommage 하고 싶었던 것 같다.

논문의 내용은 기존의 E2E 음향모델이 character를 decoding하도록 모델링 되었는데 다국어 음성인식을 하는데 있어서 각 나라별 character를 따로 두고 훈련하느니 그냥 각 character의 UTF-8 인코딩 정보를 디코딩 할 수 있도록 하여 언어 확장성을 높이려고 한 논문이 되시겠다.

논문에서는 8 bits 정보를 decoding하기 위해 \(2^8=256\) 개의 노드를 사용하는 softmax output layer를 구성하였다.

Table 1: Speech recognition performance of monolingual and multilingual with Audio-to-Byte (A2B) or Audio-to-Char (A2C) models.

위 테이블에 영어와 스페인어는 성능향상이 없었으나, 한국어와 일본어의 경우 성능향상이 있었는데, 영어와 스페인어의 경우 하나의 문자가 하나의 캐릭터로 표현이 되지만, 한국어와 일본어의 경우 하나의 문자가 여러 캐릭터의 조합으로 이루어지기 때문에, 문자 단위의 output node를 구성하면 수천개의 output node가 필요한 것을 성능향상의 이유로 들고 있다.
Unicode를 사용하게 되면 수천개의 label을 사용하면서 필연적으로 발생하는 label sparsity가 줄어 들어 음향 모델 학습을 더 잘하게 되고 이런 이유로 음성인식 성능이 향상되었다고 말하고 있다.

아, 추가로 이 아이디어로 음성합성 실험도 수행하였으나 해당 내용은 그냥 스킵한다.

오늘부터

왠만하면 하루에 한편의 논문을 읽고
그에 대한 정리를 하고자 한다.
그 정도는 되어야 머리가 돌아가겠다.

많은 걸 보아야 하니
최대한 간단하고
가벼운 마음으로 정리하기