Tech Study/ASR/STT2020. 4. 14. 13:25

 

들어가기에 앞서...

직전 포스트에서 CMUSphinxDeepSpeech의 비교를 통해 세상을 넓고 음성인직엔진은 많다는 사실을 새삼 깨달았다. 사실, CMUSphinx가 적당히 기능하는 듯 하여 서베이에 대한 추진력을 잃어가고 있던 와중에, 혹시나 하는 마음으로 돌려 본 DeepSpeech는 다시금 의지를 불태울 수 있게 만들었다. 그 의지의 발로가 바로 이 포스트이다.

 

Overview

Julius는 일본의 리 아키노부 교수께서 교토대학에서 대학생 신분이던 1991년부터 현재까지 무려 30년 가량을 꾸준히 연구개발 중인 프로젝트이다. (중반 이후부터는 팀을 꾸려 연구개발을 한 것으로 보인다.)

프로젝트 초중기에는 CMUSphinx과 유사하게 음성인식을 위한 일반적인 기술과 전통적인 기계학습 방식으로 개발이 되어 CMUSphinx와 유사한 (답보)상태의 인식률을 보였으나, 후반기에 DNN(Deep Neural Network)을 통한 딥러닝을 접목하게 되었는데, 이 때 부터 인식률에 극적인 변화가 일어난 것으로 보인다.

이 번 리뷰를 통해 DNN 적용 버전과 미적용 버전을 비교하는 시간도 가져 볼 것이니 흥미롭게 보아도 될 듯.

딥러닝을 위해 자체 엔진을 개발했는지 외부 라이브러리를 썼는지는 아직 알아보지 못했다.

지원되는 언어는 현재로서는 C/C++ only 인 것 같다. 2000년대 초반에는 Microsoft SAPI와 SALT를 지원하여 자바스크립트와 C#을 이용할 수 있었던 것 같은데 현재까지 관리가 되고 있는 것 같지는 않아서 확실히 지원한다고 볼 수 있는 언어는 C/C++ 뿐이다.

언어 모델은 원래 일본어만 지원했었는데, 다행히도 2018년부터 영어도 지원한다. 언어 독립 엔진임에도 훈련 데이터 수집이 쉬운 자국 언어 모델만 구축했던 것 같고, 모질라 재단의 도움으로 영어 훈련 데이터를 지원 받아 모델을 만들 수 있었다고 한다.

 

Site

http://julius.osdn.jp/en_index.php

이 사이트가 메인 사이트이긴 한데 2014년 이후로 copyright 업데이트가 안되고 있는 것으로 보아 방치된 듯 하다.

대신,

https://github.com/julius-speech/julius

현재는 이 깃헙이 실질적인 메인 사이트이다.

 

Logo

메인 사이트 상단에 로고 같은 이미지가 있어서 링크하였다. 뭐 대충 흘겨 봐도 마이크 모양 :]

 

The name Julius

이 유니크해 보이는 이름의 유래는 쉽게 찾을 수 있었다.

https://ko.osdn.net/projects/julius/downloads/47534/Juliusbook-4.1.5.pdf/

가이드북에 따르면 Julius는 설마했던 그 로마 시대의 "Julius Caesar"를 지칭하는 것이었다. 왜 그인가 했더니, 그는 유명한 독재자였는데 독재자를 지칭하는 영어 단어 중에 'dictator' 가 있다. 이 단어가 또 같은 맥락으로 자기 말을 받아쓰게 하는 사람이라는 뜻인데, 여기까지 설명하면 저절로 감이 오시리라. 개발자의 위트와 센스에 무릎을 탁~

 

Installation - Windows

공식 페이지 상 마지막 릴리즈인 4.3.1(14년 1월)을 받고 언어 모델도 어찌어찌 찾아서 받고 하면 바로 실행해 볼 수 있지만, 인식률이 많이 아쉬운 상태가 되므로, 최신 버전을 이용해야 한다.

 

깃헙에 들어가보면 2019년 1월 3일 자 4.5 버전을 받을 수 있다.

https://github.com/julius-speech/julius/releases

공식 릴리즈를 받고 나서 깃헙 메인의 Readme.md 가이드를 따라 설치 및 구동을 해보면...

동작이 안된다!!!

왜그런가 한참을 헤매다가 Readme.md 는 최신 상태의 가이드이고, 공식 릴리즈는 최신 버전이 아니라는 것을 알았다. 즉,

latest 프로젝트를 클론하고 직접 빌드를 해야 한다.

 

Building - Windows

최신 버전을 만끽하기 위해 빌드를 돌리기로 했다. (간만에 상당한 삽질을...)

 

우선

https://github.com/julius-speech/julius

여길 클론한다.

 

클론한 디렉토리에 들어가면 'msvc' 폴더가 보인다.(너무 좋다.) 거기서 JuliusLib.sln 을 연다. 해당 sln은 VS 2013 용이므로, 그 이상의 버전이 설치되어 있어야 겠지?

나는 VS 2019를 사용하고 있으므로, retarget을 했다. 컴파일은 어떤 버전에서도 잘되니 부담없이 리타겟해도 된다.

이 상태에서 그대로 빌드해도 빌드는 잘된다.

 

하지만, 이 executable을 가지고 실행을 해보면

에러를 맞는다.

 

뭔가 옵션을 줘야 하는데 에러 메시지의 가이드는 리눅스 계열 용이다. MSVC는 다른 방법으로 옵션을 넣어야 한다.

이 걸 찾기 위한 나의 수고는 뒤로 하고 아래처럼 수정한다.

libsent의 config-msvc-libsent.h 에서 WORDS_INT 를 #define 해주도록 수정한다.

 

이렇게 수정하고 다시 빌드하면 빌드도 잘되고 실행도 잘된다.

 

Installation Again - Windows

앞 섹션의 빌드 결과를 들고 정말 설치/구동을 해보도록 한다. 깃헙 가이드를 잘 따라가면 된다.

 

우선, 아래 사이트에서 영어판 언어 모델을 받는다.

https://sourceforge.net/projects/juliusmodels/files/ENVR-v5.4.Dnn.Bin.zip/download

적당한 곳에 압축을 푼다.

 

언어 모델 내의 dnn.jconf 를 수정해야 한다. 가이드에는 디프패치로 설명을 했는데, 수정한 파일을 올려 둔다.

dnn.jconf
0.00MB

 

dnn.jconf 를 수정하고 나서,

직접 빌드했던 julius.exe 를 이 디렉토리로 가져 온다. 그리고, 커맨드창에서 아래처럼 실행을 하면 된다.

> julius.exe -C julius.jconf -dnnconf dnn.jconf

julius.jconf 는 동봉된 mozilla.wav 를 인식하도록 하는 설정 파일이다. 해당 wav는 여러 목소리가 띄엄띄엄 저장된 파일인데, 문장마다 따로따로 인식하는 걸 알 수 있을 것이다. (그야말로 continuous)

아래는 실행 과정 중 한 부분을 캡쳐한 화면이다.

 

여기서 DNN이 빠지고 GMM이 적용된 인식을 보고 싶다면 간단히 아래처럼 -dnnconf를 빼고 실행하면 된다.

> julius.exe -C julius.jconf

 

동봉된 예제 말고 다른 wav파일로 시험을 해보면 인식률에 차이가 많이 난다는 것을 알 수 있을 것이다.

 

Consideration

이전 포스트들처럼 헬로월드를 만들면 좋은데, 몇번 해보니 reinventing the wheel 같아서(라고 쓰고 귀찮아서 라고 읽...) 그냥 샘플 어플리케이션을 가지고 비교 시험을 해보았다.

누적 내용이 많아져서 아예 다른 포스트로 실제 결과들을 묶어서 리뷰하도록 하고 결론만 적어 놓겠다.

 

julius-DNN 은 인식률이 훌륭했고, julius-GMM 은 CMUSphinx와 비슷한 정도로 조금 아쉬운 결과를 나타냈다. julius-DNN 은 DeepSpeech 보다 오히려 나은 정확도를 보이는 것 같았는데, 좀 더 많은 샘플로 비교를 해봐야 할 것 같다. 유추해보자면 음성인식 분야의 전통적인 기계학습 방식보다는 딥러닝이 우월하다는 것이 점점 증명되는 듯 하다. (전통적이라는 전제 자체에 어폐가 있을지도...)

문제는 속도가 많이 느리다는 것이다. 평균적으로 DeepSpeech보다 3배 정도 느리다.

 

자세한 얘기는 너무 길어질 듯 하여 여기까지 하고, 차후 모든 캔디데이트를 구동해본 후 비교 리뷰 포스팅을 할 예정이다.

 

Posted by JMAN