본문 바로가기

paper_review

[논문리뷰] wav2vec 2.0: A Framework for Self-SupervisedLearning of Speech Representations

1. Introduction

 일반적으로 신경망은 많은 양의 라벨 데이터를 필요로 합니다. 그러나 현실적으로 라벨 데이터는 비싸고 구하기 어렵고, 비라벨 데이터가 훨씬 더 많습니다. 예를 들어, 현재 음성 인식 시스템은 수천 시간의 전사된 음성이 필요하고 전 세계 7천개 언어에 대해 전부 존재하지 않습니다. 또한 라벨 데이터만 이용한 학습은 인간의 언어 습득과도 거리가 있습니다. 아기는 주변의 말을 들으면서 듣기 기반으로 언어를 배웁니다.

 머신러닝에서는 자기지도학습이 등장하면서 비라벨 예제들로부터 일반적인 데이터 표현을 학습하고, 이후 라벨 데이터로 fine-tuning하는 방식이 떠오르고 있습니다. 본 논문에서는 raw 오디오 데이터로부터 자기지도 방식으로 표현을 학습하는 새로운 프레임워크를 제안합니다. 접근 방식은 음성 오디오를 CNN으로 인코딩하여 나온 결과인 잠재 음성 표현의 일부 구간을 마스킹합니다. 마스킹된 표현은 Transformer에서 문맥 기반 표현으로 생성됩니다. 모델은 대조 학습 과제를 통해 학습되고, 마스킹된 구간의 정답을 distractors 사이에서 구분하는 것이 목표입니다. 대조 학습에서 정답을 양자화된 형태로 사용하기 위해 Gumbel softmax를 사용해 이산 음성 단위를 학습합니다. 이는 양자화하지 않은 것보다 효과적이었습니다. 사전학습 후에는 CTC loss로 라벨 데이터를 이용해 fine-tuning하여 최종적으로 음성 인식에 사용됩니다.

 이전 연구들은 먼저 양자화 표현을 학습한 후, 별도로 문맥 표현을 self-attention 모델로 학습하는 두 단계를 따랐습니다. 본 논문에서는 이를 통합하여 end-to-end로 처리합니다. 이전에도 Transformer에서 마스킹을 사용한 음성 학습 시도는 있었지만 대부분 두 단계 파이프라인이거나 필터뱅크 입력 특징을 복원하는 방식이었습니다.

* 필터 뱅크는 음성을 전처리해서 얻는 스펙트럼 기반 특징입니다. MFCC, Mel Filterbank가 대표적인 예입니다. 오디오 신호를 STFT로 변환 후 주파수 대역별 에너지를 입력으로 많이 사용했습니다. 필터뱅크는 이미 사전처리 과정에서 정보가 손실되어 원시 오디오의 미세한 음향 패턴을 학습하기 어렵습니다.

 정리하자면, 이산 음성 단위와 문맥 표현을 동시에 학습하면 선행 연구에서 고정된 유닛을 사전 학습한 방식보다 더 좋은 성능을 낼 수 있음을 보여줍니다. 10분의 라벨 데이터만으로도 Librispeech의 clean/other 테스트셋에서 각각 4.8 / 8.2 WER 달성했습니다. 라벨 데이터가 1시간만 있는 경우에도 기존의 self-training 기법보다 나은 성능을 100배 적은 라벨 데이터로 달성했습니다. Librispeech의 전체 라벨 데이터(960시간)를 사용하면 WER 1.8 / 3.3을 기록했습니다.

 


2. Model

 wav2vec 2.0은 다층 합성곱 기반 특징 인코더로 구성되어 있으며, 원시 오디오 입력 X를 받아 잠재 음성 표현 Z을 출력합니다. 이후 잠재 표현들은 Transformer로 전달되어 문맥 정보를 반영한 표현 c를 생성합니다. 마스킹된 상태에서 self attention과 FFN을 거쳐 주변 문맥으로 의미있는 예측을 하게 됩니다. 특징 인코더의 출력은 양자화 모듈 Z -> Q를 통해 q로 이산화되며, 자기지도 학습 목적 함수에서 정답으로 사용됩니다. 특징 인코더는 시계열 합성곱, 레이어 정규화, GELU 활성화 함수로 구성됩니다. 합성곱의 출력은 GELU 함수를 거친 뒤 입력에 더해지고, 레이어 정규화가 적용됩니다. 원시 오디오 입력은 먼저 평균 0, 분산 1로 정규화됩니다. 전통적인 음성 인식처럼 MFCC나 filterbank를 안쓰기 때문에 미리 원시 오디오 스케일을 통일시켜 안정적으로 학습되도록 전처리합니다. 이 인코더의 전체 stride는 Transformer에 입력되는 총 타임스텝 수 T를 결정합니다. 쉽게 말해서, 원시 오디오가 CNN을 지나면서 stride에 의해 점점 축소되고 최종적으로 남는 시간 축의 길이가 Transformer에 입력되는 총 타임스텝 수 T입니다.

 특징 인코더의 출력은 low-level 특징 벡터이므로 지역적 특징만 담고 있습니다. 그래서 Transformer 문맥 네트워크에 입력되어 문맥 정보를 얻습니다. Self-attention을 통해 각 시점이 다른 모든 시점과 상호작용하고 점점 더 넓은 문맥을 반영하여 주변 소리와 어떤 관계에 있는지를 반영한 벡터인 문맥 벡터를 출력합니다. 기존의 절대 위치 정보를 인코딩하는 고정 positional embedding 대신, convolutional layer를 사용해 상대 위치 정보 relative positional embedding를 제공합니다. 음성은 절대적인 타이밍보다 간격 같은 상대적인 거리/순서가 훨씬 더 중요합니다. 예를 들어, 안녕하세요를 들을 때, 1초에는 반드시 '안'이 나와야해가 아니라 '안' 다음에 '녕'이 나와야해 라고 듣습니다. CNN은 모든 위치에 같은 방식으로 필터가 적용되기 때문에 위치가 살짝 바뀌어도 같은 패턴을 감지할 수 있는 구조입니다. 따라서 인접한 위치들의 차이 간격, 거리, 로컬 패턴 등을 더 잘 포착하여 음성의 상대적인 시간 정보를 인코딩하는 데 매우 적합합니다. 

* stride가 클수록 한 타임스텝이 더 길어지고, 시간 해상도가 낮아집니다. Transformer는 타임스텝이 너무 많으면 계산량이 커집니다. 그래서 stride를 적절히 주어 downsampling이 필요합니다.

* 위치 임베딩은 이산적인 대상을 연속적인 벡터 공간에 표현하여 학습가능한 벡터로 바꾸는 것입니다. 이는 학습으로 업데이트됩니다. 위치 인코딩은 위치를 위치 정보를 수학적 규칙을 통해 벡터로 표현하는 방식을 지칭합니다. 학습되지 않는 고정값입니다. 임베딩보다 인코딩이 더 포괄적인 개념입니다.

 vq-wav2vec과 비교했을 때, wav2vec 2.0은 CNN을 통해 연속적인 음성 표현으로 바꾼 후 Transformer 기반 self-attention을 통해 문맥화해서, 입력 오디오부터 최종 문맥 표현까지 하나의 모델로 연결하는 end-to-end로 캡처합니다. 즉, 모델이 입력된 음성 시퀀스의 local 정보만 보지 않고 입력 전체의 시간적 관계를 한번에 학습하여 전반적인 의미와 구조를 잘 파악합니다.

* vq는 vector quantization으로 벡터 양자화를 말합니다. vq-wav2vec는 CNN 출력 벡터를 양자화하여 이산 표현인 코드북 토큰을 입력으로 사용합니다. BERT처럼 토큰 단위 마스킹으로 학습하고, Transformer에서 이산 토큰 시퀀스의 문맥을 학습합니다.

 자기지도 학습을 위해 특징 인코더의 출력 Z는 product quantization을 통해 유한한 개수의 이산 음성 표현으로 양자화됩니다. 연속적인 음성 표현은 화자 정보, 잡음, 말투, 억양 등 디테일한 정보들이 포함된 벡터값입니다. 모델이 단순히 이 벡터값을 외워버리면 정답을 맞출 수 있기 때문에 코드북의 고정된 단위로 변환하여 불필요한 정보는 없애고 중요한 특징만 안정적으로 학습합니다. 공통적인 음향 특징이 있는 표현들끼리 같은 코드에 매핑되어 일반적인 특징만 학습하면 오히려 안정적이고 환경변화에 강건해집니다. 이 방법은 과거 연구에서도 좋은 결과를 보였으며, 이산 표현 → 문맥 표현을 학습하는 단계적 접근보다 더 나은 성능을 보입니다.

양자화 모듈 작동 방식

  • 사전 정의된 G개의 코드북이 있고, 각 코드북은 V개의 항목(entry)
  • 벡터값 → 각 코드북에서 가장 비슷한 항목으로 대체한 후, 선택된 G개 벡터를 연결(concat)
  • 이렇게 연결된 벡터는 선형 변환을 통해 최종 양자화 표현 q ∈ ℝᶠ 을 생성

 코드북은 초기에 랜덤 벡터였다가 학습하면서 자주 등장하는 음향 패턴을 표현하는 벡터들의 집합으로 이루어집니다. 코드북 항목은 실제 벡터와 정수 인덱스 쌍인 텐서 하나로 구성되어 있습니다. 비유하자면 포인터처럼 128개의 벡터들을 하나씩 가리키는 인덱스인 겁니다. Gumbel Softmax를 사용하여 완전히 미분 가능한 방식으로 코드북 항목을 선택합니다. 유사도를 구한 후 gradient가 코드북까지 전달돼서 코드북 벡터도 업데이트되어야 학습이 더 잘 됩니다. one-hot은 불연속이므로 미분이 불가능합니다. 그래서 그레디언트 학습에 사용할 수 없습니다. Gumbel Softmax는 one-hot 선택을 유도하면서도 gradient가 흐르게 해주는 방식입니다. 모델이 최종적으로는 하나의 클래스만 뽑아야 하기 때문에, Softmax 형태로 gradient가 흐르며 역전파를 수행하고 학습이 끝나갈수록 출력이 one-hot에 가까워지게 할 수 있습니다. Straight-Through Estimator는 forward pass에서는 불연속 연산(hard)를 쓰면서, backward pass에서는 연속 근사(soft)로 처리하는 방법입니다. STE를 사용하여 G개의 hard Gumbel Softmax 연산을 합니다. 아래 식은 Gumbel-Max Trick이고, g_i 랜덤 노이즈를 더해서 작은 확률 값인 경우에도 원래 분포에 비례한 샘플링이 가능해지게 추가합니다.

아래 식은 Softmax 함수입니다. Gumbel은 argmax라 미분이 불가능하므로, Softmax로 근사하게 됩니다.

그러면 z 대신 log phi_i + g_i를 넣어 학습할 때 미분이 가능해져 확률적 샘플링을 수행하는 Gumble Softmax식이 됩니다. 이 식을 이제 wav2vec에서 사용되는 방식으로 설명하겠습니다.

 아래 식에서, l은 인코더가 뽑아낸 logit, g는 코드북 수, n은 noise, V는 항목 수입니다. 특징 인코더의 출력 z는 logit l ∈ ℝᴳⱽ로 매핑됩니다.  logit l ∈ ℝᴳⱽ의 의미는 점수 행렬 logit l이 인코더 출력 벡터와 코드북 벡터의 유사도를 담은 GxV 크기의 점수 행렬이라는 뜻입니다. 각 코드북 g에서 v번째 항목을 선택할 확률 p₍g,v₎ 는 아래 식으로 정의됩니다. logit에 gumble noise를 더하고, gumble softmax를 적용해 확률 분포로 변환합니다. gumbel noise를 추가하는 이유는 모델이 탐색하도록 무작위성을 추가하여 확률적 샘플링을 적용합니다. 훈련 초기에 확률이 높은 것만 고르면 새로운 패턴은 배우지 못하고 기존 패턴만 강화하게 되어 학습 다양성이 사라집니다. Forward에서는 가장 큰 값을 가진 코드북 벡터를 선택하고, Backward에서는 softmax 확률을 근사해 gradient를 전달합니다. 

 여기서 τ는 온도 파라미터로, 값이 낮을수록 one-hot에 가까워지는 분포를 가지며 값이 높을수록 분산이 커지고 continuous한 분포를 가집니다. τ가 0에 가까워질수록 분모가 0이 되고 지수 함수 값이 무한대에 가까워집니다. 그럼 가장 큰 값이 압도적으로 커져서 one-hot처럼 됩니다. τ가 무한대로 갈수록 분모는 1이 됩니다. 초기에는 온도를 높여 연속적인 값으로 학습하다가 점차 온도를 낮추어 이산적인 선택을 하도록 조절하며 학습합니다.

Gumbel Softmax 설명에 참고한 링크입니다. https://milkclouds.work/gumbel-trick-explained/

 

Gumbel Trick Explained

Reparameterization Trick 왜 필요한가? * deterministic하게 작동하는 NN이라면 상관없지만, VAE처럼 어떠한 stochastic distribution에서 $n$개의 sample을 sampling하여 이후 레이어의 입력으로 삼는 Neural Network의 경우

milkclouds.work

 


3. Training

모델의 사전학습은 세 단계로 이루어집니다.

1 마스킹

 특징 인코더 출력의 일정 비율을 마스킹한 뒤 이를 Transformer 문맥 네트워크에 입력합니다. 마스킹은 비라벨 데이터만 사용하여 자기지도학습이 가능하도록 문맥을 파악해서 마스킹 부분을 예측하게 하기 위해서 마스킹합니다.

 마스킹된 구간은 모든 마스킹 위치에[MASK_Vector]같이 공통된 학습 벡터로 대체됩니다. 마스킹된 모든 위치에 동일한 벡터를 넣습니다. 주의할 점은 양자화 모듈에 입력되는 부분은 진짜 정답으로 사용되는데 마스킹하면 정답도 마스킹된 값이 되어버리기 때문에 학습이 안됩니다. 그래서 절대 마스킹하지 않습니다. 

마스킹 방식

  1. 전체 시간 스텝 중에서 일정 비율 p만큼 시작 위치를 무작위로 중복 없이 샘플링 -> 시작 위치를 분산되게 뽑아 특정 구간에 마스킹이 몰리지 않도록 하여 학습 편향 제거
  2. 각 시작 위치로부터 M개의 연속된 시간 스텝을 마스킹 -> 연속된 마스킹 구간끼리 겹치는 건 허용. 겹치지 않고 짧은 길이만 마스킹하면 정보가 너무 적고 충분한 문맥 복원이 어려움

2 대조 학습

모델에게 마스킹된 부분을 복원하라고만 한다면 평균이나 주변 보간으로 단순하게 맞춰버릴 수 있습니다. 그래서 진짜 정답과 헷갈릴 만한 가짜를 구분하도록 훈련하여 더 확실하고 의미있는 표현을 학습합니다. 따라서 각 마스킹된 시간 스텝마다 올바른 양자화된 잠재표현을 선택해야 하는 대조 학습을 수행합니다. 이때 두가지 손실로 학습합니다.

  •  대조 손실(L_m) : 대조했을 때 유사한 데이터는 거리를 가깝게, 다른 데이터는 멀게 만드는 손실입니다. 비정형 데이터는 정답 레이블이 부족하고 데이터들 간의 유사성만 있는 경우가 많은데, 이럴 때 대조 손실을 주로 사용합니다. 마스킹된 시간 스텝에 대해, 정답인 양자화 표현 qₜ을 distractors들 사이에서 올바르게 구별해야 합니다. distractor란 여러 개의 헷갈리는 오답 후보 벡터들을 말합니다.

 Transformer에서 마스킹된 위치를 유추한 문맥 벡터 cₜ은 마스킹된 시간 스텝 t의 중심에 위치합니다. 이 cₜ에 대해 후보 집합 Qₜ 중에서 진짜 양자화된 표현 qₜ을 골라야 합니다. Qₜ는 qₜ와 함께 K개의 오답 벡터를 포함합니다. Distractor들은 다른 오디오에서 뽑지 않고 같은 오디오 안에서 다른 위치에 대해 마스킹되어 균등하게 샘플링됩니다. 여기서 cₜ와 Qₜ 간의 코사인 유사도를 기반으로 softmax로 정답 qₜ에 가장 높은 점수를 주도록 학습합니다. sim(a, b)이 코사인 유사도이고, k는 온도로 softmax 분포를 조절합니다. 분모는 정답과 오답 전체 후보들의 유사도 합이고, 분자는 정답 쌍 (cₜ, qₜ)의 유사도입니다. 즉, 분모는 항상 분자보다 크고 분모로 나누어 log0~log1 사이 확률 범위로 만들고 정답 클래스의 확률을 뽑은 형태입니다. 이 확률이 1에 가까워질수록 -log1 =0으로 가장 손실이 작은 상태가 됩니다. 분자의 정답 확률이 커질수록 더 유사도를 높이고, 분모의 오답 확률이 커질수록 유사도를 더 낮추게 됩니다.

 코사인 유사도는 두 벡터 사이의 각도를 기반으로 벡터가 얼마나 같은 방향을 향하고 있는지 나타내는 값입니다. 이 값의 범위는 -1~1 사이입니다. A⋅B는 내적, ||A||는 벡터의 크기, 결국 A와 B 사이의 코사인 각도를 계산하는 겁니다. 벡터의 크기는 보지 않고, 같은 의미 공간에서 같은 위치를 향하고 있는지 방향이 중요합니다. 이 모델에서 sim(a, b) 값이 높을수록 모델이 정답에 가까운 예측을 한 것입니다. cos의 성질로 방향을 알 수 있습니다. cosθ = 1이면 같은 방향(두 벡터가 이루는 각도가 θ = 0),  cosθ = 0이면 직교(θ = 90), cosθ = -1이면 반대 방향(θ = 180)입니다. 즉, 코사인 유사도가 0일 때(exp(1)일때) 가장 정답과 유사하고, -log1에 가까워지도록 정답은 1에 가깝게 분자를 키우고, 오답을 -1로 밀어내서 분모를 줄이며 손실을 최소화합니다. 

a・b = ❘b❘X❘a❘cosθ

 

  •  다양성 손실(L_d) : 모델이 코드북 항목을 고르게 사용하게 유도하여 벡터 표현의 다양성을 확보하기 위한 규제 손실입니다. 즉, 모든 오디오 구간에 대해 비슷한 벡터만 양자화되지 않도록 코드북 내 항목들이 치우치지 않게 만드는 역할입니다.

 대조 학습은 양자화된 표현(positive 정답쌍, negative 오답쌍)을 기반으로 하므로, 코드북 항목들이 고르게 사용되어야 제대로 작동합니다. 다양하게 사용되지 않으면 대조 학습의 정답과 오답이 서로 너무 비슷해져서 모델이 '구별'을 제대로 배울 수 없습니다. 특징 벡터를 멀리 있는 코드북에 억지로 매핑하는 것이 아니라, 코드북 벡터들이 학습 중에 데이터 분포 근처로 업데이트되는 것입니다. 각 코드북(g)에 대해, batch 전체에 걸쳐 평균 softmax 분포 p̄_g의 엔트로피를 최대화합니다. p̄_g,v는 코드북에서 각 항목 v가 사용되는 평균 확률 분포입니다. 즉, 코드북의 사용 빈도 분포라고 할 수 있습니다. 엔트로피가 클수록 분포가 평평해져 다양한 벡터가 사용되고, 작을수록 편향되어 다양성이 부족해집니다.

 먼저 정보량에 대해 설명하겠습니다. 정보량 I(X)은 확률 p(x)에 반비례합니다. 예를 들어, 로또가 꽝이 나올 확률이 클수록 정보량(사건의 놀라움)이 낮습니다. 그리고 로그함수를 쓰는 이유는 log(ab) = log(a)+log(b)가 되듯이 곱을 합으로 바꿔주는 성질이 있기 때문에 정보량을 -logp로 정의할 수 있습니다.

 

 G는 코드북 수, V는 각 코드북의 항목 수를 나타냅니다. H(p), 즉 plogp는 각 사건의 정보량(놀라움)을, 그 사건이 일어날 확률 p로 가중 평균한 값으로 확률분포의 엔트로피입니다. 아래 전자 수식의 의미는 모든 코드북 g에 대해 그 안의 사용 확률 분포 p̄_g의 엔트로피를 계산하고 손실값으로 사용합니다. 이 수식의 엔트로피 부분을 풀어서 쓰면 후자 식이 됩니다. 1/GV로 나눠서 평균을 내어 코드북 크기에 따라 값이 달라지지 않도록 합니다. 정리하자면 각 벡터가 평균적으로 얼마나 선택되었는지의 평균 확률을 계산하고 얼마나 골고루 쓰였는지의 각 엔트로피항을 모두 더한 전체 합을 전체 평균을 내서 다양성 손실로 사용하는 구조입니다.

 

아래 식이 전체 손실 함수입니다. 여기서 α는 하이퍼파라미터로, 다양성 손실의 가중치를 조절합니다.

3 fine-tuning

 사전 학습이 끝나면 fine-tuning됩니다. Transformer Encoder 위에 랜덤값으로 초기화된 선형 분류기를 추가합니다. 이후 라벨을 보고 학습됩니다. 분류기의 출력은 해당 태스크의 어휘 클래스 수(C) 만큼의 차원을 가집니다. 손실 함수는 CTC를 사용합니다. 음성 인식에서 쓰이는 데이터 증강 기법인 SpecAugment를 수정하여 적용합니다. 원래는 음성을 스펙트로그램으로 바꾼 뒤 특정 시간 구간을 0으로 마스킹하고, 특정 주파수 대역을 마스킹하여 특정 주파수에 과적합하지 않도록 합니다. 본 논문에서는 Mel filterbank에 마스킹하는 대신, CNN 출력 시퀀스의 시간 축과 채널 축을 마스킹하는 방식으로 변형해 사용합니다. 이로 인해 과적합 방지 및 일반화 성능 향상 효과를 볼 수 있고, 라벨이 적은 경우 증강 기법이 더 중요하고 효과가 커집니다.

 CTC는 Connectionist Temporal Classification 약자로, 입력 시퀀스 길이와 출력 시퀀스 길이가 다를 때 정렬 없이 학습할 수 있게 해주는 손실 함수입니다. 사람마다 발화속도가 다르고 오디오가 아주 길 때 정답은 짧을 수 있습니다. 이때 각 프레임이 어떤 글자에 대응되는지 정확히 정렬하기엔 어렵겠죠? CTC는 이러한 문제를 해결할 수 있습니다. CTC는 P(Y|X) 조건부 확률이며, 입력이 주어졌을 때 정답 시퀀스가 나올 확률을 계산하는 것이 목표입니다. CTC 알고리즘은 다음과 같습니다:

  1. 블랭크 토큰 ϵ를 도입하여 공백 상태도 표현 가능
  2. 정렬을 경로로 생각 -> 가능한 모든 경로들의 확률을 합산
  3. 경로를 최종 출력 시퀀스 Y로 압축 -> Y로 변환되는 모든 경로의 확률 합

CTC는 입력 시퀀스에 대한 확률 분포와 출력 시퀀스 사이의 가능한 모든 alignment의 경로를 모두 계산합니다. cat이 정답 시퀀스일 때, 아래 그림의 오른쪽 정렬들은 유효하지 않은 정렬입니다. 중복된 문자 사이에 ϵ가 있다면 합치지 못합니다.

이후 아래 그림처럼 중복 문자는 합치고 공백 ϵ을 제거하고 정답 문장으로 바뀌는 경로의 확률만 합산합니다. 그들의 확률 합산에 log를 취해 손실로 적용합니다. 

아래 식이 바로 CTC 조건부 확률 정의입니다. 유효한 정렬 집합, 즉 정답으로 collapse되는 모든 정렬을 전부 다 합산합니다. 하나의 경로 확률은 각 시간별 확률을 곱해서 구합니다. 각 시간별 출력이 독립적으로 샘플링된다고 가정하기 때문에 곱으로 계산됩니다. a_t는 시간 t에 선택된 글자이고, A는 정답 정렬 경로 집합입니다. p(a|X)는 Transformer Encoder + 선형 분류기가 t에서 a를 낼 확률인 softmax 결과입니다. 손실함수 식에서 D는 오디오-텍스트 쌍 데이터셋이고, 한 샘플에 대한 CTC 손실들을 전체 더한 후 최소화합니다.

Π는 And 관계로, 특정 경로에 대해 시점별 확률을 곱한 것입니다. Σ는 OR 관계로 여러 경로를 전부 고려해 최종 정답 시퀀스 확률을 계산한 것입니다. 결국 정렬이 없는 상황에서는 정답 Y를 만드는 방법이 여러 개 있을 것이고, 정답이 나오게 되는 확률을 크게 만들어야 합니다. P(Y|X)를 최대화하는 게 손실함수의 목적입니다.

전체 데이터셋에 대한 목적함수

가능한 경로의 수를 다 구한다면 길어질수록 기하급수적으로 늘어나게 됩니다. 동적 알고리즘(DP)을 사용해 중복 계산을 줄이며 효율적으로 계산합니다. forward-backward 알고리즘을 쓰는데,

  • forward 변수 a_t : 시간 t까지 정답 시퀀스 Y의 앞에서 u번째까지 맞췄을 확률
  • Backward 변수 b_t: 시간 t 이후로 정답 시퀀스 나머지를 완성할 확률

이 두 변수를 결합하면 특정 타임스텝에서 정답 시퀀스를 거칠 확률을 효율적으로 계산할 수 있습니다. 즉, 각 노드가 '여기까지 올 확률'을 누적하고 마지막에 도착하는 값이 곧 정답 시퀀스의 총 확률이 되는 구조입니다.

CTC는 입출력 길이가 다르거나 정렬이 없어도 학습이 가능하고, 같은 글자가 여러 프레임에 걸쳐 있어도 중복을 허용해 처리 가능합니다. 그리고 End-to-End 구조라는 장점을 가지지만, 전체 문맥을 보지 못하고, 출력 간 종속성 학습이 어렵다는 단점이 있습니다. 또한 언어 모델 없이는 문법이나 문맥 처리가 불가능합니다.

* 선형 분류기는 입력 벡터에 가중치 행렬을 곱하고 bias를 더한 것입니다. Wx+b

CTC 알고리즘 설명에 참고한 링크입니다. https://distill.pub/2017/ctc/

 

Sequence Modeling with CTC

A visual guide to Connectionist Temporal Classification, an algorithm used to train deep neural networks in speech recognition, handwriting recognition and other sequence problems.

distill.pub

 


4. Experiment Setup

데이터셋은 비라벨 데이터와 라벨 데이터를 사용했습니다. 비라벨 데이터는 Librispeech 전체 오디오와 LibriVox 전체 오디오를 라벨 없이 사용했습니다. 라벨 데이터는 Librispeech 전체 전사 데이터, train-clean-100 subset, train-10h, train-1h, train-10min 설정에서 fine-tuning을 진행했습니다. 총 5시간 분량의 녹음과 정확한 음소 라벨을 포함한 TIMIT 음소 인식 데이터셋도 사용했고, 평가 시 음소 61개를 39개 클래스로 축소하여 표준 프로토콜에 따라 수행했습니다.

모든 모델은 fairseq 라이브러리를 기반으로 구현되었습니다. 마스킹은 마스킹 확률 p = 0.065, 연속된 M = 10 스텝, 평균 마스크 span 길이 = 14.7스텝 = 약 299ms로 설정했습니다.

* fairseq는 다양한 seq2seq 모델이나 시퀀스 문제를 쉽게 학습할 수 있도록 지원하는 오픈소스 라이브러리입니다.

특징 인코더는 7개 블록으로 구성되어있습니다. 각 블록의 시계열 합성곱 층은 512 채널을 가집니다. 스트라이드는 (5, 2, 2, 2, 2, 2, 2), 커널 너비는 (10, 3, 3, 3, 3, 2, 2)입니다. 이 설정은 출력 주파수를 49Hz로 만들며 각 샘플 간 stride는 약 20ms, 전체 receptive field는 400개 샘플로 약 25ms의 오디오를 커버합니다. 모델은 BASE와 LARGE 모델 두 버전으로 학습했습니다. Dropout 0.1, Layerdrop, Adam을 사용했습니다.다음은 양자화 세부 설정입니다. 코드북 수 G = 2, 항목 수 V = 320으로 이론상 최대 102,400개의 코드 단어가 됩니다. G = 1이면 표현력이 너무 약하고, 3 이상이면 코드 조합 수가 기하급수적으로 증가하기 때문에 너무 커집니다. 항목의 차원은 BASE에서는 d/G = 128, LARGE에서는 d/G = 384입니다. umbel softmax의 온도 τ는 BASE는 2 → 최소 0.5, LARGE는 2 → 최소 0.1로, 업데이트마다 0.999995의 비율로 감소시킵니다.

작은 규모의 Librispeech 데이터셋에서는 모델을 정규화하기 위해 특징 인코더의 마지막 레이어 출력에 L2 패널티를 적용하고, 인코더에 대한 gradient는 10배 감소시킵니다. 또한, 인코더를 약간 변경하여 레이어 정규화를 사용하지 않고 원시 오디오 대신 첫번째 인코더 레이어 출력에 대해 정규화를 수행합니다. 대조 손실에서 K = 100개의 distractor를 사용하며, 검증 세트에서 Lₘ 값이 가장 낮은 체크포인트를 학습 완료 모델로 선택합니다.

사전학습된 모델들은 음성 인식을 위해 파인튜닝되며, 이를 위해 문맥 네트워크 위에 무작위로 초기화된 선형 변환 층을 추가하여 해당 작업의 어휘(vocabulary)에 해당하는 C개의 클래스로 매핑합니다.

Librispeech의 경우, 문자(character) 단위의 타깃을 위한 29개의 토큰과 단어 경계 토큰이 존재합니다. 모델은 CTC loss를 최소화하는 방식으로 최적화되며, 훈련 중 과적합을 지연시키고 최종 오류율을 상당히 개선하기 위해 SpecAugment의 변형 버전을 적용했습니다. 이 방법은 훈련 시 시간 스텝과 채널을 마스킹하고, 라벨 예제가 적은 Libri-light 서브셋에서 성능이 크게 향상됩니다.

 

* 단어 경계 토큰은 단어 간 공백을 space 토큰으로 따로 둡니다. blank는 무음이나 패딩을 나타내는 토큰이고, space는 단어가 끝남을 명시적으로 표시하는 토큰입니다.

 


5. Results

제한된 라벨 데이터 조건에서 평가

먼저 라벨이 제한된 설정에서 사전학습된 모델을 평가하여, 비라벨 데이터에서 학습된 표현이 저자원 환경에서 어떤 성능을 내는지를 확인했습니다. 만약 사전학습된 모델이 음성의 구조를 효과적으로 포착했다면 소량의 라벨 예제만으로도 음성 인식을 위해 잘 파인튜닝될 수 있어야 합니다. 

LV-60k로 사전학습된 LARGE 모델을 단 10분 분량의 라벨 데이터만으로 파인튜닝했을 때 Librispeech의 clean/other 테스트 세트에서 각각 5.2 / 8.6 WER을 달성했습니다. 10분 분량 라벨 데이터는 평균 12.5초 길이의 녹음 48개에 해당하는 수준입니다. 이 결과는 자기지도 학습을 기반으로 한 초저자원 음성 인식이 가능함을 보여줍니다.

 

Lirispeech에서의 고자원 라벨 데이터 환경 평가

이번에는 라벨 데이터가 풍부한 환경에서 성능을 평가했습니다. wav2vec이 고자원 조건에서도 효과적인지를 알 수 있습니다. 이전과 동일한 모델들을 960시간 전체 라벨이 있는 Librispeech 데이터에 대해 fine-tuning합니다. 아래 표에서 볼 수 있듯이 Librispeech 전체 평가 지표에서 1.8 / 3.3 WER을 달성했습니다. 이는 상대적으로 단순한 기본 아키텍처를 사용한 것인데도 성능이 좋은 편입니다. 지도학습으로 학습할 경우, LARGE 모델은 2.1 / 4.6인 반면, 기존 SOTA 모델은 1.9 / 4.1 성능을 보였습니다.

본 논문에서는 Transformer Encoder + CTC 구조만을 사용하여 단순하지만, 이 구조는 프레임별 예측이 독립적이라 의존성이 부족하고 정렬 문제를 CTC에만 의존하기 때문에, Decoder까지 포함하여 문맥을 반영하는 seq2seq보다 성능이 떨어질 수 있습니다. 이러한 한계를 보완하기 위해 외부 모델과 기법을 사용해야 합니다. 본 논문에서 사용한 음향 모델은 문자 기반 어휘를 사용하는 반면, 언어 모델은 단어 기반 어휘를 사용합니다. 이로 인해 언어 모델의 피드백이 느려지고 성능 저하 요인이 됩니다. 최근 연구들은 대부분 word piece 기반 어휘를 음향 모델과 언어 모델 둘 다 사용합니다. 게다가 본 논문은 데이터 균형 기법을 전혀 사용하지 않았습니다. 본 논문에서 사용한 self-training과 pre-training은 서로 보완적인 기법이기 때문에, 두 방법을 결합하면 더 나은 성능을 낼 수 있을 것으로 기대됩니다.

 

TIMIT 음소 인식

TIMIT 음소 인식에서 정확도를 평가하기 위해 사전학습된 모델을 TIMIT의 라벨이 포함된 학습 데이터로 fine-tuning했습니다. fine-tuning 방식은 Libri-light의 10시간 subset에 대해 수행했던 방식과 동일하지만 언어 모델을 사용하지 않았습니다. 아래 표를 보면 wav2vec 2.0이 SOTA인 것을 알 수 있습니다. 개발/테스트 세트에서 각각 23% / 29%의 상대적 음소 오류율(PER) 감소를 보였습니다. 

 

소거 실험

 이전 연구들과의 주요 차이점은 잠재 오디오 표현을 대조 손실에서 target으로 사용할 때만 양자화하고 Transformer의 입력으로는 양자화하지 않는다는 점입니다. 이에 대한 근거를 설명하기 위해 간소화된 실험 설정에서 소거 실험을 수행했습니다. BASE 모델을 LS-960 데이터셋에서 250,000회 업데이트 동안 사전학습하고, train-10h 라벨 데이터로 60,000회 업데이트 동안 단일 GPU에서 fine-tuning했습니다. 이때 배치크기는 640,000개 샘플, 즉 약 40초 분량의 음성에 해당합니다. 세 개의 seed로 fine-tuning했고, dev-clean과 dev-other를 결합한 데이터셋에서의 평균 WER 및 표준편차를 확인했습니다.

 위 표는 연속 입력과 양자화된 타깃을 사용하는 wav2vec 2.0 전략이 가장 좋은 성능을 낸다는 것을 보여줍니다. 연속적인 잠재 음성 표현은 더 많은 정보를 보존하기 때문에 더 나은 문맥 표현이 가능합니다. 한편, 타깃 표현을 양자화함으로써 훈련을 더 견고하게 만들 수 있습니다. 입력과 타깃을 모두 양자화하면 성능이 가장 낮아졌습니다.

 타깃을 연속 표현으로 사용하는 경우, 현재 시퀀스의 세부적인 특징들을 타깃이 그대로 포함하게 되어 훈련이 지나치게 쉬워지고, 결과적으로 음성 인식에 유용한 일반 표현을 학습하지 못하게 됩니다. 실제로 대조 과제에서 정답 잠재 오디오 표현을 맞히는 정확도는 타깃을 양자화했을 때 62%였지만 연속 타깃을 썼을 경우 78%로 증가했습니다. 입력과 타깃을 모두 연속 표현으로 사용했을 때는 두 번째로 좋은 성능을 보였지만, 이를 개선하기 위한 여러 시도는 성공적이지 않았습니다.

 


6. Conclusion

 wav2vec 2.0은 원시 오디오에서 잠재 표현을 마스킹하고, 양자화된 음성 단위를 활용한 대조 학습을 통해 효과적인 자기지도 음성 표현 학습을 가능하게 한 프레임워크로, 단 10분의 라벨 데이터만으로도 상용 수준의 인식 성능을 달성하는 등 음성 인식 분야에 놀라운 성과를 보여주었습니다. 특히 기존의 준지도 학습 기법을 능가하면서도 개념적으로 더 단순하며, 라벨이 적은 저자원 환경뿐 아니라 고자원 환경에서도 강력한 성능을 유지했다는 점에서 의미가 있습니다.

raw wav → CNN feature extractor → Transformer Encoder → 선형 분류기 + CTC loss → text

 기존 접근법의 한계였던 양자화된 유닛의 고정성 문제를 다양성 손실을 추가하여 해결하고, 문맥 표현과 음성 단위 학습을 동시에 수행함으로써 일반화 성능과 데이터 효율성을 극대화한 점은 주목할 만합니다. 다만 여전히 문자 단위 어휘를 사용함으로써 언어 모델과의 어휘 불일치 문제가 존재하며, 향후 seq2seq 구조나 word piece 기반 어휘를 접목한다면 더욱 높은 성능 향상을 기대할 수 있습니다. 이 연구는 수많은 언어가 라벨링된 음성 데이터를 확보하기 어려운 현실에서, 음성 인식 기술의 범용성과 접근성을 크게 넓힐 수 있는 실질적인 가능성을 제시한다는 점에서 의의가 있습니다.

* 양자화된 유닛의 고정성 문제는 코드북 중 일부 항목만 계속 선택되어 표현이 편향되고 고정되어 버리는 문제입니다.


논문 출처 : https://arxiv.org/abs/2006.11477

 

wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations

We show for the first time that learning powerful representations from speech audio alone followed by fine-tuning on transcribed speech can outperform the best semi-supervised methods while being conceptually simpler. wav2vec 2.0 masks the speech input in

arxiv.org