ai papers
Speaker Recognition with Deep Learning (1) - 화자 인식의 개념 정리 및 태스크 분류
Junyoung Park · 2025-12-22 · 6 min
Speaker Recognition이란?
Speaker Recognition(화자 인식)은 음성(Voice/Speech) 정보를 이용해 사람을 구분하는 기술이다. 역할만 놓고 보면 얼굴/홍채/지문 인식처럼 보안·인증 시스템에서의 바이오메트릭 기술과 유사하다. 다만 실제 현장에서는 음성만으로 개인을 확실히 식별하는 방식이 아직까진 얼굴 인식만큼 보편화되어 있지 않다. 그 이유는 직관적으로도 이해된다.
- 변동성: 감기, 피로, 컨디션, 감정 상태, 공연 관람 후 목쉼 등으로 음색이 쉽게 달라질 수 있음
- 위변조 가능성: 성대모사, TTS/보이스 클로닝 등으로 ‘소리 자체’는 흉내낼 수 있음
- 고유성 한계: 생각보다 음성 특징이 완전히 유니크하지 않을 수 있음
이런 설명은 high-level에서는 설득력이 있지만, low-level 관점에서는 이야기가 조금 달라질 수 있다.
얼굴 인식이 강한 이유
얼굴 인식은 육안으로 보기엔 많이 달라 보이는 얼굴도 같은 사람으로 잘 맞춘다.
예를 들어 깔끔한 여권사진과 막 일어난 얼굴, 헤어스타일 변화, 안경 착용 여부, 노화 등은 사람 눈에는 차이가 크지만, 임베딩 공간에서는 정규화된 표현으로 수렴하는 경우가 많다.
얼굴 인식이 유리한 이유는 아래처럼 정리할 수 있다.
- 다양한 변화를 견디는 표현(embedding)의 정규화
- 동일인/타인을 분리하는 표현 공간의 분리도
에 있다.
그렇다면 정규화된 임베딩을 잘 만들 수 있다면, 음성 인식도 robust하게 개인을 식별할 수 있지 않을까?
딥러닝 기반 화자 인식
딥러닝 관점에서는 다음 가정이 가능하다.
- 감기/목쉼/감정 변화 등으로 음성이 바뀌어도
- 녹음 환경이 달라져도(마이크, 거리, 잡음 등)
- 심지어 누군가가 흉내를 내거나 합성 음성이 섞여도
그 변화들을 충분히 포괄하는 데이터와 모델이 있다면, 음성에서도 얼굴 인식처럼 “개인 고유 특징만을 남기는 정규화된 임베딩”을 학습할 수 있다.
과거에는 사람이 직접 특징(feature)을 설계하는 데 많은 노력이 들어갔지만, 지금은 신경망이 신호처리 기반 특징으로는 잡기 어려운 패턴까지 학습할 수 있다.
물론 음성은 얼굴보다 난이도가 높고, 관련 연구들도 최근 메인스트림 AI 트렌드와는 결이 다르게 발전해온 측면이 있다.
그래서 이 글의 목적은 다음과 같다.
현재 딥러닝 씬에서는 메인스트림 task는 아니지만, 화자 인식이 딥러닝으로 어디까지 발전해왔는지, 그리고 앞으로 개선될 지점이 무엇인지 체계적으로 정리해보고자 한다.
4) Speaker Recognition은 단일 문제가 아니다
화자 인식에는 “누구인지 맞히기” 외에도 서로 다른 문제가 함께 들어 있다.
그 이유는 음성이 환경과 분리된 형태로 관측되기 어렵기 때문이다.
우리는 얼굴을 사진으로 찍으면 비교적 “온전한 얼굴”을 얻을 수 있지만, 음성은 녹음 순간부터 환경에 강하게 섞인다.
- 조용한 집 vs 지하철 역사 vs 술집
- 마이크 품질/거리/방향
- 녹음 장비의 채널, 녹음 포맷
- 주변 사람 대화, 배경 음악, 반향(reverb)
음성 신호는 수집 방식에 따라 도메인 차이가 커질 수 있고, 잡음·잔향·다중 화자와 얽혀 들어온다.
세부 과제
실제 시스템 관점에서 화자 인식은 보통 다음 문제들의 조합으로 구성된다.
- 화자 구분(누구 목소리인가?)
- 화자 검증(같은 사람인가?) / 화자 식별(등록된 사람 중 누구인가?)
- 잡음/잔향 제거(음성 품질 개선)
- denoise, dereverb 등 전처리/후처리
- 다중 화자 분리/분할(여러 사람 중 누가 언제 말했는가?)
- 음성 분리(separation), 화자 분할/다이어리제이션(diarization)
- 도메인/환경 변화에 강한 강건성 확보
- 다양한 환경에서 오인식 없이 동작하도록 학습/적응/평가
Task의 구분
Speaker Identification / Verification의 차이
Identification/Verification은 모두 사실상 같은 형태의 추론 구조를 가진다. 우선 화자에 대한 정보가 미리 DB 형태로 구축되어 있어야한다는 조건은 동일하다. 이때 발화에 대한 특징을 어떠한 방식으로 임베딩화하느냐에 따라 성능 차이가 있지만, 이 부분을 제외하고 해결하고자 하는 방식은 위의 그림으로 정리할 수 있다.
Verification은 화자 판별 상태를 가정하며, 새롭게 들어온 Query 형태의 발화(New utterance)가 등록된 화자 목소리인지 아닌지 여부를 판별하게 된다.
Identification은 다수의 화자를 구분하는 상태를 가정하고, 새롭게 들어온 Query 형태의 발화(New utterance)가 등록된 화자 목소리들 중 어느 목소리에 속하는지를 판별하게 된다.
크게 보아 Verification은 그렇다/아니다를 판별하는 Binary Classification이며 Identification Task의 Subset(부분 집합), 특수 케이스라고 생각하면 된다. Identification은 등록된 화자들 중 어떤 화자의 목소리에 속하는지, 그리고 만약 그 어떤 목소리와도 매칭되지 않았다면 해당 목소리는 새로운 목소리인지(Verification에서 ‘아니다’라고 판별된 것과 동일)까지 구분할 수 있어야한다. 이렇게 새로운 목소리에 대해 ‘아니다’라고 판별하는 능력을 Open-set Recognition이라고 부른다.
Speaker Diarization
Diarization의 경우에는 발화 내용에 대해 각 사람의 발화 시점, 말한 사람을 구분하는 Task이다. 발화자를 잘 구분하는 것과, 떨어진 시간 사이에서의 동일 발화자를 잘 체크하여 총 발화자의 수를 제대로 구하는 것이 관건이다.
위의 그림과 같이, 연속적인 발화 내용에서 만약 3명의 사람이 서로 대화를 하고 있었다면, 여러 발화가 시간 차이를 두고 발생하거나, 중간에 발화가 겹치거나, 그렇지 않고 아무도 발화하지 않는 타이밍(배경 노이즈만 있는 시간)도 있을 것이다.
Diarization은 따라서 간단하게 보았을 때는 그저 각자의 발화 시간을 구분하는 Task이지만, 해당 기술에는 앞서 설명했던 Speaker Verification (해당 발화 시간에 누가 말했으며, 해당 발화자는 이전에 등장했던(registered) 발화자인가?) 문제와 더불어 여러 인물들의 발화가 겹치는 현상, 배경 소음이 발화 내용과 겹쳐 발화자 특정에 방해가 되는 현상 등 해결해야 할 문제가 가장 어려운 Task에 속한다.
화자 인식은 결국 임베딩 + 조건(환경) + 조합 문제
여기까지를 한 문장으로 줄이면 이렇다.
화자 인식은 목소리를 맞히는 문제가 아니라, 다양한 음성이 섞인 데이터에서 사람 성분만 남기는 임베딩을 만들고 어떤 조건(등록 여부/다중화자/잡음/겹침) 및 어떤 방식으로 추론하는가에 달려있다.
그래서 현장에서 화자 인식이 얼굴 인식처럼 딱 하나의 문제로 안 보이는 건 자연스럽다. 얼굴은 입력이 상대적으로 “온전한 얼굴”로 들어오지만, 음성은 애초에 수집 순간부터 혼합물이기 때문이다.
- 얼굴 인식: (대체로) 얼굴만 비교하면 됨 → 임베딩 정규화/분리도 싸움
- 화자 인식: 사람 + 마이크 + 거리 + 방 + 잡음 + 음악 + 다른 사람 + 잔향… → 임베딩 정규화 이전에 입력 자체가 불안정함
시스템 관점에서의 핵심 포인트
화자 인식 시스템을 잘 만든다는 건 보통 아래 3가지를 동시에 만족시키는 쪽으로 수렴한다.
- 임베딩이 잘 분리돼야 함
- 같은 사람은 모이고, 다른 사람은 멀어지는 기본기
- 특히 짧은 발화, 감정 변화, 컨디션 변화에서 무너지지 않아야 함
- 파이프라인이 현실을 가정해야 함
- 단일 화자 가정이면 identification/verification이 깔끔하지만
- 실제 방송/현장 데이터는 대부분 “다중화자 + 잡음 + 겹침 + 공백”이 기본값이라 diarization이 사실상 메인
- 모르는 사람을 인정할 수 있어야 함 (Open-set)
- 등록된 사람만 맞히는 건 쉬워지기 마련
- 진짜 어려운 건 아무도 아닌데 비슷해 보이는 케이스를 아니다라고 말하는 능력
- 이게 실서비스에서 오탐을 결정한다
앞으로 글에서 자연스럽게 이어질 질문들
여기까지 오면 다음 질문이 거의 자동으로 나온다.
-
임베딩은 어떤 방식으로 뽑는 게 좋은가?
(Traditional feature → vector/vector → ECAPA-TDNN → 최근 SSL 기반 등)
-
스코어링은 코사인으로 충분한가, PLDA 같은 게 여전히 의미 있나?
-
diarization은 왜 어렵고, 결국 어디에서 성능이 깨지나?
(겹침/짧은 발화/도메인 갭/클러스터링 안정성)
-
TTS/보이스 클로닝 시대에 “화자 인식”은 어떤 방어선을 가져야 하나?
(anti-spoofing/CM, 그리고 이걸 verification 파이프라인에 어떻게 붙일지)
‘화자 인식이 가능하냐/불가능하냐’를 묻기 전에 어떤 조건에서 무엇을 목표로 할지부터 정해야 한다.
어디에서 실패하는지 보기
화자 인식은 결국 얼굴 인식처럼 ‘좋은 임베딩’ 문제로 귀결되긴 한다. 다만 음성은 입력이 훨씬 더 난잡해서, 임베딩만 잘 만들면 끝나는 게 아니라 전처리(denoise/dereverb) + 분리(separation) + 분할/클러스터링(diarization) + 검증/식별(verification/identification) 이게 현실 데이터에서 하나의 시스템으로 묶였을 때 성능이 결정된다.
그래서 이 글에서 다루는 “태스크 분류”는 단순한 용어 정리가 아니라, 어떤 실패가 어디에서 발생하는지를 추적하기 위한 지도에 가깝다. 다음 파트에서는 이 지도 위에서, 딥러닝 기반 화자 임베딩이 어떻게 발전해 왔는지(그리고 지금 병목이 뭔지)부터 정리해보자.