我正在构建一个音乐推荐引擎,它使用曲目的歌词来确定歌曲在情感上彼此之间的关联程度。我已使用 tfidf 算法(此处未显示)为每首歌曲生成分数,我想将每首曲目的 tfidf 分数存储在名为tfidf
. 但我想将每个 tfidf 分数标准化为 0-1。
我遇到的困难是弄清楚如何在有人在管理界面中输入 tfidf 值后立即自动标准化这些 tfidf 分数。所以想象一下,你已经进入了管理界面,想要将歌曲“In Da Club”添加到数据库中。您输入歌曲的名称及其 tfidf 分数,如下所示:
我想做的是确保一旦你点击保存按钮,它就会自动normalized_tfidf
用标准化值填充空列。我正在使用一个简单的算法来规范化 tfidf 值。不过,在我开始之前,让我向您展示这张表的外观,以便您更清楚地了解算法正在做什么。因此,在将“In Da Club”添加到数据库后(并且数据已被规范化),表格列应如下所示:
歌曲 x 和歌曲 y 只是我在数据库中播种的虚拟歌曲,用于设置算法工作的上限和下限。你看到的那个值.50077
就是我想要自动生成的值。
该算法说要找到歌曲 x 中特征 tfidf 的归一化值 (nv),求歌曲的 tfidf 分数与表中最小 tfidf 分数之间的差值,然后除以表中最大和最小 tfidf 分数之间的差值桌子。这是数学上的。
nv(In da club tfidf ) = (In da club tfidf – tfidf min ) / (tfidf max – tfidf min )
这是计算:
nv(在俱乐部中)= (.25048 - .00010) / (.50000 - .00010) = .50077
所以我试图将它编码到我的模型中。问题是 django 似乎没有允许我像使用 SQL 语句那样在表中选择最小和最大 tfidf 值的方法。我对 django 很陌生,并不完全了解它的功能。如果我的这个表的模型看起来像我下面的模型,那么重写它以便在将 tfidf 输入管理员后自动标准化的最佳方法是什么?
class Party(models.Model):
song = models.CharField(max_length=30)
tfidf = models.FloatField()
normalized_tfidf = models.FloatField()