이 글은 S3 운영 오디오를 클립 단위로 라벨링하기 위해 구성한 데이터 구조와 작업 절차를 설명한다. 라벨 원장, 자동 판정, 작업 배정 필드가 어떤 역할을 하는지 확인할 수 있다.

S3 원본 오디오부터 라벨 원장과 후속 데이터 생성까지 나타낸 클립 라벨링 절차

1. 라벨링 시스템의 필요성

버디버드앱의 핵심 기능을 위해서는 아래 기술을 개발해야 한다. 

  1. 앵무새 소리 여부 판별 모델: 비앵무새 소리를 제외하는 단계
  2. 모사 성공 여부 판정 모델: 보호자 녹음 샘플과 비교하여 앵무새가 말하기에 성공했는지 판정

그러기 위해서는 앵무 / 비앵무(앵무새 소리가 아닌 잡음)데이터가 필요하다. 또한 앵무새의 단어 모사 데이터도 필요하다.

하지만 시중에 앵무새 음성을 다루는 데이터셋은 사실상 전무하다. 따라서 공개된 오디오 소스와 버디버드 앱에서 오디오 클립을 직접 수집해야 했다.

이렇게 수집된 클립에는 라벨이 없으므로, 이를 사람이 직접 듣고, 어떤 소리인지 라벨을 부여하는 시스템이 필요했다. 


2. 목표

수집한 오디오 클립을 두 모델의 학습과 평가에 사용할 수 있는 라벨 데이터로 변환하는 것이다.

필요한 판정 항목은 다음과 같다.

판정 항목 기록 내용 활용 대상
소리 유형 앵무, 비앵무, 판단불가 앵무새 소리 여부 판별 모델
앵무 발성 비발화, 단어 모사, 판단불가 모사 성공 여부 판정 모델
라벨링 정보 라벨링 담당자, 라벨 저장 시각, 메모 판정 근거 추적

미라벨링과 판단불가는 서로 다른 상태로 관리한다.

  • 미라벨링: 아직 판정을 시작하지 않은 상태
  • 판단불가: 클립을 확인했지만 소리를 판정하기 어려운 경우

3. 라벨링 진행 모습

웹 UI는 한 화면에서 재생, 라벨 선택, 메모 작성, 저장을 완료하도록 구성했다. 라벨링 담당자는 숫자 키 프리셋으로 자주 사용하는 라벨 조합을 선택한다. 한 클립에서 여러 특성을 확인하면 라벨링 담당자가 라벨 행을 추가한다.

가상 데이터로 렌더링한 오디오 클립 라벨링 UI

그림 2: 실제 UI 구조를 가상 식별자와 가상 파형으로 렌더링한 화면

  • 단축키를 사용하여 빠르게 라벨링 및 저장이 가능하도록 했다.

4. 데이터 필드

manifest.jsonl은 한 줄에 클립 한 개를 JSON 객체로 저장한다.

4.1 클립의 기본 정보를 담은 필드

필드 형식 설명
audio_file_id 문자열 원본 WAV와 라벨을 연결하는 고유 키
source 문자열 오디오 출처. s3-prod , direct-recording등 이 오디오가 어디에서 수집 되었는지
user_id 문자열 또는 null 같은 사용자에 속한 클립을 연결하는 내부 식별자
session_id 문자열 또는 null 같은 수집 세션에 속한 클립을 연결하는 식별자
duration_sec 숫자 또는 null 오디오의 길이
first_seen 날짜 문자열 클립을 manifest.jsonl에 처음 편입한 날짜
(예시)
"audio_file_id": "audio_capture/example/session-example.wav",
"source": "s3-prod",
"user_id": "synthetic-user",
"session_id": "session-example",
"duration_sec": 2.4,
"first_seen": "2026-09-12",

 

4.2 라벨링 필드

라벨링을 저장하면 서버가 판정 내용과 저장 이력을 다음 필드에 기록한다. 코드 필드명은 기존 연동을 위해 reviewed_atreviewer를 유지한다.

필드 형식 설명
label 객체 배열 클립에서 확정한 구조화 라벨 목록. 한 클립에 여러 label을 추가 가능하다.
memo 문자열 구조화 라벨만으로 표현하기 어려운 판정 근거와 추가 사항
reviewed_at 시간 문자열 또는 null 라벨링 저장 요청이나 자동 음량 게이트 결과를 기록한 UTC 시각
reviewer 문자열 또는 null 사람 또는 자동 처리 주체의 식별자
(예시)
"reviewed_at": "2026-09-12T03:00:00+00:00",
"reviewer": "labeler-id",
"memo": "추가 확인 사항",
"label": [
  {"category": "새 소리", "option": "비발화"}
],

4.3 판정 편의를 위한 필드

  1. maxwin_db : 음량이 너무 작은 음원의 경우, 명확한 분류가 불가함. 편의를 위해 해당 음원의 음량값을 필드로 표시
  2. step2_results : 데모 앵무새 소리 여부 판별 모델(parrot sound gate)로 앵무/비앵무를 예측한 결과. 아직 데모이기에 정확하지 못하므로, 라벨링 시 참고 용도로 사용했다.
~
(예시)
"maxwin_db": -24.52,
"step2_results": [
    {
      "version": "1.0.0",
      "processed_at": "2026-09-12T02:00:00+00:00",
      "parrot_sound_gate": true,
      "p": 0.82,
      "threshold": 0.6
    }
]
필드 형식 설명
maxwin_db 숫자 또는 null 최대 RMS의 dBFS 값 (음량)
step2_results 객체 배열 버전별 자동 판정 결과 전체
version 문자열 모델, 전처리, 판정 기준을 구분하는 버전
processed_at 시간 문자열 해당 버전의 모델을 실행한 UTC 시각
parrot_sound_gate 불리언 앵무새 소리 후보 여부
p 0부터 1 사이 숫자 모델이 계산한 앵무새 소리 예측 점수
threshold 0부터 1 사이 숫자 또는 null 후보 판정에 사용한 임계값

5. 라벨링 데이터 종합: 백오피스 시스템

팀원 셋이서 라벨링한 결과를 자체 백오피스 시스템에 업로드하여 종합한다. 

버디버드 백오피스의 오디오 캡처 라벨 목록

그림 4: 라벨 결과를 확인할 수 있는 버디버드 백오피스 화면