Transformers의 Wav2Vec2를 이용한 대용량 파일용 자동 음성 인식

Hugging Face는 Wav2Vec2의 Connectionist Temporal Classification (CTC) 아키텍처의 특수성을 활용하여, 임의의 길이의 오디오 파일 및 실시간 추론 시 고품질의 자동 음성 인식(ASR)을 수행하는 방법을 도입했습니다.

Transformers의 시퀀스 길이 제한 문제

Wav2Vec2는 Meta AI Research에서 출시한 음성 인식용 인기 있는 사전 학습 모델로, Transformer 아키텍처를 기반으로 합니다. Transformer의 근본적인 한계는 시퀀스 길이에 따른 어텐션 메커니즘의 $O(n^2)$ 복잡도로 인해 발생하는 유한한 시퀀스 길이 수용 능력입니다.

매우 긴 오디오 파일(예: 1시간 분량의 녹음)을 청킹(chunking) 없이 Wav2Vec2로 실행하려고 하면, NVIDIA A100 GPU와 같은 고사양 하드웨어에서도 메모리 부족 현상이 발생하거나 프로그램이 충돌할 수 있습니다.

단순 청킹과 그 한계

단순 청킹은 오디오 파일을 더 짧고 고정된 길이의 샘플(예: 각 10초)로 나누고, 각 샘플에 대해 추론을 수행한 뒤 최종 텍스트를 재구성하는 방식입니다. 계산 효율성은 높지만, 모델이 청크 경계 부분에서 필요한 문맥을 결여하게 되어 오디오가 분할되는 지점에서 추론 품질이 저하되는 경우가 많습니다.

이를 완화하기 위한 일반적인 시도들—예를 들어 무음 구간에서만 청킹하거나 별은도의 음성 활동 감지(VAD) 모델을 사용하는 방식—은 오디오에 연속적인 음성이 포함되어 있거나 긴 노이즈 구간이 있을 수 있기 때문에 완전히 견고하지 않습니다.

스트라이드(Stride)를 이용한 청킹

Wav2Vec2는 모든 오디오 프레임이 단일 문자 예측(logit)에 매핑되는 CTC 알고리즘을 사용합니다. Hugging Face는 이 특성을 활용하여 긴 파일에 대해 견고한 ASR을 가능하게 하는 "스트라이드(stride)를 이용한 청킹"을 구현했습니다:

  1. 중첩첩 청크(Overlapping Chunks): 추론은 서로 중첩되는 청크 단위로 수행됩니다. 이를 통해 모델이 각 청크의 중앙 부분에서 충분한 문맥을 확보할 수 있도록 합니다.
  2. 로짓 드롭(Logit Dropping): 추론 품질이 일반적으로 가장 낮은 청크의 가장자리 부분의 로짓(logits)은 버려집니다.
  3. 로짓 체이닝(Logit Chaining): 남은 중앙 로짓들을 서로 연결하여 전체 길이의 오디오를 모델로 실행했을 때의 결과와 매우 유사한 전사(transcription)를 재구성합니다.

transformers 파이프라인에서는 chunk_length_s 인자를 추가함으로써 이 기능이 활성화됩니다. 사용자는 stride_length_s를 사용하여 중첩 구간을 추가로 설정할 수 있으며, 이 인자는 왼쪽과 오른쪽 스트라이드 길이를 위한 튜플을 받습니다(기본값은 각 측면의 청크 길이의 1/6입니다).

언어 모델(LM) 증강과의 호환성

추가적인 미세 조정(fine-tuning) 없이 단어 오류율(WER)을 개선하기 위해 Wav2Vec2에 언어 모델(LM)을 추가하는 방식 또한 이 스트라이드 기술과 호환됩니다. LM은 로짓(logits)에 직접 작동하므로, 청킹 및 스트라이드 과정은 수정 없이 LM이 강화된 모델을 모델에 적용할할 수 있습니다.

실시간 추론 기능

Wav2Vec2는 단일 패스(single-pass) CTC 모델이므로 특히 GPU에서 매우 효율적입니다. 이러한 효율성 덕분에 데이터가 도착하는 대로 파이프라인에 입력하여 실시간 추론이 가능합니다.

연속적인 청크(예: 1초의 스트라이드를 가진 10초 청크)에 스트라이드 기술을 적용하면, 모델은 사용자가 말하는 동안 실시간으로 전사 결과를 제공할 수 있으며, de 텍스트를 표시하기 전에 전체 청크가 처리될 때까지 기다릴 필요가 없습니다.

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch