8

我在 Delphi 中创建了一个类似 Winamp 的音乐播放器。当然,没那么复杂。只是一个简单的。

但现在我想添加一个更复杂的功能:库中的歌曲应该根据用户的收听习惯自动评分。

这意味着:应用程序应该“理解”用户是否喜欢一首歌。不仅是他/她是否喜欢,还有多少。

到目前为止我的方法(可以使用的数据):

  • 只需测量每次播放歌曲的频率。开始计算歌曲添加到库中的时间,以便最近的歌曲没有任何劣势。
  • 衡量一首歌曲的平均播放时长(分钟)。
  • 开始一首歌曲但直接更换另一首歌曲应该会对排名产生不良影响,因为用户似乎不喜欢这首歌。
  • ...

你能帮我解决这个问题吗?我只是想有一些想法。我不需要在 Delphi 中实现。

4

9 回答 9

10

我会在一个中央数据库中跟踪您所有用户的收听习惯,因此您可以根据其他人的喜好提出建议(“喜欢这首歌的人,也喜欢这些其他歌曲”)

需要考虑的其他一些指标:

  • 歌曲立即重播的比例(例如,这首歌立即重播的次数占其播放次数的 12%)

  • 他们在播放过程中是否打开了“重复这首歌”按钮?

  • 每小时、每天、每周、每月播放的次数

  • 这首歌被跳过的比例。(例如,播放了这首歌,但 99% 的时间立即跳过)

  • 听过的歌曲的比例(用户平均听了这首歌的 50%,而其他歌曲为 100%)

还:

听用户的麦克风。他们一起唱歌吗?:D

他们播放这首歌的音量是多少?他们把它提高了吗?

放入“向朋友推荐这首歌”按钮(将歌曲标题通过电子邮件发送给朋友或其他东西)。他们推荐的歌曲,他们可能喜欢。

您可能想对音频流进行一些特征提取,并找到类似的歌曲。这很难,但您可以在此处阅读更多相关信息:

“音频数据分类的自动特征提取” http://www.springerlink.com/content/g71368g57x013j48/

“基于时间统计的详尽特征生成的音乐收藏的可理解模型” http://portal.acm.org/citation.cfm?id=1150523

“用于组织音乐收藏的分布式系统中功能的协作使用” http://www.idea-group.com/Bookstore/Chapter.aspx?TitleId=24432

于 2010-05-19T19:58:06.860 回答
4

衡量一首歌曲的平均播放时长(分钟)。

我不认为这是一个很好的衡量标准,因为长歌会比短歌获得不公平的优势。您应该改用百分比:

平均 播放时间/歌曲总长度

于 2010-05-19T18:39:06.247 回答
3

请随着时间的推移降低可能性。如果您在过去 n 天内经常听到歌曲,您似乎更喜欢它们,而较旧的歌曲应该只是随便提及,因为您喜欢它们但可能听得太多了。

最不重要的是,您可以添加节拍检测(可能还有频谱)来查找相似的歌曲,这可以为您提供比用户通过听歌曲输入的更多的数据。

我也会在这里对具有相同 MP3-Id 标签的歌曲进行分组,因为这也会提示用户当前正在播放的内容。如果您想提供一些自动播放功能,它也会有所帮助。听了一首很棒的果阿歌曲后,转向朋克很奇怪,即使我喜欢两全其美的歌曲。

于 2010-05-30T19:53:37.607 回答
1

关于您的其他指标:不应该将指标#4 和指标#5 结合起来吗?如果直接跳过一首歌,那么听的比例只有1%左右,对吧?– marco92w 5 月 21 日 15:08

这些应该是分开的。跳过应该导致被跳过的歌曲的负面评价。但是,如果用户在歌曲开始时关闭应用程序,则不应将其视为负面评价,即使仅播放了一小部分歌曲。

于 2010-05-27T17:48:50.303 回答
0
(ListenPartCount * (ListenFullCount ^ 2)) + (AverageTotalListenTime * ListenPartTimeAverage)
--------------------------------------------------------------------------------------------
               ((AverageTotalListenTime - ListenPartTimeAverage) + 0.0001f)

这个公式会产生一个很好的结果,因为用户可能真的只喜欢部分歌曲,这应该在分数中看到,如果用户喜欢完整的歌曲,那么权重应该加倍。

您可以通过各种方式调整此公式,f.ex 包括用户收听树,f.ex 如果用户听了一首歌曲,然后他又听了几次,等等。

于 2010-05-26T09:34:14.713 回答
0

使用歌曲添加到资料库的日期作为起点。

测量歌曲/流派/艺术家/专辑播放的频率(完全、部分或跳过) - 这也可以让您测量歌曲/流派/艺术家/专辑不播放的频率。

根据这些参数得出一个权重,当一首歌、它的流派、艺术家或专辑没有经常播放时,它的排名应该很差。当一位艺术家每天播放该艺术家的歌曲时,该艺术家的歌曲应该会得到提升,但如果说该艺术家的一首歌曲从未播放过,这首歌的排名应该仍然很低

于 2010-05-26T10:01:55.550 回答
0

只需测量每次播放歌曲的频率。

通常,我会去播放一首特定的歌曲,然后让我的 iPod 一直运行到专辑结束。所以这种方法会给专辑后期的歌曲带来不公平的优势。如果您的音乐播放器以相同的方式工作,您可能想要补偿一些东西。

于 2010-05-28T03:43:28.670 回答
0

人工智能设备在这个问题上怎么样?

好!让我说,从头开始使用具有自己“智能”的客户网络并最终在中央“智能”上收集客户结果可能真的很有趣。

每个客户都可以根据用户习惯产生自己的“用户评分”(如前所述:平均收听次数、收听次数等)。

中央“智能”收集器可以将个人评级合并到“全球评级” 中,显示趋势、建议和您需要的每个高级评级。

无论如何,训练这样一个“大脑”意味着你必须首先以分析的方式解决问题,但构建这样一个相互连接的小大脑云来产生更高水平的“智能”真的很有趣。

像往常一样,因为我不知道你的技能,看看神经网络遗传算法模糊逻辑模式识别和类似的问题,以获得更深入的理解。

于 2010-05-28T09:05:30.190 回答
0

您可以使用一些简单的功能,例如:

listened_time_of_song/(length_of_song + 15s) 

或者

 listened_time_of_song/(length_of_song * 1.1) 

这意味着如果歌曲在 15 秒内停止,那么它将被评为负分,或者可能第二种情况更好(如果用户听了整首歌曲,歌曲的长度与最后的音符无关)

如果您对此主题很熟悉,另一种方法可能是使用神经网络。

于 2010-05-28T09:29:45.307 回答