본문 바로가기

카테고리 없음

음성인식에서의 딥러닝 Part 2

1) 스마트 스피커의 작동 알고리즘

- 오디오가 들어오면 에코 제거, 노이즈 제거 등의 전처리를 한다.

- 스마트 스피커는 소리가 들려오는 방향을 확인해야 하기 때문에 안에 마이크가 2-3개 정도가 있다. 

- 오디오 전처리가 성능에 큰 영향을 미치기 때문에 중요한 과정이라고 할 수 있다.

- 음성이 어디서부터 어디까지인지를 탐지하는 음성 구간 탐지 과정이 있다.

- 키워드 탐색: 본격적으로 음성인식이 시작된다고 생각하면 된다.

- ex) 음성 구간을 탐지하고 있다가 "시리야"가 들리면 이것을 키워드로 인식하고 그 뒤의 말을 음성인식 한다.

- 현재 상당수의 스마트 스피커들이 클라우드로 음성인식을 보내고 있다. 하지만 사생활 보호 등의 이유로 디바이스에서 음성인식을 처리하는 비중이 높아질 것으로 예상된다.

- ex) 음성인식 결과로 "오늘의 날씨는 어때?"가 된다면 이에 대한 정보를 찾기 위해 클라우드로 가게 된다. 최종적으로 처리된 결과를 스마트 스피커가 받아 안에 내장된 마이크에서 음성합성(Text-To-Speech)을 통해 사람에게 알려준다.

 

2) 음성 구간 탐지(Voice Activity Detection, VAD)

- 사람 목소리 여부를 판단한다.

- 음성이라고 판단되는 구간만 음성인식으로 전달한다.

- clean speech에서는 사람의 목소리를 구별해내는 것이 쉽지만 noisy speech에서는 사람의 목소리를 구별해애는 것이 어렵다.

- 따라서 위의 세번째 사진처럼 오디오 전처리를 통해 noise를 감소시키고 음성에 해당하는 부분을 확장하면 좀 더 판단하기 쉬워진다. 

 

3) 키워드 탐색(Keyword Spotting)

- 특정 키워드가 발음 되었는지를 확인한다.

- 보통 음성인식 단계 전에, 특화된 모델이 수행한다.

- VAD와 한 번에 같이 훈련되기도 한다.

- Wake-up Keyword("하이 구글", "시리야" 등)와 Speech command("그래", "아니", "높여", "그만" 등)로 구분한다.

 

4) 스트리밍 음성인식(Streaming Speech Recognition)

- 1.Serverside transcription: 말을 하면 서버로 가서 처리된 다음에 돌아오는 과정, 서버(server) 방식

- 정확도가 더 높다 (추가적인 보정이 가능하기 때문), 프라이버시 문제로 인해 암호화 등의 과정이 필요하다.

- 2. On device voice: 말하는 즉시 스트리밍 되어서 계속 타이핑이 되는 구조, 스트리밍(streaming) 방식

- 속도가 훨씬 빠르다 (서버에 가지 않아도 되기 때문), 프라이버시 문제가 없다.

- On device voice가 훨씬 유저(user) 친화적인 모습을 보여줄 수 있다.

- On device voice, 즉, 스트리밍 방식이 더욱 선호될 것이라고 예상하지만 그러기 위해서는 디바이스 자체의 성능이 좋아져야 한다.

 

5) Architectures for Streaming ASR

- "음성인식에서의 딥러닝 Part 1" 게시글에서 다룬 full-context-ASR과는 다르다.

- 지난시간에는 양방향을 보는 인코더였지만(ex. bidirectional LSTM, full attention transformer 등) 스트리밍을 하기 위해서는 미래의 정보를 볼 수 없기 때문에 특별한 보정이 필요하다.

- 지난시간에 다룬 CTC, LAS, RNN-T 구조 중에  CTC는 bidirectional LSTM을 사용하기 때문에 스트리밍 구조로 사용하지 않고 LAS는 인코더에서 전체 구조를 뽑고 하나씩 attention을 거는 구조였기 때문에 역시 스트리밍 구조로 사용하지 않는다.

- RNN-T의 경우 몇 가지 보정을 하면 스트리밍이 가능해진다.

 

6) Beam search for Better Decoding

- 탐욕 알고리즘(Greedy Search)

- 그때그때 확률이 가장 높은 단어를 선택한다.

- 사전에 없는 단어, 발음이 비슷한 조합, 문법적으로 어색한 문장이 결과로 나올 수 있다.

- 빔 검색 알고리즘(Beam Search)

- 위와 같은 문제를 보정하기 위해서는 빔 검색 알고리즘을 해야한다.

- 지금 선택이 영향을 미칠 여러 미래를 보고 확률이 가장 높은 조합을 선택하는 방법이다.

- 지연어 처리(NLP)에서도 성능을 높이기 위해서는 필수적이다.

- 가짓수를 여러 들고 있어야 하기 때문에 메모리 사용량과 계산량이 높다.

- Beam Search에 적합한 아키텍쳐로는 LAS와 RNN-T가 있다. CTC의 경우 beam을 크게 해야한다.

 

7) Beam Search with Language Model

- Beam width B = 가장 유망한 가설의 수

- 1. 현재 확률이 제일 높은 B개를 선택한다. -> 2. 각각에서 다시 그 다음 확률 높은 B개를 선택한다. -> 3. 현재 후보들 중 4. 가장 확률이 높은 B개를 선택한다. -> <End-of-Sentence>가 나올 때까지 (2-3) 과정을 반복한다.

- 확률 계산

- 음성 모델(인코더)에서 이미 확률이 계산된다. (softmax)

- 추가로, 외부의 언어 모델이 가설을 평가해 줄 수 있다.

- 두 점수를 잘 조합해서 가설의 확률을 결정한다. (음성 모델: 음성을 얼마나 잘 받아쓰기 했는가, 언어 모델: 얼마나 말이 되는 문장인가)

 

8) wav2vec2.0: Self-Supervised Speech Representations

- waveform이 들어오면 stride가 있는 CNN으로 일정 간격을 두고 정보를 추출한다.

- CNN을 통해 근처 프레임들 사이 관계를 알 수 있다.

- wav2vec2.0에서는 20ms마다 하나의 정보가 나오도록 CNN이 긴 waveform을 압축한다.

- 그 후 어떤 점을 masking한다.

- masking된 상태로 transformer에 넣어서 마지막에 벡터(=Context representations)를 만들어낸다.

- masking하는 transformer와는 별개로 q라는 작은 모델이 CNN 정보를 Quantized representations Q로 바꾼다. 

- NLP, 즉, BERT에서는 masking된 부분이 무엇이어야 한다는 masked language modeling loss가 있는 반면, 음성에서는 정답이 없기 때문에 똑같이 맞히게 하는 것이 의미가 없다.

- CNN feature와 똑같이 맞히는 것은 transformer에서 효과적으로 바꾼 정보를 다 날리게 된다.

- 현재 step의 Q와는 가까워지게, 다른 step의 Q와는 멀어지게 하는 contrastive loss를 사용한다.

- 두 개의 초록색 동그라미 사이는 가까워지게, 초록색과 빨간색 동그라미 사이는 멀어지게 훈련해야 한다.

- 정답이 없는 unlabeled data를 사용해서 wav2vec2.0을 pre-training을 하고 그 후 정답이 있는 labeled data로 fine-tuning해서 음성인식의 성능을 높이는 2-stage approach다.

- 표 해석

- unlabeled data에서 LS-960: LibrisSpeech를 정답 없이 960시간 pre-training했다는 의미

- LM: 외부의 Language Model로 decoding 했다는 의미 (4-gram: 전통적인 방식의 LM, Transf.: Transformer기반의 LM)

- wav2vec2 Base: Librisspeech로 훈련, wav2vec Large: LibriVox로 훈련

- wav2vec2 Large XLSR-53: cross-lingual speech representation, 53개 언어로 같이 훈련된 모델, 데이터 = CommonVoice+BABEL+Multilingual Librispeech

- 53개의 언어로 훈련한 결과 pre-trained된 벡터들 사이에 어느정도 규칙성이 있었다.

- 비슷한 발음과 어법이 사용되는 언어에 대해서는 비슷하게 wav2vec2.0가 사용된다.

 

9) Merging Convolution into ASR

- Convolution이 ASR에 본격적으로 쓰이는 흐름도 있다.

- transformer와 convolution 각각이 장점이 있으니 둘을 섞어서 쓰자라는 시도가 많아지고 있다.

- 음성의 특징: 가까운 위치의 유사성이 크고 발음을 찾으려면 근처 몇 개의 step 안에 정보가 다 있다. 이러한 특징이 있으니 convolution으로 지역적인 정보를 찾고 전역적인 정보는 self-attention으로 찾는 조합구조가 등장했다.

- 가장 대표적으로 나온 것이 Conformer(convolution과 transformer의 합성어)이다.

- 2가지 방법을 생각해 볼 수 있다.

- 1. 모델 안에 convolution 넣기 (ex. conformer: self-attention과 convolution 한 번씩)

- 2. convolution으로만 모델 구성하기 (ex. spectrogram을 2D 이미지처럼 생각하고 처리)

- convolution의 경우 적은 파라미터로도 높은 성능을 낸다.

- 스트리밍 모델이라면 모델이 가벼워야 하기 때문에 convolution 기반을 생각해 볼 수 있다.

 

10) Noisy Student Training (NST) for ASR

- 이미지 쪽에서 처음 등장한 개념이다.

- unlabeled data는 많은데 labeled data가 적은 경우 문제를 해결하는 방법이다.

- 우선 pre-trained된 모델을 사용한다. (ex. 0세대 모델: wav2vec2.0을 사용하고 위에 한국어 음성인식기를 붙였다고 가정)

- 이 모델을 가지고 unlabeled data를 돌리면 그 결과 음성인식기가 판단한 pseudo-label(=가짜 라벨)이 나오게 된다.

- 이때, 판단된 결과가 좋을수록 좋으니 language model, 음성인식기 큰 것을 사용한다.

- 원래 가지고 있던 적은 labeled data와 임시로 만든 pseudo data를 합쳐서 1세대 음성인식기를 만든다.

- SpecAugment: 음성인식에서 사용하는 augmentation 방법, spectrogram에서 시간축, 주파수축 방향으로 일정 부분을 drop-out 시켜서 지워 네트워크가 지운 부분 없이도 최대한 좋은 결과를 낼 수 있도록 한다.

- 이 과정을 반복하면 세대가 지날수록 음성인식기의 성능이 좋아진다.

- State-of-the-Art: wav2vec2.0 (self-supervised) + NST (semi-supervised) + Fine-tune (supervised) 

 

- 출처

- https://youtu.be/Pw9BUgCf6a8