Show HN: 오픈 소스, 네이티브 오디오 발화 탐지 (Turn Detection) 모델
요약
Pipecat에서 공개한 오픈 소스 네이티브 오디오 발화 탐지(Turn Detection) 모델 Smart Turn v3.2를 소개합니다. VAD의 한계를 넘어 음성의 운율과 의미론적 단서를 직접 분석하여 음성 에이전트의 응답 시점을 정교하게 결정합니다.
핵심 포인트
- VAD를 넘어 운율과 의미론적 단서를 활용하는 오디오 네이티브 방식
- 한국어를 포함한 23개 언어 지원 및 빠른 추론 속도
- CPU용 양자화 모델과 GPU용 비양자화 모델 제공
- 데이터셋, 학습 스크립트, 가중치를 모두 포함한 완전한 오픈 소스
Smart Turn v3.2
오픈 소스이며 커뮤니티가 주도하는 네이티브 오디오 발화 탐지 (Turn Detection) 모델입니다.
발화 탐지 (Turn detection)는 대화형 음성 AI (Conversational voice AI) 기술 스택에서 가장 중요한 기능 중 하나입니다. 발화 탐지란 음성 에이전트가 언제 인간의 음성에 응답해야 하는지를 결정하는 것을 의미합니다.
오늘날 대부분의 음성 에이전트는 발화 탐지의 기초로 발화 구간 검출 (VAD, Voice Activity Detection)을 사용합니다. VAD는 오디오를 "음성 (Speech)"과 "비음성 (Non-speech)" 구간으로 나눕니다. 하지만 VAD는 음성의 실제 언어적 또는 음향적 내용을 고려할 수 없습니다. 인간은 문법, 어조, 말하기 속도, 그리고 기타 다양한 복잡한 오디오 및 의미론적 단서(Semantic cues)를 바탕으로 발화 탐지를 수행합니다. 우리는 VAD 기반 방식보다 인간의 기대치에 더 가깝게 부합하는 모델을 구축하고자 합니다.
이 모델은 진정한 오픈 모델 (BSD 2-clause 라이선스)입니다. 누구나 이 프로젝트를 사용, 포크(Fork) 및 기여할 수 있습니다. 이 모델은 Pipecat 생태계의 진행 중인 작업 구성 요소로 시작되었습니다. Pipecat는 음성 및 멀티모달 (Multimodal) 실시간 AI 에이전트를 구축하기 위한 오픈 소스이며 특정 업체에 종속되지 않는 (Vendor neutral) 프레임워크입니다.
특징 (Features)
- 23개 언어 지원 (Support for 23 languages)
- 🇸🇦 아랍어, 🇧🇩 벵골어, 🇨🇳 중국어, 🇩🇰 덴마크어, 🇳🇱 네덜란드어, 🇩🇪 독일어, 🇬🇧 🇺🇸 영어, 🇫🇮 핀란드어, 🇫🇷 프랑스어, 🇮🇳 힌디어, 🇮🇩 인도네시아어, 🇮🇹 이탈리아어, 🇯🇵 일본어, 🇰🇷 한국어, 🇮🇳 마라티어, 🇳🇴 노르웨이어, 🇵🇱 폴란드어, 🇵🇹 포르투갈어, 🇷🇺 러시아어, 🇪🇸 스페인어, 🇹🇷 터키어, 🇺🇦 우크라이나어, 🇻🇳 베트남어.
- 빠른 추론 시간 (Fast inference time)
- 일부 CPU에서는 10ms 정도로 실행되며, 대부분의 클라우드 인스턴스에서는 100ms 미만으로 실행됩니다.
- Silero와 같은 경량 VAD (Voice Activity Detection, 음성 활동 감지) 모델과 함께 작동하므로, Smart Turn은 침묵 구간 동안에만 실행되면 됩니다.
- CPU (8MB 양자화 버전) 및 GPU (32MB 비양자화 버전) 제공
- GPU 버전은
fp32가중치를 사용하여 GPU에서 약간 더 빠르게 실행되며, 정확도가 약 1% 정도 향상되었습니다. - CPU 버전은
int8로 양자화(Quantized)되어, 약간의 정확도 손실을 감수하는 대신 CPU 추론 시 크기가 훨씬 작고 속도가 빠릅니다.
- GPU 버전은
- 오디오 네이티브 (Audio native)
- 이 모델은 텍스트 전사(Transcription)가 아닌 PCM 오디오 샘플을 직접 사용하여 작동하므로, 사용자의 음성에 담긴 미묘한 운율(Prosody) 단서를 고려할 수 있습니다.
- 완전한 오픈 소스 (Fully open source)
- 데이터셋, 학습 스크립트, 모델 가중치(Weights)가 모두 오픈 소스입니다.
모델 로컬 실행하기 (Run the model locally)
환경 설정:
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
PyAudio에 필요하므로 아직 설치되어 있지 않다면 PortAudio 개발 라이브러리를 설치해야 할 수도 있습니다:
Ubuntu/Debian
sudo apt-get update
sudo apt-get install portaudio19-dev python3-dev
macOS (Homebrew 사용)
brew install portaudio
유틸리티 실행
시스템 마이크로부터 오디오를 스트리밍하고, VAD를 사용하여 세그먼트의 시작/종료를 감지하며, 각 세그먼트를 모델로 보내 발화 엔드포인트(Phrase endpoint)를 예측하는 명령줄 유틸리티를 실행합니다.
#
# 처음 실행할 때는 약 30초가 소요됩니다.
#
...
모델 사용법 (Model usage)
Pipecat (및 Pipecat Cloud)와 함께 사용하기
Pipecat은 LocalSmartTurnAnalyzerV3를 사용하여 로컬 추론 (local inference)을 지원합니다 (v0.0.85 버전부터 사용 가능).
자세한 내용은 Pipecat 문서를 참조하세요:
Smart Turn v3는 Pipecat Cloud에서 광범위하게 테스트되었으며, LocalSmartTurnAnalyzerV3를 사용할 때 표준 1x 인스턴스에서 추론이 약 65ms 내에 완료됩니다.
로컬 추론 사용 시 (With local inference)
Smart Turn 소스 저장소에서 model.py와 inference.py 파일을 가져오세요. 이 파일들을 프로젝트로 가져온(import) 후, 오디오와 함께 predict_endpoint() 함수를 호출하십시오. 예시는 predict.py를 참조하세요:
입력 형식에 관한 참고 사항 (Notes on input format)
Smart Turn은 16kHz 모노 PCM 오디오를 입력으로 받습니다. 최대 8초의 오디오가 지원되며, 사용자의 현재 발화(turn) 전체 오디오를 제공하는 것을 권장합니다.
이 모델은 Silero와 같은 경량 VAD (Voice Activity Detection) 모델과 함께 사용하도록 설계되었습니다. VAD 모델이 침묵을 감지하면, 사용자의 발화 전체 녹음본에 대해 Smart Turn을 실행하십시오. 필요한 경우 오디오 길이를 약 8초로 줄이기 위해 앞부분을 잘라내십시오(truncating).
입력 데이터가 8초보다 짧은 경우, 오디오 데이터가 입력 벡터의 끝에 위치하고 패딩(padding)되는 0이 앞부분에 위치하도록 시작 부분에 패딩을 삽입하여 남은 길이를 채우십시오.
Smart Turn이 실행을 완료하기 전에 사용자로부터 추가적인 음성이 감지되면, 새로운 세그먼트(segment)만 실행하는 대신 새로운 오디오를 포함한 발화 전체 녹음본에 대해 Smart Turn을 다시 실행하십시오. Smart Turn은 충분한 문맥(context)이 주어졌을 때 가장 잘 작동하며, 매우 짧은 오디오 세그먼트에서 실행되도록 설계되지 않았습니다.
이전 발화(turn)의 오디오는 포함할 필요가 없다는 점에 유의하십시오.
프로젝트 목표 (Project goals)
이 모델의 현재 버전은 Whisper Tiny 백본(backbone)을 기반으로 합니다. 모델 아키텍처에 대한 자세한 내용은 아래를 참조하세요.
이 프로젝트의 상위 목표는 다음과 같은 최첨단(state-of-the-art) 발화 탐지 모델을 구축하는 것입니다:
- 누구나 사용할 수 있고,
- 프로덕션 환경에 배포하기 쉬우며,
- 특정 애플리케이션 요구 사항에 맞춰 미세 조정(fine-tune)하기 쉬운 모델.
중기 목표:
- 추가 언어 지원
- 추가적인 최적화 및 아키텍처 개선 실험
- 학습 및 평가를 위한 더 많은 인간 데이터 수집
- 신용카드, 전화번호, 주소 입력과 같은 "모드(modes)"를 지원하기 위한 모델의 텍스트 컨디셔닝 (Text conditioning)
모델 아키텍처 (Model architecture)
Smart Turn v3는 Whisper Tiny를 베이스로 사용하며, 선형 분류기 레이어 (linear classifier layer)를 포함합니다. 이 모델은 트랜스포머 (transformer) 기반이며 약 8M 개의 파라미터 (parameters)를 가지고 있고, int8 양자화 (int8 quantized) 버전과 전체 fp32 버전 모두 제공됩니다.
우리는 wav2vec2-BERT, wav2vec2, LSTM, 그리고 추가적인 트랜스포머 분류기 레이어를 포함하여 다양한 아키텍처와 베이스 모델을 실험했습니다.
추론 (Inference)
추론을 위한 샘플 코드는 inference.py에 포함되어 있습니다. 사용 예시는 predict.py와 record_and_predict.py를 참조하세요.
학습 (Training)
모든 학습 코드는 train.py에 정의되어 있습니다.
학습 코드는 pipecat-ai HuggingFace 저장소에서 데이터셋을 다운로드합니다. (물론 여러분의 자체 데이터셋을 사용하도록 수정할 수 있습니다.)
학습은 로컬에서 실행하거나 Modal을 사용하여 실행할 수 있습니다 (train_modal.py 사용). 로깅을 비활성화하지 않는 한, 학습 실행 결과는 Weights & Biases에 기록됩니다.
# Modal에서 학습 작업을 실행하려면 다음을 실행하세요:
modal run --detach train_modal.py
데이터 수집 및 기여
현재 학습 및 평가를 위해 다음 데이터셋이 사용됩니다:
- pipecat-ai/smart-turn-data-v3.2-train
- pipecat-ai/smart-turn-data-v3.2-test
할 일 (Things to do)
학습 데이터 분류
우리는 학습 데이터를 수동으로 분류하고 유효하지 않은 샘플을 제거하는 데 도움을 줄 분들을 찾고 있습니다. 이 작업에 도움을 주고 싶다면 다음 페이지를 방문해 주세요:
인간 학습 데이터 (Human training data)
turn training games를 플레이함으로써 프로젝트에 데이터를 기여할 수 있습니다. 또는, 링크된 README를 따라 직접 샘플을 기여(contribute samples directly)해 주셔도 좋습니다.
아키텍처 실험 (Architecture experiments)
현재 모델 아키텍처는 비교적 단순합니다. 성능을 향상시키거나, 모델이 오디오에 대한 추가 정보를 출력하게 하거나, 추가적인 컨텍스트 (context)를 입력으로 받도록 하는 등 다른 접근 방식들을 실험해 보는 것은 흥미로운 작업이 될 것입니다.
예를 들어, 추론 (inference)을 조건화하기 위해 모델에 추가적인 컨텍스트를 제공하는 것이 매우 유용할 것입니다. 이에 대한 사용 사례로는 모델이 사용자가 현재 신용카드 번호, 전화번호, 또는 이메일 주소를 읊고 있다는 것을 "알게" 하는 것이 있습니다.
더 많은 플랫폼에서의 학습 지원 (Supporting training on more platforms)
우리는 이 모델의 초기 버전들을 Google Colab에서 학습시켰습니다. 다시 한번, 학습 플랫폼으로서 Colab을 지원해야 합니다! 매우 다양한 플랫폼에서 학습할 수 있는 퀵스타트 (quickstarts)가 있다면 좋을 것입니다.
기여자 (Contributors)
오디오 데이터셋을 기여해 주신 다음 조직들에 감사드립니다:
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기