根据聆听习惯自动对音乐进行评级
我在 Delphi 中创建了一个类似 Winamp 的音乐播放器。当然,没那么复杂。只是一个简单的。
但现在我想添加一个更复杂的功能:库中的歌曲应该根据用户的收听习惯自动评级。
这意味着:应用程序应该“理解”用户是否喜欢某首歌。不仅是他/她是否喜欢,还有喜欢程度。
到目前为止我的方法(可以使用的数据):
- 简单地测量每次播放一首歌曲的频率。当歌曲被添加到库中时开始计算时间,这样最近的歌曲就不会出现任何劣势。
- 测量歌曲平均播放时长(分钟)。
- 开始一首歌曲但直接换成另一首歌应该会对排名产生不良影响,因为用户似乎不喜欢这首歌。
- ...
你能帮我解决这个问题吗?我只是想提出一些想法。我不需要 Delphi 中的实现。
I've created a Winamp-like music player in Delphi. Not so complex, of course. Just a simple one.
But now I would like to add a more complex feature: Songs in the library should be automatically rated based on the user's listening habits.
This means: The application should "understand" if the user likes a song or not. And not only whether he/she likes it but also how much.
My approach so far (data which could be used):
- Simply measure how often a song was played per time. Start counting time when the song was added to the library so that recent songs don't have any disadvantage.
- Measure how long a song was played on average (minutes).
- Starting a song but directly change to another one should have a bad influence on the ranking since the user didn't seem to like the song.
- ...
Could you please help me with this problem? I would just like to have some ideas. I don't need the implementation in Delphi.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
我会在中央数据库中跟踪所有用户的收听习惯,这样您就可以根据其他人也喜欢的内容(“喜欢这首歌的人,也喜欢这些其他歌曲”)提出建议,并
考虑一些其他指标:
歌曲立即重播的次数比例(例如,这首歌立即重播的次数占其播放次数的12%)
他们在播放过程中是否打开了“重复这首歌”按钮?
每小时、每天、每周、每月播放的次数
这首歌被跳过的次数比例。 (例如,这首歌已播放,但 99% 的时间立即跳过)
听过的歌曲的比例(用户平均听了这首歌的 50%,而其他歌曲则为 100%)
还:
监听用户的麦克风。他们一起唱歌吗? :D
他们播放这首歌的音量是多少?他们会加大力度吗?
添加“向朋友推荐这首歌”按钮(通过电子邮件将歌曲标题发送给朋友或其他人)。他们推荐的歌曲,他们可能喜欢。
您可能想对音频流进行一些特征提取,并找到相似的歌曲。这很难,但您可以在这里阅读更多相关信息:
“用于对音频数据进行分类的自动特征提取”
链接
“基于详尽的特征生成和时间统计的音乐收藏模型”
http://portal.acm.org/itation.cfm?id=1150523
“协作使用分布式系统中的功能来组织音乐收藏”
http://www.idea-group.com/Bookstore/Chapter。 .aspx?TitleId=24432
I would track all of your users' listening habits in a central database, so you can make recommendations based on what other people like too ("people that liked this song, also liked these other songs")
some other metrics to consider:
proportion of times that the song was immediately replayed (ex. this song was immediately replayed 12% of the times it was played)
did they turn on the "repeat this song" button during play?
times played per hour, day, week, month
proportion of times this song was skipped. (ex. this song was played, but immediately skipped 99% of the time)
proportion of song listened to (the user listened to 50% of this song on average, versus 100% of some other song)
also:
listen in on the user's microphone. do they sing along? :D
what volume do they play the song? do they crank it up?
Put in a "recommend this song to friends" button (that emails song title to friend or something). Songs they recommend, they probably like.
You might want to do some feature extraction on the audio stream, and find similar songs. This is hard, but you can read more about it here:
"Automatic Feature Extraction for Classifying Audio Data "
Link
"Understandable models Of music collections based on exhaustive feature generation with temporal statistics"
http://portal.acm.org/citation.cfm?id=1150523
"Collaborative Use of Features in a Distributed System for the Organization of Music Collections"
http://www.idea-group.com/Bookstore/Chapter.aspx?TitleId=24432
我认为这不是一个好的衡量标准,因为长歌会比短歌获得不公平的优势。您应该使用百分比:
avg。播放时间/歌曲总长度
I don't think this is a good metric, because a long song would gain an unfair advantage over a short song. You should use a percentage instead:
avg. time played / total song length
请让可能性随着时间的推移而降低。如果您在过去 n 天经常听到这些歌曲,您似乎会更喜欢这些歌曲,而较旧的歌曲应该只会被随意提及,因为您喜欢它们,但可能听得太多了。
至少但并非最后,您可以添加节拍检测(也许还有频谱)来查找类似的歌曲,这可以为您提供比用户通过收听歌曲输入的更多数据。
我还会在这里对具有相同 MP3-Id 标签的歌曲进行分组,因为这也会提示用户当前正在播放的内容。如果你想提供一些自动播放功能,它也会有所帮助。在听了一首伟大的果阿歌曲后,转向朋克是很奇怪的,即使我喜欢两个世界的歌曲。
Please let degrade likeliness over time. You seem to like songs better if you heard them often during the last n days, while older songs should only get a casual mentioning, since you like them but heard them way too much, probably.
Least but not last you could add beat detection (and maybe frequence spectrum) to find similar songs, which could provide you with more data than the user inputted by hearing the songs.
I would also go for grouping songs having the same MP3-Id Tag here, since this also gives a hint what the user is currently on. And if you want to provide some autoplay function, it would also help. After hearing a great Goa song, switching to Punk is strange, even if I like songs of both worlds.
这些应该是分开的。跳过应该会导致被跳过的歌曲获得负面评价。但是,如果用户在歌曲开始时关闭应用程序,您不应将其视为负面评级,即使只播放了歌曲的一小部分。
These should be separate. Skipping should result in negative rating for the song that was skipped. However, if the user closes the application when a song begins, you should not consider it as negative rating, even though only a low percentage of the song was played.
这个公式将产生一个很好的结果,因为用户可能真的只喜欢歌曲的一部分,这应该在乐谱中看到,如果用户喜欢整首歌曲,那么权重应该加倍。
您可以通过多种方式调整这个公式,例如包括用户收听树,例如如果用户听一首歌曲然后再听另一首歌几次,等等。
This formula will produce an nice result, since user could really like just part of song, this should be seen in the score, also if user likes full song then weight should be doubled.
You can tweak this folmula in various ways, f.ex include user tree of listening, f.ex if user listens one song and after that he listens another song few times, etc.
使用歌曲添加到库中的日期作为起点。
测量歌曲/流派/艺术家/专辑的播放频率(全部、部分或跳过) - 这还可以让您测量歌曲/流派/艺术家/专辑未播放的频率。
根据这些参数得出一个权重,当一首歌、它的流派、艺术家或专辑没有被频繁播放时,它的排名应该很低。当每天播放某个艺术家的歌曲时,该艺术家的歌曲应该会得到提升,但如果从未播放过该艺术家的一首歌曲,那么这首歌曲的排名仍然很低
Use the date the song was added to the library as a starting point.
Measure how often the song/genre/artist/album is played (fully, or in part or skipped) - this will also allow you to measure how often a song/genre/artist/album is not played.
Come up with a weighting based on these parameters, when a song, it's genre, artist or album has not been played frequently, it should rank poorly. When an artist is played every day songs from this artist should get a boost, but say one of the artist's songs is never played this song should still rank pretty low
通常,我会去播放一首特定的歌曲,然后让我的 iPod 运行直到专辑结束。因此,这种方法会给专辑后期的歌曲带来不公平的优势。如果您的音乐播放器以同样的方式工作,您可能需要补偿一些东西。
Often, I go to play a particular song, and then just let my iPod run until the end of an album. So this method would give an unfair advantage to songs late in an album. Something you might want to compensate for if your music player works the same way.
人工智能在这个问题上的应用怎么样?
出色地!让我说一下,从头开始使用起来真的很有趣
拥有自己“智慧”的客户网络并最终收集
客户结果取决于中央“情报”。
每个客户都可以根据用户习惯产生自己的“用户评分”
(如前所述:平均收听次数、收听次数等...)。
中央“智能”收集者可以将个人评级合并到“全球评级”
显示交易、建议和您需要的每一个高级别评级。
无论如何,训练这样一个“大脑”意味着你必须首先以分析的方式解决问题,但构建这样一个相互连接的小大脑云确实很有趣产生更高层次的“智能”。
像往常一样,因为我不知道你的技能,请看一下神经网络、遗传算法、 模糊逻辑、模式识别和类似问题,以便更深入地理解。
What about artificial intelligence appliance on this problem?
Well! Let me say that starting from scratch could be really funny to use
a network of clients with their own "intelligence" and finally collect
client results on a central "intelligence".
Each client could produce his own "user ratings" based on user habitudes
(as already said: average listenig, listenig count, etc...).
Than a central "intelligent" collector could merge individual ratings into "global ratings"
showing trands, suggestions and every high level rating you need.
Anyway to train such a "brain" means that you have to solve the problem in an analytical way first, but really could be funny to build such a cloud of interconnected small brains to produce higher level "intelligence".
As usual, as I don´t know your skills, take a look to neural networks, genetic algorithms, fuzzy logic, pattern recognition and similar problems for a deeper understanding.
您可以使用一些简单的函数,例如:
或者
这意味着如果歌曲在 15 秒内停止,那么它将获得负分,或者第二种情况甚至更好(如果用户收听,歌曲的长度将与最终音符无关)整首歌)
如果您熟悉这个主题,另一种方法可能是使用神经网络。
You can use some simple function like:
or
that means that if song was stopped in 15 seconds then it would be rated with negative score, or maybe the second case is even better (length of song would have no matter to final note if user listened whole song)
Another way may be using neural networks if you are common with this subject.