OHF-Voice/speech-to-phrase

Fast and personalized local speech-to-text

Speech‑to‑Phrase – 홈어시스턴트 중심의 음성 인식기

무엇인가요 – 임의의 음성을 텍스트로 변환하려는 시도가 아니라, "사용자가 말한 것은 알려진 명령어 중 어떤 것인가?" 라는 질문에 답하기 위해, 홈어시스턴트의 엔티티, 영역, 층 이름을 포함한 미리 정의된 명령어 템플릿과 사용자의 발화를 비교하는 로컬 실행 음성-텍스트 시스템입니다.

왜 존재하는가 – 홈오토메이션에서는 일반적으로 제한된, 명확하게 정의된 명령어 집합(예: 주방 조명 켜기, 쇼핑 리스트에 사과 추가하기 등)만 인식하면 됩니다. 이와 같이 어휘를 특정 명령어로 제한함으로써, 빠른 처리, 오프라인 작동, 그리고 홈어시스턴트에서 사용하는 정확한 이름에 맞춘 개인화가 가능해집니다.


작동 방식 (개요)

  1. 문장 템플릿 – 미리 작성된 언어 파일(YAML)이 말할 수 있는 명령어를 설명합니다. 이 리포지토리는 여러 언어용 템플릿을 제공하며, 사용자가 직접 추가할 수도 있습니다.
  2. 동적 확장 – 시작 시, 홈어시스턴트에 공개된 엔티티, 영역, 층 이름과 템플릿이 병합되어, 가능한 모든 발화를 나타내는 hassil 템플릿 파일이 생성됩니다.
  3. 유한 상태 트랜스듀서(FST) – Rhasspy 백서 기술을 사용하여, 컴팩트한 템플릿을 OpenFST와 OpenGRM를 통해 FST로 컴파일합니다. 이는 모든 문장을 나열하지 않고도 거대한 조합 공간을 효율적으로 인코딩합니다.
  4. Kaldi 음성 모델 – FST를 Kaldi용 언어 모델로 변환합니다. Kaldi는 오픈소스 음성 인식 툴킷입니다. 내장된 발음 사전과 Phonetisaurus 모델이 알려진 단어와 알려지지 않은 단어에 대해 음소를 제공합니다.
  5. 후처리 퍼지 레이어 – Kaldi가 원시 텍스트를 생성한 후, 작은 퍼지 매칭 단계를 통해 미세한 오류(중복/누락 단어)를 보정하고, 엔티티 이름이 홈어시스턴트가 알고 있는 것과 정확히 일치하도록 강제합니다.

주요 기능

  • 로컬 전용 – 클라우드 서비스 없이, 방화벽 뒤에서도 작동합니다.
  • 다국어 지원 – Kaldi 기반 버전(v1.4.3)은 22개 언어를 지원하며, 새로운 리라이트 버전(OHF‑Voice/apps)은 가장 일반적인 언어들을 커버하고 있습니다.
  • 사용자 정의 문장 – 코드를 수정하지 않고도 사용자 고유의 YAML 파일을 추가하여 명령어 집합을 확장할 수 있습니다.
  • Docker 호환 – 공식 컨테이너(rhasspy/wyoming-speech-to-phrase)가 제공되며, 웨이밍턴 통합을 통해 홈어시스턴트에 연결 가능합니다.
  • 자동 모델 다운로드 – 음성 모델과 발음 도구는 공개된 HuggingFace 데이터셋 rhasspy/rhasspy-speech에서 자동으로 다운로드됩니다.
  • 홈어시스턴트 통합 – 홈어시스턴트 웹소켓을 통해 연결되며, 장기 유효한 액세스 토큰을 사용합니다.

시작하기 (빠른 단계)

  1. 설치 – 홈어시스턴트의 Supervisor 스토어에서 애드온을 추가하거나, README에 표시된 Docker 명령어를 실행합니다.
  2. 자격 증명 제공 – --hass-websocket-uri와 --hass-token을 제공하여 서비스가 엔티티를 읽을 수 있도록 합니다.
  3. (선택 사항) 사용자 정의 문장 – 언어별 sentences.yaml 파일을 포함한 디렉터리를 만들고, --custom-sentences-dir /path/to/dir로 시작합니다.
  4. 실행 – 서비스는 필요한 음성 모델을 다운로드하고, FST를 구축하며, Kaldi 언어 모델을 훈련한 후 포트 10300에서 음성 인식을 시작합니다.
  5. 사용 – 오디오를 웨이밍턴 엔드포인트로 전송하면, 인식기는 일치하는 문장을 반환하며, 홈어시스턴트는 이를 자동화로 변환할 수 있습니다.

현재 지원되는 언어 (Kaldi v1.4.3)

영어, 프랑스어, 독일어, 네덜란드어, 스페인어, 이탈리아어, 러시아어, 체코어, 카탈로니아어, 그리스어, 루마니아어, 포르투갈어(포르투갈), 폴란드어, 힌디어, 바스크어, 핀란드어, 몽골어, 슬로베니아어, 스와힐리어, 태국어, 터키어.


확장 및 사용자 정의 방법

  • 새로운 엔티티 이름 추가 – 장치를 홈어시스턴트의 Assist 기능에 노출하면 자동으로 반영됩니다.
  • 새로운 명령어 템플릿 만들기 – speech_to_phrase/sentences/<lang>/sentences.yaml의 형식을 따르거나, 사용자 정의 템플릿 디렉터리를 통해 자체 템플릿을 제공합니다.
  • 새로운 언어 추가 – 발음 사전과 음성 모델(또는 기존 Kaldi 모델 재사용)을 기여하고, 문장 템플릿을 추가하세요. 언어 지원 현황은 이슈 #149를 참조하세요.

프로젝트의 현재 상태

이 리포지토리의 Kaldi 기반 코드는 버전 1.4.3에서 정지되었습니다. 개발은 OHF‑Voice/apps 모노레포로 이전되었으며, 제약된 CTC 디코더, 홈어시스턴트 인텐트를 문장 소스로 사용, 명령어 선택을 위한 웹 UI를 갖춘 새로운 구현이 진행 중입니다.


누구에게 적합한가

  • 오프라인, 프라이버시 보호형 음성 제어를 원하는 홈오토메이션 애호가.
  • 홈어시스턴트의 사용자 정의 음성 어시스턴트를 개발하고, 노출한 엔티티 이름을 정확히 이해할 수 있는 인식기가 필요한 개발자.
  • 명령어 집합이 제한적일 때 클라우드 기반 음성-텍스트의 가벼운 대안을 찾는 사람.

링크

  • 애드온 배지 – 홈어시스턴트 Supervisor에서 빠르게 설치 가능.
  • Docker 이미지 – rhasspy/wyoming-speech-to-phrase.
  • 홈어시스턴트 인텐트 리포지토리 – 새로운 리라이트 버전의 문장 템플릿 원천.
  • Rhasspy 백서 – FST 컴파일 기반 기술.
  • 이슈 #149 – 언어 지원 및 마이그레이션 세부 정보 추적.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트