[참고자료]
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을 돌린다.
이 과정을 계속해서 반복한다.
그럼 또 성능이 좋아진다지 뭔가~
[데모]
'딥러닝 > 기타 리뷰' 카테고리의 다른 글
[음성데이터] 음성데이터 개괄 (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 |
댓글