Với việc đưa ra cơ chế hồi quy cấp phân đoạn tái sử dụng giá trị trạng thái, tác giả đã thành cơng giải quyết được hạn chế của mơ hình Transformer truyền thống trong việc nắm bắt ngữ cảnh và phụ thuộc xa. Đồng thời, nhờ ngữ cảnh được truyền đi xun suốt, mà chi phí cho việc đánh giá mơ hình đã giảm đi rất nhiều. Thay vì phải dịch (shift) từng token một để tạo ra từng phân đoạn mới và đầu ra mới như Transformer truyền thống, thì TransformerXL có thể dịch từng phân đoạn bởi khả năng nắm bắt ngữ cảnh của mình. Kết quả đánh giá mơ hình TransformerXL đã vượt kiến trúc RNN cả về độ chính xác và thời gian huấn luyện, trong mơ hình ngơn ngữ cấp độ kí tự. TransformerXL đã đánh bại mơ hình hồi quy trong cả mơ hình ngơn ngữ cấp độ từ vựng và kí tự.
Tuy nhiên, nếu chỉ có cơ chế hồi quy cấp phân đoạn thì khơng thể tạo nên sức mạnh của TransformerXL. Bởi lẽ, mơ hình Transformer truyền thống vẫn đang sử dụng cơ chế mã hố dựa vào vị trí tuyệt đối (absolute positional encoding) của token trong phân đoạn. Điều này dẫn đến, những token thuộc những phân đoạn khác nhau, sẽ có cùng giá trị mã hố vị trí. Do đó sẽ dẫn đến sự sai sót trong tính tốn, vì mơ hình sẽ khơng phân biệt được sự khác biệt về vị trí giữa những token này. Đó là lý do ra đời của kĩ thuật mã hố vị trí tương đối (relative positional encoding).
2.10.2 Kĩ thuật mã hố vị trí tương đối
Để biểu diễn thứ tự của các token, ngoài sử dụng số thứ tự - hay vị trí tuyệt đố của token, thì có thể biểu diễn thơng qua khoảng cách giữa token đó với token đang xét. Ý tưởng về mã hố vị trí tương đối của token đã được đề xuất bởi một vài tác giả khác trước đó, tuy nhiên trong bài báo của mình, tác giả đã đề xuất một kĩ thuật mới. Tác giả cũng phân tích rằng, mục đích của bước mã hố vị trí, là nhằm cung cấp cho mơ hình thơng tin gợi ý hay khuynh huớng (bias) nên chú ý tại đâu. Do đó, thay vì kết hợp thông tin khuynh hướng (bias) này với chung với vector embedding ban đầu, ta có thể truyền (inject) nó vào điểm tập trung (attention score) tại mỗi lớp. Trước khi phân tích điểm mới của tác giả, ta hãy nhắc lại cơng thức tính điểm tập trung giữa truy vấnqj và khốkicủa mơ hình Transformer truyền thống:
Aabs i,j =ET xiWT qWkExj | {z } (a) +ET xiWT qWkUj | {z } (b) +UT i WT qWkExj | {z } (c) +UT i WT qWkUj | {z } (d) (2.8) Trong đó:
Elà word embedding của token
Ulà mã hố vị trí tuyệt đối của token trong chuỗi đầu vào
Tác giả đã viết lại công thức trên cùng với những cải tiến của mình như sau:
Arel i,j =ET xiWT qWk,EExj | {z } (a) +ET xiWT qWk,RRi−j | {z } (b) +uTWk,EExj | {z } (c) +vTWk,RRi−j | {z } (d) (2.9) Những sự cải tiến đó được tác giả liệt kê và giải thích như sau:
• Thứ nhất, tác giả đã thay ma trận mã hố vị trí tuyệt đốiUjthành ma trận biểu diễn vị trí tương đối giữa 2 token i, j Ri−j trong các thành phần (b) và (d). Ma trận này được tính bằng cơng thức mã hố vị trí của mơ hình Transformer.
• Thứ hai, tác giả đề xuất sử dụng tham số có khả năng huấn luyện (trainable parameter)
u để thay thế cho truy vấnUT i WT
q trong thành phần (c). Lý giải cho sự thay đổi này, tác giả chỉ ra rằng,UT
iWT
q là không thay đổi trên các token khác nhau và khác token hiện tại, đồng nghĩa với thiên kiến tập trung sẽ như nhau cho mọi token khác token chứa truy vấn. Điều này chưa hợp lý, khi mà sự phụ thuộc giữa các token là khơng giống nhau. Lấy ví dụ cho câu "I see a man who is crying", "who" sẽ có quan hệ với "a man" hơn các từ cịn lại. Hoặc có thể thấy, thơng thường các từ sẽ có quan hệ phụ thuộc vào những từ gần nó hơn là những từ ở xa. Với lý do tương tự, tác giả cũng sử dụng tham số có khả năng huấn luyệnvđể thay thế cho truy vấnUT
i WT
q trong thành phần (d).
• Cuối cùng, tác giả thực hiện tách ma trận trọng số khoáWkthành 2 ma trậnWk,RvàWk,E
mang ý nghĩa lần lượt là khoá dựa trên nội dung (content-based key) và khoá dựa trên vị trí (location-based key).
Với sự kết hợp của cơ chế hồi quy cấp phân đoạn tái sử dụng giá trị trạng thái cùng kĩ thuật mã hố vị trí tương đối, mơ hình TransformerXL đã giải quyết được những hạn chế của mơ hình gốc Transformer, đạt được những kết quả SOTA trên nhiều tập dữ benchmark, qua đó vượt qua cả
Transformer và mơ hình hồi quy về độ chính xác. Bên cạnh đó, so sánh với mơ hình Transformer truyền thống, mơ hình TransformerXL đã nâng tốc độ quá trình đánh giá lên gấp 1874 lần trong bài tốn mơ hình ngơn ngữ cấp độ kí tự. Với những ưu thế nổi bật về khả năng nắm bắt phụ thuộc xa và tốc độ huấn luyện của mơ hình, nhóm đã quyết định chọn mơ hình TransformerXL để xây dựng mơ hình sinh nhạc cho đề tài luận văn.
3
CÔNG NGHỆ SỬ DỤNG
Trong chương này, chúng tôi xin giới thiệu các cơng nghệ, ngơn ngữ lập trình và một số frame- work mà nhóm đã sử dụng để phát triển và hiện thực luận văn này.
Mục lục
3.1 Ngơn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Thư viện và nền tảng sử dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 Ngơn ngữ lập trình
3.1.1 Python
Pythonlà ngơn ngữ lập trình thơng dịch do Guido van Rossum tạo ra năm 1990 và được phát triển trong một dự án mã nguồn mở. Python là ngôn ngữ lập trình bậc cao, sử dụng kiểu cấp phát bộ nhớ động, hỗ trợ các phương thức lập trình như lập trình hướng đối tượng, lập trình hàm và thường được sử dụng trong mảng nghiên cứu học máy và phân tích dữ liệu.
Ưu điểm
• Cú pháp đơn giản, dễ tiếp cận.
• Hỗ trợ nhiều thư viện về học máy, học sâu như Tensorflow, Pytorch, Keras, ... và các thư viện xử lý dữ liệu như Pandas, Numpy, Scipy,...
• Có cộng đồng phát triển lớn.
Nhóm quyết đinh sử dụng Python phiên bản 3 để thực hiện các thành phần trong luận văn.
3.1.2 JavaScript
JavaScriptđược tạo ra bởi Brandan Eich, một nhân viên của Netspace, vào tháng 9 năm 1995, nó là ngơn ngữ lập trình phổ biến nhất thế giới trong suốt 20 năm qua. JavaScript là ngơn ngữ lập trình thơng dịch, được dùng để viết các ứng dụng web ở phía người dùng và các ứng dụng của máy chủ.
Ưu điểm
• Ngơn ngữ dễ học, dễ sử dụng.
• Hoạt động được trên nhiều trình duyệt, nền tnagr khác nhau.
• Có nhiều thư viện, framework hỗ trợ cho việc viết ứng dụng web.
Với các ưu điểm của JavaScript, nhóm sử dụng JavaScript để hiện thực các thành phần trong luận văn.
3.2 Thư viện và nền tảng sử dụng
3.2.1 Thư viện Music21
Music21 là bộ cơng cụ phân tích âm nhạc mã nguồn mở được viết bằng ngôn ngữ Python. Music21 được tạo ra bởi Music and Theater Arts Section ở đại học MIT, được đóng góp và phát
triển bởi cộng đồng. Bộ cơng cụ này cho phép người dùng có thể phân tích các thuộc tính về nhạc lý của âm nhạc như các nốt và hợp âm cấu thành, phân tích cao độ, trường độ từng nốt, loại nhạc cụ,... Music21 hỗ trợ xử lý nhiều định dạng file khác nhau, trong đó có cả định dạng MIDI.
Ưu điểm
• Hỗ trợ phân tích nhiều thuộc tính của âm nhạc như nốt, hợp âm, nhịp, loại nhạc cụ,...
• Hỗ trợ sinh ra file âm nhạc.
• Là một framework được thiết kế theo hướng đối tượng nên dễ dàng trong việc xử lý các định dạng dữ liệu phức tạp.
• Hỗ trợ đọc và ghi nhiều định dạng file khác nhau.
3.2.2 Thư viện Numpy
Numpy(viết tắt của "Numeric Python" hoặc "Numerical Python") là mộ thư viện lõi phục vụ cho khoa học máy tính của Python, hỗ trợ cho việc tính tốn các mảng nhiều chiều, có kích thước lớn với các hàm đã được tối ưu áp dụng lên các mảng nhiều chiều đó. Numpy đặc biệt hữu ích khi thực hiện các hàm liên quan tới đại số tuyến tính.
Ưu điểm
• Được thiết kế để tính tốn khoa học.
• Tính tốn và triển khai hiệu quả trên các mảng đa chiều.
3.2.3 Thư viện Pytorch
Pytorch là một thư viện học máy mã nguồn mở cho Python, nó được dùng để tạo ra các mơ hình học sâu với kiến trúc phức tạp do bản thân Pytorch đã thực hiện sẵn các module trong các mạng lưới học sâu, và cũng chính vì vậy nên được nhiều người mới tiếp cận lựa chọn. Cấu trúc dữ liệu cơ bản của Pytorch là các tensor, mang giá trị, kiểu dữ liệu và kích thước của dữ liệu.
Ưu điểm
• Dễ dàng để chỉnh sửa và hiểu các mã lỗi.
• Gồm rất nhiều hàm mất mát.
• Có thể xem là phần mở rộng Numpy cho GPU.
3.2.4 Thư viện fastai
fastailà một thư viện Python mã nguồn mở, được xây dựng trên các module của Pytorch. Thư viện fastai cung cấp các thành phần bậc cao để nhanh chóng có kết quả tiêu chuẩn, đồng thời cung cấp các thành phần cơ bản có thể kết hợp để tạo cách tiếp cận mới.
Ưu điểm
• Có thể dễ dàng tiếp cận và cho hiệu quả tốt.
• Có đầy đủ các thành phần trong các mơ hình cơ bản và nâng cao của học máy.
3.2.5 Thư viện Flask
Flasklà một web framework được xây dựng bằng ngơn ngữ Python. Flask có thể sử dụng để xây dựng các ứng dụng web từ đơn giản đến phức tạp, cung cấp đầy đủ các công cụ để xây dựng ứng dụng.
Ưu điểm
• Là thư viện đọc lập, ít sử dụng các thư viện bên ngồi khác nên ít bị phụ thuộc, dễ dàng phát hiện và xử lý các lỗi.
• Flask có ưu điểm là nhẹ.
3.2.6 Thư viện React
React là một thực viện JavaScript được dùng để xây dựng giao diện người dùng. react được duy trì và phát triển bởi Facebook và một cộng đồng các nhà phát triển. React được sử dụng để phát triển các ứng dụng trang đơn hoặc di động. React được xây dựng quanh các thành phần (component) và quản lý các trạng thái của riêng chúng, sau đó kết hợp chúng để tạo các giao diện phức tạp. Khi dữ liệu có sự thay đổi, React sẽ cập nhật và biểu diễn lại đúng các thành phần phù hợp. Mục đích cốt lõi của React khơng chỉ khiến cho trang web phải thật mượt mà còn phải nhanh, khả năng mở rộng cao và đơn giản. Sức mạnh của nó xuất phát từ việc tập trung vào các thành phần riêng lẻ. Chính vì vậy, thay vì làm việc trên tồn bộ ứng dụng web, React cho phép có thể chia nhỏ giao diện người dùng phức tạp thành các thành phần nhỏ đơn giản hơn. Một trong những đựac trưng duy nhất của React đó chính là việc biểu diễn dữ liệu khơng những có thể thực hiện ở phía server mà cịn ở tầng khách.
Ưu điểm
Những ưu điểm khi sử dụng React:
• Dễ viết: viết template React dễ dàng với việc viết các trang HTML với nội suy (interpo- lation) nhờ vào JSX.
• Tách biệt dữ liệu và hiển thị trình bày: vì thư viện React có vai trị là View trong mơ hình MVC nên việc hiển thị có thể tùy chỉnh.
• Render phía server: React chỉ là một thư viện thành phần, nó có thể được hiển thị cả trong trình duyệt bằng cách sử dụng DOM và một chuỗi HTML mà máy chủ có thể phân phối do đó tối ưu hóa việc tải trang.
• React hỗ trợ cho người lập trình về re-render và Document Object Model.
3.2.7 Thư viện Pymongo
Pymongolà một thư viện Python hỗ trợ các thao tác với cơ sở dữ liệu MongoDB, bao gồm việc tạo MongoClient kết nối dựa trên URI (Uniform Resource Identifier) của cơ sở dữ liệu và các thao tác Create, Read, Update, Delete (CRUD) trên cơ sở dữ liệu, cú pháp của thư viện Pymongo khá giống với các thao tác với MongoDB từ console.
3.3 Công cụ sử dụng
3.3.1 Môi trường Google Colaboratory
Google Colaboratory(Google Colab hoặc Colab), một sản phẩm từ Google Research, là một môi trường notebook Jupyter được host, sử dụng miễn phí và khơng cần thiết lập. Google đã phát hành Google Colab cho cơng chúng với mục đích cải thiện giáo dục và nghiên cứu trí tuệ nhân tạo, học máy, phân tích dữ liệu, ... Colab khơng cần u cầu cài đặt hay cấu hình máy tính, mọi thứ có thể chạy thơng qua trình duyệt, có thể sử dụng tài ngun từ CPU tốc độ cao, GPU và cả TPU đều được Google cung cấp cho người dùng.
Ưu điểm
Khi sử dụng Colab có các ưu điểm như:
• Google Colab miễn phí.
• Cung cấp đầy đủ CPU, GPU, TPU.
• Dễ dàng sử dụng và truy cập, kết nối lưu trữ trực tiếp trên Google Drive, Github.
• Có tích hợp sẵn các thư viện phổ biến Keras, TensorFlow, PyTorch, và OpenCV.
3.3.2 MongoDB
MongoDB là một cơ sở dữ liệu mã nguồn mở và là cơ sở dữ liệu NoSQL hàng đầu, được rất nhiều người sử dụng. MongoDB được viết bằng ngơn ngữ lập trình C++. MongoDB hoạt động dựa trên các khái niệm Collection và Document. Nhóm sử dụng MongoDB cho việc lưu trữ cơ sở dữ liệu hoạt động.
Ưu điểm
• MongoDB là một cơ sở dữ liệu đa nền tảng.
• Hiệu suất và tính khả dụng cao.
4
CÁC CƠNG TRÌNH LIÊN QUAN
Trong chương này, nhóm xin trình bày sợ lược một số mơ hình học sâu tự sinh nhạc mà nhóm đã tiếp cận trong q trình thực hiện luận văn, và mơ hình được nhóm lựa chọn cho đề tài luận văn của mình
Mục lục
4.1 Mơ hình Biaxial LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Mơ hình DeepJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Đánh giá mơ hình Biaxial LSTM và DeepJ . . . . . . . . . . . . . . . . . . . . . 48
4.1 Mơ hình Biaxial LSTM
Daniel Johnson đã phát triển một mơ hình tự sinh nhạc áp dụng mơ hình học sâu sử dụng mơ hình LSTM song trục hay - Biaxial LSTM.[24]. Ở cơng trình của mình, Daniel Johson đã tham khảo, tóm tắt và chỉ ra các vấn đề của các mơ hình học sâu dự đốn âm nhạc được cơng bố trước đó như:
• "Recurrent Neural Networks for Folk Music Generation"[25] của Bob Sturm ứng dụng mơ hình charater-based với LSTM để tự sinh ra âm nhạc dưới dạng văn bản (theo dạng nốt ABC). Mơ hình này chỉ có thể tạo ra từng nốt tại mỗi nhịp.
• "A First Look at Music Composition using LSTM Recurrent Neural Networks"[26] của Doug Eck đã ứng dụng LSTM trong việc tự sinh ứng biến trong dịng nhạc blues. Các chuỗi được chọn đều có chung một tập hợp âm, và kết quả của mơ hình là một node ouput cho từng nốt, tính tốn xác xuất của từng nốt tại từng thời điểm. Kết quả này khả quan hơn việc việc sinh nốt từ một mẫu chung của [25], nhưng vẫn còn bị giới hạn kết quả đầu ra. Đồng thời mơ hình này cũng khơng phân biệt được sự khác nhau của việc đánh một nốt và giữ một nốt, vì vậy mạng mơ hình này khơng thể sắp xếp những nốt được giữ.
• "Modeling Temporal Dependencies in High-Dimensional Sequences: Application to Poly- phonic Music Generation and Transcription" [27], áp dụng mơ hình với 2 phần. Phần đầu ứng dụng RNN để xử lý việc phụ thuộc vào thời gian nhằm sinh ra một tập kết quả đầu