Phác họa bài
post:
Ⓐ. Đề dẫn
Ⓑ. Jukebox (OpenAI)
Ⓒ. MuLan (Google)
Ⓓ. MusicLM (Google)
Ⓔ. Stable Audio (Stability.AI)
Ⓕ. Suy ngẫm chậm
~
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.
-
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).
-
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:
1.
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)
2.
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, …).
3.
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.
-
(Nguồn)
-
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.
· Nhạc thiền êm dịu để nghe trong phòng học
· Nhạc thiền tĩnh lặng để nghe khi lang thang ở Tây Nguyên
· Nhạc dân gian Hò khoan Lệ Thủy – Quảng Bình
· Nhạc dân gian Huế
-
Ⓕ. 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.
-
Ⓖ. Phụ lục
Đối với anh/chị
tò mò sâu về kỹ thuật: khác với LLM (Large Language Model), các mô hình Text-to-Music
gần đây thường sử dụng phương pháp tạo sinh (Generative) từ Variational Autoencoder và Diffusion Model.
