BuddyBird Parrot Mimicry Judgment v1.0.0
English
Glossary
| Term | Meaning |
|---|---|
| Mimicry (mimic) | A parrot sound that imitates the target word |
| Non-speech (non_speech) | An ordinary parrot sound that does not imitate a word (chirps and the like) |
| Guardian reference (reference) | A recording of the guardian saying the target word |
Model description
This model judges whether a parrot successfully imitated a target word.
- The query clip and the guardian references are converted to ContentVec features (hidden layer 8).
- The query is compared with each reference in the reference set (up to 20) by full DTW, and the similarities are averaged.
- The average is converted to a percentile within the cohort and compared with the threshold 0.9915.
| File | Contents |
|---|---|
inference.py, judge/ |
Judgment code |
manifest.json |
Settings, threshold, pool and cohort lists, SHA-256 of each file. Bundle version 1.1.0 |
pool_features.npz, cohort_features.npz, pool_cohort_pairs.npy |
Precomputed features of the pool and the cohort, and their similarity table |
Intended use
- Input: one clip that the upstream
buddybird-ai/parrot-sound-gateaccepted as a parrot sound, one target word, and zero or more own references. - To judge several candidate words, call once per word.
- The model targets small and medium parrots.
Getting started
This release uses Python 3.12 and uv.
hf download buddybird-ai/parrot-mimicry-judgment --revision v1.0.0 --local-dir parrot-mimicry-judgment
cd parrot-mimicry-judgment
uv sync --frozen
The first call downloads the ContentVec weights (about 380 MB).
from inference import MimicryJudgment
model = MimicryJudgment.from_pretrained(
"buddybird-ai/parrot-mimicry-judgment",
revision="v1.0.0",
)
result = model.predict_file(
"query.wav",
word="안녕",
own_paths=["guardian_annyeong_1.wav", "guardian_annyeong_2.wav"],
account_id="<account id>",
)
print(result)
# {"is_success": True, "score": 99.6..., "status": "ok", "n_own": 2, "n_fill": 18, "set_size": 20}
In-memory waveforms are judged with predict_waveform. From the command line:
uv run --frozen python inference.py query.wav --word 안녕 --ref guardian_1.wav --account-id <account id> --revision v1.0.0
Output
| Key | Type | Meaning |
|---|---|---|
is_success |
bool | Whether the imitation succeeded. Do not recompute it from score |
score |
float or null | Cohort percentile x 100. Null when not judged |
status |
str | ok, no_reference (no references), unsupported_species |
n_own, n_fill, set_size |
int | Own references in the set, pool references in the set, and their total |
Data
| Split | Accounts | Accurate mimicry | Non-speech | Guardian references |
|---|---|---|---|---|
| Development | 172 | 959 | 32,916 | 271 |
| Test | 40 | 152 | 3 | 121 |
Evaluation
Cross-validation numbers come from account-level 5-fold cross-validation on the development data, repeated 10 times. Test numbers apply the pool, cohort and threshold fixed on the development data, unchanged, to 40 accounts never used in development (account-level bootstrap 95% confidence intervals).
| Metric | Cross-validation | Test | Test n |
|---|---|---|---|
| Per-account non-speech FAR, 75th percentile | 3.4% | not measurable | 3 |
| Recall, all words | 31.3% | 49.6% [37.3%, 61.4%] | 152 |
| Recall, 안녕 | 29.9% | 30.0% [14.9%, 42.4%] | 74 |
| Recall, 안녕하세요 | 58.1% | 59.8% [45.1%, 73.5%] | 52 |
| Recall, 사랑해 | 14.7% | 92.9% [49.4%, 100.0%] | 14 |
| Recall, 까꿍 | 59.2% | 75.8% [42.9%, 91.8%] | 12 |
| Wrong-word FAR | 5.9% | 6.5% [4.2%, 8.8%] | 3,017 |
Credit
This work was supported by the Institute of Information & Communications Technology Planning & Evaluation (IITP) grant funded by the Ministry of Science and ICT (MSIT) (IITP-2026-AI·SW Maestro)
한국어
용어 정리
| 용어 | 뜻 |
|---|---|
| 모사(mimic) | 앵무새가 목표 단어를 따라 한 소리 |
| 비발화(non_speech) | 단어를 따라 하지 않은 일반적인 앵무새 소리(짹짹 등) |
| 보호자 기준음성(reference) | 보호자가 목표 단어를 발음한 녹음 |
모델 설명
앵무새가 목표 단어 모사에 성공했는지 판정한다.
- 질의 clip과 보호자 기준음성을 ContentVec 특징(hidden layer 8)으로 바꾼다.
- 질의를 기준음성 세트(최대 20개)의 기준음성 각각과 full DTW로 비교해 유사도 평균을 구한다.
- 이 평균을 코호트 안의 백분위로 바꾸고 임계값 0.9915와 비교한다.
| 파일 | 내용 |
|---|---|
inference.py, judge/ |
판정 코드 |
manifest.json |
설정, 임계값, 풀과 코호트 목록, 파일별 SHA-256. 번들 버전은 1.1.0 |
pool_features.npz, cohort_features.npz, pool_cohort_pairs.npy |
풀과 코호트의 사전 계산 특징, 둘 사이의 유사도 표 |
사용 범위
- 입력: 앞단
buddybird-ai/parrot-sound-gate가 앵무새 소리로 판정한 clip 1개, 목표 단어 1개, own 기준음성 0개 이상. - 후보 단어가 여럿이면 단어마다 호출한다.
- 소형조와 중형조를 대상으로 하는 모델이다.
시작하기
Python 3.12와 uv를 사용한다.
hf download buddybird-ai/parrot-mimicry-judgment --revision v1.0.0 --local-dir parrot-mimicry-judgment
cd parrot-mimicry-judgment
uv sync --frozen
처음에 ContentVec 가중치(약 380 MB)를 내려받는다.
from inference import MimicryJudgment
model = MimicryJudgment.from_pretrained(
"buddybird-ai/parrot-mimicry-judgment",
revision="v1.0.0",
)
result = model.predict_file(
"query.wav",
word="안녕",
own_paths=["guardian_annyeong_1.wav", "guardian_annyeong_2.wav"],
account_id="<account id>",
)
print(result)
# {"is_success": True, "score": 99.6..., "status": "ok", "n_own": 2, "n_fill": 18, "set_size": 20}
메모리의 파형은 predict_waveform으로 판정한다. command line에서는 다음처럼 실행한다.
uv run --frozen python inference.py query.wav --word 안녕 --ref guardian_1.wav --account-id <account id> --revision v1.0.0
출력
| 키 | 형 | 뜻 |
|---|---|---|
is_success |
bool | 성공 여부. score로 다시 계산하지 않는다 |
score |
float 또는 null | 코호트 백분위 × 100. 판정하지 않으면 null |
status |
str | ok, no_reference(기준음성 없음), unsupported_species |
n_own, n_fill, set_size |
int | 세트의 own 기준음성 수, 풀 기준음성 수, 합계 |
데이터
| 분할 | 계정 | 정확한 모사 | 비발화 | 보호자 기준음성 |
|---|---|---|---|---|
| 개발 | 172 | 959 | 32,916 | 271 |
| test | 40 | 152 | 3 | 121 |
평가
교차검증 수치는 개발 데이터에서 계정 단위 5-fold 교차검증을 10회 반복해 얻은 결과이고, test 수치는 개발에 전혀 쓰지 않은 계정 40개에, 개발 데이터로 확정한 풀, 코호트, 임계값을 그대로 적용한 결과이다(계정 단위 bootstrap 95% 신뢰구간).
| 지표 | 교차검증 | test | test 건수 |
|---|---|---|---|
| 계정별 비발화 FAR 75번째 백분위수 | 3.4% | 측정 불가 | 3 |
| recall, 전체 | 31.3% | 49.6% [37.3%, 61.4%] | 152 |
| recall, 안녕 | 29.9% | 30.0% [14.9%, 42.4%] | 74 |
| recall, 안녕하세요 | 58.1% | 59.8% [45.1%, 73.5%] | 52 |
| recall, 사랑해 | 14.7% | 92.9% [49.4%, 100.0%] | 14 |
| recall, 까꿍 | 59.2% | 75.8% [42.9%, 91.8%] | 12 |
| 다른 단어 FAR | 5.9% | 6.5% [4.2%, 8.8%] | 3,017 |
Credit
이 성과는 2026년도 과학기술정보통신부의 재원으로 정보통신기획평가원의 지원을 받아 수행된 결과물임 (IITP-2026-AI·SW마에스트로)