dennisangemi / hildegard

Suggeritore di canti liturgici
https://hildegard.it
0 stars 1 forks source link

[improvements] accuratezza & fine tuning #19

Open dennisangemi opened 1 month ago

dennisangemi commented 1 month ago

Per migliorare l'accuratezza dei risultati e perfezionare lo strumento si possono seguire queste strade:

Appunti e idee

(per selezionare i risultati più accurati considerando tutte le fonti dei dati)

Si potrebbe realizzare un overall score i cui contributi (ancora da individuare e definire) potrebbero essere

contributo peso
presenza nella top 10 dei canti più simili e devianza (dalla similarità media) maggiore di 1 (oppure ragionamento sui quartili) 1.5
presenza nella top 20 dei canti con devianza (dalla similarità media) più alta (oppure ragionamento sui quartili) 2
presenza nella lista dei canti devianti nello storico di canticristiani 2
presenza nella lista dei canti selezionati manualmente 3

N.B. In questo modo:

Magari il peso può essere visto come un peso massimo. Per il primo punto ad esempio: il canto con similarità più alta e devianza > 1 può prendere 1.5. Gli altri 9 che hanno una similarità più bassa allora prenderanno un punteggio < 1.5 ma ad esso proporzionale.

Devo ordinare meglio le idee su questo punto e capire se conviene effettuare un calcolo di questo tipo.

Anche per la lista dei canti suonati si potrebbe introdurre un dettaglio di questo tipo perchè si ha accesso al numero di dispositivi che si potrebbe normalizzare e poi rendere proporzionale al peso massimo.

Alcuni ragionamenti sui quartili sono qui https://github.com/dennisangemi/hildegard/issues/17#issue-2326544176

dennisangemi commented 1 week ago

pazzesco. Sto provando ad implementare lo score calculation (lascio un paio di righe di codice giusto per dare un'idea)

weigth_similarity = weights[weights['metric'] == 'similarity']['weight'].values[0]
weigth_deviation = weights[weights['metric'] == 'deviation']['weight'].values[0]
weigth_history = weights[weights['metric'] == 'history']['weight'].values[0]
weigth_selection = weights[weights['metric'] == 'selection']['weight'].values[0]

# crea in df una colonna score_similarity che sia la similarity moltiplicata per il peso/100
df['score_similarity'] = df['similarity'] * weigth_similarity / 100

# craea in df una colonna score_deviation che sia la deviation moltiplicata per il peso/max deviation
df['score_deviation'] = df['deviation'] * weigth_deviation / df['deviation'].max()

# crea in df una colonna score che sia la somma di score_similarity e score_deviation
df['score'] = df['score_similarity'] + df['score_deviation']

# sort df by score
df = df.sort_values(by='score', ascending=False)
print(" ⏯ I testi più simili sono:")
print(df.head())

# plot histogram of score with plt
plt.hist(df['score'], bins=20)
plt.show()

Applico questo algoritmo alla liturgia del 2024-06-30 con id liturgia C48-B e ottengo questi output sorprendenti

image

distribuzione dello score: image

In sostanza c'è un solo canto consigliato! talità kum, il resto è inutile. Non so se essere contento o disperato. Penso contento

dennisangemi commented 1 week ago

Ciao @mamminim, ho provato a migliorare l'algoritmo di selezione dei canti introducendo lo scarto dalla similarità media e incrociando i dati con un db statico di canti manualmente suggeriti (che possiamo alimentare quando vogliamo). L'idea era questa, ma la documenterò per bene nella pagina progetto.

I link ai file di output (e la loro struttura) non sono cambiati quindi non dovresti avere alcun tipo di problema.

Aspetto tuoi aggiornamenti (senza fretta, non preoccuparti!) sullo storico dei canti suonati così da aggiungere anche questa fonte dati per perfezionare i risultati.

Fammi sapere se i nuovi dati ti creano problemi!

Buon we!