Tiền xử lý dữ liệu

Một phần của tài liệu Tổng hợp âm nhạc sử dụng học sâu (Trang 64)

4.4 Mơ hình MusicAutobot

4.4.1 Tiền xử lý dữ liệu

Dữ liệu đầu vào của mơ hình là dạng tệp MIDI. Phần này sẽ trình bày cách thức mà tệp MIDI được mã hoá biểu diễn trước khi được truyền vào để huấn luyện mơ hình học sâu.

4.4.1.1 Mã hố token (Tokenization)

Các bài hát dưới dạng tệp MIDI sẽ được mã hóa thành các ký tự chữ biểu diễn để có thể sử dụng huấn luyện trong mơ hình học sâu. Khi mã hóa biểu diễn cho bài hát ta cần quan tâm tới 2 kiểu biểu diễn thường thấy trong khuông nhạc là nốt nhạc đơn và hợp âm.

Mã hóa nốt nhạc đơn

Mỗi nốt nhạc đơn cần được thể hiện 2 giá trị là cao độ và trường độ của nốt nhạc đó. Ở đây, để biểu diễn nốt nhạc với 2 giá trị sử dụng chuỗi ký tự để thể hiện như ví dụ trong hình dưới đây. Các nốt nhạc được mã hóa theo các ký tự được quy định sẵn trong từ điển và thêm vào đó là ký tự kèm theo thể hiện trường độ của nốt nhạc đơn đó.

Hình 4.6:Ví dụ biểu diễn nốt nhạc đơn

Mã hóa hợp âm

Hợp âm gồm các nốt nhạc đơn được chơi cùng một lúc. Do đó để phân biệt việc chơi nhạc cùng lúc và chơi nhạc tuần tự cần có thêm một kí tự đặc biệt để thể hiện sự phân biệt giữa hai sự kiện đó.

Hình 4.7:Ví dụ biểu diễn hợp âm

Mã hóa các ký tự đặc biệt

Ngoài việc biếu diễn các ký hiệu âm nhạc cơ bản, khi mã hóa bài hát cần phải có những ký hiệu đặc biệt để mơ hình được huấn luyện có thể phân biệt và xác định khi nào kết thúc khi nào bắt đầu bài hát, mở đầu của khng nhạc, ... Các điều đó giúp mơ hình có thể nhận biết được các luật khi viết một bài nhạc.

xxbos: Bắt đầu bài hát

xxpad: Bắt đầu khng nhạc

xxeos: Kết thúc bài hát

xxsep: Ngăn cách giữa các nốt nhạc, hợp âm với nhau

xxcseq: Bắt đầu chuỗi hợp âm

xxmseq: Bắt đầu chuỗi melody

Sau khi kết hợp các ý tưởng biểu diễn trên ta được cách để mã hóa một bài hát thành chuỗi token để đưa vào mơ hình học sâu. Dưới đây là ví dụ mã hóa một đoạn nhạc ngắn thành chuỗi token. Bên cạnh các ký tự đặc biệt đã nêu trên, cao độ của nốt nhạc được ký hiệu bằng ký tự n kèm theo số là giá trị cao độ của nốt nhạc được biểu diễn bởi tệp MIDI. Trường độ được ký hiệu bằng ký tự d kèm theo số là giá trị trường độ của nốt nhạc được biểu diễn bởi tệp MIDI.

Hình 4.8:Ví dụ biểu diễn

4.4.1.2 Mã hóa nhịp điệu

Việc mã hóa các bài hát từ tệp MIDI thành các chuỗi token không giúp thể hiện được về giai điệu của bài hát. Do đó, ngồi việc mã hóa về cao độ và trường độ của các nốt nhạc trong bài hát, ở đây cần phải thêm việc biểu diễn nhịp điệu cho bài hát. Dãy nhịp điệu sẽ được đi theo chỉ số của các token mã hóa, tại đó chứa giá trị thứ tự theo thời điểm của khuông nhạc mà nốt nhạc thuộc về. Dưới đây là ví dụ cho việc biểu diễn nhịp điệu bô sung cho các token đã mã hóa.

Hình 4.9:Ví dụ biểu diễn nhịp điệu

Như ví dụ trong hình nốt nhạc được mã hóa là token n45 d8 tương ứng với chỉ số 6, 7 trong danh sách tuy nhiên thực chất nốt nhạc được mã hóa đó được vang lên cùng lúc với các nốt trước đó. Vị trí của các token trong dãy mã hóa khơng thể hiện được thời điểm nốt nhạc được vang lên do vậy cần cung cấp thêm cho mơ hình dữ liệu ngữ cảnh về thời điểm các nốt nhạc được chơi trong bài hát.

Việc kết hợp mã hóa token bài hát và thêm vào đó là mã hóa nhịp điệu, giúp mơ hình sẽ nhận được nhiều thông tin hơn về bối cảnh của bài hát khi huấn luyện. Từ đó, làm cho mơ hình sẽ "cảm nhận" tốt hơn tính thời gian trong âm nhạc.

4.4.1.3 Tăng cường dữ liệu (Data augmentation)

Trong âm nhạc, một bài hát được chơi ở âm trưởng hay âm thứ này có thể chuyển qua âm trưởng hay âm thứ khác thơng qua việc tịnh tiến cao độ của các nốt, mà vẫn đảm bảo được cấu trúc và tính hài hồ của giai điệu.

Do đó, có thể thấy vị trí tương đối giữa các nốt nhạc trong bài hát, hay nói cách khác là mối quan hệ về cao độ của các nốt, có tính quan trọng hơn so với vị trí cao độ tuyệt đối của các nốt nhạc trong bài hát. Nhận thấy điểm này, tác giả đã thực hiện chuyển tông/giọng cho các bài hát nhằm làm tăng dữ liệu cho việc huấn luyện mơ hình. Thêm vào đó, việc tăng dữ liệu dường như giúp tổng quát hóa các âm giai và nhịp. Sau đây là ví dụ cho việc chuyển âm trưởng của một

đoạn nhạc nhỏ.

1 # Key of C

2 Tokens : xxbos xxpad n60 d4 n52 d8 n45 d8 xxsep d4 n62 d4

3 # Tranpose to key of E

4 Tokens : xxbos xxpad n64 d4 n56 d8 n49 d8 xxsep d4 n66 d4

4.4.2 Kiến trúc mơ hình

4.4.2.1 Mơ hình sinh nhạc MusicTransformerXL

Nếu hình dung âm nhạc dưới dạng chuỗi (sequence) các token - là các nốt, hợp âm,.. đã được mã hố, được sắp xếp theo thứ tự thời gian, thì bài toán sinh nhạc sẽ tương tự với bài toán sinh văn bản (text generation). Một trong những mơ hình đã đạt được những kết quả rất đáng kinh ngạc trong bài tốn sinh văn bản, chính là mơ hình TransformerXL.

Mơ hình sinh nhạc được nhóm lựa chọn dựa trên mơ hình xử lý ngơn ngữ tự nhiên Trans- formerXL. Như đã phân tích ở trên, mục đích của mơ hình sẽ là dự đoán token âm nhạc tiếp theo dưa trên chuỗi token âm nhạc đầu vào. Dưới đây là hình ảnh minh hoạ kiến trúc mơ hình:

Hình 4.10:Kiến trúc mơ hình MusicTransformerXL

Trong đó, các khối dịch mã (decoder) sử dụng forward attention, tức là có thể quan sát được một chiều (unidirectional attention), là chiều trở về các token trước nó, khơng thể thấy được token ở sau. Vì mục đích của mơ hình là dự đoán token kế tiếp dựa trên chuỗi đầu vào, nên mục tiêu đầu ra chính là đầu vào được dịch (shift) thêm 1.

4.4.2.2 Mơ hình hỗ trợ Seq2Seq

Bên cạnh mơ hình q trình sinh nhạc thành tác vụ dự đoán token âm nhạc tiếp theo dựa trên chuỗi token đầu vào như trên, ta cịn có một số tình huống như sau:

• Nếu đã có trước nhịp điệu, để là cho bài nhạc hài hồ hơn, ta có thể bổ sung vào nhịp điệu bài hát một số hợp âm phù hợp.

• Ngược lại, nếu như đã có sẵn vịng hồ âm, ta có thể sinh giai điệu mới dựa trên vịng hồ âm đã có đó.

Hai tác vụ này có thể hình dung như một tác vụ "dịch" (translate) hai chiều: dịch từ hợp âm sang giai điệu và ngược lại. Một kiến trúc vơ cùng thơng dụng cho bài tốn dịch máy, đó chính là kiến trúc Seq2Seq. Nhóm đã sử dụng mơ hình Seq2Seq để làm mơ hình bổ trợ cho mơ hình sinh nhạc MusicTransformerXL. Mơ hình được huấn luyện để nắm bắt được mối quan hệ giữa hợp âm và giai điệu, sau đó sẽ dựa vào kết quả âm nhạc được sinh ra từ mơ hình MusicTransformerXL bổ sung thêm hợp âm để nhịp điệu sáng tạo và hài hoà hơn. Kiến trúc mơ hình được minh hoạ như sau:

Hình 4.11:Kiến trúc mơ hình Seq2Seq ("dịch" từ hợp âm sang giai điệu)

Trong đó, các khối mã hố (encoder) sử dụng một tầng tập trung 2 chiều, cho phép nó có thể quan sát được các token ở phía trước và sau. Bên cạnh đó, các khối dịch mã sử dụng 2 tầng tập trung. Tương tự như mơ hình chính MusicTransformerXL, khối dịch mã của mơ hình Seq2Seq cũng sử dụng forward attention cho phép nó chỉ nhìn thấy các token ở phía trước token cần dự đoán. Điều này để tránh xảy ra sự gian lận trong q trình huấn luyện. Tầng tập trung cịn lại của khối dịch mã nhận kết quả từ tầng tập trung trước nó và kết quả từ khối dịch mã. Bên cạnh đó, đầu ra liền trước (previous output) cũng được truyền trở lại vào khối dịch mã để nó có thể biết được đoạn nào đã được "dịch" xong rồi.

Tác vụ "dịch" giai điệu từ hợp âm cũng tương tự như "dịch hợp âm từ giai điệu, chỉ có đầu và và đầu ra được đổi ngược lại.

Hình 4.12:Kiến trúc mơ hình Seq2Seq ("dịch" từ giai điệu sang hợp âm)

4.4.2.3 Mơ hình hỗ trợ masked language modeling với BERT

Khi sử dụng các mơ hình học sâu để huấn luyện và sinh nhạc tự động sẽ có những vấn đề như các bài hát được tạo ra sẽ có những phần bị lặp lại nhiều, bài hát khơng có tính đột phá và cực kỳ an toàn và nhịp điệu của bài hát chưa được bắt tai người nghe. Tác giả đưa ra hướng xử lý bằng cách có thể xóa đi một vài đoạn nhạc trong các bài hát, sau đó để mơ hình có thể tự đọng sinh ra những đoạn mới mới để lấp vào chỗ trống. Việc này vừa giúp mơ hình khắc phục hoặc giảm nhẹ các khuyết điểm đã trình bày trước đồng thời tạo ra nhiều kiểu nhạc mới cho mơ hình với việc tự động điền vào như vậy.

Lúc này, sẽ có thêm việc giải quyết bài tốn điền vào chỗ trống. Để giải quyết bài toán điền vào chỗ trống, tác giả đã đưa thêm masked language modeling với BERT vào mơ hình để xử lý vì BERT được sử dụng nhiều trong các bài toán trả lời câu hỏi và điền vào chỗ trống.

Tác giả đã đề xuất việc kết hợp mơ hình và lớp BERT mask ở tầng encoder. Ở đây, các bài hát khi được mã hóa thành chuỗi token và các dữ liệu ngữ cảnh, một số nốt nhạc sẽ được xóa đi thay thế bằng ký tự quy định sau đó sử dụng BERT để mơ hình có thể tự động đốn và điền vào phần bị xóa đi. Việc sử dụng BERT có thể cho mơ hình có thể quan sát các token trước và sau giúp mơ hình có thể nắm được ngữ cảnh của nốt nhạc và ngữ cảnh của nó tốt hơn, qua đó huấn luyện cho mơ hình các luật về nhịp, hịa âm, ... sẽ nhanh hơn. Đồng thời, việc tự mơ hình sinh ra để điền vào có thể tạo ra những bài nhạc biến tấu đi góp phần tạo nên độ đa dạng và sáng tạo cho bài hát.

Hình 4.13:Mơ hình lớp encoder kết hợp với phương pháp masked language modeling sử dụngBERT BERT

4.4.2.4 Mơ hình tổng hợp Multitask MusicTransformer

Như đã phân tích ở trên, mơ hình Seq2Seq gồm cả các khối mã hoá và dịch mã, trong khi mơ hình MusicTransformerXL chỉ gồm các khối dịch mã, mơ hình phối lại BERTMasking chỉ có các khối mã hố. Do đó có thể tận dụng khối dịch mã của mơ hình Seq2Seq để xây dựng mơ hình MusicTransformerXL, và khối mã hố của mơ hình Seq2Seq để xây dựng mơ hình BERTMasking, sau đó thực hiện huấn luyện chúng đồng thời bằng các bộ (đầu vào, mục tiêu) khác nhau. Lưu ý rằng khối dịch mã của mơ hình MusicTransformerXL chỉ nhận giá trị từ khối mã hố trước, khơng có luồng giá trị từ khối mã hố. Mơ hình kết hợp từ 2 mơ hình này được gọi là MultitaskTransformer. Chi tiết hiện thực mơ hình Multitask MusicTransformer sẽ được trình bày chi tiết hơn ở phần tiếp theo.

5

HIỆN THỰC HỆ THỐNG

Trong chương này, chúng tơi trình bày các bước trong q trình hiện thực mơ hình học sâu tổng hợp âm nhạc và các mô tả về hệ thống ứng dụng sử dụng mơ hình học sâu trên qua các phần thu thập và xử lý dữ liệu, mơ tả, đặc tả mơ hình và hiện thực hệ thống ứng dụng

Mục lục

5.1 Thu thập dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.2 Hiện thực mô hình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.1 Thu thập dữ liệu

Trong phần này, chúng tơi xin được trình bày về định dạng tệp tin dữ liệu nhóm sử dụng trong luận văn, các nguồn thu thập dữ liệu và một số thống kê sơ bộ về lượng dữ liệu thu thập được. Đồng thời trong phần này, nhóm cũng sẽ trình bày về các xử lý dữ liệu đầu vào cho mơ hình học sâu tổng hợp âm nhạc.

5.1.1 Tập tin MIDI - Musical Instrument Digital Interface

MIDI (Musical Instrument Digital Interface) hay Giao diện kỹ thuật số dành cho nhạc cụ là chuẩn công nghiệp về nghi thức giao thông điện tử định rõ các nốt âm nhạc trong nhạc cụ điện tử như là bộ tổng hợp chính xác và ngắn gọn, để nhạc cụ điện tử và máy tính trao đổi dữ liệu, hoặc "nói", với nhau. MIDI khơng truyền âm thanh – nó chỉ truyền thơng tin điện tử về một bản nhạc. MIDI có thế được sử dụng cho các mục đích khác, nhưng mục tiêu ban đầu cho việc phát minh MIDI vẫn là phục vụ cho âm nhạc. Chuẩn MIDI bao gồm 3 thành phần: Giao thức (protocol), Phương tiện kết nối (connector) và Dạng tập tin lưu trữ MIDI tiêu chuẩn (standard MIDI file).[28] Ở luận văn của chúng tôi, định dạng của bộ dữ liệu được lưu dưới dạng tập tin lưu trữ MIDI tiêu chuẩn.

Dạng tập tin lưu trữ MIDI tiêu chuẩn là định dạng tập tin cung cấp một phương thức chuẩn hóa cho việc lưu trữ, truyền và đọc các chuỗi âm thanh bởi các hệ thống khác nhau. Tiêu chuẩn này được phát triển và duy trì bởi tổ chức MMA - MIDI Manufacturers Association, và thường dùng định dạng file với đuôi.mid.[29] Bởi kích thước nhỏ ngọn và tiện dụng, những file này được sử

dụng rộng rãi trong các thiết bị điện tử như máy tính, nhạc chng điện thoại di động, các trang web được cấp phép và thiệp mừng kèm âm thanh. Những file này được sinh ra nhằm áp dụng phổ biến và mang những thông tin như giá trị nốt, thời gian và tên. Lời cịn có thể được thêm vào dưới định metadata, và có thể được hiển thị bởi các máy karaoke.

Tập tin lưu trữ MIDI thực chất không phải là tập tin ghi âm mà là tập các lệnh liên quan đến âm thanh như cao độ hay nhịp độ và chiếm ít bộ nhớ hơn gấp nghìn lần so với các bản ghi âm tương tự.[30] Điều này làm việc chia sẻ âm thanh bằng các tập tin MIDI dễ dàng và thú vị hơn, trước khi xuất hiện kết nối internet băng tần cao và ổ cứng dung lượng lớn.

Tuy nhiên với sự nhỏ gọn và tiện lợi của mình mà tập tin lưu trữ MIDI đã được chúng tôi tin tưởng lựu chọn làm định dạng dữ liệu để đọc, ghi cũng như xử lí cho luận văn này.

5.1.2 Tập dữ liệu thu thập

Với mục tiêu ban đầu của luận văn là xây dựng một hệ thống sinh nhạc áp dụng mơ hình học sâu, nhóm quyết định chọn thể loại nhạc cơ bản - nhạc cổ điển - để áp dụng vào mơ hình. Bời vì thể loại đa dạng nhưng vẫn có nét tương đồng giữa những tác phẩm cùng thời và các tác phẩm chịu nhiều ảnh hưởng từ thế hệ trước. Khơng chỉ vậy thể loại này có rất nhiều tập dữ liệu có sẵn và miễn phí trên internet, đồng thời những tập dữ liệu này dễ dàng phân loại theo nhịp và tác giả. Từ đó nhóm tiếp tục tìm kiếm các tập dữ liệu của các bài nhạc cổ điển dưới dạng các file MIDI của các nhà soạn nhạc tên tuổi như Bach (1685 - 1750), Beethoven (1770 - 1827), Mozart (1756 - 1791), Chopin (1810 - 1849), ...

vào bộ dữ liệu liên quan đến các tác giả nổi tiếng kể trên.

Nhóm tổng hợp các bản nhạc và phân loại theo nhịp với tổng cộng 330 bản nhạc, nhóm tập trung chủ yếu vào các tập dữ liệu có nhịp 2:4, 3:4, 4:4 với thơng tin số lượng cụ thể của từng tập được trình bày ở bảng 5.1.

Nhịp Tổng số bài 2:4 58

3:4 71 4:4 112

Bảng 5.1:Bảng thống kê số lượng bản nhạc phân loại theo nhịp

5.1.3 Lọc dữ liệu

Với tập dữ liệu nhóm đã thu thập từ các nguồn, nhóm phân loại các bài hát theo nhịp 2:4, 3:4,

Một phần của tài liệu Tổng hợp âm nhạc sử dụng học sâu (Trang 64)

Tải bản đầy đủ (PDF)

(94 trang)