根据听音习惯自动评分音乐

时间:2010-05-19 18:29:52

标签: automation artificial-intelligence recommendation-engine rating audio-player

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

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

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

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

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

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

9 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

  

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

我认为这不是一个好的指标,因为长歌会在短歌中获得不公平的优势。您应该使用百分比代替:

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

答案 2 :(得分:3)

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

最少但不是最后你可以添加节拍检测(也许是频率频谱)来查找类似的歌曲,这可以为您提供比通过听到歌曲输入的用户更多的数据。

我还想在这里对具有相同MP3-Id标签的歌曲进行分组,因为这也提示了用户当前所处的位置。如果你想提供一些自动播放功能,它也会有所帮助。听到一首伟大的果阿歌后,即使我喜欢这两个世界的歌曲,转换到Punk也很奇怪。

答案 3 :(得分:1)

  

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

这些应该是分开的。跳过应导致跳过的歌曲的评级为负。但是,如果用户在歌曲开始时关闭应用程序,则不应将其视为负评级,即使只播放了较低百分比的歌曲。

答案 4 :(得分:0)

(ListenPartCount * (ListenFullCount ^ 2)) + (AverageTotalListenTime * ListenPartTimeAverage)
--------------------------------------------------------------------------------------------
               ((AverageTotalListenTime - ListenPartTimeAverage) + 0.0001f)

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

你可以用各种方式调整这个folmula,f.ex包括听力的用户树,f.ex如果用户听一首歌,之后他会听另一首歌几次,等等。

答案 5 :(得分:0)

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

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

基于这些参数进行加权,当一首歌,它的流派,艺术家或专辑没有经常播放时,它应该排名很差。当每天播放一位艺术家时,这位艺术家的歌曲应该得到提升,但是说艺术家的一首歌从未播放过,这首歌应该仍然排名很低

答案 6 :(得分:0)

  

只需衡量一首歌的频率   每次都玩。

通常情况下,我会播放一首特定的歌曲,然后让我的iPod一直播放到专辑的结尾。因此,这种方法会给专辑中的歌曲带来不公平的优势。如果您的音乐播放器以相同的方式工作,您可能需要补偿的东西。

答案 7 :(得分:0)

关于此问题的 人工智能 设备呢?

嘛!让我说从头开始可能真的很有趣 一个拥有自己“智慧”的客户网络,最后收集 客户的结果是一个中心的“情报”。

每个客户都可以根据用户的喜好制作自己的 “用户评分” (正如已经说过的那样:平均听力,听力计数等......)。

比中央“智能”收藏家可以将个人评级合并为 “全球评级” 显示您需要的交易,建议和所有高级别评级。

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

像往常一样,由于我不了解您的技能,请查看 神经网络 遗传算法 模糊逻辑 模式识别 以及类似的问题,以便更深入地理解。

答案 8 :(得分:0)

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

listened_time_of_song/(length_of_song + 15s) 

 listened_time_of_song/(length_of_song * 1.1) 

这意味着如果歌曲在15秒内被停止,那么它将被评为负分,或者第二种情况甚至更好(如果用户听完整首歌,则歌曲的长度无论最后的音符都是如此)

如果你对这个主题很常见,另一种方法可能是使用神经网络。