칼디로 배우는 음성인식 - 2장

Jajuna_99·2023년 3월 22일
0

2장 Kaldi소개

2.1 Kaldi의 발전단계

Kaldi 음성인식 툴킷의 반전 단계를 보자

2.1.1 이름의 유래

공식 문서에서의 설명은 Kaldi는 원해 에티오피아의 양치기였으며, 커피 나무를 발견한 사람이다.

2.1.2 존스 홉킨스 대학의 여름 워크샵

존스 홉킨스 대학의 여름 워크샵은 CLSP(The Johns Hopkins University Center for Language and Speech Processing)가 주도하여 개최되었다.

  • 확률적 모델 기반 음성인 분야의 선구자인 Frederick Jelinek이 IBM을 떠나 존스 홉킨스에서 만든 언어와 음성처리에 중점을 둔 연구실

  • CLSP는 세계에서 가장 유명한 언어 및 음성 처리 센터 중 하나로 발전해왔다.

  • 2010년에 세상을 떠난 Jelinek을 기념하기 위해 2014년 부터 JSALT(Jelinek Memorial Workshop on Speech and Language Technology) 로 개명했다.

  • 오프 소스 두구의 요람이라고도 불리는데, 이 분야에 큰 영향을 미치는 수많은 오프 소스 도구를 발전시켰다.

    • SRILM : 언어 모델의 모델링 분야 오픈 소스 툴킷
    • Moses : 기계 번역 분야에서 중추적인 역할을 하는 오픈 소스 툴킷
    • Kaldi : 음성 인식 오픈 소스 툴킷!

2.1.3 Kaldi 개발의 역사

2009년 존스 홉킨스 워크샵 주제 중 하나는 "Low Development Cost, High Quality Speech Recognition for New Languages and Domains"였다.

  • 연구의 초점은 SGMM(Subspace Gaussian Mixture Model)이었다.

  • 효과 검증을 위한 실험을 용이하게 하기 위해 연구원들은 음성인식 툴킷인 HTK를 이용한 간단한 유한 상태 변환기 기반의 음성인식 디코더와 훈련용 스크립트를 개발했는데, 이것이 Kaldi의 기반이 되었다.

  • 2010년에 Kaldi의 기능을 개선하고, Kaldi 자체 도구를 기반으로 한 일련의 훈련 스크립트를 개발하였다.

p.22 Kaldi의 관련된 주요 이벤트가 정리 되어 있다.

2.2 설계 원리

Kaldi의 설계원리를 여러 측면에서 살펴보자

2.2.1 원래의 의도

Kaldi 이전에도 카네기멜론의 스핑크스 케임브리지의 HTK가 있었지만 Kaldi를 개발한 이유가 있었다.

Kaldi만의 차별적인 개념들

  • 소스 코드 라이브러리를 C++코드로 작성함

  • 수정 및 확장이 용이함 (Kaldi, 음성인식 툴킷 사용에 있어 진입장벽을 크게 낮추었다.)

  • 현대의 최신 음성인식 기술을 다룸

Kaldi의 기술적 특성

  • 코드가 읽기 쉽고 이해하기 쉬움

  • 코드의 재사용 및 리팩토링이 쉬움

  • 다양한 선형 대수의 원리를 사용하였으며, 서로 다른 선형 대수 라이브러리간 전환이 쉬움

  • 가능한한 일번적인 알고리즘을 이용하여 구현되었으며, 특정 작업만 수행하는 코드의 사용을 지양함

  • FST(Finite State Transducers)를 기반으로 하는 코드 수준의 최신 디코더 적용함

  • 최신 음성인식 기술을 지속적으로 반영함

2.2.2 오픈소스

Kaldi는 오프 소스 사용에 있어 보다 개방적인 Apache Licence Version 2.0을 채용한다.

  • 개인, 연구 기관, 심지어 상업 조직도 Kaldi를 상업적 및 비상업적 활동에 비교적 자유롭게 사용할 수 있음을 의미
  • 이를 통해 많은 스타트업, 개발자들을 끌어들여 성능이 최적화 되었다.

2.2.3 훈련 스크립트

Kaldi가 오픈 소스 툴킷임으로 그에 따른 특성들 또한 있다.

  • Kaldi의 주요 개발자들은 자신들의 개발 작업을 커뮤니티를 통해 피드백 받기를 희망한다.

    • 이에 맞춰 음성인식 훈련 스크립트가 "예시"의 형태로 공개되어 있다.

    • 따라서, 사용자들이 예제를 따라 작업한 결과를 공유하도록 요구된다.

  • Kaldi 자체가 최신의 모델들을 반영하여, 문서가 빈약해지는 약점을 갖고 있다.

    • 이에 대응하기 위해 "예시" 형식을 통해 어려움을 해소되길 희망하고 있다.

이러한 훈련 스크립트들이 Kaldi가 높은 인기를 가지는 이유 중 하나가 되었다.

2.3 설치

Kaldi는 최종 사용자 SW가 아니면 설치 패키지가 없다.

Kaldi를 설치한다는 것은 Kaldi 코드를 컴파일하고 필요한 몇 가지 도구와 운영 환경을 준비하는 것을 말한다.

Kaldi 예제는 모두 Shell 스크립트이고, I/O는 파이프라인에 크게 의존해 최상의 운영 환경은 UNIX 계열의 시스템이다.

  • Debian 및 Red Hat Linux 혹은 Linux의 다른 배포만 Cygwin 및 macOS에서도 사용 가능

  • Windows에서도 vscode를 사용해 Kaldi 코드 컴파일 가능

(https://medium.com/@indra622/0-kaldi-asr-tutorial-b036b6dac26e 에서 간단한 설치 메뉴얼 확인 가능)

이 후에

  • CUDA 설치
  • dependencies 설치 및 컴파일
  • third party tool 설치
  • 기타 행렬 연산 라이브러리 선택
  • Kaldi 코드 컴파일
  • 병렬 환경 구성

등 C++로 만든 툴킷이라 약간 클래식한 느낌의 환경 설정과 컴파일이 필요하다.

2.4 간단한 예제

음성인식 예제 Yes/No를 살펴보자 => Yes와 No 두 단어만 인식하는 간단한 예제

2.4.1 run.sh 실행하기

모든 스크립트는 egs/yesno 디렉토리에 있다.

디렉토리 구조는 p.35에서 확인 가능하다.

Kaldi 예제는 구성되는 파일 수에 관계없이 모두 run.sh를 진입점으로 사용한다.

실행하면 yesno 데이터셋 압축 패키지를 바로 다운로드 한다. 전체 스크립트가 약 1-2분만에 끝나는 작은 데이터셋이다.

2.4.2 스크립트 분석

run.sh를 분석하는 절이다.

2.5 예제 소개

yesno 예제 외에도 Kaldi는 다른 많은 예제를 제공한다.

2.5.1 데이터관련 예제

  1. 낭독 데이터에는 TIMIT, WSJ, Libirispeech 등이 있으며 분량에 따라 나눌 수 있다.
  • 소규모 데이터 (10시간 이내)

    • TIDIGIT, TIMIT, RM 및 AN4가 포함된다.
  • 중규모 데이터 (100시간 이내)

    • WSJ, AURORA4, Voxforge가 포함된다.
  • 대규모 데이터 (500 시간 이상)

    • Librispeech가 있다.
  1. 전화통화 데이터
  • Vystadial, SWDB, Fisher 등이 있다.
  1. 방송 데이터
  • HUB4, tedium 등이 있다.
  1. 기타 유형
  • AMI, MUSAN 와 Fisher, Switchboard, WSJ, hub4, Tedlium 및 Librispeech를 포함한 예제, PTB, VoxCeleb 등이 있다.

p.49 표 2.1에 Kaldi의 비영어 음성 예시들이 정리되어 있다.

다들 저작권, 습득 방법, 유형들이 다르니 잘 보고 사용하면 되겠다.

경연대회 예제, 기타 예제

등도 책에서 간략하게 설명해준다.

예제의 구조

예제들의 범용적인 구조를 설명하고 분석하는 법을 간략히 설명한다.

profile
Learning bunch, mostly computer and language

0개의 댓글