Generating Song Recommendations
Jaykumar Patel, Janvi Patel, Aniketh Devarasetty, Malvika Vaidya, Seann Robbins, Tanner Hudnall
Introduction
In this article, we will showcase our initial attempts at creating a song recommendation model. We will give a description of our dataset and how it was used. We will then explain the training of our model that generates a short list of song recommendations given an input song. Finally, we will discuss the limitations of our current model and how we would hope to improve it in the future.
Goal
Khi thực hiện nghiên cứu, nhiệm vụ này đã được thử trước đó. Tuy nhiên, hầu hết các hệ thống đề xuất mà chúng tôi nghiên cứu đều không tính đến ý nghĩa đằng sau lời bài hát. Ví dụ: bài viết này xem xét các tính năng bài hát được cung cấp bởi thư viện Spotipy không cung cấp lời bài hát mà chỉ cung cấp các tính năng âm nhạc như “khả năng nhảy”, “độ ồn”, “phím”, v.v. Bài viết này sẽ tiếp tục phân tích các tính năng đó chẳng hạn như phân cụm, t-SNE và PCA. Hướng dẫn này của GeekforGeek cũng sử dụng cách tiếp cận tương tự.
Ngoài ra, bài viết này xem xét sự kết hợp giữa cách tiếp cận dựa trên “nội dung” (đề xuất các bài hát dựa trên những gì người dùng đã nghe trong quá khứ) và cách tiếp cận dựa trên “cộng tác” (đề xuất các bài hát dựa trên những gì những người dùng tương tự khác thích). Tuy nhiên, cách tiếp cận của bài báo cũng không giải thích được lời bài hát hoặc ý nghĩa khi xem xét các tính năng.
Hơn nữa, chúng tôi đã nhận thấy một vấn đề trong đó mô hình đề xuất của Spotify nhấn mạnh quá mức vào lịch sử nghe của người dùng khi đề xuất các bài hát. Chúng tôi muốn giải quyết vấn đề này bằng cách tập trung cụ thể vào bài hát và các tính năng của nó (chứ không phải lịch sử của người dùng) khi đề xuất bài hát.
Chúng tôi muốn nắm bắt ý nghĩa của các bài hát cũng như các đặc điểm âm nhạc khác, điều mà các mẫu máy trước đây không làm được. Điều này sẽ bao gồm lời bài hát cũng như thông tin mà API Spotify cung cấp, chẳng hạn như “khả năng khiêu vũ”, “năng lượng”, “phím”, v.v. Chúng tôi sẽ gọi thông tin này mà Spotify API cung cấp là “tính năng âm nhạc” kể từ bây giờ.
Lý tưởng nhất là mô hình của chúng tôi có thể phân tích lời bài hát và tạo một mô tả hoặc tóm tắt ngắn về bài hát đầu vào và đề xuất tối đa 5 bài hát hàng đầu giống nhau về phần mô tả của bài hát đầu vào cũng như các đặc điểm âm nhạc.
Thiết kế mô hình:
- Vì mục tiêu của chúng tôi là đa phương thức nên chúng tôi quyết định chia mô hình của mình thành hai mô hình con.
- Mô hình đầu tiên của chúng tôi là mô hình tóm tắt NLP sử dụng lời bài hát của bài hát đầu vào để tạo mô tả.
- Mô hình thứ hai của chúng tôi là mô hình KNN Clustering tìm các bài hát tương tự với bài hát đầu vào về các tính năng âm nhạc.
- Để phát triển các mô hình này, chúng tôi cần có một đường dẫn dữ liệu để thu thập tất cả các tính năng mà chúng cần.
Chúng tôi đã xem xét nhiều nơi khác nhau để lấy dữ liệu, chẳng hạn như Kaggle và Hugging Face. Tuy nhiên, chúng tôi chỉ tìm thấy dữ liệu bao gồm lời bài hát HOẶC các tính năng âm nhạc. Để tạo mô hình tóm tắt NLP có thể tạo mô tả của bài hát đầu vào, chúng tôi cần một bộ dữ liệu có lời bài hát cùng với mô tả bài hát để đào tạo mô hình NLP mà chúng tôi cũng không thể tìm thấy. Hơn nữa, mô hình KNN sẽ cần các tính năng âm nhạc. Do đó, thách thức lớn nhất của dự án này là thu thập dữ liệu cần thiết để huấn luyện các mô hình của chúng tôi.
Đây là cách tiếp cận cuối cùng đối với đường dẫn dữ liệu của chúng tôi:
- Chúng tôi đã nhận tập dữ liệu ban đầu từ Kaggle, bao gồm các tính năng âm nhạc của các bài hát.https://www.kaggle.com/datasets/maharshipandya/-spotify-tracks-dataset
- Sau đó, chúng tôi đã lọc tập dữ liệu ban đầu gồm hơn 100.000 bài hát để chỉ bao gồm những bài hát có mức độ phổ biến lớn hơn 50. Điều này đã giảm tập dữ liệu xuống còn ~26.000 bài hát. Chúng tôi đã làm điều này bởi vì lý tưởng nhất là những bài hát mà chúng tôi đề xuất nên được yêu thích và nói chung, mức độ phổ biến của một bài hát tương quan với mức độ được yêu thích.
- Sau đó, chúng tôi chọn ngẫu nhiên 10.000 bài hát. Chúng tôi làm điều này vì chúng tôi sẽ phải thu thập lời bài hát và mô tả của những bài hát này và sẽ không khả thi (về thời gian và tiền bạc) nếu chúng tôi xem xét mọi bài hát trong bộ dữ liệu.
- Sau đó, chúng tôi sử dụng thư viện fastText để lọc ra các bài hát không phải bằng tiếng Anh bằng mô hình lid.176.ftz .
- Sau đó, chúng tôi đã sử dụng LyricsGenius, ứng dụng khách python cho API Genius.com để có thể thu thập lời bài hát cho các bài hát của chúng tôi.
- Sau đó, để tạo mô tả cho từng bài hát, chúng tôi đã sử dụng API của ChatGPT với truy vấn sau.
Chúng tôi đã xây dựng truy vấn này để tạo đề xuất từ các đặc điểm nội tại của bài hát và không có các đặc điểm nhận dạng (chẳng hạn như tên nghệ sĩ hoặc tên bài hát) nhằm thúc đẩy sự đa dạng và phạm vi đề xuất rộng hơn.
Sau khi cung cấp tập dữ liệu Kaggle của chúng tôi thông qua hệ thống này, chúng tôi còn lại khoảng 5000 bài hát bao gồm thông tin nhận dạng, tính năng âm nhạc, lời bài hát và mô tả của bài hát. Tập dữ liệu được xử lý trước này tạo thành cơ sở để phát triển hai mô hình mục tiêu của chúng tôi. Sau đây, chúng tôi sẽ gọi tập dữ liệu này đơn giản là “tập dữ liệu”.
Mô hình tóm tắt
Một trong những nhiệm vụ chính là đào tạo mô hình tóm tắt sẽ được sử dụng để tạo mô tả bài hát cho bài hát đầu vào. Đối với điều này, chúng tôi đã sử dụng ý tưởng về các mô hình chuyển nhượng.
Chúng tôi đã sử dụng mô hình t5-small để tạo bản tóm tắt cho lời bài hát mà người dùng nhập vào. T5 là mô hình bộ mã hóa-giải mã được đào tạo trước để thực hiện các tác vụ khác nhau như dịch thuật và tóm tắt. Tất cả những gì mô hình cần trong một văn bản đầu vào với tiền tố của nhiệm vụ của nó, chẳng hạn như “tóm tắt: <văn bản đầu vào>”. Tuy nhiên, mô hình cần một số tinh chỉnh để tạo ra đầu ra tốt nhất cho một ứng dụng cụ thể. Vì vậy, chúng tôi đã đào tạo mô hình t5-small để tóm tắt lời bài hát, sử dụng bộ dữ liệu gồm ~5.000 bài hát tiếng Anh và ChatGPT đã tạo các bản tóm tắt mục tiêu. Mô hình được đào tạo trong 40 kỷ nguyên và có mức thất thoát entropy chéo xấp xỉ 2. Mặc dù mức thất thoát này tương đối cao nhưng đây là một con số hợp lý khi chỉ đào tạo trên 5.000 mẫu.
Sau đó, các tham số của mô hình được lưu vào tệp torch. Sau khi các tham số được tải vào trình tóm tắt được đào tạo trước mặc định, mô hình sau đó có thể tạo một bản tóm tắt với một số lời bài hát làm đầu vào.
So sánh mô tả
Chúng tôi cần một cách để so sánh mô tả của bài hát đầu vào với mô tả của ~5000 bài hát trong tập dữ liệu của chúng tôi để xác định 500 bài hát tương tự hàng đầu.
Một cách để so sánh hai văn bản là chuyển đổi chúng sang định dạng vector hóa và sau đó tính toán độ tương tự cosin giữa chúng, điều này cho thấy chúng giống nhau như thế nào về nội dung. Kỹ thuật này đo góc cosin giữa hai vectơ, trong đó các vectơ của văn bản giống nhau hơn sẽ nằm gần nhau hơn trong không gian.
Do đó, để so sánh các bản tóm tắt bài hát, tất cả các bản tóm tắt cần được chuyển đổi thành biểu diễn véc-tơ. Có thể thực hiện hai cách tiếp cận — CountVectorizer hoặc TfidVectorizer. CountVectorizer chỉ đơn giản là đếm số lần xuất hiện của mỗi từ trong tài liệu, tạo ra một ma trận thưa thớt trong đó mỗi hàng đại diện cho một tài liệu và mỗi cột đại diện cho một từ. Mặt khác, TfidVectorizer (viết tắt của Thuật ngữ tần số-nghịch đảo tần số tài liệu), tính đến tần suất của thuật ngữ trong tài liệu cũng như tần suất nghịch đảo của thuật ngữ trong tài liệu. Tần suất nghịch đảo này thể hiện 'độ hiếm' của thuật ngữ, do đó, kỹ thuật này tính đến cả tần suất và độ hiếm của từ, do đó mang lại trọng số cao hơn cho các từ quan trọng hơn, độc đáo hơn và trọng số thấp hơn cho các từ phổ biến.
Tóm tắt trong tập dữ liệu và tóm tắt dự đoán từ mô hình đã được vector hóa bằng cách sử dụng TfidVectorizer của python. Độ tương tự cosin được tính toán giữa mỗi mục nhập trong tập dữ liệu và tóm tắt dự đoán. 500 bài hát hàng đầu từ tập dữ liệu dẫn đến điểm số tương tự cosin cao nhất về cơ bản đại diện cho 500 bài hát từ tập dữ liệu có ý nghĩa và nội dung gần nhất với bản tóm tắt dự đoán của bài hát đầu vào.
Cách tiếp cận tương tự vector hóa và cosin này dường như hoạt động tốt. Đối với một bản tóm tắt dự đoán nhất định, “Một người đàn ông và một người phụ nữ bước vào một mối quan hệ lãng mạn bị gia đình họ coi thường. Họ phải chiến đấu vì tình yêu của mình,” một trong những gợi ý hàng đầu là bài hát có tên “Again” của Wande Coal. Bản tóm tắt do ChatGPT tạo ra cho bài hát này là “Bài hát nói về một người đàn ông yêu một người phụ nữ và muốn dành phần còn lại của cuộc đời mình với cô ấy. Anh ấy bảo cô ấy đừng nghe những gì người khác nói về anh ấy và hứa sẽ làm cho cô ấy hạnh phúc.” Hai văn bản này có nội dung tương đối giống nhau ở chỗ đều nắm bắt được khía cạnh lãng mạn và hơi bị cấm đoán của mối quan hệ.
Cách tiếp cận khác:
Another approach to vectorizing the song lyrics is using word embeddings. A BERT transformer model can be trained on the song’s summaries to achieve some irrelevant task. After the model is trained, each summary can be passed into the model as a document. For each document, the CLS document embedding will be extracted from one of the output layers of the model. A CLS document embedding is the vector representation of the CLS token, which is a token that captures the entire document. This will give us the vector representations of each summary, and then the cosine similarities can be computed.
We found that this technique was not necessary for the scope of the project. It seemed that TfidVectorizer was capturing the meaning of the summaries fairly decently and resulted in a strong output.
Musical Feature Comparison
Sau đó, chúng tôi cần một cách để xác định 5 bài hát tương tự hàng đầu trong số 500 bài hát dựa trên các đặc điểm âm nhạc. Vì các tính năng âm nhạc là số, chúng tôi có thể sử dụng K-Nearest-Neighbors bởi sklearn .
Sau khi lọc ra những bài hát có phần lời ít giống nhau nhất, bước tiếp theo là chọn những bài hát có nét giống bài hát nhất. Một cách thuận tiện để đo lường những điểm tương đồng về tính năng đó là phân tích phân loại tính năng bản nhạc của Spotify, phân loại tính năng này định lượng các tính năng cụ thể của bài hát, chẳng hạn như “âm thanh” hoặc “năng lượng”. Sử dụng API Spotify, chúng tôi có thể thu thập các số liệu này cho bất kỳ bài hát đầu vào nào, sau đó chạy thuật toán sau để nhận các bài hát tương tự.
K Nearest Neighbors là một thuật toán học máy không giám sát có thể được sử dụng để tìm k điểm dữ liệu gần nhất với một điểm nhất định, dựa trên sự giống nhau về các đặc điểm của điểm dữ liệu đầu vào và các điểm trong tập dữ liệu. Chúng tôi có thể sử dụng kỹ thuật này để so sánh các tính năng của bài hát đầu vào của người dùng với tất cả các bài hát đã lọc, để tìm k bài hát hàng đầu có các tính năng âm nhạc gần nhất. Đối với dự án của chúng tôi, chúng tôi quyết định rằng việc tìm kiếm 5 bài hát lân cận hàng đầu sẽ mang lại đầu ra hợp lý, tất cả đều phải có các đặc điểm âm nhạc tương tự như bài hát của người dùng.
Luồng người dùng
Đây là quy trình trông như thế nào đối với người dùng muốn đề xuất. Họ sẽ nhập một bài hát mà họ thích. Chúng tôi sẽ sử dụng API LyricGenius để lấy lời bài hát đầu vào. Sau đó, chúng tôi sẽ sử dụng những lời bài hát đó để tạo mô tả bằng mô hình tóm tắt NLP của mình và so sánh mô tả đó với mô tả của các bài hát trong tập dữ liệu của chúng tôi để xác định 500 bài hát tương tự hàng đầu. Sau đó, chúng tôi sẽ lấy các tính năng âm nhạc của bài hát đầu vào bằng API của Spotify và so sánh chúng với 500 bài hát để nhận được 5 đề xuất hàng đầu.
Kết quả
Mô hình tóm tắt có mức mất entropy chéo xấp xỉ 2 trên bộ xác thực. Chúng tôi cũng sử dụng các chỉ số đánh giá như Rouge1, Rouge2 và RougeL. Rouge1 và rouge2 đại diện cho số unigram và bigram tương ứng khớp giữa lời bài hát gốc và dự đoán. Điểm RougeL đại diện cho dãy con chung dài nhất. Điểm số cho các số liệu này lần lượt là 0,25, 0,07 và 0,17, trong đó các giá trị cao hơn có lợi hơn.
Mặc dù tỷ lệ mất mát tương đối cao và điểm rouge thấp, nhưng chúng tôi đã sử dụng đánh giá của con người để xác định rằng các bản tóm tắt được tạo tương đối giống với các bản tóm tắt do ChatGPT tạo ra.
Dưới đây là so sánh mô tả do ChatGPT tạo và mô hình tóm tắt của chúng tôi (t5-small) cho bài hát “Riptide - The Chainsmokers”:
Mô tả được tạo bởi ChatGPT:
Bài hát nói về mong muốn dành cả cuộc đời với người mà họ quan tâm và tận dụng tối đa thời gian họ có với nhau. Lời bài hát cũng chạm đến nỗi sợ mất đi người ấy và tự hỏi họ sẽ đi về đâu khi mọi chuyện kết thúc.
Mô tả Được tạo bởi mô hình tóm tắt của chúng tôi — t5-small:
Bài hát nói về một người đang cố gắng thay đổi cuộc sống của họ và sống với họ nếu họ chỉ có một đêm. Lời bài hát mô tả cảm giác lạc lõng một mình và họ cảm thấy như mất đi người thân yêu của mình. Mặc dù vậy, nữ ca sĩ muốn sống hết mình với một người và chỉ qua đêm với người kia.
Để so sánh các mô tả của văn bản và tính toán KNN để xác định các đề xuất cuối cùng, chúng tôi không có bất kỳ số liệu đánh giá nào. Vì đây là những kỹ thuật học tập không giám sát nên chúng tôi cũng sử dụng đánh giá của con người.
Dưới đây là các đề xuất được tạo cho bài hát “Riptide - The Chainsmokers”:
Kết luận và công việc trong tương lai
Chúng tôi nhận thấy rằng các bài hát được tạo ra có một mô-típ khá chung, nhưng phong cách của các bài hát đôi khi khác nhau. Điều này là do chúng tôi đã không tính đến thể loại khi dự đoán sự giống nhau của bài hát. Vì vậy, đây là điều mà chúng tôi muốn bổ sung trong tương lai.
Ngoài ra, chúng tôi muốn tăng số lượng tính năng của một bài hát, chẳng hạn như thêm chữ ký thời gian của bài hát, nhạc cụ bài hát và thông tin nghệ sĩ. Điều này sẽ cho phép mô hình đề xuất các bài hát giống nhau hơn.
Hơn nữa, chúng tôi cũng muốn tăng kích thước của tập dữ liệu của mình. Điều này sẽ cho phép các mô tả bài hát của mô hình tóm tắt chính xác hơn, cải thiện hiệu suất tổng thể.

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































