Study Archives/Robotics

[로봇 학습의 이해 ⑤-❶] 음성 데이터와 음성 인식

ns4A

로봇이 사람과 상호작용하는 장면을 떠올리면, 많은 분들이 먼저 음성 명령을 생각하게 됩니다.
“멈춰”, “앞으로 가”, “컵 가져와” 같은 말은 사람에게는 너무 자연스럽습니다.
하지만 로봇에게 이 말들은 처음부터 의미 있는 문장이 아닙니다.

로봇이 처음 받는 것은 단어가 아니라 시간에 따라 변하는 소리 신호입니다.
즉 사람은 “정지”라는 의미를 듣지만, 기계는 먼저 진폭이 흔들리는 파형을 받습니다.
그리고 그 파형을 특징으로 바꾸고, 그 특징을 다시 명령어나 텍스트로 해석해야 비로소 음성이 의미를 갖게 됩니다.

이번 글에서는 음성 데이터가 어떤 형태로 다뤄지는지, 왜 MFCC 같은 특징 추출이 필요한지, 음성 명령어 분류와 STT는 무엇이 다른지, 그리고 CTC와 Whisper 같은 개념은 어떤 흐름 위에 놓여 있는지까지 차근차근 정리해보겠습니다.


로봇에게 음성은 어떤 입력일까

사람은 말을 “내용”으로 받아들입니다.
하지만 로봇은 먼저 음성을 신호(signal) 로 받아들입니다.
즉 마이크에 들어오는 것은 연속적인 공기 진동이고, 시스템은 이를 일정한 간격으로 샘플링해서 디지털 데이터로 바꿉니다.

이때 중요한 점은, 로봇이 처음부터 “단어”를 받는 것이 아니라는 점입니다.

  • 사람에게는 “왼쪽으로 가”라는 명령
  • 기계에게는 시간축 위의 수많은 숫자열

즉 음성 인식의 첫 단계는 언어 이해가 아니라 신호 처리입니다.
이 차이를 먼저 이해해야 이후의 MFCC, STT, CTC 같은 개념도 자연스럽게 연결됩니다.

조금 쉽게 말하면,
카메라가 처음부터 “컵”을 주지 않고 픽셀을 주는 것처럼,
마이크도 처음부터 “명령어”를 주지 않고 파형을 줍니다.


음성 데이터는 어떻게 디지털화될까

아날로그 소리를 컴퓨터가 다루려면 먼저 디지털 형태로 바꿔야 합니다.
이 과정에서 자주 등장하는 개념이 샘플링 레이트와 비트 깊이입니다.

샘플링 레이트

1초 동안 소리를 몇 번 측정할지를 뜻합니다.
예를 들어 16kHz라면 1초에 16,000번 소리를 샘플링한다는 뜻입니다.

샘플링 레이트가 높을수록 더 세밀한 정보를 담을 수 있지만, 데이터 양도 커집니다.
음성 인식에서는 16kHz가 자주 쓰이는데, 사람 음성을 다루기에는 비교적 실용적인 선택이기 때문입니다.

비트 깊이

각 샘플의 진폭을 얼마나 세밀하게 표현할지를 뜻합니다.
값의 정밀도가 높을수록 소리의 미세한 차이도 더 잘 담을 수 있지만, 저장 비용도 증가합니다.

즉 음성 데이터는 단순히 “녹음 파일”이 아니라,
시간축 위에서 잘게 쪼개어 측정된 수치들의 집합이라고 이해하는 편이 좋습니다.


음성 데이터는 왜 바로 모델에 넣지 않을까

처음에는 이런 생각이 들 수 있습니다.

“파형이 이미 숫자 데이터라면 그냥 신경망에 바로 넣으면 되는 것 아닌가?”

실제로 그렇게 하는 접근도 있습니다.
하지만 전통적인 음성 처리에서는 보통 파형을 그대로 쓰기보다, 먼저 더 의미 있는 특징(feature) 으로 바꾸는 경우가 많았습니다.

그 이유는 비교적 명확합니다.

  • 파형은 길고 복잡합니다
  • 말하는 속도, 세기, 잡음에 따라 크게 흔들립니다
  • 사람이 인식하는 중요한 패턴은 단순 진폭보다 주파수 구조 쪽에 더 가깝습니다

즉 원신호를 그대로 보는 대신,
사람 음성의 구조를 더 잘 드러내는 표현으로 바꾼 뒤 학습하는 것이 더 유리할 수 있습니다.

이 흐름에서 가장 자주 나오는 대표 개념이 바로 MFCC입니다.


MFCC는 왜 그렇게 자주 등장할까

MFCC는 Mel-Frequency Cepstral Coefficient의 약자입니다.
이름은 길지만, 직관은 생각보다 단순합니다.

핵심은 이렇습니다.

음성 파형을 짧은 구간으로 나누고, 그 구간의 주파수 구조를 사람이 듣는 방식에 조금 더 가깝게 요약한 특징 표현입니다.

즉 MFCC는 “원래 소리”를 그대로 쓰지 않고,
그 소리 안에서 음성 인식에 중요한 패턴을 더 잘 드러내도록 바꾼 결과라고 볼 수 있습니다.

왜 Mel이라는 표현이 들어갈까요?
사람의 청각은 모든 주파수를 똑같이 받아들이지 않기 때문입니다.
일부 구간에는 더 민감하고, 일부 고주파 구간에는 상대적으로 덜 민감합니다.
Mel 스케일은 이런 청각적 직관을 어느 정도 반영하려는 시도입니다.

즉 MFCC는 단순한 수학 변환이 아니라,
사람의 듣기 방식에 조금 더 가까운 음성 요약 표현이라고 생각하면 좋습니다.


MFCC는 어떤 단계를 거쳐 만들어질까

MFCC의 대표 흐름은 대략 아래와 같습니다.

  • Pre-emphasis
  • Framing
  • Windowing
  • FFT and Power Spectrum
  • Mel Filterbank
  • DCT

처음 보면 단계가 많아 보이지만, 의미는 하나씩 차근차근 이해할 수 있습니다.

1. Pre-emphasis

음성의 고주파 성분을 조금 더 강조하는 단계입니다.
사람 목소리는 저주파에 에너지가 많이 몰리는 경우가 많아서, 뒤쪽 고주파 정보를 조금 살려주는 역할을 합니다.

2. Framing

음성 전체를 한 번에 처리하지 않고, 아주 짧은 구간들로 나눕니다.
왜냐하면 음성은 시간에 따라 계속 변하지만, 아주 짧은 구간에서는 비교적 안정적이라고 볼 수 있기 때문입니다.

3. Windowing

각 프레임의 경계에서 갑작스럽게 잘리는 효과를 줄이기 위해 윈도우를 씌웁니다.
이 과정을 통해 스펙트럼 분석이 조금 더 안정적이 됩니다.

4. FFT와 Power Spectrum

시간 영역의 신호를 주파수 영역으로 바꾸어, 어떤 주파수 성분이 얼마나 포함되어 있는지 봅니다.

5. Mel Filterbank

주파수 축을 사람의 청각 감각에 조금 더 맞는 형태로 묶어줍니다.

6. DCT

마지막으로 특징을 압축하고 정리해 MFCC 계수를 만듭니다.

즉 MFCC는
파형 → 짧은 시간 구간 → 주파수 구조 → 청각 친화적 요약 특징
이런 흐름으로 이해하면 됩니다.



명령어 분류와 STT는 무엇이 다를까

음성 인식이라고 하면 하나로 묶어 생각하기 쉽지만, 실제로는 문제 형태가 꽤 다릅니다.

음성 명령어 분류

이 문제는 보통 “yes”, “no”, “left”, “right”, “stop”, “go”처럼
미리 정해진 몇 개의 명령어 중 하나를 맞히는 문제입니다.
즉 분류 문제에 가깝습니다.

Google Speech Commands 데이터셋이 대표적인 예입니다.
짧은 1초 내외 음성 클립을 이용해 소규모 단어 집합을 분류하는 문제로 많이 쓰입니다.

STT(Speech-to-Text)

반면 STT는 훨씬 더 일반적인 문제입니다.
여기서는 미리 정해진 몇 개 중 하나를 고르는 것이 아니라,
연속된 음성을 문자나 단어 시퀀스로 바꿔야 합니다.

  • 명령어 분류는 “이게 어떤 단어인가?”
  • STT는 “이 사람이 말한 문장이 무엇인가?”

라는 차이가 있습니다.

입문자 입장에서는 이 둘을 구분해서 보는 것이 중요합니다.
왜냐하면 전자는 소규모 분류 모델로도 충분할 수 있지만,
후자는 시간 정렬과 시퀀스 예측까지 필요하기 때문입니다.


음성 명령어 분류는 왜 로봇에 유용할까

서비스 로봇이나 모바일 로봇을 생각해보면,
실제로는 모든 음성을 자유 문장으로 이해할 필요가 없는 경우도 많습니다.

예를 들어 아래 같은 상황은 명령어 분류만으로도 꽤 잘 처리할 수 있습니다.

  • “start”
  • “stop”
  • “left”
  • “right”
  • “go”
  • “backward”

이런 문제는 비교적 단순해 보이지만 실용성이 큽니다.
왜냐하면

  • 실시간 처리 부담이 작고
  • 온디바이스에 올리기 쉽고
  • 명령 집합이 작아 안정적으로 동작시키기 좋기 때문입니다

이는 결국 현실 환경에서 얼마나 견고하게 명령어를 구분할 수 있는가와 직접 연결됩니다.

즉 음성 명령어 분류는 단순한 장난감 문제가 아니라,
실제 로봇 인터페이스에서 꽤 현실적인 출발점입니다.


잡음은 왜 그렇게 큰 문제일까

현실의 로봇은 조용한 연구실에서만 동작하지 않습니다.
공장에는 기계 소리가 있고, 카페에는 사람 말소리가 겹치며, 집안에는 TV나 생활 소음이 있습니다.

즉 로봇이 듣는 음성은 항상 깔끔하지 않습니다.

그래서 음성 인식에서는 아래 문제가 매우 중요합니다.

  • 배경 소음이 크면 음성 패턴이 흐려집니다
  • 같은 단어라도 화자마다 다르게 들립니다
  • 마이크 품질과 거리도 영향을 줍니다
  • 실제 입력 길이가 조금씩 달라질 수 있습니다

 

즉 깨끗한 데이터만으로 높은 점수를 만드는 것보다,
현실처럼 지저분한 환경에서도 어느 정도 버틸 수 있게 만드는 것이 더 중요할 수 있습니다.


음성 데이터셋은 왜 중요한가

컴퓨터 비전에서 ImageNet 같은 데이터셋이 중요했던 것처럼, 음성 인식에서도 공개 데이터셋은 중요한 역할을 합니다.

특히 초보자 입장에서는 데이터셋이 왜 중요한지 잘 감이 안 올 수 있습니다.
하지만 모델이 잘 배우려면 결국 다양한 화자, 다양한 발음, 다양한 환경을 경험해야 합니다.

Google Speech Commands 같은 데이터셋이 자주 쓰이는 이유도 여기에 있습니다.
짧은 명령어 기반 문제를 비교적 표준화된 형태로 실험할 수 있고,
학습 파이프라인을 익히기에도 적합하기 때문입니다.

즉 데이터셋은 단순한 입력 모음이 아니라,
모델이 어떤 세상을 경험하는지 결정하는 학습 환경에 가깝습니다.


STT에서는 왜 정렬 문제가 어려울까

이제 조금 더 어려운 쪽으로 넘어가 보겠습니다.
STT에서는 음성 전체를 텍스트로 바꿔야 하는데, 여기서 핵심 난점 중 하나가 정렬(alignment) 입니다.

예를 들어 사람이 “hello”를 말했다고 해보겠습니다.
그러면 입력은 수많은 짧은 시간 프레임으로 나뉜 음성 신호가 됩니다.
그런데 이 프레임들 중 어느 구간이 h인지, 어느 구간이 e인지, 어느 구간이 l인지가 미리 명확하게 표시되어 있지는 않습니다.

즉 입력은 길고 연속적이며, 출력은 짧고 압축된 라벨 시퀀스입니다.

이 차이를 직접 맞추는 것이 쉽지 않기 때문에,
음성 인식에서는 정렬을 유연하게 다루는 방법이 필요합니다.
이 지점에서 등장하는 대표 개념이 바로 CTC입니다.


CTC는 무엇을 해결할까

CTC는 Connectionist Temporal Classification의 약자입니다.
이름은 복잡하지만, 핵심은 분명합니다.

입력 프레임과 출력 라벨이 정확히 일대일로 맞지 않아도 학습할 수 있게 해주는 방식입니다.

즉 STT에서는 우리가 보통

  • 입력: 긴 음성 시퀀스
  • 출력: 짧은 문자/음소 시퀀스

를 다루게 되는데,
CTC는 이 둘 사이의 가능한 정렬 경로들을 묶어서 다룰 수 있게 해줍니다.

 

이 말이 조금 어렵게 느껴질 수 있는데, 쉽게 말하면 이렇습니다.

“정확히 몇 번째 프레임이 몇 번째 글자인지 사람이 미리 다 표시하지 않아도,
모델이 가능한 정렬들을 고려하며 학습할 수 있다.”

이 점 때문에 CTC는 음성 인식 초중급 개념에서 매우 중요합니다.


CTC에서 blank token은 왜 필요할까

CTC를 이해할 때 꼭 같이 나오는 것이 blank token 입니다.
처음 보면 왜 굳이 빈 토큰이 필요한지 의아할 수 있습니다.

이유는 음성 신호가 문자처럼 딱딱 끊어져 있지 않기 때문입니다.
실제 발화에서는 어떤 음소가 길게 늘어질 수도 있고, 같은 문자가 이어질 수도 있고, 문자 사이에 분명한 경계가 없을 수도 있습니다.

blank token은 이런 애매한 구간을 표현하는 데 도움을 줍니다.
즉 “지금 이 프레임은 특정 문자를 강하게 말하는 순간이 아닐 수도 있다”는 여유를 주는 셈입니다.

 

즉 blank는 단순한 빈칸이 아니라,
연속 음성 신호를 텍스트 시퀀스로 안정적으로 압축하기 위한 장치라고 볼 수 있습니다.



CTC Loss는 어떤 의미일까

CTC는 단순한 디코딩 규칙만이 아니라, 학습할 때 쓰이는 손실 함수와도 연결됩니다.
즉 모델은 각 시간 프레임에서 여러 음소나 문자에 대한 확률을 내고,
CTC loss는 이 확률들이 목표 라벨 시퀀스를 얼마나 잘 설명하는지 계산합니다.

입문자 입장에서는 굳이 복잡한 수식을 다 외울 필요는 없습니다.
대신 아래 직관을 잡는 것이 중요합니다.

  • 모델은 매 프레임마다 확률을 낸다
  • 가능한 정렬 경로는 여러 개일 수 있다
  • CTC는 그 여러 경로를 모두 고려해 정답 시퀀스의 확률을 계산한다

즉 CTC loss는
“이 긴 음성 신호가 결국 이 문장으로 들릴 가능성을 얼마나 잘 모델링했는가”
를 측정하는 장치에 가깝습니다.



VAD는 왜 필요할까

음성 처리에서 실무적으로 자주 등장하지만 초반에는 놓치기 쉬운 개념이 VAD(Voice Activity Detection) 입니다.
이것은 말 그대로 지금 구간에 사람 목소리가 있는지 없는지를 판별하는 기술입니다.

처음에는 단순해 보일 수 있습니다.
하지만 실제 로봇에서는 꽤 중요합니다.

왜냐하면 로봇이 계속 모든 오디오를 무겁게 처리하면 계산 비용이 커지고,
잡음에 불필요하게 반응할 수도 있기 때문입니다.

즉 VAD는

  • 사람이 실제로 말하는 구간만 골라내고
  • 그 구간에만 이후 STT를 적용하며
  • 계산량과 오작동을 줄이는 역할

을 합니다.

즉 VAD는 화려한 인식 모델은 아니지만,
실제 시스템을 더 효율적이고 현실적으로 만들어주는 매우 중요한 전처리 단계입니다.


Whisper 같은 최신 모델은 어디에 놓일까

최근 음성 인식 이야기를 하면 Whisper 같은 모델이 자주 언급됩니다.
이런 최신 모델들은 과거의 고전적 특징 추출 흐름과 완전히 단절된 것이 아니라,
그 위에서 더 큰 데이터와 더 강한 모델 구조를 사용해 일반화 성능을 끌어올린 흐름으로 보는 편이 자연스럽습니다.

입문자 입장에서는 이렇게 이해하면 충분합니다.

  • 전통적 파이프라인은 신호 처리와 특징 추출이 매우 중요했다
  • 이후 딥러닝이 들어오며 더 큰 표현 학습이 가능해졌다
  • 최신 모델은 대규모 데이터와 강한 시퀀스 모델링 능력을 바탕으로 STT를 더 일반적으로 해결하려 한다

즉 Whisper는 “갑자기 하늘에서 떨어진 완전히 새로운 개념”이라기보다,
음성 신호 처리, 정렬, 시퀀스 예측 문제를 더 큰 규모에서 풀어내는 현대적 흐름 위에 있다고 보면 됩니다.


온디바이스 음성 인식은 왜 중요할까

로봇에서 음성 인식을 항상 클라우드에만 맡길 수 있는 것은 아닙니다.
실시간성, 네트워크 안정성, 개인정보, 지연 시간 문제 때문입니다.

그래서 실제 로봇이나 임베디드 시스템에서는 온디바이스 음성 인식이 중요해집니다.
즉 장치 내부에서 직접 명령어 분류나 일부 STT를 처리하는 방향입니다.

이 접근의 장점은 분명합니다.

  • 네트워크 연결이 불안정해도 동작 가능
  • 반응 속도가 빠름
  • 민감한 음성 데이터를 외부로 덜 보내도 됨

반면 한계도 있습니다.

  • 연산 자원이 제한됨
  • 큰 모델을 그대로 쓰기 어려움
  • 경량화와 정확도 사이 절충이 필요함

결국 이는 단순한 연구 모델이 아니라, 실제 장비 위에서 얼마나 실행 가능한가와 연결됩니다.

즉 로봇 음성 인식은 단순히 정확도 경쟁만이 아니라,
실시간성, 경량성, 견고성까지 포함한 시스템 문제이기도 합니다.


로봇 음성 인식은 결국 무엇을 목표로 할까

지금까지 살펴본 내용을 한 번 묶어보면, 로봇의 음성 인식은 크게 두 방향으로 나뉩니다.

  • 짧고 제한된 명령어를 안정적으로 구분하는 방향
  • 자유로운 음성을 텍스트로 바꾸고 의미를 해석하는 방향

전자는 비교적 단순하지만 실시간 제어에 유리하고,
후자는 훨씬 유연하지만 더 복잡한 모델과 처리 과정을 필요로 합니다.

실제 로봇 시스템에서는 두 방향이 함께 쓰일 수도 있습니다.
예를 들어 긴 대화형 인터페이스는 STT를 쓰고,
긴급 정지 같은 핵심 명령은 별도의 명령어 분류기로 빠르게 처리할 수도 있습니다.

즉 음성 인식은 단순히 “말을 알아듣는다”를 넘어서,
어떤 종류의 말하기를 어떤 수준으로 처리할 것인가를 설계하는 문제이기도 합니다.


마무리

사람에게 음성은 너무 자연스러운 입력이라서, 처음에는 로봇도 비슷하게 들을 것처럼 느껴질 수 있습니다.
하지만 실제로는 전혀 그렇지 않습니다.
로봇은 먼저 파형을 받고, 그 파형을 특징으로 바꾸고, 그 특징을 다시 명령어나 텍스트로 해석해야 합니다.

그래서 음성 인식은 단순히 모델 하나로 끝나는 기술이 아닙니다.
신호 처리, 특징 추출, 분류, 정렬, 시퀀스 예측, 전처리, 경량화까지 모두 연결된 파이프라인에 가깝습니다.

이번 글에서는 그중에서도 특히 중요한 흐름인

  • 음성 데이터의 디지털화
  • MFCC 기반 특징 추출
  • 명령어 분류와 STT의 차이
  • CTC와 blank token의 역할
  • VAD와 온디바이스 음성 인식

까지 전체 지형을 먼저 정리해봤습니다.