Kaldi Tutorial for Korean Model Part 3

이미지
Kaldi Tutorial for Korean Model Part 3 Image source 칼디로 한국어 음성인식 구현하기 파트 3 본 튜토리얼은 칼디를 막 시작하는 초보자들을 대상으로 하고 있으므로 칼디를 어느정도 공부하신 분들에게는 적합하지 않을 수 있습니다. 모든 설명은 다음 깃헙 에 올려진 run.sh 스크립트를 기준으로 진행되면 추가적으로 궁금한 사항은 칼디 공식 홈페이지 나 칼디 구글 헬프 를 이용하길 바랍니다. 본 튜토리얼에서 사용하는 스크립트는 맥과 리눅스(우분투) 환경에서 준비해왔기 때문에 그 외에 환경 (예: 윈도우)에서는 제대로 진행되지 않을수도 있습니다. 따라서 다소 불편하시더라도 이 부분은 최대한 맞춰주시고 튜토리얼을 진행하여 주시기 바랍니다. 튜토리얼에 사용되는 튜토리얼용 서울말 낭독체 코퍼스는 다음 링크 를 통해 받으실 수 있으며, 튜토리얼 진행 도중 훈련에 필수적인 파일들이 제대로 생성되지 않을 상황에 대비해서 몇개의 파일을 미리 생성하여 준비하였으니 필요한 데이터는 그때마다 다운 받으시고 계속해서 진행해 나가시면 되겠습니다. 궁금한 사항이 있으실 경우 개인적인 메일을 보내시기 보다는 아래에 댓글을 다셔서 대부분의 질문이 이 튜토리얼을 보는 모든 분들과 공유되게 해주시기 바랍니다. 데이터 준비 - Data Preparation krs_prep_data.sh 파트 2에서 여러가지 변수들을 셋팅하고 run.sh 훈련을 진행한다면 처음으로 data preparation 단계를 진행하게 된다. 본 단계에서는 krs_prep_data.sh를 실행하고 text, utt2spk, spk2utt, wav.scp, 와 segments 파일을 생성하는데, 이 파일들에 대해서는 파트 1에서 자세히 다루었기 때문에 여기서는 이에 대한 설명을 생략하겠다. 언어 모델 생성 - Language Modeling krs_prep_dict.sh 데이터 준비가 끝났다면 ...

Kaldi Tutorial for Korean Model Part 4

이미지
Kaldi Tutorial for Korean Model Part 4 Image source 칼디로 한국어 음성인식 구현하기 파트 4 본 튜토리얼은 칼디를 막 시작하는 초보자들을 대상으로 하고 있으므로 칼디를 어느정도 공부하신 분들에게는 적합하지 않을 수 있습니다. 모든 설명은 깃헙 에 올려진 run.sh 스크립트를 기준으로 진행되며 추가적으로 궁금한 사항은 칼디 공식 홈페이지 나 칼디 구글 헬프 를 이용하길 바랍니다. 본 튜토리얼에서 사용하는 스크립트는 맥과 리눅스(우분투) 환경에서 준비해왔기 때문에 그 외에 환경 (예: 윈도우)에서는 제대로 진행되지 않을수도 있습니다. 따라서 다소 불편하시더라도 이 부분은 최대한 맞춰주시고 튜토리얼을 진행하여 주시기 바랍니다. 튜토리얼에 사용되는 튜토리얼용 서울말 낭독체 코퍼스는 다음 링크 를 통해 받으실 수 있으며, 튜토리얼 진행 도중 훈련에 필수적인 파일들이 제대로 생성되지 않을 상황에 대비해서 몇개의 파일을 미리 생성하여 준비하였으니 필요한 데이터는 그때마다 다운 받으시고 계속해서 진행해 나가시면 되겠습니다. 궁금한 사항이 있으실 경우 개인적인 메일을 보내시기 보다는 아래에 댓글을 다셔서 대부분의 질문이 이 튜토리얼을 보는 모든 분들과 공유되게 해주시기 바랍니다. Monophone Training and Decoding steps/train_mono.sh 음향모델을 만들기 위한 첫 단계가 바로 monophone 훈련인데, 이곳에서는 우리가 준비한 오디오와 텍스트 파일을 이용해서 각 개별 음소에 대한 확률값을 훈련한다. 참고로 훈련에 사용하는 음소들은 연구자의 주관에 따라 그 개수와 모양이 달라질 수 있으며, 현재 본 튜토리얼에서는 총 195개의 음소를 사용하고 있다. phones.txt는 nonsilence.txt와 silence.txt에 정의된 음소들을 모두 가져온 뒤, 그 뒤에 B, I, E, S를 붙여서 4가지 타입의 음소를 새롭게 생성...

Kaldi Tutorial for Korean Model Part 2

이미지
Kaldi Tutorial for Korean Model Part 2 Image source 칼디로 한국어 음성인식 구현하기 파트 2 본 튜토리얼은 칼디를 막 시작하는 초보자들을 대상으로 하고 있으므로 칼디를 어느정도 공부하신 분들에게는 적합하지 않을 수 있습니다. 모든 설명은 다음 깃헙 에 올려진 run.sh 스크립트를 기준으로 진행되면 추가적으로 궁금한 사항은 칼디 공식 홈페이지 나 칼디 구글 헬프 를 이용하길 바랍니다. 본 튜토리얼에서 사용하는 스크립트는 맥과 리눅스(우분투) 환경에서 준비해왔기 때문에 그 외에 환경 (예: 윈도우)에서는 제대로 진행되지 않을수도 있습니다. 어차피 칼디를 진행하기 위해서는 리눅스 환경이 갖춰져야 하기 때문에 이 부분은 불편하시더라도 최대한 맞춰주시고 튜토리얼을 진행하여 주시기 바랍니다. 튜토리얼에 사용되는 튜토리얼용 서울말 낭독체 코퍼스는 아래 링크를 통해 받으실 수 있으며, 튜토리얼 진행 도중 훈련에 필수적인 파일들이 제대로 생성되지 않을 상황에 대비해서 몇개의 파일을 미리 생성하여 준비하였으니 필요한 데이터는 그때마다 다운 받으시고 계속해서 진행해 나가시면 되겠습니다. 궁금한 사항이 있으실 경우 개인적인 메일을 보내시기 보다는 아래에 댓글을 다셔서 대부분의 질문이 이 튜토리얼을 보는 모든 분들과 공유되게 해주시기 바랍니다. 훈련 진행하기 파트 1을 진행했다면 kaldi로 음성인식을 구현하기 위해 기본적으로 필요한 데이터와 필수자료에 대한 이해가 어느정도 진행되었다고 할 수 있다. (만약 파트 1에 대한 이해가 완료되지 않았다면 파트 1에 대한 이해 및 준비가 확실히 끝나기 전까지 이번 파트 2로 넘어오지 않기를 바란다.) 이제는 주어진 run.sh을 차근차근 보면서 훈련을 진행해 나갈 것이다. 기본적인 변수 설정하기 훈련을 진행하기 전 기본적으로 설정해야하는 변수에 대해 살펴보자. 변수들 중 굵게 표시된 것들은 필요에 따라 수정이 필요한 것...

Bagging

이미지
Bagging 본 포스팅은 고려대학교 강필성 교수님의 Business Analytics 수업의 내용과 수업자료를 참고하여 작성하였습니다. Introduction 배깅(bagging)은 앙상블 기법에서 주로 사용되는 방식으로, 분류(classification)와 회귀(regression) 문제를 다루기 위해 사용되는 기계학습 혹은 여타 다른 학습(e.g., SVM, decision tree)에서의 정확도와 안정성을 향상시키기 위해 고안된 훈련 방식이다. 배깅은 데이터를 랜덤하게 선별하여 준비하는 Bootstrapping 단계와 그 선별된 데이터로 훈련한 뒤 모델의 결과를 합쳐나가는 Aggregation의 단계로 나눌 수 있다. Algorithm Structure [그림 1] 전체 N개의 데이터 셋을 이용하여 훈련을 진행하는 과정 중 Bootstrapping과 Aggregation이 적용되는 단계를 나타낸다. Bootstrapping은 데이터를 분할하고, Aggregation은 모델 예측값을 취합한다. Bootstrapping Bootstrapping은 모든 데이터 N개를 훈련에 사용하기 전, 랜덤하게 k개의 소규모 셋으로 분할하여 준비하는 작업을 의미한다. (각 훈련데이터는 input x와 output y로 한쌍을 이룬다.) 예를들어 총 15개의 데이터셋(N=15)이 있다고 할 때, 이를 3개의 소규모 셋(k=3)으로 분할할 수 있으며 이 때, 각 소규모 셋에 들어가는 데이터들은 전체 데이터 셋에서 독립적으로 5개씩 랜덤하게 추출하게 된다. 따라서 각기 다른 소규모 셋에 중복된 데이터 셋이 존재할 수도 있으며 전체 소규모 셋에 한번도 등장하지 않는 데이터 셋도 존재할 수 있다. 다음의 애니메이션을 통해 bootstrapping 과정을 살펴볼 수 있다. [그림 2] 총 15개의 데이터를 이용하여 bootstrapping하는 과정을 보여준다. Aggregation Aggregation은 k...

Kaldi Tutorial for Korean Model Part 1

이미지
Image source 칼디로 한국어 음성인식 구현하기 파트 1 본 튜토리얼은 칼디를 막 시작하는 초보자들을 대상으로 하고 있으므로 칼디를 어느정도 공부하신 분들에게는 적합하지 않을 수 있습니다. 모든 설명은 다음 깃헙 에 올려진 run.sh 스크립트를 기준으로 진행되면 추가적으로 궁금한 사항은 칼디 공식 홈페이지 나 칼디 구글 헬프 를 이용하길 바랍니다. 본 튜토리얼에서 사용하는 스크립트는 맥과 리눅스(우분투) 환경에서 준비해왔기 때문에 그 외에 환경 (예: 윈도우)에서는 제대로 진행되지 않을수도 있습니다. 어차피 칼디를 진행하기 위해서는 리눅스 환경이 갖춰져야 하기 때문에 이 부분은 불편하시더라도 최대한 맞춰주시고 튜토리얼을 진행하여 주시기 바랍니다. 튜토리얼에 사용되는 튜토리얼용 서울말 낭독체 코퍼스는 아래 링크를 통해 받으실 수 있으며, 튜토리얼 진행 도중 훈련에 필수적인 파일들이 제대로 생성되지 않을 상황에 대비해서 몇개의 파일을 미리 생성하여 준비하였으니 필요한 데이터는 그때마다 다운 받으시고 계속해서 진행해 나가시면 되겠습니다. 궁금한 사항이 있으실 경우 개인적인 메일을 보내시기 보다는 아래에 댓글을 다셔서 대부분의 질문이 이 튜토리얼을 보는 모든 분들과 공유되게 해주시기 바랍니다. 데이터 준비 서울말 낭독체 데이터 구하기 훈련을 하기 위해 먼저 데이터를 준비해야 한다. 우리는 국립국어원에서 제공하는 서울말 낭독체를 이용해서 실험을 진행할 것이다. 따라서 다음 링크 에서 “small_krs” 폴더를 먼저 받기를 바란다. 혹시 전체 데이터를 다운 받아 훈련을 진행하고자 한다면 다음 링크 를 통해 국립국어원으로 접속하여 공지사항을 확인한 후 데이터를 받으면 되겠다. 본 훈련의 빠른 진행을 위해 정제된 데이터를 제공해 주었지만 데이터를 훈련하는 것 만큼이나 중요한 것이 바로 잘 정제된 데이터를 준비하는 것이다. 정제 이전의 서울말 낭독체는 꽤나 많은 수 작업을 필요로 하기에 미리 데이터를 잘 정리하는 작업...

Speech2face Instruction

이미지
Notice This instruction is mainly written for the NAMZ & EMCS members. Therefore, the other users who would like to duplicate this tutorial might experience unexpected errors. System Settings Mac OSX(Sierra) Matlab Speech2face Introduction Speech2face is a plotting tool that visualizes dynamic lips movement in real time. This is trained with deep neural network which receives speech signals as inputs to predict lip parameters (as outputs). (Speech2face will be updated to visualize whole face movement.) By uttering a few sentences, the speaker is able to receive instantaneous feedback of his or her lip movement from the machine. Pronouncing /a/,/o/,/i/ Install Feature Extractors Go visit this github and download speech2face to your local computer. We will use ‘FaceTracker’ and ‘OpenFace’ toolkit in order to retrieve 3 types of data: images, raw.pcm(audio file), and parameters.txt (pts data). Two toolkits are already donwloaded and manipulated for the...

Korean Forced Aligner: 한국어 자동강제정렬

이미지
Korean Forced Aligner: 한국어 자동강제정렬 음성정렬은 음성데이터를 정제하는 작업으로 언어를 공부하는 연구자라면 한번 쯤 들어보거나 직접 정렬해본 경험이 있을 정도로 언어학자에게 친숙한 단어이다. 오늘은 언어학 연구에 자주 사용되는 음성정렬 작업을 자동으로 편리하게 강제정렬 해주는 자동강제정렬에 대해 이야기 하고자 한다. 음성정렬 음성정렬은 음성자료와 그 음성자료를 전사한 텍스트 파일을 이용하여 문장을 음소 단위(소리에서 가장 작은 단위. e.g., /p/, /t/)나 어절(띄어쓰기로 나눠진 한 토막. e.g., ‘나는’, ‘사과를’, ‘먹었다’)단위로 나누는 작업을 말한다. 아래 ‘수도’ 라는 단어를 통해 간단히 음성정렬에 대해 알아보자. 위 그림처럼 수도라는 단어에 대해서 음성파일과 음소 전사파일을 가지고 있으면 음성정렬준비는 끝났고, 이제 이 단어에 존재하는 각 음소의 시작과 끝 구간을 결정하여 잘라내면 음성정렬이 끝난다. (개념자체는 쉽다.) 현재 그림상에서 나타나는 음소는 총 4개 (s0, uu, t0, oo)니까 이들을 잘라주는 4개의 줄을 그리면 된다. 따라서 음성정렬에 대한 결과는 다음과 같을 것이다. 정렬시 고려할 사항 음소셋 정하기 정렬을 진행하기 전, 먼저 데이터 파일을 정렬할 음소 개수 및 표기법을 정해야한다. 우선 각 언어마다 존재하는 근본적인 음소셋을 모은 다음, 연구자의 주관에 따라 음소셋에 변이형을 생성 시키면서 음소셋을 구성하면 된다. 예를 들어, 한국어 음성정렬을 위해 한국어 음소셋을 구성한다고 하면 /a/라는 근본적으로 한국어에 존재하는 모음을 정하고, 이 모음이 단어 처음에 시작될 경우와 단어 마지막에 나타나는 경우로 세밀하게 나누어 음성정렬을 하고싶다면 다음과 같이 /a0/, /a1/ 음소셋을 구성할 수 있을 것이다. 다음은 2015년에 (연구목적 시 무료) 배포 된, 한국어 자연발화 코퍼스에서 사용한 음소셋이다. 정렬시 객관...