Thai Music Generation (Ranat Ek) with Variational AutoEncoder

Noppawat Tantisiriwat
3 min readJun 30, 2021

--

โดย นายนภวัต ตันติศิริวัฒน์

บทความนี้เป็นส่วนหนึ่งในการประเมินผลการจบการศึกษา โครงการ AI Builder

ทดลองใช้โมเดลได้ที่ :

แรงบันดาลใจ

ในปัจจุบันการพัฒนาปัญญาประดิษฐ์สำหรับการแต่งเพลงสากล เป็นที่รู้จักกันอย่างแพร่หลาย เช่น brain.fm AIVA หรือว่า Magenta Tensorflow ผู้พัฒนาได้ผสมผสานวิธีการที่หลายหลายและพัฒนาอย่างต่อเนื่องจนได้ผลลัพธ์ที่มีความสมจริงและมีคุณภาพของเพลงที่ดี ในขณะที่ในปัจจุบันยังไม่มีการพัฒนาระบบปัญญาประดิษฐ์เพื่อแต่งทำนองเพลงไทยที่เป็นที่รู้จักกันอย่างแพร่หลาย จากการศึกษางานวิจัยที่เกี่ยวข้องพบว่า การแต่งเพลงโดยปัญญาประดิษฐ์นิยมใช้โมเดลด้านภาษาในการทำความเข้าใจลำดับของเสียงตัวโน๊ต และทำนายออกมาเป็นทำนอง นิยมใช้ไฟล์เสียงที่มีการแบ่งโน๊ตชัดเจน แต่เนื่องจากขีดจำกัดของระยะเวลาและขีดจำกัดด้านทรัพยากรจึงทำให้ผู้ศึกษาตัดสินใจเลือกใช้โมเดล VAE โดยการป้อนข้อมูลเป็น สเปกโตรแกรม (spectrogram)แทน เนื่องจากปัจจุบันยังไม่มีการพัฒนาไฟล์ดังกล่าวกับระนาดเอกในรูปแบบที่เปิดเสรี และในฐานะผู้มีความสนใจในด้านดนตรีไทย ผู้จัดทำจึงมีแรงบันดาลใจในการพัฒนาต้นแบบปัญญาประดิษฐ์นี้ขึ้นเพื่อเป็นการบุกเบิกและ เป็นการส่งเสริมความคิดเชิงนวัตกรรมที่เกี่ยวข้องกับวัฒนธรรมไทย ผู้จัดทำมีความคาดหวังว่าการพัฒนาโครงงานนี้จะมีส่วนช่วยในการส่งเสริมการอนุรักษ์วัฒนธรรมไทยและทำให้ดนตรีไทยเป็นที่รู้จักมากขึ้นในอนาคต

อย่างไรก็ดี การศึกษาวิจัยเพื่อพัฒนาไม่ได้มีวัตถุประสงค์ในการพัฒนาสิ่งทดแทนนักดนตรี และนักประพันธ์ เพลง แต่เพียงเป็นการนำเสนอมุมมอง แนวคิด และการสร้างสรรค์นวัตกรรมเท่านั้น

แผนภาพแสดงความแตกต่างระหว่าง AutoEncoder และ Variational Autoencoder

อะไรคือ AutoEncoder?

AutoEncoder หรือ AE จัดเป็นโครงข่างประสาทเทียมชนิดหนึ่งที่นิยมใช้ในงานสร้างสรรค์ทางปัญญาประดิษฐ์ อาศัย 2 ส่วนประกอบหลักๆ คือ ตัวเข้ารหัส (Encoder) และ ตัวถอดรหัส (Decoder)

ตัวเข้ารหัส มีหน้าที่หลักในการลดทอนมิติของข้อมูล (Dimensional Reduction) โดยให้ข้อมูลที่ผ่านการลดทอนแล้วมีขนาดตามที่กำหนด เราจะเรียกพื้นที่ที่ข้อมูลที่ถูกลดทอนแล้วบรรจุอยู่ว่าพื้นที่แฝง (Latent Space) พูดอีกอย่างก็คือตัวเข้ารหัสมีหน้าที่ในการ “บีบ” ข้อมูล

ตัวถอดรหัส มีหน้าที่ในการแปลงข้อมูลในพื้นที่แฝงกลับเป็นข้อมูลดั้งเดิมอีกครั้ง หรือก็คือการ “ขยาย” มิติของข้อมูลนั่นเอง

นอกจากนี้ ตัวเข้ารหัสยังสามารถใช้ในการลดมิติของข้อมูลเพื่อใช้ในการวิเคราะข้อมูล การจัดกลุ่ม ในงานที่เกี่ยวข้องกับวิทยาการข้อมูล

VAE ต่างจาก AE อย่างไร?

VAE เป็น AE รูปแบบหนึ่งที่มีรูปแบบของพื้นที่แฝงที่แตกต่างจาก AE ทั่วไป โดยปกติแล้ว AE จะอาศัยผลที่ออกมาจากตัวเข้ารหัสป้อนเข้าสู่พื้นที่แฝงโดยตรง แต่เนื่องจากการกระจายตัวของข้อมูลที่มีความหลากหลาย ทำให้มีความยุ่งยากในการสุ่มตัวอย่างจากพื้นที่แผงขึ้นมาในการสร้างเนื่องจากไม่สามารถทราบได้ว่าข้อมูลกระจายตัวอย่างไร และอยู่บริเวณใดในพื้นที่แฝงนั้นๆ

ดังนั้นจึงมีการนำหลักการทางสถิติเรื่องการกระจายตัวของประชากเข้ามาช่วยในการแทนที่ข้อมูล เพื่อให้การกระจายตัวของข้อมูลในพื้นที่แฝงมีความใกล้เคียงกับการกระจายตัวทางสถิติที่ผู้ใช้ต้องการได้ (ในกรณีนี้ใช้การกระจายแบบปกติ(Normal Distribution) ) ส่งผลดีในการสุ่มตัวอย่างจากพื้นที่แฝงเพื่อ โดยตัวอย่างที่ได้จะมีความใกล้เคียงกับกลุ่มประชากรมากขึ้น

พื้นที่แฝงของ VAE เกิดขึ้นจากการทำนาย 2 ส่วนได้แก่ ค่าเฉลี่ย และ ส่วนเบี่ยงเบนมาตรฐาน จากนั้น จะทำการสุ่มจากการกระจายตัวอีกครั้งกลายเป็นพื้นที่แฝงที่มีการกระจายตัวแบบปกติตามที่ต้องการ

ดังนั้นแล้วเพื่อทำให้ VAE สามารถเรียนรู้การสร้างได้ จึงต้องใช้ loss function 2 ตัว ได้แก่ reconstruction loss และ Kullback–Leibler divergence

reconstruction loss ทำให้ตัวถอดรหัสสร้างเพลงที่มีความใกล้เคียงกับต้นฉบับมากขึ้น และ Kullback–Leibler divergence จะทำให้ตัวเข้ารหัสสามารถสร้างพื้นที่แฝงที่มีการกระจายตัวได้ใกล้เคียงกับการการจายตัวแบบปกติได้มากขึ้น

MSE reconstruction loss
Kullback-Leibler divergence

รูปแบบของโมเดล

ผู้ศึกษาได้พัฒนาโมเดลขึ้น 3 สถาปัตยกรรม ได้แก่

  1. โมเดล Master CNN

เรียนรู้เฉพาะลักษณะของเสียงดนตรี โดยการใช้ Convolutional Neural Network

2. โมเดล Master CNN LSTM

เรียนรู้ลักษณะของเสียงโดยการใช้ Convolutional Neural Network และรูปแบบของทำนองโดยการใช้ LSTM ตามลำดับ

3. โมเดล Weirdo’s architecture

เรียนรู้ลักษณะของเสียงโดยการใช้ Convolutional Neural Network สลับกับการเรียนรู้รูปแบบของทำนองโดยการใช้ LSTM

โมเดลทั้งหมดใช้ Layernormalization

ข้อมูล

ผู้ศึกษาได้ทำการเก็บรวบรวมข้อมูลเสียงระนาดเอกจากนักดนตรีที่มีประสบการณ์ เป็นจำนวน 45 ชั่วโมง ทำการตัดช่วงเงียบก่อนและหลังของเสียง และทำการตัดเป็นช่วงสั้นๆ ความยาว 15 วินาทีในการเรียนรู้ของระบบจะใช้ข้อมูลสเปกโตรแกรม (spectrogram) ของเสียงเป็นข้อมูลขาเข้า และ ได้สเปกโตรแกรมเป็นข้อมูลขาออก ซึ่งสามารถถูกแปลงกับเป็นไฟล์เสียงได้

ตัวอย่างสเปกโตรแกรมของเสียงระนาดเอกที่ใช้ในการเรียนรู้ของโมเดล

สเปกโตรแกรมคืออะไร?

สเปกโตรแกรมเป็นรูปแบบการนำเสนอไฟล์เสียงทั้งในมิติของเวลา ความดังของเสียงและความถี่ ภายในกราฟเดียว ซึ่งแบ่งออกเป็นหลายประเภท เช่น linear spectrogram, log spectrogram และ Mel-spectrogram เป็นต้น ในการศึกษาครั้งนี้ผู้ศึกษาตัดสินใจใช้ log spectrogram

การนำสัญญาณคลื่นผ่านการแปลงฟูรีเยช่วงเวลาสั้น (Short-time Fourier transform) ได้ผลลัพธ์ที่เป็นจำนวนเชิงซ้อน จากนั้นทำการหาขนาดของผลลัพธเหล่านั้นจึงได้สเปกโตรแกรม หากทำการแปลงความดังให้อยู่ในรูปเดซิเบลจะเรียก log spectrogram และหากนำสเปกโตรแกรมที่ได้มาผ่าน Mel Scale จะได้ Mel-spectrogram (ข้อมูลเพิ่มเติมที่ https://towardsdatascience.com/getting-to-know-the-mel-spectrogram-31bca3e2d9d0)

ผลการศึกษา

ภายหลังจากการเรียนรู้ของโมเดลเสร็จสิ้น ได้ทำการทดลองสุ่มสร้างไฟล์เสียงจากทั้ง 3 สถาปัตยกรรม ชนิดละ 100 ไฟล์ จากนั้นสุ่มไฟล์จำนวน 5 ไฟล์จาก 100 ไฟล์นั้น เพื่อนำไปใช้ในการประเมินผลของผู้เชี่ยวชาญทางด้านดนตรีจำนวน 5 ท่าน จากผลการประเมิน ได้ค่าความพึงพอใจของแต่ละโมเดลดังนี้

ค่าเฉลี่ยคะแนนจากการประเมินโดยผู้เชี่ยวชาญทางด้านดนตรี 5 ท่าน

ตัวอย่างเสียงจากโมเดล

แต่งโดยการใช้ Master CNN
แต่งโดยการใช้ Master CNN LSTM
แต่งโดยการใช้ Weirdo's architecture

อภิปรายผลและการหาแนวทางการแก้ไขข้อผิดพลาด

โดยรวมแล้วผลลัพธ์ที่ได้จากการสุ่ม มีเสียงที่คล้ายระนาดเอก แต่จังหวะ และบันไดเสียงไม่ชัดเจน

ผู้ศึกษาเสนอแนวทางการแก้ไขปัญหาเพื่อการพัฒนาต่อไปดังนี้

  1. การพัฒนาไฟล์เสียง MIDI ที่รองรับย่านเสียงและสเกลเสียงของไทยที่สามารถเก็บเสียงระนาดเอกได้ชัดเจน เนื่องจากไฟล์ MIDI สามารถแยกโน๊ตได้และสามารถพัฒนาต่อไปเป็นรูปแบบการเก็บข้อมูลที่เป็นที่นิยมในการใช้กับปัญญาประดิษฐ์ในระดับสากลเช่น Piano-Roll เป็นต้น สามารถต่อยอดไปใช้เครื่องดนตรีชนิดอื่นได้ด้วยเช่นกัน
  2. การนำโมเดลภาษาเข้ามาผสมกับโมเดลนี้ใช้ในการแต่งเพลงจะช่วยทำให้เพลงที่ได้มีจังหวะที่ชัดและแม่นยำมากขึ้น

ภาคผนวก: Coding สำหรับผู้พัฒนาปัญญาประดิษฐ์ และผู้ที่สนใจ

1.Exploratory Data Analysis

2. .wav file converter

3. Preprocessor

4. log_spectrogram pipeline (cr. https://youtu.be/O04v3cgHNeM)

5. .tfrecord generator

6. .tfrecord reader

7. Model: Variational Auto-Encoder

7.1. Encoder(Master CNN as an example)

7.2. Decoder

7.3. Overview: VAE

8. sound generation

เพิ่มเติมที่: https://github.com/Noppawat-Tantisiriwat/Thai-Music-Generation

--

--