README_learning.md•3.66 kB
# 사용자 취향 학습 시스템
## 개요
FL Studio MCP 서버에 사용자 취향을 학습하는 AI 시스템이 추가되었습니다. 이 시스템은 사용자의 피드백을 바탕으로 더 나은 멜로디를 생성합니다.
## 주요 기능
### 1. 자동 학습
- **재생 시간 추적**: 멜로디가 얼마나 오래 재생되는지 측정
- **반복 카운트**: 사용자가 멜로디를 반복하는 횟수 기록
- **스킵 감지**: 멜로디를 건너뛰는 패턴 학습
### 2. 수동 평가
- **평점 시스템**: 1-5점 스케일로 멜로디 평가
- **실시간 피드백**: 현재 재생 중인 멜로디에 즉시 평점 부여
### 3. 선호도 기반 생성
- **패턴 학습**: 상행/하행/크로매틱 등 선호 패턴 학습
- **화성 선호도**: 메이저/마이너/도미넌트 등 화성 취향 학습
- **리듬 선호도**: 스윙/스트레이트 등 리듬 패턴 선호도
## 사용법
### MCP 도구들
#### 평가 관련
```bash
# 현재 멜로디에 평점 주기 (1-5점)
rate_melody(4.5)
# 현재 멜로디 스킵
skip_melody()
# 현재 멜로디 반복
repeat_melody()
```
#### 설정 관리
```bash
# 학습 모드 켜기/끄기
toggle_learning(True) # 또는 False
# 학습률 조정 (0.01-1.0)
adjust_learning_rate(0.2)
# 사용자 선호도 초기화
reset_preferences()
```
#### 상태 확인
```bash
# 사용자 프로필 확인
get_user_profile()
# 전체 상태 확인 (학습 포함)
get_bebop_status()
```
## 학습 원리
### 1. 점수 계산
```python
# 자동 점수 = 기본점수(3.0) + 재생시간보너스 + 반복보너스 - 스킵페널티
base_rating = 3.0
if play_time >= 5초: rating += 재생시간보너스
rating += repeat_count * 0.1
rating -= skip_count * 0.2
```
### 2. 선호도 가중치
```python
weighted_score = (
0.3 * 멜로디_유사도 +
0.25 * 패턴_선호도 +
0.25 * 화성_선호도 +
0.2 * 리듬_선호도
)
```
### 3. 학습 업데이트
```python
# 평점을 -2~+2 범위로 정규화
normalized_rating = (rating - 3.0) / 2.0
# 선호도 업데이트
preference += learning_rate * normalized_rating
```
## 데이터 저장
- **파일**: `user_preferences.pkl`
- **내용**: 평점 기록, 선호도, 상호작용 이력
- **자동 저장**: 평점 기록 시마다 자동 저장
- **백업**: 기존 파일이 있으면 자동 로드
## 예시 사용 시나리오
### 1. 첫 사용
```bash
# 1. 서버 시작
python main_mcp_server.py
# 2. 연주 시작
start_bebop_listening()
# 3. 멜로디 들으면서 평가
rate_melody(4) # 좋은 멜로디
rate_melody(2) # 별로인 멜로디
# 4. 프로필 확인
get_user_profile()
```
### 2. 장기 사용
```bash
# 시간이 지나면서 시스템이 학습:
# - 사용자가 좋아하는 패턴 파악
# - 선호하는 화성 진행 학습
# - 자주 스킵하는 스타일 회피
# - 더 정확한 맞춤형 멜로디 생성
```
## 고급 설정
### 학습률 조정
- **높은 학습률 (0.5-1.0)**: 빠른 적응, 불안정할 수 있음
- **중간 학습률 (0.1-0.3)**: 균형잡힌 학습 (기본값: 0.1)
- **낮은 학습률 (0.01-0.1)**: 안정적이지만 느린 학습
### 가중치 커스터마이징
```python
# src/core/preference_learner.py에서 수정 가능
preference_weights = {
'melody_similarity': 0.3, # 멜로디 유사도 중요도
'pattern_type': 0.25, # 패턴 타입 중요도
'chord_progression': 0.25, # 화성 진행 중요도
'rhythm_pattern': 0.2 # 리듬 패턴 중요도
}
```
이제 시스템이 사용자의 취향을 학습하여 점점 더 개인화된 멜로디를 생성합니다! 🎵🤖