Базовые метрики - cscenter/automatic-playlist-generation GitHub Wiki
Метрики по тегам last.fm
Вспомогательные скрипты: correction.py -- коррекция названий исполнителя и композиции и lastfm_tags.py -- сбор тегов исполнителя и композиции с количеством использований. Коррекция опциональна, по дефолту выполняется.
Метрика 1: пересечение тегов
Скрипт intersect.py использует теги композиции для нахождения похожести через расстояние по косинусу. Создаётся общий список тегов для двух композиций, затем для каждой композиции вектор длины общего списка, заполненный нулями. Если тег присутствует у композиции, вместо нуля записывается количество использования тега. Далее вычисляется расстояние между векторами.
TODO: нормализация тегов. Опционально: добавить расстояние между тегами исполнителей.
Метрика 2: сравнение эпох
По датасету из http://labrosa.ee.columbia.edu/millionsong/lastfm составлен список тегов эпох, получились следующие декады: ['00s', '10s', '20s', '30s', '40s', '50s', '60s', '70s', '80s', '90s']. 00s и 10s относятся к 21-му веку, остальные к 20-му. Скрипт epoch.py сначала ищет эпохи в тегах композиций, и, если не получается -- в тегах исполнителя. Если и для какого-то из исполнителей нет эпохи в тегах, похожесть считается равной 0. Теги переводятся в год, если декада совпадает -- похожесть считается равной 1, за каждые 10 лет разницы похожесть уменьшается на 0.1.
TODO: отдельно 20s изучить, сомнительно, что это 1920. Можно добавить и поиск 'x0's', очень редко встречается и такой вариант