본문 바로가기
딥러닝/기타 리뷰

[음성데이터] 음성데이터 개괄2

by 혜 림 2022. 7. 18.

[참고자료]

https://www.youtube.com/watch?v=Pw9BUgCf6a8&t=2044s https://drive.google.com/drive/folders/1VPjvaF8KTTufxyC_5pstWiuwXCgyM2eC

 

 

[목차]

- 음성 스피커의 작동 원리(서버/디바이스)

- streaming(on device) vs server

- 스트리밍으로 음성 인식

- 더 나은 음성 인식을 위해서 : 디코딩

- wav2vec

- 음성 데이터에서 conv 활용

- 또다른 흐름

 

 

@음성 스피커의 작동 원리(서버/디바이스)

 

 딥러닝을 한 번이라도 해본 사람이라면 다 아는거겠지만, 이쪽의 문제는 컴퓨팅 리소스가 굉장히 중요하다는 점이다.

 그래서 인공지능 스피커도 마찬가지로실생활에 쓸 수 있는 성능을 내기 위해서는 컴퓨팅 리소스를 잘 할당해야 한다. 

 위의 구조도를 보면 어떻게 분리하고 있는지 알 수 있다. 

 오디오 전처리, 음성 구간 탐지, 키워드 탐색은 디바이스에서 처리하되, 음성 인식(저번 시간에 소개한) 과 자연어 처러는 클라우드에서 처리하게 된다. 

 

 이때 음성 구간 탐지란 무엇이냐면, 어디부터 어디까지가 사람의 목소리인지 판단하는 일을 뜻한다.

 키워드 탐색은 딱 음성 인식을 시작하게 하는 키워드를 뜻한다. (시리야, 이런거)

 자세한 건 아래에서 살펴보자. 

 

 

 

1) VAD 

 음성 스피커는 켜진 순간부터 계속 귀를 기울이고 있다가 사람이 말하면 반응을 해야하고, 그 판단을 VAD를 통해서 한다.

  VAD는 일상생활에는 노이즈가 굉장히 많기에 필요한 과정이다. 하지만 비교적 쉽게 할 수 있는게, 정답 레이블이 사람 목소리다(1) 아니다(0)으로 이진 분류를 하면 되기 때문이다.  

 위의 슬라이드에 3개의 waveform이 있는데, 제일 첫번쨰가 clean speech. 그러니까 순수하게 사람 목소리만 들어간 경우다. 진동이 커질때, 사람 목소리라는 걸 쉽게 알 수 있다. 그러나 두 번째 waveform 처럼 노이즈가 섞인 경우는 쉽지 않다. 그래서 저번에 말했던 것처럼 오디오에서는 전처리와 후처리가 매우 중요하다는 거다. 적절한 후처리를 통해서 제일 아래의 waveform 으로 변환해, 인간의 목소리인지 아닌지 여부를 판단할 수 있다. 

 

2) keyword spotting 

특정 키워드를 인식하기 위해서 대기하고 있다. 

VAD를 통해서 듣다가, 키워드 인지 아닌지를 또 판단하는 것이다. 

이때 키워드는 단순히 동작 시작을 알리는 '시리야'와 같은 wake-up keyword 일 수 있고 구체적인 동작을 지시하는 speech command 일 수 있다.

 가장 오른쪽에 나와있는 단어의 리스트는 구글에서 사용하는 speech command 리스트다. 

 

@streaming(on device) vs server

 

위의 구조도에서 클라우드와 디바이스를 나눠서 이야기했지만, 음성 인식을 어디서 처리할지는 아직 연구 중이다. 

 

음성인식을 디바이스에서 할 때와 서버에서 할 때 각각의 장단이 존재하기 때문이다.

1) 스트리밍에서 할 경우: 서버까지 가야할 필요가 없기 때문에 지연이 없다. 그러나 단어 하나씩 보며 진행되기에 정확도가 낮다. 서버에 가야할 필요가 없기에 프라이버시 문제에서 자유롭다. 

2) 서버를 쓸 경우: 지연시간이 생기지만, 여러 보이스를 한 번에 보기에 정확도가 높다, 하지만 프라이버시 문제를 다루어야 한다. 

 

그래서 wav2vec는 디바이스에서 음성 인식을 실행하되, 정확도를 높이는 방법을 제시한다. 

 

@스트리밍으로 음성 인식

 

 저번 시간에 음성 인식에서 alignment가 어떻게 이루어지는지 세 가지 모델을 봤었는데, 그 중에서 RNN-T를 요즘 많이 쓰는 이유가 여기서 밝혀진다. 

 

 

 스트리밍으로 음성을 인식할 경우, 바로바로 텍스트를 출력한다. 끝까지 볼 수 없다. 

 그렇기에 CTC와 같이 모든 음성 데이터에 관한 확률벡터를 입력값으로 하는 알고리즘은 사용이 어렵다. 

 LAS도 마찬가지로 어려운게, 음성을 모두 본 encoder에서 featrue를 추출하고 attention을 통해서 decoder로 넘어가기 때문이다.

 하지만 RNN-T 와 같은 경우는 모두를 볼 필요 없이, 매 time stamp마다 해당 음소를 이어갈지 바꿀지를 결정하기 때문이다. 

 

혹은 슬라이드의 그림처럼 미래를 보지 않는 왼쪽으로 쏠린 convolution이나, masking이 된 attetion을 통해서도 처리 가능하다. 

 

그래도 여전히 전체를 보지 못하기 때문에 정확도가 낮다는 문제가 있다. 

 

@더 나은 음성 인식을 위해서 : 디코딩

 

이 파트는 다음으로 넘어가기 위한 도약 포인트!

슬라이드에 모든 내용이 있다.

 

 

@wav2vec

 

 

NLP와 달리 정답이 없기 때문에, q라고 하는 quantied한 것과 계산한다고 한다. 

 

결과는 짜잔!

 

BERT와 같은 구조로, unlabeled data로 pretrain을 한 후에 labeled data로 fine-tuning을 시행한다. 

이때, 10분만 label을 줬는데도 8% 정도의 에러를 내는 등 휼륭한 성과를 보여준다. 

label을 더 줄 수록 더 대단한 효과!!

 

@음성 데이터에서 conv 활용

cnn 은 진작부터 쓰고 있었지만, transfomer와 함께 쓰이면서 더욱 활성화되었다고 한다. 

cnn + transformer 해서 conformer 라는 모델을 쓴다. 

이때, 배경은 '받아쓰기는 그냥 지역적인 정보로 바로바로 해낼 수 있지 않나?' 라는 생각이다.

그래서 cnn을 통해서 지역적인 정보를 잡아내고 transformer를 통해서 전역적인 정보를 잡는다. 

 convolution을 transformer 내부에 넣을 수도 있고

혹은, spectogram을 2D 이미지처럼 input으로 넣어주고 처리해서 cnn 만 이용하는 방법도 있다고 한다. 

 

conv는 확실히 트랜스포머에 비해서는 가벼운 모델이니까, 스트리밍이면 cnn을 적극적으로 고려할만하다.

 

@또다른 흐름

 

이미지든, 자연어든, 보이스든, 라벨링 된 데이터가 적다는 건 어디든 공통적으로 겪는 문제점이다. 

이거를 해결하기 위해서 이미지 쪽에서 나온 연구인데, 이거를 보이스 쪽에서도 이용하는 흐름이 있다. 

 

일단 기존에 pre-trained 모델(M)로 일단 (labeling 안 된)데이터를 넣는다.

그럼 엉망진창으로 모델이 예측할 것이다. 이 엉망진창을 pseudo-label로 사용한다.

이후에 진짜로 label이 제대로 된 데이터와 이 pseudo-label 데이터를 섞어서 M을 돌린다. 

이 과정을 계속해서 반복한다. 

 그럼 또 성능이 좋아진다지 뭔가~

 

 

[데모]

https://www.google.com/intl/en/chrome/demos/speech.html

'딥러닝 > 기타 리뷰' 카테고리의 다른 글

[음성데이터] 음성데이터 개괄  (0) 2022.07.11
[Optimizer]AdamW  (0) 2022.02.10
[의료데이터] 단백질 구조 예측  (0) 2021.11.24
[GNN] GCN  (0) 2021.11.23
[의료이미지 분석]Introduction to medical image analysis  (0) 2021.09.22

댓글