Trước hết, xin có lời chúc mừng sinh nhật diễn đàn ICT-VN (20 tuổi: 23/12/2003 – 23/12/2023).
-
Để giúp anh/chị quyết định có đọc tiếp hay không, tôi xin phép cung cấp các thông tin liên quan đến bài post này như sau:
- Chủ đề: Machine Learning
- Tính thời sự: Tháng 9/2023
- Thời gian đọc: 10 phút, lồng vào thời gian uống cà phê (uống cà phê xong là đọc xong)
-
Ⓐ. Đề dẫn
Tôi tin là nhiều anh/chị trên diễn đàn này rất thạo trong việc tạo ảnh từ văn bản (Text-to-Image) thông qua các mô hình như DALL·E, DreamStudio, Adobe Firefly, … Lần này tôi xin phép đàm luận cùng anh/chị về Text-to-Music. Nghĩa là khi chúng ta đưa vào một đoạn văn bản thì mô hình sẽ cho ta một đoạn âm nhạc. Sáng tác nhạc theo cách này thì tôi nghĩ không thể nào đơn giản hơn được nữa. Tất nhiên, đó là tôi nói một cách “đại thể” thế chứ còn trở thành nhạc sỹ chỉ sau khi gõ một đoạn văn bản thì e là hơi quá 😊.
Cái mà chúng ta tò mò chính là nguyên lý, kiến trúc, cách tiếp cận, cách huấn luyện và tập dữ liệu của mô hình đứng đằng sau.
-
Toàn bộ bài post này tôi lấy thông tin chủ yếu từ các tham chiếu: Jukebox, MuLan, MusicLM, Stable Audio.
-
Ⓑ. Jukebox (OpenAI – 2020.04.30)
Xin phép anh/chị được bắt đầu bằng mô hình Jukebox của OpenAI (đăng ngày 30/04/2020). Jukebox dịch ra tiếng Việt có nghĩa là “máy hát tự động”. Hẳn nhiên, Jukebox không phải là mô hình đầu tiên về Text-to-Music. Cái mà tôi ấn tượng là Motivation của họ: người ta đặt vấn đề là khi đưa vào một yêu cầu (Prompt) thì máy sẽ “hát” theo yêu cầu. Một cách đặt vấn đề đơn giản mà tự nhiên!
-
Một cách tổng quan, Jukebox huấn luyện mô hình bằng cách nén dữ liệu đầu vào rồi giải nén bằng Autoencoder cho dữ liệu đầu ra (xem lược đồ của Autoencoder dưới đây). Vì đầu ra giải nén (X’) chính là khôi phục lại dữ liệu đầu vào (X) nên cách huấn luyện này không cần dán nhãn dữ liệu (huấn luyện không giám sát).
Lược đồ của một Autoencoder cơ bản.
Nguồn.
-
Chúng ta hình dung là sau khi huấn luyện, Jukebox sẽ “hiểu” toàn bộ các bản nhạc (dữ liệu huấn luyện). Sau đó, nếu chúng ta đưa vào yêu cầu (Prompt) thì Jukebox sẽ biết cách “phát ra” đoạn nhạc đáp ứng yêu cầu đó.
-
Dữ liệu huấn luyện
Đầu tiên người ta thu thập bản thu thanh từ các bài hát trên Internet, với số lượng khoảng 1,2 triệu bài – một nửa trong số đó là bài hát bằng tiếng Anh.
Sau đó người ta ghép từng bản thu thanh với lời bài hát + metadata:
[Bản thu thanh, Lời bài hát, Metadata]
Metadata:
[Tên nghệ sỹ, Dòng nhạc, Năm bài hát, Moods (tâm nhạc), Từ khóa]
Các dòng nhạc chính:
Reggae, Country (nhạc đồng quê), Soundtrack (nhạc phim), R&B (Rhythm and blues), Hip Hop, Rock, Pop, Classical (nhạc cổ điển), Jazz, Blues, Soul.
-
Prompt
Jukebox chỉ chấp nhận Prompt ở mức rất đơn giản: chọn dòng nhạc (genre), nghệ sỹ / ca sỹ và một đoạn lời bài hát (lyrics).
Nhóm nghiên cứu chỉ cung cấp cho cộng đồng các mẫu (samples) chứ chưa có giao diện cho phép người dùng tương tác với mô hình.
-
Ⓒ. MuLan (Google – 2022.08.26)
Hẳn anh/chị còn nhớ ý tưởng bài báo nổi tiếng CLIP (Contrastive Language–Image Pre-training): kết nối “văn bản” – “ảnh”. Người ta thu thập 400 triệu cặp ghép (ảnh, văn bản) trên Internet, sau đó đo độ tương tự (similarity) của cặp ghép bất kỳ “ảnh” – “đoạn văn bản”. Người ta áp dụng ý tưởng này trong DALL·E 2: cho một đoạn văn bản đầu vào, DALL·E 2 có thể vẽ theo nội dung ngữ nghĩa của văn bản đó. Nghĩa là “văn bản” → “ảnh”.
Mô hình MuLan (đăng ngày 26-08-2022) tiếp cận theo cách tương tự: người ta thu thập và lọc ra khoảng 44 triệu bản ghi dưới dạng (“âm thanh”, “văn bản”) dùng để huấn luyện mô hình. “Âm thanh” là đoạn video clip dài 30 giây và “văn bản” là lời bài hát trong đoạn video clip 30 giây đó. Nói một cách khác, đoạn “văn bản” là mô tả bằng lời đoạn “âm thanh” tương ứng. Người ta tính ra tổng thời lượng âm thanh dùng để huấn luyện là 44 triệu x 30 giây ≈ 370k giờ.
Trong hình vẽ dưới đây, người ta mã hóa âm thanh (audio) bằng một mạng nơ-ron (neural network) ký hiệu là f, mã hóa văn bản (text) bằng một mạng nơ-ron khác ký hiệu là g trước khi áp dụng phương pháp huấn luyện Contrastive Representation Learning. Trong bài báo, họ gọi kiến trúc này là tòa tháp đôi (two-tower architecture).
Sơ đồ huấn luyện mô hình MuLan (Nguồn).
-
Sau khi huấn luyện xong, người ta có thể truy vấn mô hình bằng một đoạn văn bản và kết quả … chỉ là một đoạn video clip dài 30s! Có thể anh/chị cảm thấy hơi thất vọng vì đoạn video clip 30s chưa phải là một bản nhạc hoàn chỉnh. Chú ý rằng, cùng một cách tiếp cận trong trường hợp mô hình CLIP: từ một đoạn văn bản mô hình tạo ra một ảnh “hoàn chỉnh”. Tất nhiên đã là ảnh thì ảnh nào cũng “hoàn chỉnh” nhưng âm nhạc thì lại khác, một đoạn âm nhạc dài 30s thường chỉ là một trích đoạn thôi.
Đây là vấn đề rất thách thức đối với tất cả các mô hình Text-to-Music (không riêng gì đối với mô hình MuLan). Cùng một “đoạn văn bản” có rất nhiều cách để “suy ra” một đoạn nhạc: dòng nhạc nào (Reggae, Country, R&B, …), nhạc cụ chính để chơi trong đoạn nhạc đó là gì (piano, guitar, …), giai điệu tiết tấu (melody) thế nào, tâm trạng ra sao (mood: buồn, vui, …).
Còn một vấn đề nữa trong âm nhạc, đó là tính nhất quán (consistency). Tính nhất quán trong âm nhạc là nói đến tính đều đặn và đồng nhất của một số yếu tố nhất định, chẳng hạn như nhịp độ, phím nhạc (keynote), giai điệu (melody), nhịp điệu (rhythm)… Khi tạo ra một bản nhạc thì rất khó chấp nhận việc đoạn đầu có một giai điệu khác hoàn toàn với giai điệu của đoạn cuối.
Như vậy, nếu đầu vào chỉ đơn thuần “lời bài hát” thì mô hình khó có thể cho đầu ra là một bản nhạc hoàn chỉnh đúng với “’hàm ý” của văn bản. Từ đây, người ta nhận thấy rằng Prompt không thể đơn thuần chỉ là “lời bài hát”, mà Prompt cần có thêm “chỉ định” các yếu tố khác như nhịp độ, giai điệu, nhịp điệu, mood, … để mô hình “tạo sinh” (generate) ra bản nhạc.
-
Ⓓ. MusicLM (Google – 2023.01.26)
Ngày 26/01/2023 một nhóm nghiên cứu ở Google đăng bài “MusicLM: Generating Music From Text” (MusicLM: Tạo nhạc từ văn bản). Đọc tiêu đề chúng ta hiểu rõ mục tiêu của mô hình – mục tiêu này giống với mục tiêu của mô hình MuLan. Vậy MusicLM hơn MuLan ở những điểm nào? Căn cứ theo bài báo, mô hình MusicLM có các đóng góp sau đây cho cộng đồng nghiên cứu:
- MusicLM có thể tạo sinh ra đoạn nhạc chất lượng cao ở tần số 24 kHz, có thời lượng lên đến 5 phút (để so sánh: các bài hát thông thường có thời lượng 4-5 phút, đĩa nhạc CD có tần số chuẩn là 44.1 kHz/16 bit, âm thanh với độ phân giải cao có tần số 96 kHz/24 bit hoặc 192 kHz/24 bit)
- Văn bản của Prompt có thể chỉ định đặc tả một số yếu tố liên quan đến âm nhạc (nhịp độ, giai điệu, nhịp điệu, mood, …).
- Cung cấp cho cộng đồng thư viện MusicCaps gồm 5,500 cặp (nhạc, lời) do các nhạc sỹ hàng đầu biên soạn. MusicCaps có thể dùng làm “chuẩn” để đánh giá chất lượng đầu ra của các mô hình tạo sinh âm nhạc.
-
Mô hình hoạt động như thế nào? Khá rắc rối 😊. Nếu anh/chị quan tâm đến chi tiết thì có thể tham khảo các sơ đồ tiền huấn luyện (Pre-training) và sơ đồ tổng thể phía dưới đây.
Huấn luyện
- Từ audio clip đầu vào, người ta dùng mô hình MuLan để tạo ra 12 đoạn mã trộn cặp (“âm thanh” – “văn bản”). “Âm thanh” là phần nhạc của video clip, “văn bản” là phần mô tả đoạn video clip đó. Đoạn mã được tạo ra có tên là audio-text token. Tức là 12 đoạn mã này “đo” mối tương quan giữa “nhạc” và “văn bản”.
- Cùng một video clip đầu vào như trên, người ta cho chạy qua mạng w2v-BERT để tạo ra 25 semantic token (đoạn mã ngữ nghĩa). Ngữ nghĩa (semantic) trong trường hợp này là ngữ nghĩa trong âm nhạc: dòng nhạc, giai điệu, tâm trạng (mood), … Tức là 25 đoạn mã này “tạo” kết cấu đoạn nhạc.
- Lại cùng một đoạn video clip như trên người ta cho chạy qua mô hình SoundStream để tạo ra 600 acoustic token (đoạn mã đặc tính âm thanh – mã âm học). Ví dụ về đặc tính âm thanh: nhịp độ (tempo), âm điệu (rhythm), âm sắc (timbre). Tức là người ta tạo ra kết cấu chi tiết hơn của đoạn nhạc.
- Từ audio-text token (âm thanh – văn bản) mô hình tạo ra semantic token (đoạn mã ngữ nghĩa âm nhạc).
- Từ audio-text token (âm thanh – văn bản) và semantic token (đoạn mã ngữ nghĩa âm nhạc) mô hình tạo ra acoustic token (đoạn mã đặc tính âm thanh).
-
Tạo nhạc
- Khi đưa đầu vào bằng một đoạn văn bản (văn bản mô tả đoạn âm nhạc cần tạo) mô hình MuLan tạo ra các đoạn mã ghép đôi (“âm thanh”, “văn bản”) (audio-text tokens).
- Sau đó các audio-text tokens này sẽ đi qua một loạt các mô hình Transformer nối tiếp nhau.
- Từ đó, mô hình SoundStream sẽ giải mã và tạo sinh (generate) ra đoạn clip âm nhạc.
-
Sơ đồ bước tiền huấn luyện (Pre-training) mô hình MusicLM: huấn luyện 3 mô hình một cách độc lập với nhau.
(Nguồn)
-
Sơ đồ tổng thể về cách tiếp cận của mô hình MusicLM.
Trái: Sơ đồ huấn luyện. Phải: Sơ đồ suy diễn đầu ra
(Nguồn)
-
Trải nghiệm
Nhóm nghiên cứu cho chúng ta nghe các đoạn nhạc mẫu được tạo ra tương ứng với từng Prompt (bằng tiếng Anh). Đây là các đoạn nhạc nhóm nghiên cứu tạo sẵn, chưa phải là tương tác giữa người dùng và mô hình.
-
Ⓔ. Stable Audio (Stability.AI – 2023.09.13)
Sơ đồ hoạt động của mô hình Stable Audio.
(Nguồn)
-
Ngày 13/09/2023 Stability.AI trình làng mô hình tạo nhạc từ văn bản lấy tên là Stable Audio. Chắc nhiều anh/chị biết Stability.AI có “sở trường” tạo các mô hình tạo sinh (generative) từ Diffusion Model. Lần này cũng vậy, Stable Audio dựa trên mô hình Diffusion. Nguyên lý hoạt động của mô hình như sau.
Huấn luyện
- Đầu tiên, người ta tiền huấn luyện (Pre-training) mô hình CLAP (Contrastive Language-Audio Pretraining). Mô hình CLAP làm việc gì? Một cách tổng thể: CLAP ghép cặp thông tin (“Văn bản”, “Nhạc không lời”). “Văn bản” chính là Prompt - mô tả các “đặc tính” của đoạn nhạc đầu ra. Tập dữ liệu mà họ huấn luyện gồm 800,000 file audio (họ hợp tác với AudioSparx) – tương đương với thời lượng 19,500 giờ. Ngoài phần nhạc, các file này còn có cả metadata về văn bản tương ứng với đoạn nhạc. Chúng ta hình dung rằng sau khi huấn luyện, nếu chúng ta áp đầu vào là một đoạn văn bản thì CLAP sẽ cho ra một đoạn nhạc gần sát nhất với đoạn văn bản đó (tức là đoạn nhạc có mức độ similarity lớn nhất so với tất cả các đoạn nhạc khác).
- Khi huấn luyện mô hình Stable Audio, người ta cố định (frozen) các trọng số (weights) của mô hình CLAP. Trong sơ đồ tổng thể chúng ta thấy Prompt được đưa vào bộ mã hóa có tên là CLAP Text Encoder, đầu ra là Prompt Features. Vậy Prompt Features chứa thông tin gì? Prompt Features chứa thông tin về mối tương quan giữa “văn bản” và “âm thanh”. Chú ý rằng Prompt Features chỉ chứa thông tin về mối tương quan chứ không phải là âm thanh.
- Có 2 đầu vào nữa được đặt tên là Seconds Start và Seconds Total. Ví dụ, một đoạn clip có thời lượng là 80 giây thì Seconds Total = 80. Nếu người ta chỉ lấy đoạn âm nhạc từ giây thứ 14 trở đi thì Seconds Start = 14. Hai tham số đầu vào này được mã hóa thành một đoạn mã được đặt tên là Timing. Cặp (Prompt Feature, Timing) lập thành một đầu vào của mô hình có tên gọi Diffusion U-Net (xem sơ đồ ở trên).
- Mô hình Diffusion U-Net có 2 đầu vào là Audio và cặp (Prompt Feature, Timing), đầu ra là Latents. Người ta thêm nhiễu (Noise) vào Audio. Nguyên lý của Diffusion U-Net là khử nhiễu đầu vào của Audio theo điều hướng của cặp thông tin (Prompt Feature, Timing). (Về nguyên lý của Diffusion Model xem tham khảo Diffusion Model.) Chúng ta có thể hiểu một cách nôm na rằng đầu ra Latents của Diffusion U-Net là dạng dữ liệu đã được nén.
- Latents lại là đầu vào của VAE Decoder. VAE là viết tắt của Variational Autoencoder (bộ mã hóa tự động biến thiên – tham khảo Variational Autoencoder). Chú ý rằng VAE Decoder chỉ là bộ giải mã. Chúng ta có thể hiểu rằng Diffusion U-Net mã hóa còn VAE Decoder giải mã. Đầu ra của VAE Decoder có tên là Generated Audio: là phần âm nhạc được mô hình tạo sinh.
Tạo nhạc
- Người dùng đưa vào 2 tham số: Prompt và thời lượng (đo bằng giây). Mô hình sẽ tạo ra đoạn nhạc theo chuẩn chất lượng đĩa CD: (16-bit, 44.1kHz, stereo).
-
Trải nghiệm
Ưu điểm nổi bật của Stable Audio là cho phép chúng ta tương tác trực tiếp với mô hình. Anh/chị vào trang https://stableaudio.com/ rồi bấm “Try it out”. Mô hình yêu cầu anh/chị phải đăng ký bằng một địa chỉ email.
Tôi xin phép liệt kê ra ở đây một số trải nghiệm của mình, anh/chị có thể tham khảo, thử nghe xem các đoạn nhạc mà mô hình tạo ra có “nghe được” không. Mỗi đoạn nhạc có thời lượng là 45 giây.
-
Ⓕ. Suy ngẫm chậm
Có thể nói rằng các mô hình Text-to-Mussic chỉ mới ở giai đoạn đầu, mức sơ khởi. Một số vấn đề vẫn chưa định hình. Đơn cử như cách “sáng tác” bản nhạc và làm thế nào để đánh giá chất lượng bản nhạc do mô hình tạo ra.
- Cách sáng tác bản nhạc hay nói cách khác là kỹ thuật thiết kế Prompt (Prompt Engineering). Vấn đề này các nhóm nghiên cứu vẫn chưa thống nhất cấu phần hợp thành một Prompt. Stable Audio có User Guide, trong đó có phần hướng dẫn cách thiết lập Prompt, có thể coi như Prompt Engineering. Tuy nhiên, Stable Audio chỉ “sáng tác” nhạc, không có lời.
- Việc đánh giá chất lượng bản nhạc do mô hình tạo ra là một thách thức rất lớn. Chúng ta biết rằng LLM có “vô số” các Benchmark (chuẩn đánh giá) từ dễ đến khó, đến “siêu khó”. Tuy nhiên, đối với Text-to-Music, tôi chỉ mới biết đến nhóm nghiên cứu MusicLM có thư viện MusicCaps gồm 5,500 cặp (nhạc, lời) do các nhạc sỹ hàng đầu biên soạn, có thể tạm coi như một Benchmark. Nhưng Benchmark này lại không áp dụng được để do chất lượng đầu ra của các mô hình khác, ví dụ như Stable Audio (đầu ra của Stable Audio chỉ có nhạc, không lời).
Đấy là bàn sâu hơn cho hết nhẽ vậy thôi chứ trong thế giới thực vào thời điểm hiện nay, với chỉ dăm ba cái click chuột cộng với gõ một đoạn văn bản ngắn mà chúng ta đã “sáng tác” ra được cả một bản nhạc thì đó cũng là “đỉnh” của Machine Learning rồi, đúng không anh/chị?
-
Cuối cùng, tôi trân trọng gửi đến diễn đàn lời chúc:
Giáng sinh An lành!
Merry Christmas!
-
Đính kèm là bức ảnh tôi nhờ phần mềm Fotor vẽ nội ảnh (inpainting), coi như một tấm thiệp Giáng sinh thân gửi đến anh/chị trên diễn đàn, và thông qua anh/chị xin gửi đến đến gia đình, người thân và bạn hữu gần xa.
Anh/chị đừng quên click vào tấm thiệp – anh/chị sẽ được thưởng thức một đoạn nhạc + lời chúc Giáng sinh (credit riffusion.com).
Credit: Fotor.
-