Terrence J.Sejnowski and Charles R. Rosenburg (1986) 에 의해 발표된 내용이다.
이번 내용 또한 해당 논문을 읽고 요약하여 ppt로 만들었다. NETtalk의 세부적인 내용을 다루며 외부적, 하드웨어적 환경은 다루지 않는다.
설명을 하고 넘어가자면 어떤 하드웨어에 NETtalk을 구현함으로써 TTS를 상용화 시키는 방법에 대해 논한다. NETtalk은 신경망 세포(Neural Network)를 이용한 음성발음을 학습시키는 방법으로 문자로부터 음성으로 바꿔주는 방법 중 하나다.
기본적인 배경은 물론 Perceptron(이하 퍼셉트론)이며 이 아이디어의 배경은 인간의 학습방법을 모방하는 것으로 사람이 어린아이 일때는 거울뉴런을 통해 행동을 모방하고 빠르게 학습하는 한편 성장하면 할수록 이 학습력은 낮아지게 된다. 기본적인 신경망 네트워크에서 학습은 이러한 모습을 보이며, 상당한 성능을 가져오는데 퍼셉트론에서 차지하는 환경변수의 인자가 많아 기대하는 최대치를 이끌어 내는 과정이 어렵다.
(perceptron에 관한건 스탠포드 대학에서 기계학습에 대해 다뤘던 ppt를 찾아보자...!)
NETtalk - a parallel network that learns to read aloud.pptx
ppt 내용과 더불어 스크립트도 달려있으니 쉽게 읽을수 있을것이라 생각한다.
히든 레이어 및 인풋 벡터 하나하나의 weight value를 하나의 신경망으로 생각하고 벡터 하나를 신경세포로 생각하면 좀 더 이해가 쉬울것이다. 각각의 인풋에 대해 inner product를 취하는데 이는 superviser learning(지도학습)에서 lable되었던 값과 얼마나 유사한지를 따지는 것이다. 보통의 퍼셉트론이 이렇게 전개되지만 NETtalk에서는 현재 문자와 이전문자, 이후문자가 서로 연관관계가 있을것이며 발음에 영향을 미치는것을 전제로 딜레이를 이용한 학습을 하고 있다.
NETtalk - Parallel Networks that Learn to Pronounce English Text.pptx
이듬해 advance된 NETtalk 논문이다. 본 내용에서는 모음과 자음이 얼마나 발음과 관련있는가를 결과를 통해서 분석해주는 내용이 담겨있어 언어학적으로 접근할 수 있다. 흔히 언어학에서는 관련성을 알아도 명확한 결과와 수식으로 나타내기가 힘든데 이를 뚜렷하게 나타내주어 매우 흥미롭다.
퍼셉트론의 응용이 매우 다양하여 기본적으로 해당 신경망에 대해 알면 여러모로 쓸만하다.
나도 싱글 레이어 퍼셉트론과 멀티 레이어 퍼셉트론을 구현해보았는데 코드를 공개하기에는 아직 미숙한것 같아 좀 더 깔끔하게 정리되면 Java 카테고리에 jar파일이나 소스코드를 전부 공개하겠다.
(Input은 물론 조정해야 할 것이며 interface를 통해 각 모듈 및 매개변수를 조절할 수 있도록 하겠다)