기술 블로그

[액션파워 LAB] 실시간 음성 인식을 위한 Transducer

daglo 팀 · 2022년 9월 16일

[액션파워 LAB] 실시간 음성 인식을 위한 Transducer

음성 인식은 사람이 발화한 음성을 글로 받아쓰는 기술로 회의록 작성, 챗봇, 차량 내 네비게이션 시스템, HCI(Human Computer Interface)등 다양한 산업 분야에 적용할 수 있습니다.

음성 인식은 받아쓰는 방식에 따라 배치 단위 음성 인식(Batch STT)과 실시간 음성 인식(Real-Time STT)으로 나눌 수 있어요.

  • 배치 단위 음성 인식은 수분~수십 시간 길이의 음성 파일을 한번에 받아쓰는 것을 의미합니다.
  • 실시간 음성 인식은 전체 음성의 길이에 상관없이 실시간으로 입력되는 음성은 빠르게 받아쓰고 보여주는 것을 뜻합니다.

딥러닝을 활용한 음성 인식은 가변 길이의 입력과 가변 길이의 출력을 다루기 때문에 대부분 Encoder와 Decoder로 이루어진 Sequence2Sequence 아키텍처를 주로 사용하고 있습니다.

  • 배치 단위 음성 인식은 전체 길이의 음성에 대해 Encoding 수행 후 Decoding을 수행하는데 이 과정에서 많은 계산이 요구되므로, 짧은 응답 시간으로 받아 적어야 하는 실시간 음성 인식에는 다소 부적합해요.
  • 적은 계산과 빠른 응답 속도를 위해, 실시간 음성 인식에서는 Transducer와 같이 실시간 처리에 용이한 아키텍쳐가 사용될 수 있습니다.

Transducer란?

Transducer는 음성 인식처럼 가변 길이의 입출력을 다루는 딥러닝 아키텍쳐로 Seq2Seq처럼 다양한 분야에서 활용될 수 있지만, 이번 글에서는 실시간 음성 인식 분야를 중심으로 설명합니다.

Transducer는 크게 Encoder, Decoder와 Joint Network 3개의 모듈로 구성될 수 있습니다.

  • Encoder는 짧은 길이의 음성을 입력으로 받아서 음성 인식에 유용한 특징을 추출하는 역할을 합니다.
  • Decoder는 앞서 예측한 글자를 입력으로 받아 특징을 추출하되, Encoder와는 달리 언어적 정보(혹은, 문맥 정보)를 추출합니다.
  • JointNetwork는 앞서 Encoder와 Decoder가 추출한 정보를 잘 취합해서 앞서 예측한 글자 다음에 올 글자를 예측합니다.

Transducer의 아키텍쳐 및 손실 함수

Transducer의 아키텍쳐

1. Encoder

  • Encoder는 [T, 80]길이의 Mel-spectrogram 혹은 [T] 길이의 음성 신호를 입력으로 받아 음성 인식에 유용한 [T/s, f]를 갖는 텐서 형태의 특징들을 추출합니다. (s: 서브샘플링 비율, f: 특징 벡터의 차원)
  • Encoder에는 RNN, LSTM, Wav2Vec, Transformer, Conformer등과 같이 특징을 추출하고 벡터를 생성하는 하는 다양한 구조들이 사용될 수 있어요.
  • audio_feat = Encoder(input_audio)

2. Decoder(Prediction Network)

  • Decoder는 앞서 예측한 글자들을 입력으로 받아 언어 정보 혹은 문맥 정보 등을 추출합니다.
  • Decoder 또한 Encoder처럼 특징을 추출하고 벡터를 생성하는 다양한 구조들이 사용될 수 있어요.
  • text_feat = Decoder(input_text)

3. JointNetwork

  • Joint Network는 Encoder에서 추출된 음성에 대한 특징과 Decoder에서 추출된 언어에 대한 특징을 결합해 다음 글자를 예측하는 네트워크입니다.
  • 간단한 형태의 Joint Network는 두 특징을 더하거나 이어 붙인 뒤 Fully Connected Layer를 거치는 식으로 구현될 수 있어요.
  • Joint Network 또한 단순한 Fully Connected Layer뿐만 아니라 다양한 형태로 구현될 수 있습니다.
  • joint_feat = Concat or Add(audio_feat, text_feat)
  • ouput_feat=JointNetwork(joint_feat)
  • prob = Softmax(output_feat)

Transducer의 손실 함수 — RNN-T(Recursive Neural Network-Transducer) Loss Function

  • Transducer는 RNN-T 형태의 손실 함수를 통해 학습될 수 있습니다.
  • 음성 특징의 길이인 T, 정답 텍스트의 길이인 U로 구성된 격자 형태의 그래프에서 시퀀스가 생성하고 시퀀스들이 실제 정답 텍스트와 같도록 Transducer가 학습될 수 있어요.

이미지 출처: https://arxiv.org/pdf/1211.3711.pdf

  • 위 그래프에서 각 화살표들은 다음 상태 혹은 노드로의 전이를 의미해요. 수평 화살표는 아무것도 출력하지 않는 blank에 대한 확률, 수직 화살표는 다음 글자 노드를 출력할 확률에 대응됩니다.
  • 일례로, 위 그래프의 왼쪽 하단의 (1,0)에서 오른쪽 (4,3)까지 도달할 수 있는 시퀀스는 정답이 될 수 있는 하나의 시퀀스이고, 각 시퀀스에 대한 확률은 전이되는 노드들의 곱으로 표현될 수 있어요.
  • RNN-T Loss는 위 그래프에서 생성될 수 있는 시퀀스들의 확률들의 합이 높아지도록 Transducer를 학습합니다.
  • 예를 들어 정답 텍스트가 “안녕하세요”일 때, blank($)를 포함하는 시퀀스들은 아래와 같을 수 있어요.

$안$$녕$하세$요
$안녕$하$세$$요$
안$녕$하$$세$요
...

Transducer의 디코딩 방법

학습된 Transducer Network는 Greedy Search 또는 Beam Search를 통해 실시간 음성 인식에 활용될 수 있습니다.

  • Greedy Search는 [T]길이의 음성 특징과 blank 토큰이 주어졌을 때 매 음성 특징 스텝마다 제일 확률이 높은 토큰을 선택하는 방식으로, 매우 빠르다는 장점이 있지만 아래 설명할 beam search에 비해 정확도가 다소 낮다는 단점이 있습니다.
  • Beam search는 다양한 가능성을 열어두고 디코딩하는 방식으로, Greedy search에 비해 계산량은 많지만 여러 경우의 수를 고려하기 때문에 정확도가 더 높을 수 있어요.
  • 매 스텝마다 확률이 높은 상위 Beam size개 만큼의 토큰을 유지합니다. 각 토큰을 입력으로 다시 스텝을 진행하고, 확률과 스코어가 높은 상위 beam size 개의 시퀀스를 유지하는 방식으로 받아쓰기를 수행해요.

이미지 출처: https://d2l.ai/chapter_recurrent-modern/beam-search.html

다른 음성 인식 아키텍쳐들과의 비교

  • 음성 인식에서 사용되는 몇 개의 아키텍쳐들 중 Encoder만 있는 아키텍쳐, Transducer를 사용한 아키텍쳐, Encoder-Decoder 아키텍쳐를 비교하면 아래와 같아요.
  • 각 아키텍쳐들은 정확도, 수행 속도, 문맥 고려 유무에 따라 아래와 같이 나눌 수 있어요.

다른 음성 인식 아키텍쳐들과의 비교

  • 속도 : Encoder only > Transducer > Encdoer-Decoder
  • 정확도 : Encoder-Decoder > Transducer > Encoder only
  • 문맥 고려 정도 : Encoder-Decoder > Transducer > Encoder only

Encoder only 아키텍쳐

  • Encoder only 아키텍쳐는 위 Encoder-Decoder와 다르게 Decoder없이 Encoder만으로 음성 인식을 수행하는 구조입니다.
  • 이 구조는 Decoder가 없기 때문에 수행 시간은 매우 빠르지만, 문맥에 대한 고려가 적고 비교적 정확도가 낮다고 할 수 있어요.

Transducer 아키텍쳐

  • Transducer 아키텍쳐는 모든 음성을 한번에 Encode하는 것이 아니라, 실시간으로 입력되는 짧은 길이에 대해서만 encoding을 수행합니다. 그렇기 때문에 encoding자체에 소요되는 시간이 적고 속도도 빠릅니다.
  • 또한 Decoder를 통해 문맥을 고려할 수 있고, 앞서 예측한 모든 글자를 예측에 활용하는 것이 아니라 직전에 예측한 글자 혹은 짧은 길이의 글자만 예측에 활용합니다. 때문에 decoding에 소요되는 시간도 적어 속도가 빠르죠.
  • 일반적으로, Decoder에서 앞 글자를 통해 문맥을 고려하기 때문에 Encoder만 있는 구조보다는 정확도가 높지만, 앞서 예측한 글자의 일부만 활용하므로 Encoder-Decoder 구조보다는 정확도가 낮습니다.

Encoder-Decoder 아키텍쳐

  • Encoder-Decoder 아키텍쳐는 음성에서 특징을 추출하는 Encoder와, 앞서 예측한 글자에서 문맥 정보를 추출하는 decoder로 구성됩니다.
  • Encoder로 음성에서 특징을 추출하고, 추출된 음성 특징을 기반으로 Decoder가 한 글자씩 받아 적기 때문에 전체 받아 적는 문장의 길이에 비례해서 수행 시간이 오래 걸릴 수 있어요.
  • 하지만 글자를 예측할 때 앞서 예측한 글자들을 활용하기 때문에 문맥을 잘 고려해 음성 인식을 수행하고, 위 구조들 중 가장 높은 정확도를 보입니다.

액션파워의 Transducer는

  • Transducer는 실시간 음성 인식 등 빠른 응답 속도를 요구하는 분야에 사용할 수 있는 구조이며, 음성에서 특징을 추출하는 Encoder, 글자에서 특징을 추출하는 Decoder와 앞선 두 특징을 결합해서 다음 글자를 예측하는 Joint Network로 구성되어 있어요.
  • 액션파워에서는 실시간 음성 인식을 위해 Transducer를 비롯한 다양한 음성 인식 모델, 기술, 알고리즘 및 특허를 갖고 있으며 이들을 향후 서비스에 활용할 예정이에요.
  • 출원 번호 10–2022–0087494
    → 실시간 음성 인식 결과를 활용하는 음성 인식 방법에 대한 발명입니다.

액션파워에 대한 더 많은 이야기가 궁금하다면?
More about Action Power

← 블로그로 돌아가기

대화가 일이 되는 곳, daglo.

지금 바로 무료로 시작해보세요