Tech Study/ASR/STT2020. 4. 1. 02:38

직전 포스트인 CMUSphinx 구동기 를 통해서 만족할만한 결과물을 얻었기 때문에 더 조사가 필요할까 했었다. 하지만, 이번 조사를 통해 왜 CMUSphinx가 4년 전에 중단되었는지를 짐작해 볼 수 있었다. 그리고, 음성인식에 딥러닝이 가미되면 어떤 상승효과가 일어나는지도 확인할 수 있었다.

 

 

Overview

Mozilla DeepSpeech는 중국 바이두 연구소의 Baidu DeepSpeech를 모태로 한 오픈소스 음성 인식 엔진이다. 소스 코드가 모태는 아니고, 기계학습 모델 논문을 참고한 것이다. 논문의 분량이 레퍼런스를 빼면 10페이지 남짓 밖에 안되는데, 이런 엄청난 결과물의 근간이 된다니 참으로 놀라울 따름이다.

기계학습 엔진으로는 TensorFlow를 활용하였고, 결국 텐서플로의 걸출한 활용 사례 중 하나가 되었다.

엔진 코드는 C/C++로 구현되어 있다(당연하다). 때문에 C/C++은 완벽히 연동되고, 초고급 언어 역시 메이저(nodejs, python) 쪽은 이미 패키지 매니저를 통해 이용 가능하다. GO, Rust 같은 언어 지원도 별도 프로젝트로 진행하고 있는 듯 하다.

 

Site

https://github.com/mozilla/DeepSpeech

사이트를 들어가보면 Kaldi 못지 않은 거대한 규모에 쫄게 된다...지만, 차근차근 살펴보면 CMUSphinx 처럼 매우 친절하게 가이드해 주고 있다는 걸 알 수 있다. 우선 Nodejs와 Python은 이미 패키지 매니저가 지원되기 때문에 정말 쉽다. 모델하고 오디오 정도 받으면 바로 구동해 볼 수 있다.

본인의 목표인 윈도 & C++ 바인딩도 사실 상 쉽다. 2020년 3월 31일 기준 스테이블 버전인 아래 릴리즈를 받기만 하면 된다.

https://github.com/mozilla/DeepSpeech/releases/tag/v0.6.1

 

Logo

아쉽게도 로고는 커녕 이미지 파일 하나 찾을 수 없었다. 그래서, DeepSpeech의 학습 데이터 수집 사이트인

https://voice.mozilla.org/ko

요 Common Voice라는 사이트에서 하나 긁어왔다.

 

The name DeepSpeech

이 역시 어원을 찾을 수는 없었다. 그 저 이름에 유추해 볼 수 있는 게, speech를 deep하게 들여다 본다... 뭐 이렇게 해석되려나...

 

Build

깃헙에 빌드 과정 역시 상세하게 설명되어 있다. 그렇지만, 그럴 필요는 없다. 상용 수준의 프로젝트를 진행할 것이 아니라면 이미 릴리즈된 프리빌드 라이브러리 및 바이너리를 이용하면 된다.

https://github.com/mozilla/DeepSpeech/releases/tag/v0.6.1

이 릴리즈 페이지에서 자신에게 필요한 걸 골라 받으면 된다. 만약, 패키지 매니저가 잘되어 있는 초고급 언어(파이썬, 노드 등)를 이용한다면 훨씬 더 수월하다.

엔진 레벨 디버깅이나 커스터마이징 등이 필요하다면, 조금 어렵지만 아래 사이트의 가이드를 따라가 보시길 바란다.

https://github.com/mozilla/DeepSpeech/tree/master/native_client

 

Installation - Windows

설치라기 보단 C++용 바이너리를 다운 받아서 테스트를 한 번 해 봤다.

우선 실행 파일을...

https://github.com/mozilla/DeepSpeech/releases/download/v0.6.1/native_client.amd64.cpu.win.tar.xz

그 다음, 훈련된 언어 모델을 받는다. 미국인 영어 모델이고, 용량이 1GB로 후덜덜하며, 물건너 와야 하기 때문에 다운 받는데 시간이 좀 걸릴 것이다. 커피 한잔 추천 드림.

https://github.com/mozilla/DeepSpeech/releases/download/v0.6.1/deepspeech-0.6.1-models.tar.gz

예제 오디오 데이터도 받는다.

https://github.com/mozilla/DeepSpeech/releases/download/v0.6.1/audio-0.6.1.tar.gz

만약, 다른 음성 파일이 있다면 그걸 써도 되는데, 포맷은 wav, 스펙은 [모노/16비트/16000Hz] 이어야 한다. 왜냐하면 위 훈련 모델이 그 스펙이라서 그런다나?

 

받은 파일들을 적당히 압축을 푼다. 참고로 나는 아래와 같이 놓았다.

deepspeech	// 실행 파일 폴더
└ audio		// 오디오 폴더
└ models	// 훈련 데이터 모델 폴더

 

간단히 실행을 해보았다.

D:\deepspeech> deepspeech --model models\output_graph.pbmm --audio audio\2830-3980-0043.wav

 

 

Hello, World & Consideration

아래의 깃헙 링크를 보면 위에서 구동해 본 실행 파일의 소스 코드를 볼 수 있다.

https://github.com/mozilla/DeepSpeech/blob/master/native_client/client.cc

이 파일을 참고해서 나만의 헬로월드 프로그램을 만들어 보았다.

deepspeech-exam-jman.7z
4.36MB

VS2017 콘솔 앱이고, 편의 상 딥스피치 엔진까지는 같이 묶어 놓았다. 동봉된 음성 파일은 위키피디아에서 아래 문장을 발췌해서 구글의 TTS를 태우고 그것을 녹음한 것이다.

A compiler is a computer program that translates computer code written in one programming language into another language.

 

실행 결과는 아래와 같다.

완벽하지는 않지만 문장을 이해하는데 문제는 없었다.

 

비교를 위해 직전 포스트에 본인이 제작한 CMUSphinx 실습 프로그램을 돌려 보았다.

 

수행 결과를 표로 만들어 비교해보자.

원문 A compiler is a computer program that translates computer code written in one programming language into another language.
DeepSpeech a compliler is a computer programme that translates computer code written in one programming language into another language
CMUSphinx but and tyler is taken care program that translate computer code or in a white programming language into another language

 

보시다시피 딥스피치는 상당히 정확한 인식도를 보여주었는데 반해, 스핑크스는 (문맥은 이해되지만)다소 엉뚱한 인식 결과를 나타내었다. 좀 더 자세히 들여다 보면 스핑크스인식이 잘 안되면 어떻게든 영어 단어에 끼워 맞추려고 한 것 같고, 딥스피치는 글자 단위로 인식을 한 것 같이 보인다. 때문에 단어 내의 특정 글자가 인식이 잘 안돼도 종합해보면 의미 있는 단어로 완성되는 것이다.

뭐... 언뜻 보면 기술적으로는 딥러닝이 더 우수하다 할 수도 있겠지만, 이 분야의 문외한인 내가 함부로 어떤 결론을 내릴 수는 없겠다.

단, DeepSpeech가 CMUSphinx 보다 성능이 우수한 것은 확실한 것 같다. 구현 상의 사용법도 DeepSpeech 역시 상당히 쉽기 때문에 현재까지는 DeepSpeech가 단연 최고의 솔루션이 되시겠다.

Posted by JMAN