Kaldi & Montreal Forced Aligner

Sittipong Saychum
NECTEC
Published in
2 min readJul 12, 2020

ช่วงนี้งานเยอะมหาศาล ไม่มีเวลามีเขียน React ต่อเลย เอาไว้งานเสร็จก่อนล่ะกัน

แต่ขอคั่นเวลาด้วย การลง kaldi และ Montreal Forced Aligner ซึ่งจริงแล้วก็คือ Montreal Forced Aligner ตัวนี้มันไปเรียกใช้ kaldi อีกที วันนี้เราจึงต้องลงทั้ง 2 ตัว ใครที่เคยงมๆ อยู่อยากจะใช้ Aligner ตัวเทพๆ ผมแนะนำเลย

เริ่มที่ kaldi ก่อนไม่ยากเลย ก่อนอื่นไป clone มันมาก่อน

git clone https://github.com/kaldi-asr/kaldi.git

วิธีการ compile สามารถทำได้ 2 วิธี แต่ส่วนใหญ่ เอาแบบง่ายๆ เขาจะเลือกวิธีที่ 1 กัน (สามารถเข้าไปดูได้ที่ INSTALL) วิธีที่ 1 คือการเข้าไป complie แยกระหว่าง tool กับ src

เราเริ่มกันที่ folder tool ก่อน เข้าไป รัน check_dependencies.sh ดูว่าระบบเราขาดเหลืออะไร ก็ลงตามนั้น ส่วนใหญ่ก็ apt install ตามชื่อที่มันขึ้นมาให้เลย ยกเว้นบางอัน ของผมก็ตามด้านล่างนี้เลย ลงจนกว่ามันจะขึ้นว่า all OK.

cd kaldi/tools
CXX=g++-4.8 extras/check_dependencies.sh
apt install gcc-4.8 g++-4.8
apt install zlib1g-dev
apt-get install libtool
./extras/install_mkl.sh

หลังจากนั้นก็ make โล่ด

make CXX=g++-4.8
make openblas

ต่อไปเข้าไปที่ folder src

cd ../src
./configure --shared --openblas-root=../tools/OpenBLAS/install
make depend -j 6
make -j 6

เป็นอันเสร็จเรียบร้อย สำหรับ kaldi ต่อไปก็ถึงตา Montreal Forced Aligner

เริ่มจากโหลดโคดมันมาก่อน เสร็จแล้วก็แตกไฟล์

wget https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner/archive/v1.0.1.tar.gz
tar xvf v1.0.1.tar.gz
cd Montreal-Forced-Aligner-1.0.1

มันจะแนะนำให้เราหลีกเลี่ยงการใช้ python2.7 เราก็อย่าดื้อ เชื่อมันหน่อย มันอุส่าห์แนะนำเราแล้ว ใครที่ยังไม่ลง python 3 ก็หาลงซะ เสร็จแล้วใช้คำสั่งตามนี้

alias python=python3
alias pip=pip3

รัน kaldibinaries.py มันจะ copy library มาไว้ใน folder thirdparty

python thirdparty/kaldibinaries.py ../kaldi/

หลังจากนั้น install requirements.txt แนะนำให้ pip install — upgrade pip ก่อน สำหรับใครลง package ต่างๆใน requirements.txt ก็ให้ พ่วง option — upgrade เข้าไปด้วย

ส่วน pyinstaller นี้ก็จำเป็นแต่มันดันไม่เขียนไว้ใน requirements.txt แหะ เลยต้องลงต่างหาก

pip install --upgrade pip
pip install -r requirements.txt --upgrade
pip install pyinstaller

เสร็จแล้วหลังจากนั้นใช้คำสั่ง

./freezing/freeze.sh

เราจะได้ folder dist/montreal-forced-aligner มา สามารถเรียกใช้ bin/mfa_train_and_align ได้

ขั้นต่อไป เราจะมาลอง alignment กัน ขั้นแรกให้เราเตรียมไฟล์ 3 อย่าง ไฟล์แรกคือ ไฟล์ .wav คุณสมบัติ คือเป็น mono chanal, 16bit, sampling 44k หรือจะ 22 หรือ 16 ก็ได้นะ

อย่างที่ 2 คือ ไฟล์ .lab ซึ่งเป็นไฟล์ที่จะบอกว่า ไฟล์เสียงนั้นพูดคำว่าอะไรบ้าง (ไม่จำเป็นต้องใส่ short pause ลงไป เพราะมันจะ tag มาให้เรา เจ๋งป่ะล่าาาาา) หน้าตาจะเป็นอย่างรูปข้างล่าง สำคัญมาก ชื่อไฟล์ของทั้ง .lab และ .wav ต้องเหมือนกันน่าาาา

อีกไฟล์คือ ไฟล์ dict มันคือไฟล์ที่จะบอกเราว่า คำ w001, w002 นั้นมี phoneme ว่าอย่างไร หน้าตาก็จะเป็นแบบรูปด้านล่าง

หลังจากเตรียมไฟล์เสร็จแล้วก็ใช้คำสั่ง

../montreal-forced-aligner/bin/mfa_train_and_align data/kook dict/kook_dict.txt aligned

option คือ folder ที่บรรจุไฟล์ .wav และ .lab ตามมาด้วย ไฟล์ dict และสุดท้าย folder output ซึ่งจะได้ ไฟล์ .TextGrid มา

แต่ถ้าใครอยากใช้แบบไม่เปลืองแรก compile เอง สามารถไปโหลดตัว binary ได้ที่

https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner/releases/download/v1.0.1/montreal-forced-aligner_linux.tar.gz

เอ้าาาาา แล้วทำไมเพิ่งมาบอกกก อ่านมาจนจบล่ะ แต่แนะนำให้เป็น os ubuntu 16 LTS นะครับ

--

--