Çalma listesi önerisinde aynı albümden üç parça sınırı

这篇内容暂时只有 Türkçe 版本,以下是原文。

Arşivimde 3.800 kadar parça var, çoğu albüm klasörlerinde duruyor ve dosya adları düzenli. Bir öneri listesi üretirken ilk denemelerde hep aynı sorun çıktı: liste kısa sürede tek bir albümün içine düşüyordu. Etiket tabanlı bir skorlama yeterli olmadı, çünkü albümün parçaları hem etiket hem tempo olarak birbirine çok yakın. 40 parçalık bir listede aynı albümden 9 parça gelmişti; set dinlenmiyordu.

Ben de skorlamaya albüm bazlı bir ceza ekledim. Önce her parça için etiket benzerliğinden bir taban skor çıkarıyorum, sonra seçim sırasında o albümden kaç parça seçildiğine bakıyorum. İlk parça tam skorla girer, ikinci ve üçüncü kademeli olarak ceza alır, dördüncüsü hiç girmez. Albüm bilgisini klasör adından alıyorum; etiketlerdeki albüm alanı bende tutarsız.

ALBUM_CAP = 3
PENALTY = [0.0, 0.18, 0.35]

def album_penalty(album, sayac):
    n = sayac.get(album, 0)
    if n >= ALBUM_CAP:
        return None
    return PENALTY[n]

def sec(adaylar, skorlar, adet=40):
    sayac = {}
    secilen = []
    while len(secilen) < adet and adaylar:
        en_iyi, en_skor = None, -1.0
        for p in adaylar:
            ceza = album_penalty(p["album"], sayac)
            if ceza is None:
                continue
            s = skorlar[p["id"]] - ceza
            if s > en_skor:
                en_iyi, en_skor = p, s
        if en_iyi is None:
            break
        secilen.append(en_iyi)
        sayac[en_iyi["album"]] = sayac.get(en_iyi["album"], 0) + 1
        adaylar.remove(en_iyi)
    return secilen

Buradaki mantık şu: albüm içi parçalar zaten benzer olduğu için skorları da birbirine yakın çıkıyor; ceza olmadan seçim hep aynı kümeye kayıyor. Ceza skoru bozmuyor, sadece sıralamayı kaydırıyor. Bedeli var: çeşitlilik artarken listenin ortalama skoru düşüyor, yani “en iyi eşleşme” listesi olmaktan çıkıyor, dinlenebilir bir sete dönüşüyor. Ben ikincisini istiyorum, ama bunu bilerek seçmek gerekiyor.

Sınırın işe yaramadığı yerler de oldu. Tek albümlük canlı kayıtlarda ya da derleme albümlerde klasör adı aynı olduğu için ceza gereksiz yere vuruyor; 12 parçalık bir konser kaydından üçten fazlasını alamıyorsunuz. Albüm etiketi boş olan parçalar “album: ‘’” altında toplanıp aynı cezayı yiyor, bunu ayrı kontrol etmek gerekti. Bir de cap’i 3 yapınca 40 parçalık listede son 5-6 slot boş kalabiliyor; aday havuzu darsa cezayı gevşetmek yerine listeyi kısaltmayı tercih ediyorum, yoksa aynı albüme geri dönüyor.

Siz albüm çeşitliliğini skorun içine mi gömüyorsunuz, yoksa seçimden sonra listede düzeltme mi yapıyorsunuz? Özellikle canlı kayıt ve derleme albümlerde sınırı nasıl ayarlıyorsunuz?

0
赞同度 100% · 0 条评论 · 2 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。