v2.0.0의 분류기로 대형조를 포함해 학습한 Logistic Regression(LR)을 채택한다. 이 보고서는 채택한 LR의 데이터 구성, 학습 설정, 임계값 정책, 개발 평가 결과를 설명한다.
1. 용어
| 용어 | 의미 |
|---|---|
| 클립 | 판정 대상 오디오 한 개 |
| Probe | 고정된 Perch 임베딩으로 학습하는 분류기 |
| Recall | 실제 앵무새 중 통과한 비율 |
| Mimic recall | 목표 단어를 모사한 앵무새 소리 중 통과한 비율 |
| Precision | 통과한 클립 중 실제 앵무새인 비율 |
| False acceptance rate(FAR) | 해당 비앵무새 집단 중 잘못 통과한 비율 |
| 임계값 τ | 점수가 이 값 이상이면 통과하는 기준 |
| Out-of-fold(OOF) | 해당 평가 데이터를 학습하지 않은 모델의 예측 |
| Nested 교차검증 | 내부 임계값 선택과 외부 성능 평가를 분리한 교차검증 |
| Reference (기준 음성) | 보호자가 목표 단어를 말한 기준음성 |
| Ambient 사람 음성 | 사람의 대화 소리 등 일상 잡음 중 사람의 목소리가 포함된 것 |
2. v1.0.0 -> v2.0.0 개선 목적
2.1 게이트의 역할
버디버드의 전체 파이프라인은 아래와 같다. 이 보고서의 대상은 앵무새 소리 여부를 판별하는 2단계 게이트이다.
0. VAD 클립 입력
1. 음량 게이트 — 너무 조용해 판별이 어려운 클립을 버리는 게이트 (too_quiet)
2. 앵무새 소리 여부 판별 — 사람 음성·TV 소리 등 비앵무새 소리를 버리는 관문
3. 모사 성공 여부 판정 — 보호자 녹음 샘플과 비교
뒤에 이어지는 4단계에서는 보호자 기준음성과 앵무새 소리를 비교해 모사 성공을 판정한다. 보호자 음성이 통과하면 모사 성공을 잘못 판정할 수 있어, 사람 음성 차단이 중요하다.
2.2 앵무새 소리 여부 판별 v1에서 확인한 문제
v1.0.0은 작은 초기 데이터셋으로 학습하고, 사람 음성 전체 FAR 2% 이하를 목표로 임계값을 정했다. 이후 서비스 데이터에서 높은 앵무새 recall과 함께 보호자 음성 오통과 문제가 관찰됐다. 기존 공개 보고서의 보호자 기준음성 FAR은 33.6%였다. v1 실데이터 평가
2.3 대상 조류 범위
서비스의 우선 목표는 소형조와 중형조다. 이번 학습에는 대형조 85개를 포함한 전체 18,175개를 사용했다. 대형조의 개별 성능은 오류 부분집합에서 확인한다.
관련 자료: 조류 크기별 음향 분석, Whisper 모사 인식 실험.
3. 데이터 구성

서로 겹치지 않는 다섯 유형으로 구성한 전체 18,175개. 사람 reference는 서비스 보호자와 비서비스 기준음성을 포함한다.
| 항목 | 수량 |
|---|---|
| 전체 클립 | 18,175 |
| 앵무새 | 6,580 |
| 비앵무새 | 11,595 |
| 평가 집단 | 클립 수 | 분류 |
|---|---|---|
| 앵무새 | 1,198 + 5,382 = 6,580 | 양성 전체 |
| Mimic (앵무새의 단어 모사) | 1,198 | 앵무새 |
| 일반 앵무새 소리 | 5,382 | 앵무새 |
| 사람 음성 | 425 + 2,907 = 3,332 | 비앵무 |
| Reference (보호자가 목표 단어를 말한 기준음성) | 425 | 비앵무 |
| Ambient 사람 음성 (일상 대화 소리) | 2,907 | 비앵무 |
| 잡음 (TV소리, 청소기 소리 등등) | 8,263 | 비앵무 |
4. 모델 구조
4.1 Google Perch 2.0 인코더 파라미터
| 항목 | 채택 값 |
|---|---|
| 인코더 | Perch 2.0 ONNX |
| 채널 | Mono |
| 입력 샘플률 | 32 kHz |
| Target peak | None |
| 창 길이 | 5초 |
| 이동 간격 | 2.5초 |
| 짧은 오디오 | 5초까지 zero padding |
| 여러 창 결합 | 임베딩 평균 |
| 임베딩 차원 | 1,536 |
4.2 로지스틱 회귀 probe 파라미터
| 항목 | 채택 값 |
|---|---|
| ID | lr-3af78629b1c2 |
| 특징 전처리 | StandardScaler |
| 분류기 | L2 Logistic Regression |
| 규제 강도 C | 0.0003 |
| Solver | lbfgs |
| 최대 반복 | 5,000 |
| 학습 seed | 0 |
| 클래스 가중치 | balanced |
| 학습 데이터 사용 범위 | 앵무 클립 6,580 / 비앵무 클립 11,595 모두를 학습 데이터로 사용함. |
| 통과 임계값 τ | 0.7122538089752197 |
| 임계값 선택 정책 | Bucket 50% |
Logistic Regression 점수 >= 통과 임계값 τ면 앵무새 소리로 판정해 통과시키고, 그보다 낮으면 차단한다.- 임계값은 모델을 학습한 뒤 도출했다.
- 각 오디오를 학습에 사용하지 않은 모델로 점수를 계산하고, 전체 18,175개의 점수를 모았다. 이 점수에서 아래 기준을 만족하는 임계값을 도출했다.
서비스 보호자 기준음성 252개의 오통과율 1% 이하ambient 사람 음성 (사람 대화 소리)의 오통과율 1% 이하잡음은 1.5% 이하가 되도록 기준을 정했다.
- 앵무 클립 6,580개 / 비앵무 클립 11,595개로 데이터가 불균형하므로,
balanced클래스 가중치를 적용해 학습이 한쪽 정답에 치우치는 것을 줄였다. 모든 클립을 사용하되, 학습에 반영하는 비중을 조절했다.
5. 성능 평가
5.1 평가 방법
| 단계 | 조건 | 설명 |
|---|---|---|
| Outer | 5-fold | 학습 데이터와 테스트 데이터를 분리하여 성능 평가 |
| 반복 | Outer seed 0, 1, 2 | 학습/테스트 데이터를 만드는 방식이 다른 3가지 시드 |
| Inner | 각 outer 학습 집합 안에서 4-fold | OOF 점수로 임계값 선택 |
| Inner seed | 0 | 내부 분할 고정 |
| Outer 모델 | 해당 outer 학습 행 전체로 학습 | 외부 평가 점수 계산 |
| 대표 집계 | Seed별 outer 5-fold 예측 합산 후 각 지표의 세 seed 값 산술평균 | 전체 데이터의 반복 개발 성능 |
5.2 평균 지표

점은 평균, 가로 선은 세 번의 평가에서 나온 최저~최고 값이다.
| 지표 | 세 seed 평균 | 관찰 범위 |
|---|---|---|
| 앵무새 recall | 91.282% | 90.973~91.657% |
| Mimic recall | 86.116% | 86.060~86.227% |
| Precision | 97.669% | 97.652~97.689% |
| 비앵무새 전체 FAR | 1.236% | 1.225~1.251% |
| 사람 음성 전체 FAR | 0.920% | 0.900~0.960% |
| Reference 전체 FAR | 0.706% | 0.706~0.706% |
| 서비스 보호자 FAR | 0.661% | 0.397~0.794% |
| Ambient 사람 FAR | 0.952% | 0.929~0.998% |
| 잡음 FAR | 1.364% | 1.355~1.368% |
- 관찰 범위는 세 번의 평가에서 나온 최저, 최고 성능이다.
- 세 번 모두 오통과율이 허용 기준인 서비스 보호자 음성 2%, ambient 사람 음성 2%, 잡음 3% 이하였다.
5.3 실제 개수
| 항목 | Seed 0 | Seed 1 | Seed 2 |
|---|---|---|---|
| 앵무새 통과 | 5,986/6,580 | 6,031/6,580 | 6,002/6,580 |
| Mimic 통과 | 1,031/1,198 | 1,033/1,198 | 1,031/1,198 |
| Reference 오통과 | 3/425 | 3/425 | 3/425 |
| 서비스 보호자 오통과 | 1/252 | 2/252 | 2/252 |
| Ambient 사람 오통과 | 27/2,907 | 29/2,907 | 27/2,907 |
| 잡음 오통과 | 113/8,263 | 113/8,263 | 112/8,263 |
| 전체 통과 중 앵무새 | 5,986/6,129 | 6,031/6,176 | 6,002/6,144 |
- Seed 0의 비앵무새 오통과는 reference 3개, ambient 사람 27개, 잡음 113개를 합친 143개다.
5.4 혼동 행렬

Seed 0의 외부 5-fold 예측 합산. 왼쪽은 실제 개수, 오른쪽은 실제 라벨별 비율이다. 비앵무새 143개가 잘못 통과했고 앵무새 594개가 누락됐다.
Seed별 상세 개수는 부록에서 확인한다.
- Seed 0에서 recall은 5,986/6,580 = 90.97%, precision은 5,986/6,129 = 97.67%다.
5.5 오류 부분집합
| 대상 | Seed 0 | Seed 1 | Seed 2 |
|---|---|---|---|
| 기존 문제 잡음 오통과 | 5/112 | 5/112 | 5/112 |
| 대형조 통과 | 4/85 | 4/85 | 4/85 |
| Mimic 누락 | 167/1,198 | 165/1,198 | 167/1,198 |
문제 잡음 부분집합의 평가 대상은 112개다. 이미 오류를 분석한 부분집합이므로 신규 잡음의 독립 검증으로 해석하지 않는다. 대형조는 학습에 포함했지만 recall이 4.71%로 낮다. 전체 recall을 모든 종과 개체의 성능으로 일반화하지 않는다.
5.6 점수 분포

Seed 0의 외부 5-fold 점수를 합산한 분포. 점선은 fold별 임계값 τ=0.667~0.777이며, 각 클립은 해당 fold의 임계값 이상이면 통과한다.
- 가로축은 Logistic Regression의 판정 점수이다. 오른쪽에 가까울수록 앵무새 소리로 판정된다.
앵무/비앵무유형에 해당하는 데이터 수가 불균형하므로, 각 분포의 전체 면적을 1로 맞춰 점수가 어디에 집중되는지 비교했다.- 세로축은 작은 차이도 확인할 수 있도록 로그 눈금으로 표시했다. 그래프의 높이는 클립 개수나 오통과율을 직접 나타내지 않는다.
(이 그림은 교차검증에서 각 평가용 모델이 계산한 점수를 모은 것이다. 점수 0.8이 실제로 앵무새일 확률 80%를 뜻하지는 않는다. 점선은 평가용 모델마다 정한 통과 기준이며, 전체 데이터로 학습한 모델에 저장한 단일 기준과는 다르다. )
참고1. Logistic Regression 이외의 후보에 대한 성능 테스트
- 성능 지표는 outer 5-fold × seed 0/1/2, inner 4-fold의 평균이다.
- 405개 설정을 탐색하고 대표 15개를 심화 평가했다. 아래 표는 심화 평가 결과 중 모델별 대표 설정의 성능이다. 모든 행에 보수적 Bucket 50% 정책을 적용했다.
| 모델 | 앵무새 recall ↑ | Mimic recall ↑ | Precision ↑ | 서비스 보호자 FAR ↓ | Ambient 사람 FAR ↓ | 잡음 FAR ↓ |
|---|---|---|---|---|---|---|
| LDA | 91.39% | 84.31% | 97.89% | 0.79% | 0.75% | 1.20% |
| LR: 채택 | 91.28% | 86.12% | 97.67% | 0.66% | 0.95% | 1.36% |
| Extra Trees | 90.26% | 82.64% | 98.00% | 0.93% | 0.75% | 1.16% |
| kNN | 88.68% | 81.14% | 97.78% | 0.79% | 0.93% | 1.25% |
| MLP | 83.82% | 77.60% | 98.06% | 1.19% | 0.69% | 1.00% |
참고2. Seed별 혼동 행렬
| Seed | TP: 앵무새 통과 | FN: 앵무새 차단 | FP: 비앵무새 통과 | TN: 비앵무새 차단 |
|---|---|---|---|---|
| 0 | 5,986 | 594 | 143 | 11,452 |
| 1 | 6,031 | 549 | 145 | 11,450 |
| 2 | 6,002 | 578 | 142 | 11,453 |
