Spotify Copilot is a project with the aim to take the first steps towards a conversational recommendation system (CRS) for music by allowing users to generate custom playlists given a playlist name and thus testing the expressiveness of the Spotify Recommendation System.
The project leverages Spotify's recommendations service and its ability to fine tune recommendations given song latent factors that Spotify calls 'Song Features'.
The objective of the project, therefore, is to translate human speech to these Song Features in order to generate highly customizable recommendations.
To achieve this, the Program leverages a BERT model fine-tuned for the regression task of predicting the Song Features. This model is then trained on a set of about 9-10 thousand playlists and their resulting latent factors.
The trained model is then deployed to a flask API so the user can interact with it using the front end interface built with Next.js, Tailwind, and Typescript.
Unfortunately, there's been no time to deploy (for now) so to see the project in action you can check out our video demo (also in the repo description).
For specific implementation details and tips on navigating the repository, reference:
- The wiki (recommended)
- The Design Doc
To get started on the virtual enviornment as follows:
env/Scripts/activate
This script should activate the python virtual env which includes all of the required packages.
To install the packages:
pip install -r requirements.txt
Afterwards you can run any sub-module / directory with:
py -m {directory}.{file name without .py}
So for example, to run data_fetcher/fetcher_driver.py:
py -m data_fetcher.fetcher_driver
Finally, when you install a package, make sure you install it in the virtual env and add the name of the package to requirements.txt so everybody stays up to date!
First activate the model virtual env (and make sure to install the dependencies if you have not already)
model/env/Scripts/activate
Then to run:
flask --app "model_api.py" run
To get started, select a feature from the issues tab (you can also check out the Milestones page to select a task), create branch for the PR, accomplish task, and attach it to PR.
Note: you can approve your own PR, PR's are working simply as a feature to keep track of tasks being completed / so we don't run into each other too much.