Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SONARE:基于深度学习的音乐推荐系统

SONARE 是一个通过用户歌单理解其音乐故事的音乐画像与推荐系统。

用户只需要导入网易云音乐或 QQ 音乐歌单链接,或者手动粘贴歌曲名与歌手名,系统会分析歌单中的风格、情绪、歌手倾向和反复出现的声音,生成「音乐身份」「音乐画像」「声音织物」以及下一章节推荐。

它不是传统播放器,也不是后台式数据报表。SONARE 更像一份写给用户的音乐短文:先听见歌单,再理解用户,最后推荐下一章节。

功能特性

  • 歌单导入:支持网易云音乐链接、短链、歌单 ID,以及 QQ 音乐歌单链接。
  • 手动导入:支持直接粘贴 歌曲名,歌手名歌曲名 - 歌手名
  • 大模型分析:调用 OpenAI 兼容接口生成音乐画像、故事总结和推荐理由。
  • 本地兜底:未配置大模型 API Key 时,使用本地规则生成演示画像。
  • 音乐身份:根据标签组合生成文学化身份,如「午夜叙事者」「回忆收藏家」。
  • 结果页叙事:包含音乐身份、音乐画像星图、声音织物、下一章节推荐。
  • Demo 模式:使用 H2 内存数据库,无需安装 MySQL 即可演示。

技术栈

  • Java 17
  • Spring Boot 3.3
  • Maven
  • Thymeleaf
  • MyBatis-Plus
  • H2 / MySQL 8
  • OpenAI 兼容大模型接口
  • Meting 风格音乐数据接口

快速启动

推荐先使用 Demo 模式启动,Demo 模式会使用 H2 内存数据库:

.\run-demo.ps1

启动后访问:

http://localhost:8080

如果你的 Maven 不在 D:\apache-maven-3.9.16,可以改用通用命令:

$env:SPRING_PROFILES_ACTIVE="demo"
mvn clean compile exec:java

大模型配置

不要把 API Key 写进代码或提交到 Git。请使用环境变量:

$env:LLM_API_KEY="你的大模型 API Key"
$env:LLM_BASE_URL="https://api.deepseek.com"
$env:LLM_MODEL="deepseek-v4-pro"

可选配置:

$env:LLM_JSON_MODE="true"
$env:LLM_DEEPSEEK_THINKING="false"

未配置 LLM_API_KEY 时,系统不会中断,会使用本地简易规则生成演示结果。

MySQL 模式

默认配置使用 MySQL:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/music_recommend
    username: ${MYSQL_USER:root}
    password: ${MYSQL_PASSWORD:123456}

启动前可以设置数据库账号密码:

$env:MYSQL_USER="root"
$env:MYSQL_PASSWORD="你的 MySQL 密码"
mvn clean compile exec:java

数据库表结构和初始化数据位于:

  • src/main/resources/schema.sql
  • src/main/resources/data.sql
  • src/main/resources/schema-demo.sql
  • src/main/resources/data-demo.sql

歌单输入示例

网易云音乐:

https://music.163.com/#/playlist?id=123456789
https://163cn.tv/xxxxxx
123456789

QQ 音乐:

https://y.qq.com/n/ryqq/playlist/123456789
https://i.y.qq.com/n2/m/share/details/taoge.html?id=123456789

手动输入:

晴天,周杰伦
七里香 - 周杰伦
成都 赵雷
平凡之路,朴树

注意:外部歌单需要是公开歌单。短链或分享链接如果已经失效,系统可能无法解析。

音乐数据接口

项目通过 Meting 风格接口读取歌单:

music:
  meting:
    api-template: https://api.injahow.cn/meting/?server=:server&type=:type&id=:id&r=:r
    server: netease

网易云歌单会使用 server=netease,QQ 音乐歌单会使用 server=tencent。如果当前公开接口不可用,可以在 src/main/resources/application.yml 中替换为其他兼容 Meting 的接口地址。

项目结构

src/main/java/com/example/musicrecommender
├── controller      页面入口与分析请求
├── dto             歌单、画像、推荐结果 DTO
├── entity          数据库实体
├── mapper          MyBatis-Plus Mapper
├── service         歌单解析、外部音乐接口、大模型分析、推荐服务
└── config          应用配置

src/main/resources
├── templates       Thymeleaf 页面
├── static/css      SONARE 前端样式
├── static/img      背景图资源
├── schema.sql      MySQL 表结构
└── data.sql        初始化数据

测试

运行:

mvn test

当前测试覆盖:

  • Spring Boot 上下文启动
  • 网易云 / QQ 音乐链接解析
  • 推荐向量计算

说明

本项目的「基于深度学习」主要体现在用大模型理解歌单文本、抽取音乐画像,并结合标签、歌手、情绪、歌单上下文生成个性化推荐。课设展示时可以解释为轻量级智能推荐系统:使用外部音乐数据源获取歌曲信息,使用大模型构造用户画像,再根据画像生成下一章节推荐。

About

基于深度学习的音乐推荐系统

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages