#2 음성인식 이해

2019. 8. 10. 13:52 개발 이야기/머신러닝(딥러닝)

 

먼저 음성인식을 이해하기위해 오디오 스펙의 이해를 알고 와야한다.

 

초반의 음성인식은 단어 위주의 음성인식이었다.

 

기억하는 사람이 있을지는 모르겠지만

 

배우 안성기 씨가 연기하는 CF에서 본부에게 전화!

 

이렇게하면 전화가 걸렸던 광고가 있었다.

 

출처 : https://blog.ncsoft.com/%EA%B2%8C%EC%9E%84%EA%B3%BC-ai-6-%EC%9D%8C%EC%84%B1-%EC%9D%B8%EC%8B%9D-%EA%B8%B0%EC%88%A0/

 

이런 광고인데 그때 당시의 기술은 단순 단어인식에서 끝이 났다면

 

현재의 음성인식은 어떠한가?

 

거의 AI 머신과 대화도 가능할 만큼 발전했고

 

문장도 이해하는 수준으로 발전했다.

 

도대체 어떤 원리로 이런 것들이 가능해진 것일까?

 

순서대로 알아보자.

 

자 우선, 우리가 어렸을 때 배웠던 것처럼..

 

우리가 공부할 자습서들을 모은다.

 

꼭 다보지도 못할꺼면서 우리는 많은 양의 자습서를 구매했고 옆에 쌓아뒀다.(나만?)

 

공부할 자습서는 어떻게 모으는가? 

 

 

http://www.openslr.org/40/

 

openslr.org

Zeroth-Korean Identifier: SLR40 Summary: Korean Open-source Speech Corpus for Speech Recognition by Zeroth Project (https://github.com/goodatlas/zeroth) Category: Speech Corpus for Automatic Speech Recognition License: Attribution 4.0 International (CC BY

www.openslr.org

http://www.aihub.or.kr/

 

AI 오픈 이노베이션 허브

AI 챗봇,안면인식 등 지능형 서비스 구현에 활용할 수 있는 지식베이스와 기계학습용 이미지 데이터를 제공합니다.

www.aihub.or.kr

이런 곳에 가면 무료로! 연구 목적으로 조용한 곳에서 녹음하고,

녹음한 음성과 맞는 대본을 함께 올려서 공유하는 곳이 있다.

 

이런 음성과 더불어 웹 크롤링, 유튜브 등에서 음성을 수집하고 

 

그에맞는 대본을 수집해서 모아둔다.

 

물론 잔뜩 모아야한다.

주의해야하는 것은 노이즈 혹은 BGM이 있으면 좋은 결과를 맺기가 힘들어지기 때문에

 

그런부분은 모두 제거하는 것이 좋다(노이즈, BGM 제거는 추후에 이야기를 다룰 예정)

 

이렇게 모은 데이터를 

음성인식 과정 ->

컴퓨터에게 학습을 ->

머신러닝 과정에 맞게

 

필요에 맞게 수정을한다.

 

이를 텍스트 전처리라고 한다

 

텍스트 전처리는 특수문자를 제거하고 띄어쓰기나 "(쌍따옴표)등을 이용해서 토큰화한다. 

예를들어

````````````````````````````````````````````````````````````````````````````````````

"텍스트" "전처리는" "특수문자를" "제거하고"  "띄어쓰기나" "쌍따옴표" "등을" "이용해서" "토큰화한다"  

````````````````````````````````````````````````````````````````````````````````````

이런식으로

 

그리고 난 후

어간 표제어 추출을 한다.

 

기본 사전형단어 쯤으로 이해를 하면 되겠다

 

````````````````````````````````````````````````````````````````````````````````````

텍스트, 전처리, 특수문자, 제거, 띄어쓰기, 이용, 토큰화

````````````````````````````````````````````````````````````````````````````````````

 

 그리고 불용어를 제거하는데 불용어는 사용하지 않는 단어이다.

표제어 추출 후에 단어들을 봤을 때 잘 사용하지 않는 단어는 불용어로 제거하게 되는데

 

보통 이런경우에는 사용자가 직접 불용어 사전을 만들어서 제거하는 경우가 많다.

 

이후에는 단어 분리를 하는데 단어 분리는

 

하나의 단어에 의미있는 여러 단어 조합으로 구성된 경우가 많기 때문에

 

의미를 갖는 최소 단어로 나누는 과정이다

 

````````````````````````````````````````````````````````````````````````````````````

텍스트, 전, 처리, 특수, 문자, 제거, 띄어, 쓰기, 이용, 토큰화

````````````````````````````````````````````````````````````````````````````````````

 

이렇게 나눠서 컴퓨터에게 오디오파일과 함께 공부를 시켜준다.


공부를 어떤식으로 하게되나 ? 

 

이런 파형이 "안녕하세요"의 파형이라면

 

컴퓨터는 수없이 많은 데이터를 이렇게 매핑을 시킨다

 

이 정도 파형이면 안녕하세요.

 

다른 파형이면 그 파형의 대본과 매칭을 시켜서 계속해서 공부를 하게된다.

 


 

자, 그럼 모든 것이 끝나느냐? 어떤 원리로 공부를 시켜줘야 하나?

 

기존의 언어 모델은 확률을 기반으로한 

확률 언어 모델이다.

 

조금은 어려운 이야기가 될 수 있지만!

 

쉽게 설명을 하자면!

I am a boy!

I 다음에 am 이 나올 확률

she is cute

she 다음에 is가 나올 확률

P(“An adorable little boy is spreading smiles”) 
=P(An) × P(adorable|An) × P(little|An adorable)
× P(is|An adorable little) × P(spreading|An adorable little is)× 
P(smiles|An adorable little is spreading)

 

그럼 생각보다 쉽겠는데? 라고생각할 수 있다.

 

하지만 한국어는?

가다.

가고있다

가는 중이다

.

..

.....

무수히 많은 연관성을 가진 단어들이 존재한다

(내가 언어학자가 아니다보니 표현이 좀 어렵다!)

하지만 현실에서는 거의 count 기반의 접근을 하고 있고

 

언어를 수집한 언어 뭉치(코퍼스)에서 존재하는 확률을 기반으로 하고 있다

그렇기 때문에 많은 수의 데이터가 있는 것이 좋다.

 

이런 한국어 표현 문제를 위해 한국어는 

N-grams라는 언어모델을 사용한다.

 

N-grams 모델은


n-gram 언어 모델은 여전히 카운트에 기반한 통계적 접근을 사용하고 있으므로 SLM의 일종입니다. 다만, 앞서 배운 언어 모델과는 달리 이전에 등장한 모든 단어를 고려하는 것이 아니라 일부 단어만 고려하는 접근 방법을 사용합니다. 그리고 이때 일부 단어를 몇 개 보느냐를 결정해야하는데 이것이 n-gram에서의 n이 가지는 의미입니다.

 

N-gram의 수식

 

이런식으로 음성과 말뭉치를 매핑시켜놓고 언어 모델을 만들어 놓은다.

 

내가 사용하는 툴은 trigram에서 더 나아가 forgram(문장으로 분석)을 이용한다.

 

자, 그럼 이렇게 만들어 놓은 언어 모델을

 

어떻게 읽어드릴까?(디코딩할까?)

 

여러가지 방법이 있지만 이렇식으로 발전을 해왔다.

sktelecom 트랙1-6.음성-인터페이스의-진화.pdf

 

FSN 에서 Lexcical tree를 지나 유한 오토마타 같이 생긴 wFST을 사용하고 있다.

 

wFST는 문법, 발음 사전, 문맥의존 음향 모델, HMM으로부터 하나의 통합된 트랜스듀서를 생성하고, 렉시컬 트리에서와 마찬가지로 확률이 가장 높은 결로를 찾고 이 결로로부터 최종적인 인식 단어열을 얻게 된다

잘은 몰라도! 

| | | |

wFST 방식으로 좀 더 성능과 인식 속도 면에서 업그레이드가 되었다.

이것만 알면된다! 좋아졌다 !

 

 

문장 단위로 학습하는데 최적화되어 속도와 인식률을 향상시켜 음성 인식에 적합한 기술이다.

sk telecom 트랙1-6.음성-인터페이스의-진화.pdf

 

이런 기술들이 조합을 이루어 음성인식을 할 수 있게 된다.

컴퓨터에게 글을 가르치는 것이 여간 어려운 것이 아니다.

 

전에 말했듯 컴퓨터는 엄청 바보이기 때문에 컴퓨터에게 무엇을 가르치려면 

수많은 천재들이 이런 기술과 이론을 만들어서 학습을 시켜야한다.

 

 

 

다음에는 수많은 천재들이 많들어 놓은

 

wFST 기반의 음성인식 툴 KALDI를 이용해서 

 

어떻게 러닝을 시키는지 초기 환경 구축부터 모두 다뤄보겠다.