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

enter image description here


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


음성정렬은 음성데이터를 정제하는 작업으로 언어를 공부하는 연구자라면 한번 쯤 들어보거나 직접 정렬해본 경험이 있을 정도로 언어학자에게 친숙한 단어이다. 오늘은 언어학 연구에 자주 사용되는 음성정렬 작업을 자동으로 편리하게 강제정렬 해주는 자동강제정렬에 대해 이야기 하고자 한다.

음성정렬


  • 음성정렬은 음성자료와 그 음성자료를 전사한 텍스트 파일을 이용하여 문장을 음소 단위(소리에서 가장 작은 단위. e.g., /p/, /t/)나 어절(띄어쓰기로 나눠진 한 토막. e.g., ‘나는’, ‘사과를’, ‘먹었다’)단위로 나누는 작업을 말한다. 아래 ‘수도’ 라는 단어를 통해 간단히 음성정렬에 대해 알아보자.


    enter image description here

  • 위 그림처럼 수도라는 단어에 대해서 음성파일과 음소 전사파일을 가지고 있으면 음성정렬준비는 끝났고, 이제 이 단어에 존재하는 각 음소의 시작과 끝 구간을 결정하여 잘라내면 음성정렬이 끝난다. (개념자체는 쉽다.) 현재 그림상에서 나타나는 음소는 총 4개 (s0, uu, t0, oo)니까 이들을 잘라주는 4개의 줄을 그리면 된다. 따라서 음성정렬에 대한 결과는 다음과 같을 것이다.
enter image description here


정렬시 고려할 사항


  1. 음소셋 정하기
    • 정렬을 진행하기 전, 먼저 데이터 파일을 정렬할 음소 개수 및 표기법을 정해야한다. 우선 각 언어마다 존재하는 근본적인 음소셋을 모은 다음, 연구자의 주관에 따라 음소셋에 변이형을 생성 시키면서 음소셋을 구성하면 된다. 예를 들어, 한국어 음성정렬을 위해 한국어 음소셋을 구성한다고 하면 /a/라는 근본적으로 한국어에 존재하는 모음을 정하고, 이 모음이 단어 처음에 시작될 경우와 단어 마지막에 나타나는 경우로 세밀하게 나누어 음성정렬을 하고싶다면 다음과 같이 /a0/, /a1/ 음소셋을 구성할 수 있을 것이다. 다음은 2015년에 (연구목적 시 무료) 배포 된, 한국어 자연발화 코퍼스에서 사용한 음소셋이다.


      enter image description here

  2. 정렬시 객관적 기준 정하기
    • 음성정렬을 진행할 때, 무엇보다 중요한 사항이 바로 객관적인 기준을 가지고 정렬을 진행하는 것이다. 정렬을 진행하다보면 나누기 모호한 구간이 발생하기 마련인데, 이러한 상황 발생시 미리 정해놓은 분할 규칙을 처음부터 끝까지 꾸준히 적용해 주는 것이 중요하다. 하지만 안타깝게도 정렬을 진행하다보면 정해놓은 규칙을 적용할 수 없는 경우가 생각보다 빈번히 발생하고, 또한 사람이 일일이 하는 작업인지라 간헐적으로 비규칙적인 분할이 적용되기도 한다.
    • 간단한 예로, 위의 수도에서 ‘ㄷ’(/t0/) 부분을 분할할 때도, /t0/ 구간의 시작과 끝을 어떻게 잡을지 고민해 볼 수 있다. 먼저 /t0/의 전에 나타나는 /uu/를 크게 진동하는 부분으로만 정할 경우 1번과 같이 분할할 수 있고, 아니면 /t0/가 파열음이라는 사실에 주목하여 짧고 불규칙적으로 움직이는 부분만 포착하여 2번과 같이 분할할 수도 있다.

      (1) enter image description here

      (2) enter image description here

수동음성정렬


  • 많은 언어학자들이 음성파일을 분석하기 위해 위와 같은 음성정렬을 진행한다. 하지만 연구를 위해 준비한 파일들은 짧고 간결하지 않다. 대부분 몇백개에서 몇천개 정도 되는 음성파일을 모은다음 그 많은 자료에 대해서 특정한 기준을 가지고 음성정렬을 진행하게 된다. 이 때 발생할수 있는 문제를 몇가지 짚어보고자 한다.
    • 첫 번째로, 음성정렬 진행 시, 모든 데이터에 동일한 기준을 가지고 정렬할 수 없다. 많은 데이터를 정렬하기 위해서 여러명의 연구자들이 함께 협업하는 경우가 많다. 설사 혼자 진행한다 하더라도 수많은 데이터에 대해 매번 동일한 규칙을 적용하는 것은 불가능하다. 하물며 여러명이서 함께하는 작업속에서 이루어진 음성정렬이 과연 얼마나 객관적인 기준을 가지고 이뤄졌다고 할 수 있을까? 물론 연구원들이 서로의 정렬 파일들을 대조해 가면서 정렬 결과를 조정해 나갈 수 있겠지만 모든 파일에 대해 정확하고 동일한 규칙을 적용시키기 힘들 것이다.
    • 두 번째로, 음성정렬을 위해 들어가는 시간과 노동력이 매우 크다. 예를 들어, 한 파일당 1분정도 되는 음성자료가 1,000개 있다고 가정해보자. 보통 언어학자들이 1분 음성파일을 정렬하기 위해 대략 40분정도의 시간을 필요로한다. 이 점을 고려해볼 때, 1,000개의 음성자료를 모두 정렬하기 위해서는 대략 667시간(1,000개 * 40분)이 필요하고 이는 한 연구자가 무려 28일동안 쉬지않고 작업해야 완료할 수 있는 양이다. 설사 업무를 완료한다 하더라도 작업 특성상 장시간동안 마우스를 이용해야 하기때문에 손목과 목에 무리가 많이 가해진다.

Kaldi를 이용한 자동강제정렬


  • 위에서 언급한 것처럼 수작업으로 발생할 수 있는 여러가지 문제점을 보안하고자 자동강제정렬이 제안되었고 필자는 Kaldi를 이용한 한국어 자동강제정렬에 대해 이야기 하고자 한다. Kaldi는 C++를 기반으로 하는 음성인식(ASR) 툴킷으로 , 2009년 Johns Hopkins University에서 Danial Povey를 포함한 여러명의 연구자들이 개발에 참여하였으며, 기계학습을 포함한 다양한 알고리즘과 나름 자세한(?) 튜토리얼을 지원하므로 개발자로 하여금 다양한 방식을 통한 음성인식장치 구축을 가능케 해준다.
  • 그렇다면 자동강제정렬을 위해 왜 음성장치개발 툴을 사용하는 것일까? 이유는 간단하다. 자동강제정렬을 위해 필요한 학습모델이 바로 음성인식장치를 만드는 과정중에 나오는 부산물이기 때문이다. 추후에 블로그에서 Kaldi를 이용한 음성인식장치 개발에 대해서 다루겠지만 우선 간단하게나마 음성인식 훈련과정에 대해서 이야기 하겠다.
  • 음소 학습.
    • 음성인식에서 훈련 모델은 크게 음향 모델(Acoustic model)과 언어 모델(Language model)이 있는데 이중 음향 모델만 다루도록 하겠으며, Hidden Markov Model을 기반으로 학습을 진행한다는 어려운 용어들은 우선 제쳐두고 기계에게 음소를 학습시키는게 가장 핵심이라는 걸 기억하자. 먼저 위에서 예시로 들었던 “수도”라는 단어만 가지고 음소를 훈련한다고 생각해보자. 이 때, 우리가 배울 음소는 총 4가지로 다음과 같다.
      /s0/, /uu/, /t0/, /oo/
    • 우선 음소가 적힌 텍스트와 음성 파일을 나란히 두고 균일하게 음성파일을 나누어서 음소파일과 매칭시킨다. 이후 EM(Expectation and Maximization) 알고리즘을 이용해서 각 음소가 차지하는 영역을 계산하며 매칭 된 길이를 수정해 나간다. 다음의 애니메이션이 총 4가지의 음소를 훈련해 나가는 과정을 보여주고 있다. 이러한 과정이 진행되어 음소에 대한 학습이 완료되면 우린 이 모델을 자동강제정렬에 적용할 수 있게 된다.

      enter image description here

한국어 자동강제정렬의 장점


  • 자동강제정렬은 각 음소의 규칙적인 특징을 훈련한 모델을 이용함으로써 각 음소 판별 및 정렬시 객관성을 지니고, 정렬을 위해 들이는 시간과 노동비용을 대폭 절감 시킨다는 면에서 큰 장점을 지닌다. 이처럼 데이터를 빠르고 정확하게 정렬함으로써 연구자는 데이터에 대한 신뢰도를 높이고 데이터를 활용한 본 연구에 집중함으로써 시간을 절약할 수 있게 된다.
  • 정렬된 데이터는 각 음소에 대한 길이 정보를 가지고 있기 때문에 연령, 성별, 지역차에 따른 화자의 발화패턴을 분석할 수 있고, 이를 통해 정밀한 음성인식장치 개발, TTS(text to speech) 개발, 언어학습을 위한 도구, 발화장애 치료 등 다양한 분야에 적용되어 사용할 수 있다. 이러한 장점때문에, 자동강제정렬은 언어연구자 뿐 아니라, 다양한 기업에서도 자주 사용하고 있다.
  • 다음은 본 연구팀에서 개발한 한국어 자동강제정렬장치를 통해 강제정렬을 진행한 결과다. “이것은 시험용 테스트 녹음입니다.” 라는 문장에서 시험용 부분만 가져왔다. 그림에서 보다시피 짧은 구간임에도 불구하고 어디부터 어디까지를 특정 음소라고 규정해야할지 고민이 될 것이다. 그렇기 때문에 자동강제정렬은 대용량 음성자료를 처리할 때, 더더욱 빛을 발하게 된다.

enter image description here
  • 본 연구에 사용한 자동강제정렬 코드는 현재 비공개로 되어있다. 하지만 간단하게 자신이 준비한 음성파일의 대한 강제정렬결과를 보고싶을 경우 다음 한국어 자동강제정렬 홈페이지를 방문하길 바란다. (홈페이지가 닫혀 있을수도 있음.)

Hyungwon Yang

댓글

이 블로그의 인기 게시물

Kaldi Tutorial for Korean Model Part 1

Kaldi Tutorial for Korean Model Part 4