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 条评论
还没有评论,写下第一条。