모두를 위한 음성 인터페이스 (Voice Interfaces for Everyone)
요약
Moonshine Voice는 실시간 음성 에이전트 및 애플리케이션 구축을 위한 오픈 소스 AI 툴킷입니다. 온디바이스 실행을 통해 낮은 지연 시간과 프라이버시를 보장하며, 다양한 플랫폼에서 STT, TTS, 음성 복제 등의 기능을 제공합니다.
핵심 포인트
- 온디바이스 실행으로 빠른 속도와 개인정보 보호 제공
- Whisper Large V3 대비 높은 정확도와 초소형 모델 지원
- Python, iOS, Android 등 다양한 플랫폼 통합 지원
- STT, TTS, 음성 복제, 화자 식별 등 통합 솔루션 제공
모두를 위한 음성 인터페이스 (Voice Interfaces for Everyone)
- Quickstart (빠른 시작)
- 언제 Whisper 대신 Moonshine을 선택해야 할까요?
- 라이브러리 사용법 (Using the Library)
- 모델 (Models)
- API 레퍼런스 (API Reference)
- 지원 (Support)
- 로드맵 (Roadmap)
- 감사의 글 (Acknowledgements)
- 라이선스 (License)
Moonshine Voice는 실시간 음성 에이전트 및 애플리케이션을 구축하는 개발자를 위한 오픈 소스 AI 툴킷입니다.
- 모든 기능이 온디바이스 (on-device)에서 실행되므로 빠르고 프라이버시가 보호되며, 계정, 신용카드 또는 API 키가 필요하지 않습니다.
- 프레임워크와 모델은 라이브 스트리밍 (live streaming) 애플리케이션에 최적화되어 있어, 사용자가 말하는 동안 많은 작업을 미리 수행함으로써 낮은 지연 시간 (low latency) 응답을 제공합니다.
- 모든 음성-텍스트 변환 (STT, Speech to Text) 모델은 당사의 최첨단 연구를 기반으로 하며 처음부터 학습되었으므로, 최상위 성능에서는 Whisper Large V3보다 높은 정확도를 제공하는 동시에 제약이 있는 배포 환경을 위한 1MB 크기의 초소형 모델까지 제공할 수 있습니다.
- Python, iOS, Android, MacOS, Linux, Windows, Raspberry Pis, IoT 기기, 마이크로컨트롤러 (microcontrollers), DSP, 웨어러블 (wearables)에서 동일한 라이브러리가 실행되어 플랫폼 간 통합이 용이합니다.
- 모든 기능이 포함되어 있습니다 (Batteries are included). 고수준 API (high-level APIs)는 전사 (transcription), 텍스트 음성 변환 (TTS, Text to Speech), 음성 복제 (voice cloning), 화자 식별 (diarization), 명령 인식 (command recognition), 대화형 에이전트 (conversational agents)와 같은 일반적인 작업에 대한 완전한 솔루션을 제공하므로, 단일 라이브러리로 음성 애플리케이션을 구축할 수 있습니다.
- STT의 경우 영어, 스페인어, 중국어 (Mandarin), 일본어, 한국어, 베트남어, 우크라이나어, 아랍어를 포함하며, TTS의 경우 영어, 스페인어, 아랍어, 독일어, 프랑스어, 힌디어, 이탈리아어, 일본어, 한국어, 네덜란드어, 포르투갈어, 러시아어, 터키어, 우크라이나어, 베트남어, 중국어를 지원합니다.
iOS, Android, macOS, Windows, Raspberry Pi용 예제 앱은 GitHub Releases에 별도의 아카이브로 게시되어 있습니다 (대부분 examples/ 폴더 아래의 폴더 이름과 일치하는 ** {platform}-{Project}.tar.gz** 형식이며, Windows의 경우 C++ 샘플을 위한 moonshine-voice-windows-x86_64.tar.gz도 제공합니다). 전체 릴리스 다운로드 목록은 Examples 섹션을 참조하세요.
pip install moonshine-voice
moonshine-voice mic --language en
마이크의 소리를 듣고 전사(transcript) 업데이트 내용을 실시간으로 출력합니다.
moonshine-voice intent
"불을 켜줘"와 같이 사용자가 정의한 동작 문구를 감지합니다. 의미론적 매칭 (semantic matching)을 사용하여 자연어의 다양한 변형을 인식합니다. 더 자세한 내용은 우리의 "Getting Started" Colab 노트북과 영상을 확인하세요.
moonshine-voice tts --language en_us --text "Hello world"
텍스트를 합성하여 말합니다.
github.com/moonshine-ai/moonshine/releases/latest/download/ios-Transcriber.tar.gz를 다운로드하고 압축을 푼 다음, Xcode에서 Transcriber/Transcriber.xcodeproj 프로젝트를 여세요.
github.com/moonshine-ai/moonshine/releases/latest/download/android-Transcriber.tar.gz를 다운로드하고 압축을 푼 다음, Android Studio에서 Transcriber 폴더를 여세요.
이 저장소(repository)를 다운로드하거나 git clone 한 다음 다음을 실행하세요:
cd core
mkdir -p build
cd build
...
Moonshine Voice는 Apple Silicon (arm64) 및 Intel (x86_64) Mac을 모두 지원합니다.
github.com/moonshine-ai/moonshine/releases/latest/download/macos-MicTranscription.tar.gz를 다운로드하고 압축을 푼 다음, Xcode에서 MicTranscription/MicTranscription.xcodeproj 프로젝트를 여세요.
github.com/moonshine-ai/moonshine/releases/latest/download/windows-cli-transcriber.tar.gz를 다운로드하고 압축을 푼 다음, Visual Studio에서 cli-transcriber\cli-transcriber.vcxproj 프로젝트를 여세요.
이것은 라이브러리와 모델이 포함된 독립형(self-contained) 아카이브이므로, Ctrl+Shift+B 또는 F7을 누르면 실행 파일이 빌드됩니다.
오디오 입력을 받으려면 USB 마이크가 연결되어 있어야 하지만, Python pip 패키지는 Pi(Raspberry Pi)에 최적화되어 있으므로 다음과 같이 실행할 수 있습니다:
sudo pip install --break-system-packages moonshine-voice
moonshine-voice mic --language en
여러분의 시작을 돕기 위해 YouTube에 스크린캐스트(screencast)를 녹화해 두었으며, 재미있는 Raspberry Pi 전용 예제들을 위해 github.com/moonshine-ai/moonshine/releases/latest/download/raspberry-pi-my-dalek.tar.gz를 다운로드할 수도 있습니다. 만약 --break-system-packages를 사용하고 싶지 않다면, README에 Python 설치를 위한 가상 환경 (virtual environment) 사용에 관한 정보가 안내되어 있습니다.
더 발전된 예제는 github.com/moonshine-ai/pi-help-bot에서 확인하실 수 있습니다.
요약 (TL;DR) - 실시간 음성 (live speech) 작업 시.
| 모델 | WER (단어 오류율) | 파라미터 수 (# Parameters) | MacBook Pro | Linux x86 | R. Pi 5 |
|---|---|---|---|---|---|
| Moonshine Medium Streaming | 6.65% | 2억 4,500만 | 107ms | 269ms | 802ms |
| ... | |||||
| 이 수치들이 어떻게 측정되었는지는 벤치마크 (benchmarks)를 참조하세요. |
OpenAI가 Whisper 모델 제품군을 출시한 것은 오픈 소스 음성 인식 (speech to text) 분야에서 거대한 진전이었습니다. 그들은 다양한 크기의 모델을 제공하여, 개발자들이 자신의 애플리케이션에 맞춰 정확도와 컴퓨팅 및 저장 공간 사이의 절충안을 선택할 수 있게 해주었습니다. Large v3와 같은 가장 큰 모델들은 Google이나 Apple 같은 대형 기술 기업 외부에서 사용 가능한 그 어떤 것보다도 높은 정확도 점수를 보여주었습니다. Moonshine 팀은 Whisper의 초기 단계부터 열정적인 채택자였으며, 여전히 해당 모델들과 그 주변에 구축된 FasterWhisper 및 기타 훌륭한 프레임워크들의 열렬한 팬입니다.
하지만, 실시간 음성 인터페이스 (live voice interface)가 필요한 애플리케이션을 구축하면서, 우리는 Whisper를 통해서는 제공되지 않는 기능들이 필요하다는 것을 깨달았습니다:
Whisper는 항상 30초 입력 윈도우 (input window) 단위로 작동합니다. 오디오를 대량의 배치 (batch)로 처리할 때는 큰 문제가 되지 않습니다. 보통 파일의 앞부분을 미리 보고 적용할 수 있는 30초 정도의 음성 청크 (chunk)를 찾으면 되기 때문입니다. 하지만 음성 인터페이스 (voice interfaces)는 입력 스트림 (input stream)으로부터 더 큰 청크를 만들기 위해 앞을 미리 내다볼 수 없으며, 문구 (phrase)는 5~10초보다 긴 경우가 드뭅니다. 이는 인코더 (encoder)와 디코더 (decoder)에서 제로 패딩 (zero padding)을 인코딩하는 데 많은 계산 자원이 낭비됨을 의미하며, 결과 반환 시 더 긴 지연 시간 (latency)을 초래합니다. 모든 인터페이스의 가장 중요한 요구 사항 중 하나가 응답성 (responsiveness, 보통 200ms 미만의 지연 시간으로 정의됨)이라는 점을 고려할 때, 이는 계산 자원이 여유로운 플랫폼에서도 사용자 경험 (user experience)을 해치며, 자원이 제한된 기기에서는 사용이 불가능하게 만듭니다. Whisper는 아무것도 캐싱 (cache)하지 않습니다. 음성 인터페이스의 또 다른 일반적인 요구 사항은 사용자가 말하는 동안 앱이 듣고 이해하고 있다는 것을 알 수 있도록 피드백을 표시하는 것입니다. 이는 문장이 말해지는 동안 음성-텍스트 변환 (speech to text) 모델을 시간에 따라 반복적으로 호출해야 함을 의미합니다. 대부분의 오디오 입력은 동일하며, 끝에 짧은 부분만 추가될 뿐입니다. 입력의 상당 부분이 일정함에도 불구하고, Whisper는 매번 처음부터 다시 시작하여 이전에 이미 확인한 오디오에 대해 많은 중복 작업을 수행합니다. 고정된 입력 윈도우와 마찬가지로, 이러한 불필요한 지연 시간은 사용자 경험을 저해합니다. Whisper는 많은 언어를 제대로 지원하지 못합니다. Whisper의 다국어 지원은 놀라운 공학적 업적이며, 단일 모델이 많은 언어를 처리하고 번역까지 제공할 수 있음을 입증했습니다. OpenAI의 이 차트(원 데이터는 부록 D-2.4에 있음)는 가장 큰 15억 파라미터 (1.5 billion parameter) 모델에서도 단어 오류율 (Word Error Rate, WER)이 급격히 떨어지는 모습을 보여줍니다.
82개의 언어가 나열되어 있지만, 그중 20% 미만의 단어 오류율 (Word Error Rate, WER) (우리가 사용 가능하다고 간주하는 기준)을 기록한 언어는 33개뿐입니다. 엣지 디바이스 (edge devices)에서 흔히 사용되는 Base 모델 크기의 경우, 20% 미만의 WER을 기록한 언어는 5개에 불과합니다. 한국어와 일본어 같은 아시아 언어들은 기술 혁신이 활발한 거대 시장의 모국어로서 두드러지지만, Whisper는 대부분의 애플리케이션에서 사용하기에 충분한 정확도를 제공하지 못합니다. OpenAI의 클라우드 API를 통해 사용할 수 있는 Whisper의 독점적인 내부 버전은 더 나은 정확도를 제공하는 것으로 보이지만, 오픈 모델 (open models)로는 제공되지 않습니다.
파편화된 엣지 지원 (Fragmented edge support). Whisper를 중심으로 환상적인 생태계가 구축되었으며, 모델을 배포하는 데 사용할 수 있는 성숙한 프레임워크가 많이 존재합니다. 하지만 이러한 프레임워크들은 종종 데스크톱급 머신과 운영 체제 (operating systems)에 집중되는 경향이 있습니다. iOS, Android 또는 Raspberry Pi OS와 같은 엣지 플랫폼 전반에서 사용할 수 있는 프로젝트들도 있지만, 이들은 인터페이스, 기능 및 최적화 수준이 서로 다른 경향이 있습니다. 이로 인해 다양한 장치에서 실행되어야 하는 애플리케이션을 구축하는 것이 불필요하게 어려워졌습니다.
이러한 모든 제한 사항은 우리가 실시간 음성 인터페이스 (live voice interfaces)의 요구 사항을 더 잘 충족하는 자체 모델 제품군을 만들게 된 동기가 되었습니다. 사용 가능한 오픈 음성 데이터셋의 결합된 크기가 웹 기반 텍스트 데이터의 양에 비해 매우 작기 때문에 시간이 다소 걸렸지만, 광범위한 데이터 수집 작업을 거친 끝에 우리는 1세대 Moonshine 모델을 출시할 수 있었습니다. 이 모델들은 고정 입력 창 (fixed-input window) 제한을 제거하고 다른 구조적 개선 사항을 도입하였으며, 실시간 음성 애플리케이션에서 Whisper보다 현저히 낮은 지연 시간 (latency)을 제공하여 종종 5배 또는 그 이상 빠르게 실행됩니다.
하지만 우리는 훨씬 더 제약이 심한 플랫폼에서 훨씬 더 낮은 지연 시간을 필요로 하는 애플리케이션들을 계속 마주하게 되었습니다. 또한 초기 모델의 상한선이었던 Base급 모델보다 더 높은 정확도를 제공하고자 했습니다. 이것이 우리를 다음과 같은 기능을 제공하는 2세대 Moonshine 모델로 이끌었습니다:
유연한 입력 창 (Flexible input windows). 어떤 길이의 오디오든 제공할 수 있으며(약 30초 미만을 권장합니다), 모델은 해당 입력에 대해서만 연산을 수행하므로 제로 패딩 (zero-padding)이 필요하지 않습니다. 이를 통해 지연 시간 (latency)을 크게 개선했습니다. 스트리밍을 위한 캐싱 (Caching for streaming). 이제 우리 모델은 시간이 지남에 따라 오디오를 점진적으로 추가하는 것을 지원하며, 입력 인코딩 (input encoding)과 디코더 (decoder) 상태의 일부를 캐싱하여 연산을 더욱 생략할 수 있게 함으로써 지연 시간을 극적으로 낮췄습니다. 언어별 특화 모델 (Language-specific models). 우리는 아랍어, 일본어, 한국어, 스페인어, 우크라이나어, 베트남어, 중국어를 포함한 여러 언어에 대한 데이터를 수집하고 모델을 학습시켰습니다. Flavors of Moonshine 논문에서 논의한 바와 같이, 하나의 모델을 여러 언어에 걸쳐 학습시키는 것보다 모델이 단 하나의 언어에만 집중하도록 제한할 때 동일한 크기와 연산량으로 훨씬 더 높은 정확도를 얻을 수 있음을 발견했습니다. 크로스 플랫폼 라이브러리 지원 (Cross-platform library support). 우리는 직접 애플리케이션을 구축하고 있으며, 이러한 모델들을 Linux, MacOS, Windows, iOS, Android 전반에 걸쳐 배포할 수 있어야 할 뿐만 아니라 Python, Swift, Java, C++와 같은 언어에서도 사용할 수 있어야 했습니다. 이를 지원하기 위해 모든 처리를 담당하고 시스템 전반에서 우수한 성능을 내기 위해 OnnxRuntime을 사용하는 이식 가능한 C++ 코어 라이브러리를 설계했으며, 필요한 모든 고수준 언어(high-level languages)를 위한 네이티브 인터페이스를 구축했습니다. 이를 통해 개발자는 하나의 API만 배우면 원하는 거의 모든 곳에 배포할 수 있습니다. Whisper V3 Large보다 뛰어난 정확도 (Better accuracy than Whisper V3 Large). HuggingFace의 OpenASR 리더보드에서 우리의 최신 영어 스트리밍 모델인 Medium Streaming은 OpenAI의 가장 정확한 Whisper 모델보다 더 낮은 단어 오류율 (word-error rate)을 달성했습니다. 이는 Moonshine 버전이 2억 5천만 개의 파라미터 (parameters)를 사용하는 반면, Large v3는 15억 개를 사용하여 엣지 (edge) 장치에 훨씬 더 쉽게 배포할 수 있음에도 불구하고 달성한 결과입니다.
이 내용이 Moonshine과 Whisper를 비교하는 데 도움이 되기를 바랍니다. 만약 여러분이 처리량 (throughput)이 가장 중요한 대량의 데이터를 처리하기 위해 클라우드에서 GPU를 사용하고 있다면, Whisper (또는 Parakeet와 같은 Nvidia의 대안)가 배치 처리 (batch processing)와 같은 장점을 제공하겠지만, 실시간 음성 (live speech)에 있어서는 저희가 최고라고 믿습니다. 저희는 음성 인터페이스 (voice interfaces)를 활용한 애플리케이션을 처음 구축하기 시작했을 때 간절히 원했던 프레임워크와 모델들을 직접 구축했습니다. 따라서 실시간 음성 입력을 다루고 있다면 Moonshine을 시도해 보세요.
Moonshine API는 실시간 음성을 캡처하고 전사 (transcribing)하는 세부 사항들을 처리하도록 설계되었으며, 애플리케이션 개발자에게 실행 가능한 이벤트 (actionable events)에 집중할 수 있는 상위 수준의 API (high-level API)를 제공합니다. Python을 사용하여 작동 방식을 설명하겠지만, API는 지원되는 모든 언어에서 일관되게 유지됩니다.
- 아키텍처 (Architecture)
- 개념 (Concepts)
- 전사 시작하기 (Getting Started with Transcription)
- 대화형 에이전트 시작하기 (Getting Started with a Conversational Agent)
- 텍스트 음성 변환 시작하기 (Getting Started with Text to Speech)
- 예시 (Examples)
- 자신의 앱에 라이브러리 추가하기 (Adding the Library to your own App)
- Python
- iOS 또는 MacOS
- Android
- Windows
- 디버깅 (Debugging)
- 소스에서 빌드하기 (Building from Source)
- 모델 다운로드하기 (Downloading Models)
- 벤치마킹 (Benchmarking)
저희의 목표는 음성 기술에 대한 이전 경험이 없는 개발자라도 누구나 쉽게 익혀서 사용할 수 있는 프레임워크를 구축하는 것입니다. 저희는 불필요한 세부 사항들을 많이 추상화 (abstracted away)하였으며, 여러분이 애플리케이션 구축에 집중할 수 있도록 단순한 인터페이스를 제공합니다. 이는 저희의 시스템 아키텍처에도 반영되어 있습니다.
기본적인 흐름은 다음과 같습니다:
- 말하는 텍스트가 필요한지, 아니면 사용자가 동작을 요청했다는 사실만 알면 되는지에 따라
Transcriber또는IntentRecognizer객체를 생성합니다. - 구절의 끝이나 동작 트리거와 같이 중요한 일이 발생할 때 호출되는
EventListener를 연결하여, 애플리케이션이 이에 반응할 수 있도록 합니다. TextToSpeech객체를 사용하여 양방향 대화가 가능하도록 만듭니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending All (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기