Cactus Compute의 음성 인식 모델 Whistle은 파일 크기가 16.9MB이고 CPU에서 돌아간다. 7개 언어를 받아 적으며 단어별 타임스탬프와 확률을 함께 돌려준다. 모델 카드는 LibriSpeech에서 Whisper base보다 낫다고 주장하는데, 이를 Apple M4 CPU에서 직접 시험한 튜토리얼이 2026년 10월 22일 MarkTechPost에 실렸다.
결과는 조건부다. 같은 클립으로 비교하자 탐욕 디코딩(greedy)을 쓴 Whisper base보다는 test-other에서 앞섰지만, 빔 서치를 쓴 Whisper base와는 유의한 차이가 없었다. 속도 우위는 클립이 길어질수록 줄었고, 30초를 넘는 오디오는 시험에 쓴 엔진이 오류 없이 중간을 빼먹었다. 수치는 모두 한 번 돌린 표본 결과이고, 공개된 전체 분할 수치는 인용만 했다고 밝혔다.
시험 방식
시험은 pip 패키지 cactus-needle 3.2.0으로 했다. 이 패키지는 처음 실행할 때 Hugging Face 저장소에서 Whistle 가중치, 엔진, Needle 3 가중치를 내려받는다. 저장소 파일이 제자리에서 교체되기 때문에 두 저장소를 고정된 리비전으로 묶고 SHA-256 해시를 출력해 재현성을 확보했다. 엔진은 이 패키지 기준 3.3.0 버전이다.
LibriSpeech test-clean과 test-other에서 시드를 고정해 분할마다 300개 행을 뽑았다. Whistle이 한 번에 처리하는 30초를 넘는 클립이 분할마다 1개씩 있어 이를 빼고 각각 299개가 남았다. 이 299개 가운데 test-other 앞 100개와 test-clean 앞 60개를 Whisper tiny와 base에도 넣었다. 두 시스템의 차이는 화자 단위 쌍체 부트스트랩의 95% 구간이 0을 제외하고 Holm 보정 p값이 0.05 미만일 때만 유의하다고 판정했다. 화자 수가 적어 구간은 근사치다. 판정 규칙은 최종 실행 전에 노트북에 적었지만, 같은 데이터를 일부 건드린 탐색 시험이 앞서 있었다.
Whisper의 기본 디코딩은 온도 폴백이 붙은 탐욕 방식이고, Whisper 논문의 LibriSpeech 수치는 빔 서치에서 나왔다. Whistle은 5빔 탐색으로 디코딩한다. 그래서 어떤 기준과 비교했는지를 밝혀야 하며, 이번 격차는 모델만의 차이가 아니라 모델과 디코더를 합친 시스템의 차이라는 설명이 달려 있다.
정확도 비교
같은 표준화기로 채점한 Whistle의 단어 오류율(WER)은 test-other 표본에서 10.47%였다. 공개된 전체 분할 수치 10.49%와 가깝다. 쌍체 부분집합에서는 Whistle이 10.27%, 탐욕 Whisper base가 12.46%, 빔 서치 Whisper base가 10.83%였다. 탐욕 방식과의 2.19포인트 차이는 Holm 보정 뒤에도 남았지만 빔 서치와의 차이는 남지 않았다.
| 항목 | 결과 |
|---|---|
| test-other 쌍체 WER, Whistle | 10.27% |
| test-other 쌍체 WER, Whisper base 탐욕 | 12.46% |
| test-other 쌍체 WER, Whisper base 빔 서치 | 10.83% |
| 유의한 우위 | test-other의 탐욕 Whisper base 상대만 |
| test-clean, 빔 서치, 다국어 합산 | 유의한 차이 없음 |
영어 외 6개 언어는 Multilingual LibriSpeech에서 언어마다 12개씩 뽑은 72개 클립, 22명 화자로 비교했다. 언어를 지정한 Whistle은 26.40%, 탐욕 Whisper base는 24.06%로 Whisper 쪽이 낮았지만 유의한 차이는 아니었다. 두 시스템 모두 72개 클립 전부에서 언어를 맞게 감지했다. 언어별 수치는 표본이 작아 참고용이다.
잡음 시험에서 디지털 무음, 두 수준의 백색 잡음, 순음은 모두 빈 텍스트가 나왔다. Whisper의 빈 출력은 무음 판별 장치 때문이어서 품질의 증거가 아니라는 설명이 붙었다. -30dBFS로 줄인 음성은 Whistle이 단어 그대로 받아 적었고, Whisper base는 'traced'를 'crazed'로 적었다. 가장 센 잡음 조건에서 20개 클립의 WER은 Whistle이 12.4%에서 37.1%, Whisper base가 15.2%에서 39.9%로 올랐고 두 시스템의 차이는 0과 구분되지 않았다.
속도와 한계
속도는 엔진마다 새 프로세스를 띄워 같은 float32 배열로 쟀다. 탐욕 Whisper base의 처리 시간은 Whistle의 5초 클립에서 7.7배, 30초 클립에서 2.8배로 격차가 좁혀졌고, Whisper의 고정 패딩 창이 일부 원인이다. 10초 클립에서는 Whistle이 5.7배 빨랐다. 최대 메모리는 Whistle 124MB, Whisper base 823MB다. 다만 Whistle의 클립당 처리 시간이 두 분할 사이에서 거의 세 배 차이 나 클립 길이로는 설명되지 않으므로 배율은 근사치로 봐야 한다.
가장 큰 한계는 30초 창이다. 문서는 한 번에 30초까지 처리하고 그보다 길면 창을 나눠 처리한다고 안내하지만, 시험에 쓴 3.3.0 엔진은 한 화자의 발화를 이어 붙인 세션 전체를 한 번에 넣자 단어의 절반 미만만 내놓았고 오류도 내지 않았다. 같은 저장소의 3.2.0 엔진은 같은 입력에 RuntimeError를 냈다. 조용히 누락하는 엔진과 거부하는 엔진이 공존하므로 오디오를 나누는 일은 사용자 몫이다. 조용한 지점에서 자르면 WER이 3.75%, 고정 창으로 자르면 6.74%였으나, 클립 하나로 낸 결과여서 확정하기 어렵다.
스트리밍은 stream() 호출이 최근 오디오를 다시 받아 적고 연속 두 번 일치한 단어를 확정하는 방식이다. 같은 화자의 발화를 이어 붙인 8개 세션을 1초 단위로 흘리면 WER이 10.05%로, 발화를 하나씩 처리한 10.41%와 유의한 차이가 없었다. 단어는 끝난 뒤 중앙값 1.68초에 확정됐다. 2개 세션에서 청크를 0.5초, 2초로 바꾸면 중앙값이 0.78초에서 3.44초로 늘었다. 이어 붙인 지점이 인위적이라 실제 대화가 아닌 동작 방식을 본 시험이다.
타임스탬프·키워드·도구 호출
정답 정렬이 없어 타임스탬프는 일관성으로 점검했다. 단어 시각은 test-other 40개 클립 모두에서 단조로웠고, 앞에 2초 무음을 붙인 20개 클립에서 첫 단어는 중앙값 2.000초 이동했다. 단어 끝에서 자른 오디오를 다시 받아 적었을 때 같은 접두어가 재현된 클립은 20개 중 약 5분의 1이었다. 단어 확률은 오류 신호로 쓸 만했다. 0.5 미만인 단어는 69.2%가 틀렸고 0.9 이상은 2.5%가 틀렸으며, 틀린 단어를 가려내는 AUROC는 확률 기준 0.916, 단어 길이 기준 0.509였다.
키워드 편향은 대조군을 두고 쟀다. 오류가 있는 185개 클립에서 Whistle이 틀린 단어를 정답에서 골라 넣은 기준선(정답을 아는 상한선)은 WER을 14.74%에서 7.62%로 낮췄다. 다른 클립의 틀린 단어를 넣으면 14.82%로 변화가 없었고, 클립에 없는 흔한 단어 8개를 넣으면 2.05포인트 올랐다. 정답 단어를 넣은 경우보다 7.20포인트 나빠 Holm 보정 후에도 유의했으므로, 키워드가 맞아야 효과가 있다.
음성 임베딩은 초당 25프레임, 프레임당 256개 실수 벡터다. 한 단어의 프레임으로 다른 클립을 훑는 단어 검색에서 34쌍 중 32쌍이 단어 0.3초 이내에서 정점을 찍었고, 무작위 기대치는 약 17%였다. 이는 문장 임베딩이 아닌 프레임 단위 내용 표현이다.
Whistle의 받아쓰기를 같은 엔진의 Needle 3에 넣어 은행 상담 의도 14개 중 하나의 도구를 고르게 한 시험도 있다. 도구 설명은 시험자가 썼다. MInDS-14의 전화 음성에서 Whistle의 WER은 31.9%였고, 올바른 도구를 고른 비율은 Whistle 텍스트에서 50.3%, 기준 전사에서 51.8%로 유의한 차이가 없었다. 이 설정에서는 받아쓰기보다 도구 선택이 한계라는 해석이 붙었다. 주제와 무관한 LibriSpeech 문장은 17건이 거부됐고 나머지는 은행 도구 호출을 받았다.
이번 실행 전체에서 Whisper tiny가 받아 적은 오디오는 18.4분, base는 68.7분이었고 13개 셀은 실패 없이 실행됐다. 후속으로 pip install "cactus-needle[mic,compare]" 뒤 needle whistle compare clip.wav 명령으로 Whistle, Whisper, Moonshine을 한 클립에 비교할 수 있고, 가중치는 safetensors로도 배포된다. 새 언어 미세조정은 저장소 이슈에서 논의 중이다.
이 결과는 Apple M4 한 대에서 한 번 돌린 표본이어서 Whisper base를 앞섰다는 결론은 test-other의 탐욕 디코딩 조건에 한정된다. 파일 16.9MB와 124MB 메모리는 휴대 기기에 유리하지만, 30초 초과 오디오는 직접 나눠야 하고 엔진 버전에 따라 동작이 달라진다.
출처
이 기사는 아래 자료를 바탕으로 정리했습니다. 제목을 누르면 원문이 새 창으로 열립니다.