Spaces:
Sleeping
Sleeping
TravisBoltz
commited on
Upload 62 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .env +1 -0
- .gitattributes +3 -0
- .gitignore +1 -0
- Analysis.md +310 -0
- Procfile +1 -0
- api/__pycache__/main.cpython-312.pyc +0 -0
- api/main.py +62 -0
- api/package-lock.json +946 -0
- api/package.json +7 -0
- app.py +124 -0
- checkpoints/best_model.pth +3 -0
- checkpoints/best_model_cv.pth +3 -0
- checkpoints/latest_checkpoint.pt +3 -0
- config/model_config.json +18 -0
- data/cleaned_modv2.csv +0 -0
- data/data_encoders.pt +3 -0
- data/dataset.csv +3 -0
- data/engineered_data.csv +0 -0
- data/music_data.csv +0 -0
- data/name_gender.csv +0 -0
- data/o2_data.csv +3 -0
- data/test_data.csv +0 -0
- data/train_data.csv +3 -0
- data_utils.py +115 -0
- encoder_utils.py +56 -0
- evaluate_model.py +497 -0
- generate_recommendations.py +312 -0
- metrics/evaluation_results.json +67 -0
- metrics/training_metrics_20250102_064900.json +290 -0
- metrics/training_metrics_20250102_200715.json +200 -0
- metrics/training_metrics_20250102_203004.json +191 -0
- metrics/training_metrics_20250102_210550.json +200 -0
- metrics/training_metrics_20250103_030301.json +56 -0
- metrics/training_metrics_20250103_030828.json +200 -0
- metrics/training_metrics_20250103_033513.json +200 -0
- metrics/training_metrics_20250103_043332.json +200 -0
- metrics/training_metrics_20250103_044652.json +200 -0
- metrics/training_metrics_20250103_092757.json +200 -0
- metrics/training_metrics_20250103_165619.json +65 -0
- metrics/training_metrics_20250104_000005.json +83 -0
- metrics/training_metrics_20250104_002329.json +65 -0
- metrics/training_metrics_20250104_003816.json +101 -0
- metrics/training_metrics_20250104_010732.json +83 -0
- metrics/training_metrics_20250104_011443.json +128 -0
- metrics/training_metrics_20250104_012344.json +173 -0
- metrics/training_metrics_20250104_021315.json +74 -0
- metrics/training_metrics_20250104_021913.json +92 -0
- metrics/training_metrics_20250104_024710.json +128 -0
- metrics/training_metrics_20250104_030507.json +47 -0
- metrics/training_metrics_20250104_030726.json +65 -0
.env
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
ALLOWED_ORIGINS=https://lhydra.com,http://localhost:3000
|
.gitattributes
CHANGED
@@ -33,3 +33,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
data/dataset.csv filter=lfs diff=lfs merge=lfs -text
|
37 |
+
data/o2_data.csv filter=lfs diff=lfs merge=lfs -text
|
38 |
+
data/train_data.csv filter=lfs diff=lfs merge=lfs -text
|
.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
.env
|
Analysis.md
ADDED
@@ -0,0 +1,310 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Hybrid Music Recommendation System Analysis
|
2 |
+
|
3 |
+
## Table of Contents
|
4 |
+
1. [Overview](#overview)
|
5 |
+
2. [Data Engineering](#data-engineering)
|
6 |
+
3. [Model Architecture](#model-architecture)
|
7 |
+
4. [Training Methodology](#training-methodology)
|
8 |
+
5. [Evaluation Metrics](#evaluation-metrics)
|
9 |
+
6. [Recommendation Generation](#recommendation-generation)
|
10 |
+
7. [Performance Analysis](#performance-analysis)
|
11 |
+
|
12 |
+
## Overview
|
13 |
+
|
14 |
+
This project implements a sophisticated hybrid music recommendation system that combines collaborative filtering with content-based features. The system leverages deep learning techniques to provide personalized music recommendations based on user listening history, music metadata, and acoustic features.
|
15 |
+
|
16 |
+
### Key Features
|
17 |
+
- Hybrid neural network architecture
|
18 |
+
- Multi-modal feature processing
|
19 |
+
- Cold-start handling
|
20 |
+
- Scalable recommendation generation
|
21 |
+
- Comprehensive evaluation metrics
|
22 |
+
|
23 |
+
## Data Engineering
|
24 |
+
|
25 |
+
### Data Preprocessing
|
26 |
+
The system employs several sophisticated data preprocessing techniques:
|
27 |
+
|
28 |
+
```python
|
29 |
+
# Example of feature normalization
|
30 |
+
numerical_features = [
|
31 |
+
'danceability', 'energy', 'loudness', 'speechiness',
|
32 |
+
'acousticness', 'instrumentalness', 'liveness', 'valence', 'tempo'
|
33 |
+
]
|
34 |
+
scaler = StandardScaler()
|
35 |
+
df[numerical_features] = scaler.fit_transform(df[numerical_features])
|
36 |
+
```
|
37 |
+
|
38 |
+
### Feature Engineering
|
39 |
+
1. **Categorical Encoding**
|
40 |
+
- User IDs → Dense embeddings
|
41 |
+
- Music IDs → Dense embeddings
|
42 |
+
- Artist IDs → Dense embeddings
|
43 |
+
- Genres → Multi-hot encoding
|
44 |
+
|
45 |
+
2. **Numerical Features**
|
46 |
+
- Audio features normalization
|
47 |
+
- Temporal feature extraction
|
48 |
+
- Interaction strength calculation
|
49 |
+
|
50 |
+
3. **Text Processing**
|
51 |
+
- Genre tokenization
|
52 |
+
- Artist name normalization
|
53 |
+
- Music title cleaning
|
54 |
+
|
55 |
+
## Model Architecture
|
56 |
+
|
57 |
+
The `HybridMusicRecommender` class is a sophisticated neural network model designed to handle various types of input features. Here's a breakdown of its architecture:
|
58 |
+
|
59 |
+
1. **Embedding Layers**: These layers transform categorical variables into dense vector representations. The model includes embeddings for users, music tracks, artists, and genres. This allows the model to capture latent features from these categories.
|
60 |
+
|
61 |
+
```python
|
62 |
+
self.user_embedding = nn.Embedding(num_users, embedding_dim)
|
63 |
+
self.music_embedding = nn.Embedding(num_music, embedding_dim)
|
64 |
+
self.artist_embedding = nn.Embedding(num_artists, embedding_dim)
|
65 |
+
self.genre_embedding = nn.Embedding(num_genres, embedding_dim)
|
66 |
+
```
|
67 |
+
|
68 |
+
2. **Feature Processing Layers**: Numerical and binary features are processed through separate layers, which include linear transformations followed by ReLU activations and batch normalization. This helps in stabilizing the learning process and improving convergence.
|
69 |
+
|
70 |
+
```python
|
71 |
+
self.numerical_layer = nn.Sequential(
|
72 |
+
nn.Linear(num_numerical, embedding_dim),
|
73 |
+
nn.ReLU(),
|
74 |
+
nn.BatchNorm1d(embedding_dim)
|
75 |
+
)
|
76 |
+
self.binary_layer = nn.Sequential(
|
77 |
+
nn.Linear(2, embedding_dim),
|
78 |
+
nn.ReLU(),
|
79 |
+
nn.BatchNorm1d(embedding_dim)
|
80 |
+
)
|
81 |
+
```
|
82 |
+
|
83 |
+
3. **MLP Layers with Residual Connections**: The model employs multiple fully connected layers with residual connections, which help in training deeper networks by mitigating the vanishing gradient problem.
|
84 |
+
|
85 |
+
```python
|
86 |
+
for layer_size in layers:
|
87 |
+
self.fc_layers.append(nn.ModuleDict({
|
88 |
+
'main': nn.Sequential(
|
89 |
+
nn.Linear(input_dim, layer_size),
|
90 |
+
nn.ReLU(),
|
91 |
+
nn.BatchNorm1d(layer_size),
|
92 |
+
nn.Dropout(dropout)
|
93 |
+
),
|
94 |
+
'residual': nn.Linear(input_dim, layer_size) if input_dim != layer_size else None
|
95 |
+
}))
|
96 |
+
```
|
97 |
+
|
98 |
+
4. **Final Layer**: The output layer is a single neuron that predicts the target variable, which in this case is the play count of a music track.
|
99 |
+
|
100 |
+
```python
|
101 |
+
self.final_layer = nn.Linear(layers[-1], 1)
|
102 |
+
```
|
103 |
+
|
104 |
+
## Training Methodology
|
105 |
+
|
106 |
+
### Training Configuration
|
107 |
+
```python
|
108 |
+
config = {
|
109 |
+
'embedding_dim': 64,
|
110 |
+
'hidden_layers': [256, 128, 64],
|
111 |
+
'dropout': 0.2,
|
112 |
+
'learning_rate': 0.001,
|
113 |
+
'weight_decay': 1e-5,
|
114 |
+
'batch_size': 256,
|
115 |
+
'early_stopping_patience': 10,
|
116 |
+
'max_grad_norm': 1.0
|
117 |
+
}
|
118 |
+
```
|
119 |
+
|
120 |
+
### Training Process
|
121 |
+
1. **Optimizer and Scheduler**
|
122 |
+
```python
|
123 |
+
# Adam optimizer with weight decay
|
124 |
+
optimizer = optim.Adam(
|
125 |
+
model.parameters(),
|
126 |
+
lr=config['learning_rate'],
|
127 |
+
weight_decay=config['weight_decay']
|
128 |
+
)
|
129 |
+
|
130 |
+
# Learning rate scheduler
|
131 |
+
scheduler = optim.lr_scheduler.ReduceLROnPlateau(
|
132 |
+
optimizer, mode='min', patience=5, factor=0.5
|
133 |
+
)
|
134 |
+
```
|
135 |
+
|
136 |
+
2. **Training Loop**
|
137 |
+
```python
|
138 |
+
def train_epoch(self):
|
139 |
+
self.model.train()
|
140 |
+
total_loss = 0
|
141 |
+
predictions, targets = [], []
|
142 |
+
|
143 |
+
for batch in self.train_loader:
|
144 |
+
# Move batch to device
|
145 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
146 |
+
|
147 |
+
# Forward pass
|
148 |
+
pred = self.model(batch)
|
149 |
+
loss = self.criterion(pred, batch['plays'])
|
150 |
+
|
151 |
+
# Backward pass
|
152 |
+
self.optimizer.zero_grad()
|
153 |
+
loss.backward()
|
154 |
+
torch.nn.utils.clip_grad_norm_(self.model.parameters(),
|
155 |
+
self.max_grad_norm)
|
156 |
+
self.optimizer.step()
|
157 |
+
```
|
158 |
+
|
159 |
+
## Evaluation Metrics
|
160 |
+
|
161 |
+
### Metrics Calculation
|
162 |
+
```python
|
163 |
+
def calculate_metrics(self, predictions: torch.Tensor, targets: torch.Tensor):
|
164 |
+
predictions = predictions.cpu().numpy()
|
165 |
+
targets = targets.cpu().numpy()
|
166 |
+
|
167 |
+
return {
|
168 |
+
'rmse': np.sqrt(mean_squared_error(targets, predictions)),
|
169 |
+
'mae': mean_absolute_error(targets, predictions),
|
170 |
+
'ndcg': calculate_ndcg(predictions, targets)
|
171 |
+
}
|
172 |
+
```
|
173 |
+
|
174 |
+
### Performance Analysis
|
175 |
+
1. **Basic Metrics**
|
176 |
+
- RMSE (Root Mean Square Error)
|
177 |
+
- MAE (Mean Absolute Error)
|
178 |
+
- NDCG (Normalized Discounted Cumulative Gain)
|
179 |
+
|
180 |
+
2. **Advanced Analysis**
|
181 |
+
```python
|
182 |
+
def analyze_cold_start(self, user_interactions):
|
183 |
+
# Analyze performance for different user interaction levels
|
184 |
+
cold_start = user_interactions < 5
|
185 |
+
warm_start = user_interactions >= 5
|
186 |
+
|
187 |
+
metrics = {
|
188 |
+
'cold_start': calculate_metrics(predictions[cold_start],
|
189 |
+
targets[cold_start]),
|
190 |
+
'warm_start': calculate_metrics(predictions[warm_start],
|
191 |
+
targets[warm_start])
|
192 |
+
}
|
193 |
+
```
|
194 |
+
|
195 |
+
## Data Handling and Preprocessing
|
196 |
+
|
197 |
+
- **Data Splitting and Encoding**: The use of consistent encoding across train and test datasets ensures that the model is trained and evaluated on uniformly processed data, reducing the risk of data leakage or inconsistencies.
|
198 |
+
|
199 |
+
## Model Training and Optimization
|
200 |
+
|
201 |
+
- **Gradient Clipping and Early Stopping**: These techniques are employed to prevent overfitting and ensure stable training. Gradient clipping helps in managing exploding gradients, while early stopping halts training when the model's performance on the validation set stops improving.
|
202 |
+
|
203 |
+
## Model Evaluation and Analysis
|
204 |
+
|
205 |
+
- **Cold Start Analysis**: Evaluating model performance on new users or items helps in understanding and mitigating the cold start problem, which is a common challenge in recommendation systems.
|
206 |
+
|
207 |
+
## Recommendation Generation
|
208 |
+
|
209 |
+
### Generation Process
|
210 |
+
```python
|
211 |
+
def generate_recommendations(self, user_id, n_recommendations=10):
|
212 |
+
# Prepare user input
|
213 |
+
user_tensor = torch.tensor([user_id], device=self.device)
|
214 |
+
user_embed = self.user_embedding(user_tensor)
|
215 |
+
|
216 |
+
# Generate scores for all items
|
217 |
+
all_items = torch.arange(self.num_items, device=self.device)
|
218 |
+
scores = self.forward_recommendation(user_embed, all_items)
|
219 |
+
|
220 |
+
# Get top-K recommendations
|
221 |
+
top_k_scores, top_k_items = torch.topk(scores, k=n_recommendations)
|
222 |
+
return top_k_items.cpu().numpy(), top_k_scores.cpu().numpy()
|
223 |
+
```
|
224 |
+
|
225 |
+
### Post-processing
|
226 |
+
1. **Diversity Enhancement**
|
227 |
+
```python
|
228 |
+
def enhance_diversity(recommendations, similarity_matrix,
|
229 |
+
lambda_div=0.5):
|
230 |
+
scores = recommendations['scores']
|
231 |
+
items = recommendations['items']
|
232 |
+
|
233 |
+
# Calculate diversity penalty
|
234 |
+
diversity_penalty = calculate_diversity_penalty(
|
235 |
+
items, similarity_matrix
|
236 |
+
)
|
237 |
+
|
238 |
+
# Adjust scores
|
239 |
+
final_scores = scores - lambda_div * diversity_penalty
|
240 |
+
```
|
241 |
+
|
242 |
+
2. **Business Rules**
|
243 |
+
- Explicit content filtering
|
244 |
+
- Genre balancing
|
245 |
+
- Popularity consideration
|
246 |
+
|
247 |
+
## Recommendation Post-processing
|
248 |
+
|
249 |
+
- **Diversity and Business Rules**: Enhancing recommendation diversity and applying business rules (e.g., explicit content filtering, genre balancing) ensure that the recommendations are not only accurate but also aligned with user preferences and business goals.
|
250 |
+
|
251 |
+
## Performance Analysis
|
252 |
+
|
253 |
+
### Model Performance
|
254 |
+
1. **Overall Metrics**
|
255 |
+
- RMSE: ~0.15-0.20
|
256 |
+
- MAE: ~0.12-0.15
|
257 |
+
- R²: ~0.65-0.70
|
258 |
+
|
259 |
+
2. **Cold Start Performance**
|
260 |
+
- New User RMSE: ~0.25-0.30
|
261 |
+
- New Item RMSE: ~0.28-0.33
|
262 |
+
|
263 |
+
### Visualization
|
264 |
+
The system includes comprehensive visualization tools for:
|
265 |
+
- Training progress monitoring
|
266 |
+
- Error distribution analysis
|
267 |
+
- Prediction bias visualization
|
268 |
+
- Performance metric tracking
|
269 |
+
|
270 |
+
```python
|
271 |
+
def plot_prediction_analysis(self, metrics):
|
272 |
+
"""
|
273 |
+
Creates a comprehensive prediction analysis plot with:
|
274 |
+
- Scatter plot with density
|
275 |
+
- Error distribution
|
276 |
+
- Q-Q plot
|
277 |
+
- Residuals analysis
|
278 |
+
"""
|
279 |
+
fig = plt.figure(figsize=(15, 10))
|
280 |
+
gs = GridSpec(2, 2, figure=fig)
|
281 |
+
# ... plotting code ...
|
282 |
+
```
|
283 |
+
|
284 |
+
### System Requirements
|
285 |
+
- Python 3.9+
|
286 |
+
- PyTorch 1.9+
|
287 |
+
- CUDA support (optional)
|
288 |
+
- 16GB+ RAM for training
|
289 |
+
- GPU with 8GB+ VRAM (recommended)
|
290 |
+
|
291 |
+
## Future Improvements
|
292 |
+
|
293 |
+
1. **Model Enhancements**
|
294 |
+
- Attention mechanisms
|
295 |
+
- Sequential modeling
|
296 |
+
- Multi-task learning
|
297 |
+
|
298 |
+
2. **Feature Engineering**
|
299 |
+
- Advanced audio feature extraction
|
300 |
+
- Temporal pattern analysis
|
301 |
+
- Social network integration
|
302 |
+
|
303 |
+
3. **System Optimization**
|
304 |
+
- Batch inference optimization
|
305 |
+
- Model quantization
|
306 |
+
- Caching strategies
|
307 |
+
|
308 |
+
---
|
309 |
+
|
310 |
+
This analysis provides a comprehensive overview of the hybrid music recommendation system's technical implementation. For specific implementation details, refer to the corresponding source code files in the repository.
|
Procfile
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
web: python app.py
|
api/__pycache__/main.cpython-312.pyc
ADDED
Binary file (2.54 kB). View file
|
|
api/main.py
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import FastAPI, HTTPException
|
2 |
+
from fastapi.middleware.cors import CORSMiddleware
|
3 |
+
from pydantic import BaseModel
|
4 |
+
import pandas as pd
|
5 |
+
from generate_recommendations import RecommendationGenerator
|
6 |
+
import torch
|
7 |
+
|
8 |
+
app = FastAPI()
|
9 |
+
|
10 |
+
# CORS middleware configuration
|
11 |
+
app.add_middleware(
|
12 |
+
CORSMiddleware,
|
13 |
+
allow_origins=[
|
14 |
+
"http://localhost:3000",
|
15 |
+
"http://127.0.0.1:3000",
|
16 |
+
# Add your Windows IP if needed
|
17 |
+
"http://192.168.1.x:3000" # Replace x with your actual IP
|
18 |
+
],
|
19 |
+
allow_credentials=True,
|
20 |
+
allow_methods=["*"],
|
21 |
+
allow_headers=["*"],
|
22 |
+
)
|
23 |
+
|
24 |
+
# Load model and data once when starting the server
|
25 |
+
try:
|
26 |
+
model_path = '../checkpoints/best_model.pth'
|
27 |
+
catalog_data = pd.read_csv('../../data/o2_data.csv')
|
28 |
+
recommender = RecommendationGenerator(model_path, catalog_data)
|
29 |
+
except Exception as e:
|
30 |
+
print(f"Error loading model: {str(e)}")
|
31 |
+
raise
|
32 |
+
|
33 |
+
class UserInput(BaseModel):
|
34 |
+
user_id: str
|
35 |
+
age: int
|
36 |
+
gender: str
|
37 |
+
genre: str
|
38 |
+
music: str
|
39 |
+
|
40 |
+
@app.post("/recommendations/")
|
41 |
+
async def get_recommendations(user_input: UserInput):
|
42 |
+
try:
|
43 |
+
user_info = {
|
44 |
+
'user_id': user_input.user_id,
|
45 |
+
'age': user_input.age,
|
46 |
+
'gender': user_input.gender,
|
47 |
+
'genre': user_input.genre,
|
48 |
+
'music': user_input.music
|
49 |
+
}
|
50 |
+
|
51 |
+
recommendations = recommender.generate_recommendations(user_info, n_recommendations=10)
|
52 |
+
|
53 |
+
return {
|
54 |
+
"status": "success",
|
55 |
+
"recommendations": recommendations.to_dict(orient='records')
|
56 |
+
}
|
57 |
+
except Exception as e:
|
58 |
+
raise HTTPException(status_code=500, detail=str(e))
|
59 |
+
|
60 |
+
@app.get("/health")
|
61 |
+
async def health_check():
|
62 |
+
return {"status": "healthy"}
|
api/package-lock.json
ADDED
@@ -0,0 +1,946 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "api",
|
3 |
+
"lockfileVersion": 3,
|
4 |
+
"requires": true,
|
5 |
+
"packages": {
|
6 |
+
"": {
|
7 |
+
"dependencies": {
|
8 |
+
"@emotion/react": "^11.14.0",
|
9 |
+
"@emotion/styled": "^11.14.0",
|
10 |
+
"@mui/material": "^6.3.1"
|
11 |
+
}
|
12 |
+
},
|
13 |
+
"node_modules/@babel/code-frame": {
|
14 |
+
"version": "7.26.2",
|
15 |
+
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
|
16 |
+
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
|
17 |
+
"dependencies": {
|
18 |
+
"@babel/helper-validator-identifier": "^7.25.9",
|
19 |
+
"js-tokens": "^4.0.0",
|
20 |
+
"picocolors": "^1.0.0"
|
21 |
+
},
|
22 |
+
"engines": {
|
23 |
+
"node": ">=6.9.0"
|
24 |
+
}
|
25 |
+
},
|
26 |
+
"node_modules/@babel/generator": {
|
27 |
+
"version": "7.26.3",
|
28 |
+
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
|
29 |
+
"integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
|
30 |
+
"dependencies": {
|
31 |
+
"@babel/parser": "^7.26.3",
|
32 |
+
"@babel/types": "^7.26.3",
|
33 |
+
"@jridgewell/gen-mapping": "^0.3.5",
|
34 |
+
"@jridgewell/trace-mapping": "^0.3.25",
|
35 |
+
"jsesc": "^3.0.2"
|
36 |
+
},
|
37 |
+
"engines": {
|
38 |
+
"node": ">=6.9.0"
|
39 |
+
}
|
40 |
+
},
|
41 |
+
"node_modules/@babel/helper-module-imports": {
|
42 |
+
"version": "7.25.9",
|
43 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
|
44 |
+
"integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
|
45 |
+
"dependencies": {
|
46 |
+
"@babel/traverse": "^7.25.9",
|
47 |
+
"@babel/types": "^7.25.9"
|
48 |
+
},
|
49 |
+
"engines": {
|
50 |
+
"node": ">=6.9.0"
|
51 |
+
}
|
52 |
+
},
|
53 |
+
"node_modules/@babel/helper-string-parser": {
|
54 |
+
"version": "7.25.9",
|
55 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
|
56 |
+
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
|
57 |
+
"engines": {
|
58 |
+
"node": ">=6.9.0"
|
59 |
+
}
|
60 |
+
},
|
61 |
+
"node_modules/@babel/helper-validator-identifier": {
|
62 |
+
"version": "7.25.9",
|
63 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
64 |
+
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
65 |
+
"engines": {
|
66 |
+
"node": ">=6.9.0"
|
67 |
+
}
|
68 |
+
},
|
69 |
+
"node_modules/@babel/parser": {
|
70 |
+
"version": "7.26.3",
|
71 |
+
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
|
72 |
+
"integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
|
73 |
+
"dependencies": {
|
74 |
+
"@babel/types": "^7.26.3"
|
75 |
+
},
|
76 |
+
"bin": {
|
77 |
+
"parser": "bin/babel-parser.js"
|
78 |
+
},
|
79 |
+
"engines": {
|
80 |
+
"node": ">=6.0.0"
|
81 |
+
}
|
82 |
+
},
|
83 |
+
"node_modules/@babel/runtime": {
|
84 |
+
"version": "7.26.0",
|
85 |
+
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
|
86 |
+
"integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
|
87 |
+
"dependencies": {
|
88 |
+
"regenerator-runtime": "^0.14.0"
|
89 |
+
},
|
90 |
+
"engines": {
|
91 |
+
"node": ">=6.9.0"
|
92 |
+
}
|
93 |
+
},
|
94 |
+
"node_modules/@babel/template": {
|
95 |
+
"version": "7.25.9",
|
96 |
+
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
|
97 |
+
"integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
|
98 |
+
"dependencies": {
|
99 |
+
"@babel/code-frame": "^7.25.9",
|
100 |
+
"@babel/parser": "^7.25.9",
|
101 |
+
"@babel/types": "^7.25.9"
|
102 |
+
},
|
103 |
+
"engines": {
|
104 |
+
"node": ">=6.9.0"
|
105 |
+
}
|
106 |
+
},
|
107 |
+
"node_modules/@babel/traverse": {
|
108 |
+
"version": "7.26.4",
|
109 |
+
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
|
110 |
+
"integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
|
111 |
+
"dependencies": {
|
112 |
+
"@babel/code-frame": "^7.26.2",
|
113 |
+
"@babel/generator": "^7.26.3",
|
114 |
+
"@babel/parser": "^7.26.3",
|
115 |
+
"@babel/template": "^7.25.9",
|
116 |
+
"@babel/types": "^7.26.3",
|
117 |
+
"debug": "^4.3.1",
|
118 |
+
"globals": "^11.1.0"
|
119 |
+
},
|
120 |
+
"engines": {
|
121 |
+
"node": ">=6.9.0"
|
122 |
+
}
|
123 |
+
},
|
124 |
+
"node_modules/@babel/types": {
|
125 |
+
"version": "7.26.3",
|
126 |
+
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
|
127 |
+
"integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
|
128 |
+
"dependencies": {
|
129 |
+
"@babel/helper-string-parser": "^7.25.9",
|
130 |
+
"@babel/helper-validator-identifier": "^7.25.9"
|
131 |
+
},
|
132 |
+
"engines": {
|
133 |
+
"node": ">=6.9.0"
|
134 |
+
}
|
135 |
+
},
|
136 |
+
"node_modules/@emotion/babel-plugin": {
|
137 |
+
"version": "11.13.5",
|
138 |
+
"resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
|
139 |
+
"integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
|
140 |
+
"dependencies": {
|
141 |
+
"@babel/helper-module-imports": "^7.16.7",
|
142 |
+
"@babel/runtime": "^7.18.3",
|
143 |
+
"@emotion/hash": "^0.9.2",
|
144 |
+
"@emotion/memoize": "^0.9.0",
|
145 |
+
"@emotion/serialize": "^1.3.3",
|
146 |
+
"babel-plugin-macros": "^3.1.0",
|
147 |
+
"convert-source-map": "^1.5.0",
|
148 |
+
"escape-string-regexp": "^4.0.0",
|
149 |
+
"find-root": "^1.1.0",
|
150 |
+
"source-map": "^0.5.7",
|
151 |
+
"stylis": "4.2.0"
|
152 |
+
}
|
153 |
+
},
|
154 |
+
"node_modules/@emotion/cache": {
|
155 |
+
"version": "11.14.0",
|
156 |
+
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
|
157 |
+
"integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
|
158 |
+
"dependencies": {
|
159 |
+
"@emotion/memoize": "^0.9.0",
|
160 |
+
"@emotion/sheet": "^1.4.0",
|
161 |
+
"@emotion/utils": "^1.4.2",
|
162 |
+
"@emotion/weak-memoize": "^0.4.0",
|
163 |
+
"stylis": "4.2.0"
|
164 |
+
}
|
165 |
+
},
|
166 |
+
"node_modules/@emotion/hash": {
|
167 |
+
"version": "0.9.2",
|
168 |
+
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
|
169 |
+
"integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="
|
170 |
+
},
|
171 |
+
"node_modules/@emotion/is-prop-valid": {
|
172 |
+
"version": "1.3.1",
|
173 |
+
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
|
174 |
+
"integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
|
175 |
+
"dependencies": {
|
176 |
+
"@emotion/memoize": "^0.9.0"
|
177 |
+
}
|
178 |
+
},
|
179 |
+
"node_modules/@emotion/memoize": {
|
180 |
+
"version": "0.9.0",
|
181 |
+
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
|
182 |
+
"integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
|
183 |
+
},
|
184 |
+
"node_modules/@emotion/react": {
|
185 |
+
"version": "11.14.0",
|
186 |
+
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
|
187 |
+
"integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
|
188 |
+
"dependencies": {
|
189 |
+
"@babel/runtime": "^7.18.3",
|
190 |
+
"@emotion/babel-plugin": "^11.13.5",
|
191 |
+
"@emotion/cache": "^11.14.0",
|
192 |
+
"@emotion/serialize": "^1.3.3",
|
193 |
+
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
|
194 |
+
"@emotion/utils": "^1.4.2",
|
195 |
+
"@emotion/weak-memoize": "^0.4.0",
|
196 |
+
"hoist-non-react-statics": "^3.3.1"
|
197 |
+
},
|
198 |
+
"peerDependencies": {
|
199 |
+
"react": ">=16.8.0"
|
200 |
+
},
|
201 |
+
"peerDependenciesMeta": {
|
202 |
+
"@types/react": {
|
203 |
+
"optional": true
|
204 |
+
}
|
205 |
+
}
|
206 |
+
},
|
207 |
+
"node_modules/@emotion/serialize": {
|
208 |
+
"version": "1.3.3",
|
209 |
+
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
|
210 |
+
"integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
|
211 |
+
"dependencies": {
|
212 |
+
"@emotion/hash": "^0.9.2",
|
213 |
+
"@emotion/memoize": "^0.9.0",
|
214 |
+
"@emotion/unitless": "^0.10.0",
|
215 |
+
"@emotion/utils": "^1.4.2",
|
216 |
+
"csstype": "^3.0.2"
|
217 |
+
}
|
218 |
+
},
|
219 |
+
"node_modules/@emotion/sheet": {
|
220 |
+
"version": "1.4.0",
|
221 |
+
"resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
|
222 |
+
"integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg=="
|
223 |
+
},
|
224 |
+
"node_modules/@emotion/styled": {
|
225 |
+
"version": "11.14.0",
|
226 |
+
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
|
227 |
+
"integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
|
228 |
+
"dependencies": {
|
229 |
+
"@babel/runtime": "^7.18.3",
|
230 |
+
"@emotion/babel-plugin": "^11.13.5",
|
231 |
+
"@emotion/is-prop-valid": "^1.3.0",
|
232 |
+
"@emotion/serialize": "^1.3.3",
|
233 |
+
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
|
234 |
+
"@emotion/utils": "^1.4.2"
|
235 |
+
},
|
236 |
+
"peerDependencies": {
|
237 |
+
"@emotion/react": "^11.0.0-rc.0",
|
238 |
+
"react": ">=16.8.0"
|
239 |
+
},
|
240 |
+
"peerDependenciesMeta": {
|
241 |
+
"@types/react": {
|
242 |
+
"optional": true
|
243 |
+
}
|
244 |
+
}
|
245 |
+
},
|
246 |
+
"node_modules/@emotion/unitless": {
|
247 |
+
"version": "0.10.0",
|
248 |
+
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
|
249 |
+
"integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="
|
250 |
+
},
|
251 |
+
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
|
252 |
+
"version": "1.2.0",
|
253 |
+
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
|
254 |
+
"integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
|
255 |
+
"peerDependencies": {
|
256 |
+
"react": ">=16.8.0"
|
257 |
+
}
|
258 |
+
},
|
259 |
+
"node_modules/@emotion/utils": {
|
260 |
+
"version": "1.4.2",
|
261 |
+
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
|
262 |
+
"integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA=="
|
263 |
+
},
|
264 |
+
"node_modules/@emotion/weak-memoize": {
|
265 |
+
"version": "0.4.0",
|
266 |
+
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
|
267 |
+
"integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="
|
268 |
+
},
|
269 |
+
"node_modules/@jridgewell/gen-mapping": {
|
270 |
+
"version": "0.3.8",
|
271 |
+
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
|
272 |
+
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
|
273 |
+
"dependencies": {
|
274 |
+
"@jridgewell/set-array": "^1.2.1",
|
275 |
+
"@jridgewell/sourcemap-codec": "^1.4.10",
|
276 |
+
"@jridgewell/trace-mapping": "^0.3.24"
|
277 |
+
},
|
278 |
+
"engines": {
|
279 |
+
"node": ">=6.0.0"
|
280 |
+
}
|
281 |
+
},
|
282 |
+
"node_modules/@jridgewell/resolve-uri": {
|
283 |
+
"version": "3.1.2",
|
284 |
+
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
285 |
+
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
286 |
+
"engines": {
|
287 |
+
"node": ">=6.0.0"
|
288 |
+
}
|
289 |
+
},
|
290 |
+
"node_modules/@jridgewell/set-array": {
|
291 |
+
"version": "1.2.1",
|
292 |
+
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
|
293 |
+
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
|
294 |
+
"engines": {
|
295 |
+
"node": ">=6.0.0"
|
296 |
+
}
|
297 |
+
},
|
298 |
+
"node_modules/@jridgewell/sourcemap-codec": {
|
299 |
+
"version": "1.5.0",
|
300 |
+
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
301 |
+
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
|
302 |
+
},
|
303 |
+
"node_modules/@jridgewell/trace-mapping": {
|
304 |
+
"version": "0.3.25",
|
305 |
+
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
|
306 |
+
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
|
307 |
+
"dependencies": {
|
308 |
+
"@jridgewell/resolve-uri": "^3.1.0",
|
309 |
+
"@jridgewell/sourcemap-codec": "^1.4.14"
|
310 |
+
}
|
311 |
+
},
|
312 |
+
"node_modules/@mui/core-downloads-tracker": {
|
313 |
+
"version": "6.3.1",
|
314 |
+
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.3.1.tgz",
|
315 |
+
"integrity": "sha512-2OmnEyoHpj5//dJJpMuxOeLItCCHdf99pjMFfUFdBteCunAK9jW+PwEo4mtdGcLs7P+IgZ+85ypd52eY4AigoQ==",
|
316 |
+
"funding": {
|
317 |
+
"type": "opencollective",
|
318 |
+
"url": "https://opencollective.com/mui-org"
|
319 |
+
}
|
320 |
+
},
|
321 |
+
"node_modules/@mui/material": {
|
322 |
+
"version": "6.3.1",
|
323 |
+
"resolved": "https://registry.npmjs.org/@mui/material/-/material-6.3.1.tgz",
|
324 |
+
"integrity": "sha512-ynG9ayhxgCsHJ/dtDcT1v78/r2GwQyP3E0hPz3GdPRl0uFJz/uUTtI5KFYwadXmbC+Uv3bfB8laZ6+Cpzh03gA==",
|
325 |
+
"dependencies": {
|
326 |
+
"@babel/runtime": "^7.26.0",
|
327 |
+
"@mui/core-downloads-tracker": "^6.3.1",
|
328 |
+
"@mui/system": "^6.3.1",
|
329 |
+
"@mui/types": "^7.2.21",
|
330 |
+
"@mui/utils": "^6.3.1",
|
331 |
+
"@popperjs/core": "^2.11.8",
|
332 |
+
"@types/react-transition-group": "^4.4.12",
|
333 |
+
"clsx": "^2.1.1",
|
334 |
+
"csstype": "^3.1.3",
|
335 |
+
"prop-types": "^15.8.1",
|
336 |
+
"react-is": "^19.0.0",
|
337 |
+
"react-transition-group": "^4.4.5"
|
338 |
+
},
|
339 |
+
"engines": {
|
340 |
+
"node": ">=14.0.0"
|
341 |
+
},
|
342 |
+
"funding": {
|
343 |
+
"type": "opencollective",
|
344 |
+
"url": "https://opencollective.com/mui-org"
|
345 |
+
},
|
346 |
+
"peerDependencies": {
|
347 |
+
"@emotion/react": "^11.5.0",
|
348 |
+
"@emotion/styled": "^11.3.0",
|
349 |
+
"@mui/material-pigment-css": "^6.3.1",
|
350 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
351 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
352 |
+
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
353 |
+
},
|
354 |
+
"peerDependenciesMeta": {
|
355 |
+
"@emotion/react": {
|
356 |
+
"optional": true
|
357 |
+
},
|
358 |
+
"@emotion/styled": {
|
359 |
+
"optional": true
|
360 |
+
},
|
361 |
+
"@mui/material-pigment-css": {
|
362 |
+
"optional": true
|
363 |
+
},
|
364 |
+
"@types/react": {
|
365 |
+
"optional": true
|
366 |
+
}
|
367 |
+
}
|
368 |
+
},
|
369 |
+
"node_modules/@mui/private-theming": {
|
370 |
+
"version": "6.3.1",
|
371 |
+
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.3.1.tgz",
|
372 |
+
"integrity": "sha512-g0u7hIUkmXmmrmmf5gdDYv9zdAig0KoxhIQn1JN8IVqApzf/AyRhH3uDGx5mSvs8+a1zb4+0W6LC260SyTTtdQ==",
|
373 |
+
"dependencies": {
|
374 |
+
"@babel/runtime": "^7.26.0",
|
375 |
+
"@mui/utils": "^6.3.1",
|
376 |
+
"prop-types": "^15.8.1"
|
377 |
+
},
|
378 |
+
"engines": {
|
379 |
+
"node": ">=14.0.0"
|
380 |
+
},
|
381 |
+
"funding": {
|
382 |
+
"type": "opencollective",
|
383 |
+
"url": "https://opencollective.com/mui-org"
|
384 |
+
},
|
385 |
+
"peerDependencies": {
|
386 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
387 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
388 |
+
},
|
389 |
+
"peerDependenciesMeta": {
|
390 |
+
"@types/react": {
|
391 |
+
"optional": true
|
392 |
+
}
|
393 |
+
}
|
394 |
+
},
|
395 |
+
"node_modules/@mui/styled-engine": {
|
396 |
+
"version": "6.3.1",
|
397 |
+
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.3.1.tgz",
|
398 |
+
"integrity": "sha512-/7CC0d2fIeiUxN5kCCwYu4AWUDd9cCTxWCyo0v/Rnv6s8uk6hWgJC3VLZBoDENBHf/KjqDZuYJ2CR+7hD6QYww==",
|
399 |
+
"dependencies": {
|
400 |
+
"@babel/runtime": "^7.26.0",
|
401 |
+
"@emotion/cache": "^11.13.5",
|
402 |
+
"@emotion/serialize": "^1.3.3",
|
403 |
+
"@emotion/sheet": "^1.4.0",
|
404 |
+
"csstype": "^3.1.3",
|
405 |
+
"prop-types": "^15.8.1"
|
406 |
+
},
|
407 |
+
"engines": {
|
408 |
+
"node": ">=14.0.0"
|
409 |
+
},
|
410 |
+
"funding": {
|
411 |
+
"type": "opencollective",
|
412 |
+
"url": "https://opencollective.com/mui-org"
|
413 |
+
},
|
414 |
+
"peerDependencies": {
|
415 |
+
"@emotion/react": "^11.4.1",
|
416 |
+
"@emotion/styled": "^11.3.0",
|
417 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
418 |
+
},
|
419 |
+
"peerDependenciesMeta": {
|
420 |
+
"@emotion/react": {
|
421 |
+
"optional": true
|
422 |
+
},
|
423 |
+
"@emotion/styled": {
|
424 |
+
"optional": true
|
425 |
+
}
|
426 |
+
}
|
427 |
+
},
|
428 |
+
"node_modules/@mui/system": {
|
429 |
+
"version": "6.3.1",
|
430 |
+
"resolved": "https://registry.npmjs.org/@mui/system/-/system-6.3.1.tgz",
|
431 |
+
"integrity": "sha512-AwqQ3EAIT2np85ki+N15fF0lFXX1iFPqenCzVOSl3QXKy2eifZeGd9dGtt7pGMoFw5dzW4dRGGzRpLAq9rkl7A==",
|
432 |
+
"dependencies": {
|
433 |
+
"@babel/runtime": "^7.26.0",
|
434 |
+
"@mui/private-theming": "^6.3.1",
|
435 |
+
"@mui/styled-engine": "^6.3.1",
|
436 |
+
"@mui/types": "^7.2.21",
|
437 |
+
"@mui/utils": "^6.3.1",
|
438 |
+
"clsx": "^2.1.1",
|
439 |
+
"csstype": "^3.1.3",
|
440 |
+
"prop-types": "^15.8.1"
|
441 |
+
},
|
442 |
+
"engines": {
|
443 |
+
"node": ">=14.0.0"
|
444 |
+
},
|
445 |
+
"funding": {
|
446 |
+
"type": "opencollective",
|
447 |
+
"url": "https://opencollective.com/mui-org"
|
448 |
+
},
|
449 |
+
"peerDependencies": {
|
450 |
+
"@emotion/react": "^11.5.0",
|
451 |
+
"@emotion/styled": "^11.3.0",
|
452 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
453 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
454 |
+
},
|
455 |
+
"peerDependenciesMeta": {
|
456 |
+
"@emotion/react": {
|
457 |
+
"optional": true
|
458 |
+
},
|
459 |
+
"@emotion/styled": {
|
460 |
+
"optional": true
|
461 |
+
},
|
462 |
+
"@types/react": {
|
463 |
+
"optional": true
|
464 |
+
}
|
465 |
+
}
|
466 |
+
},
|
467 |
+
"node_modules/@mui/types": {
|
468 |
+
"version": "7.2.21",
|
469 |
+
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.21.tgz",
|
470 |
+
"integrity": "sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==",
|
471 |
+
"peerDependencies": {
|
472 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
473 |
+
},
|
474 |
+
"peerDependenciesMeta": {
|
475 |
+
"@types/react": {
|
476 |
+
"optional": true
|
477 |
+
}
|
478 |
+
}
|
479 |
+
},
|
480 |
+
"node_modules/@mui/utils": {
|
481 |
+
"version": "6.3.1",
|
482 |
+
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.3.1.tgz",
|
483 |
+
"integrity": "sha512-sjGjXAngoio6lniQZKJ5zGfjm+LD2wvLwco7FbKe1fu8A7VIFmz2SwkLb+MDPLNX1lE7IscvNNyh1pobtZg2tw==",
|
484 |
+
"dependencies": {
|
485 |
+
"@babel/runtime": "^7.26.0",
|
486 |
+
"@mui/types": "^7.2.21",
|
487 |
+
"@types/prop-types": "^15.7.14",
|
488 |
+
"clsx": "^2.1.1",
|
489 |
+
"prop-types": "^15.8.1",
|
490 |
+
"react-is": "^19.0.0"
|
491 |
+
},
|
492 |
+
"engines": {
|
493 |
+
"node": ">=14.0.0"
|
494 |
+
},
|
495 |
+
"funding": {
|
496 |
+
"type": "opencollective",
|
497 |
+
"url": "https://opencollective.com/mui-org"
|
498 |
+
},
|
499 |
+
"peerDependencies": {
|
500 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
501 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
502 |
+
},
|
503 |
+
"peerDependenciesMeta": {
|
504 |
+
"@types/react": {
|
505 |
+
"optional": true
|
506 |
+
}
|
507 |
+
}
|
508 |
+
},
|
509 |
+
"node_modules/@popperjs/core": {
|
510 |
+
"version": "2.11.8",
|
511 |
+
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
|
512 |
+
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
|
513 |
+
"funding": {
|
514 |
+
"type": "opencollective",
|
515 |
+
"url": "https://opencollective.com/popperjs"
|
516 |
+
}
|
517 |
+
},
|
518 |
+
"node_modules/@types/parse-json": {
|
519 |
+
"version": "4.0.2",
|
520 |
+
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
|
521 |
+
"integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
|
522 |
+
},
|
523 |
+
"node_modules/@types/prop-types": {
|
524 |
+
"version": "15.7.14",
|
525 |
+
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
|
526 |
+
"integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ=="
|
527 |
+
},
|
528 |
+
"node_modules/@types/react": {
|
529 |
+
"version": "19.0.2",
|
530 |
+
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz",
|
531 |
+
"integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==",
|
532 |
+
"peer": true,
|
533 |
+
"dependencies": {
|
534 |
+
"csstype": "^3.0.2"
|
535 |
+
}
|
536 |
+
},
|
537 |
+
"node_modules/@types/react-transition-group": {
|
538 |
+
"version": "4.4.12",
|
539 |
+
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
|
540 |
+
"integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
|
541 |
+
"peerDependencies": {
|
542 |
+
"@types/react": "*"
|
543 |
+
}
|
544 |
+
},
|
545 |
+
"node_modules/babel-plugin-macros": {
|
546 |
+
"version": "3.1.0",
|
547 |
+
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
|
548 |
+
"integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
|
549 |
+
"dependencies": {
|
550 |
+
"@babel/runtime": "^7.12.5",
|
551 |
+
"cosmiconfig": "^7.0.0",
|
552 |
+
"resolve": "^1.19.0"
|
553 |
+
},
|
554 |
+
"engines": {
|
555 |
+
"node": ">=10",
|
556 |
+
"npm": ">=6"
|
557 |
+
}
|
558 |
+
},
|
559 |
+
"node_modules/callsites": {
|
560 |
+
"version": "3.1.0",
|
561 |
+
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
562 |
+
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
563 |
+
"engines": {
|
564 |
+
"node": ">=6"
|
565 |
+
}
|
566 |
+
},
|
567 |
+
"node_modules/clsx": {
|
568 |
+
"version": "2.1.1",
|
569 |
+
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
570 |
+
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
|
571 |
+
"engines": {
|
572 |
+
"node": ">=6"
|
573 |
+
}
|
574 |
+
},
|
575 |
+
"node_modules/convert-source-map": {
|
576 |
+
"version": "1.9.0",
|
577 |
+
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
|
578 |
+
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
|
579 |
+
},
|
580 |
+
"node_modules/cosmiconfig": {
|
581 |
+
"version": "7.1.0",
|
582 |
+
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
|
583 |
+
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
|
584 |
+
"dependencies": {
|
585 |
+
"@types/parse-json": "^4.0.0",
|
586 |
+
"import-fresh": "^3.2.1",
|
587 |
+
"parse-json": "^5.0.0",
|
588 |
+
"path-type": "^4.0.0",
|
589 |
+
"yaml": "^1.10.0"
|
590 |
+
},
|
591 |
+
"engines": {
|
592 |
+
"node": ">=10"
|
593 |
+
}
|
594 |
+
},
|
595 |
+
"node_modules/csstype": {
|
596 |
+
"version": "3.1.3",
|
597 |
+
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
598 |
+
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
599 |
+
},
|
600 |
+
"node_modules/debug": {
|
601 |
+
"version": "4.4.0",
|
602 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
|
603 |
+
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
|
604 |
+
"dependencies": {
|
605 |
+
"ms": "^2.1.3"
|
606 |
+
},
|
607 |
+
"engines": {
|
608 |
+
"node": ">=6.0"
|
609 |
+
},
|
610 |
+
"peerDependenciesMeta": {
|
611 |
+
"supports-color": {
|
612 |
+
"optional": true
|
613 |
+
}
|
614 |
+
}
|
615 |
+
},
|
616 |
+
"node_modules/dom-helpers": {
|
617 |
+
"version": "5.2.1",
|
618 |
+
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
|
619 |
+
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
|
620 |
+
"dependencies": {
|
621 |
+
"@babel/runtime": "^7.8.7",
|
622 |
+
"csstype": "^3.0.2"
|
623 |
+
}
|
624 |
+
},
|
625 |
+
"node_modules/error-ex": {
|
626 |
+
"version": "1.3.2",
|
627 |
+
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
628 |
+
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
629 |
+
"dependencies": {
|
630 |
+
"is-arrayish": "^0.2.1"
|
631 |
+
}
|
632 |
+
},
|
633 |
+
"node_modules/escape-string-regexp": {
|
634 |
+
"version": "4.0.0",
|
635 |
+
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
636 |
+
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
637 |
+
"engines": {
|
638 |
+
"node": ">=10"
|
639 |
+
},
|
640 |
+
"funding": {
|
641 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
642 |
+
}
|
643 |
+
},
|
644 |
+
"node_modules/find-root": {
|
645 |
+
"version": "1.1.0",
|
646 |
+
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
|
647 |
+
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
|
648 |
+
},
|
649 |
+
"node_modules/function-bind": {
|
650 |
+
"version": "1.1.2",
|
651 |
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
652 |
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
653 |
+
"funding": {
|
654 |
+
"url": "https://github.com/sponsors/ljharb"
|
655 |
+
}
|
656 |
+
},
|
657 |
+
"node_modules/globals": {
|
658 |
+
"version": "11.12.0",
|
659 |
+
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
|
660 |
+
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
661 |
+
"engines": {
|
662 |
+
"node": ">=4"
|
663 |
+
}
|
664 |
+
},
|
665 |
+
"node_modules/hasown": {
|
666 |
+
"version": "2.0.2",
|
667 |
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
668 |
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
669 |
+
"dependencies": {
|
670 |
+
"function-bind": "^1.1.2"
|
671 |
+
},
|
672 |
+
"engines": {
|
673 |
+
"node": ">= 0.4"
|
674 |
+
}
|
675 |
+
},
|
676 |
+
"node_modules/hoist-non-react-statics": {
|
677 |
+
"version": "3.3.2",
|
678 |
+
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
679 |
+
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
|
680 |
+
"dependencies": {
|
681 |
+
"react-is": "^16.7.0"
|
682 |
+
}
|
683 |
+
},
|
684 |
+
"node_modules/hoist-non-react-statics/node_modules/react-is": {
|
685 |
+
"version": "16.13.1",
|
686 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
687 |
+
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
688 |
+
},
|
689 |
+
"node_modules/import-fresh": {
|
690 |
+
"version": "3.3.0",
|
691 |
+
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
692 |
+
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
693 |
+
"dependencies": {
|
694 |
+
"parent-module": "^1.0.0",
|
695 |
+
"resolve-from": "^4.0.0"
|
696 |
+
},
|
697 |
+
"engines": {
|
698 |
+
"node": ">=6"
|
699 |
+
},
|
700 |
+
"funding": {
|
701 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
702 |
+
}
|
703 |
+
},
|
704 |
+
"node_modules/is-arrayish": {
|
705 |
+
"version": "0.2.1",
|
706 |
+
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
707 |
+
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
|
708 |
+
},
|
709 |
+
"node_modules/is-core-module": {
|
710 |
+
"version": "2.16.1",
|
711 |
+
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
|
712 |
+
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
|
713 |
+
"dependencies": {
|
714 |
+
"hasown": "^2.0.2"
|
715 |
+
},
|
716 |
+
"engines": {
|
717 |
+
"node": ">= 0.4"
|
718 |
+
},
|
719 |
+
"funding": {
|
720 |
+
"url": "https://github.com/sponsors/ljharb"
|
721 |
+
}
|
722 |
+
},
|
723 |
+
"node_modules/js-tokens": {
|
724 |
+
"version": "4.0.0",
|
725 |
+
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
726 |
+
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
727 |
+
},
|
728 |
+
"node_modules/jsesc": {
|
729 |
+
"version": "3.1.0",
|
730 |
+
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
731 |
+
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
|
732 |
+
"bin": {
|
733 |
+
"jsesc": "bin/jsesc"
|
734 |
+
},
|
735 |
+
"engines": {
|
736 |
+
"node": ">=6"
|
737 |
+
}
|
738 |
+
},
|
739 |
+
"node_modules/json-parse-even-better-errors": {
|
740 |
+
"version": "2.3.1",
|
741 |
+
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
|
742 |
+
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
|
743 |
+
},
|
744 |
+
"node_modules/lines-and-columns": {
|
745 |
+
"version": "1.2.4",
|
746 |
+
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
747 |
+
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
|
748 |
+
},
|
749 |
+
"node_modules/loose-envify": {
|
750 |
+
"version": "1.4.0",
|
751 |
+
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
752 |
+
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
753 |
+
"dependencies": {
|
754 |
+
"js-tokens": "^3.0.0 || ^4.0.0"
|
755 |
+
},
|
756 |
+
"bin": {
|
757 |
+
"loose-envify": "cli.js"
|
758 |
+
}
|
759 |
+
},
|
760 |
+
"node_modules/ms": {
|
761 |
+
"version": "2.1.3",
|
762 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
763 |
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
764 |
+
},
|
765 |
+
"node_modules/object-assign": {
|
766 |
+
"version": "4.1.1",
|
767 |
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
768 |
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
769 |
+
"engines": {
|
770 |
+
"node": ">=0.10.0"
|
771 |
+
}
|
772 |
+
},
|
773 |
+
"node_modules/parent-module": {
|
774 |
+
"version": "1.0.1",
|
775 |
+
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
776 |
+
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
777 |
+
"dependencies": {
|
778 |
+
"callsites": "^3.0.0"
|
779 |
+
},
|
780 |
+
"engines": {
|
781 |
+
"node": ">=6"
|
782 |
+
}
|
783 |
+
},
|
784 |
+
"node_modules/parse-json": {
|
785 |
+
"version": "5.2.0",
|
786 |
+
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
|
787 |
+
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
|
788 |
+
"dependencies": {
|
789 |
+
"@babel/code-frame": "^7.0.0",
|
790 |
+
"error-ex": "^1.3.1",
|
791 |
+
"json-parse-even-better-errors": "^2.3.0",
|
792 |
+
"lines-and-columns": "^1.1.6"
|
793 |
+
},
|
794 |
+
"engines": {
|
795 |
+
"node": ">=8"
|
796 |
+
},
|
797 |
+
"funding": {
|
798 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
799 |
+
}
|
800 |
+
},
|
801 |
+
"node_modules/path-parse": {
|
802 |
+
"version": "1.0.7",
|
803 |
+
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
804 |
+
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
|
805 |
+
},
|
806 |
+
"node_modules/path-type": {
|
807 |
+
"version": "4.0.0",
|
808 |
+
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
809 |
+
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
|
810 |
+
"engines": {
|
811 |
+
"node": ">=8"
|
812 |
+
}
|
813 |
+
},
|
814 |
+
"node_modules/picocolors": {
|
815 |
+
"version": "1.1.1",
|
816 |
+
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
817 |
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
|
818 |
+
},
|
819 |
+
"node_modules/prop-types": {
|
820 |
+
"version": "15.8.1",
|
821 |
+
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
|
822 |
+
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
|
823 |
+
"dependencies": {
|
824 |
+
"loose-envify": "^1.4.0",
|
825 |
+
"object-assign": "^4.1.1",
|
826 |
+
"react-is": "^16.13.1"
|
827 |
+
}
|
828 |
+
},
|
829 |
+
"node_modules/prop-types/node_modules/react-is": {
|
830 |
+
"version": "16.13.1",
|
831 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
832 |
+
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
833 |
+
},
|
834 |
+
"node_modules/react": {
|
835 |
+
"version": "19.0.0",
|
836 |
+
"resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
|
837 |
+
"integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
|
838 |
+
"peer": true,
|
839 |
+
"engines": {
|
840 |
+
"node": ">=0.10.0"
|
841 |
+
}
|
842 |
+
},
|
843 |
+
"node_modules/react-dom": {
|
844 |
+
"version": "19.0.0",
|
845 |
+
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
|
846 |
+
"integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
|
847 |
+
"peer": true,
|
848 |
+
"dependencies": {
|
849 |
+
"scheduler": "^0.25.0"
|
850 |
+
},
|
851 |
+
"peerDependencies": {
|
852 |
+
"react": "^19.0.0"
|
853 |
+
}
|
854 |
+
},
|
855 |
+
"node_modules/react-is": {
|
856 |
+
"version": "19.0.0",
|
857 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz",
|
858 |
+
"integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g=="
|
859 |
+
},
|
860 |
+
"node_modules/react-transition-group": {
|
861 |
+
"version": "4.4.5",
|
862 |
+
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
|
863 |
+
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
|
864 |
+
"dependencies": {
|
865 |
+
"@babel/runtime": "^7.5.5",
|
866 |
+
"dom-helpers": "^5.0.1",
|
867 |
+
"loose-envify": "^1.4.0",
|
868 |
+
"prop-types": "^15.6.2"
|
869 |
+
},
|
870 |
+
"peerDependencies": {
|
871 |
+
"react": ">=16.6.0",
|
872 |
+
"react-dom": ">=16.6.0"
|
873 |
+
}
|
874 |
+
},
|
875 |
+
"node_modules/regenerator-runtime": {
|
876 |
+
"version": "0.14.1",
|
877 |
+
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
|
878 |
+
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
|
879 |
+
},
|
880 |
+
"node_modules/resolve": {
|
881 |
+
"version": "1.22.10",
|
882 |
+
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
|
883 |
+
"integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
|
884 |
+
"dependencies": {
|
885 |
+
"is-core-module": "^2.16.0",
|
886 |
+
"path-parse": "^1.0.7",
|
887 |
+
"supports-preserve-symlinks-flag": "^1.0.0"
|
888 |
+
},
|
889 |
+
"bin": {
|
890 |
+
"resolve": "bin/resolve"
|
891 |
+
},
|
892 |
+
"engines": {
|
893 |
+
"node": ">= 0.4"
|
894 |
+
},
|
895 |
+
"funding": {
|
896 |
+
"url": "https://github.com/sponsors/ljharb"
|
897 |
+
}
|
898 |
+
},
|
899 |
+
"node_modules/resolve-from": {
|
900 |
+
"version": "4.0.0",
|
901 |
+
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
902 |
+
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
903 |
+
"engines": {
|
904 |
+
"node": ">=4"
|
905 |
+
}
|
906 |
+
},
|
907 |
+
"node_modules/scheduler": {
|
908 |
+
"version": "0.25.0",
|
909 |
+
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
|
910 |
+
"integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
|
911 |
+
"peer": true
|
912 |
+
},
|
913 |
+
"node_modules/source-map": {
|
914 |
+
"version": "0.5.7",
|
915 |
+
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
916 |
+
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
|
917 |
+
"engines": {
|
918 |
+
"node": ">=0.10.0"
|
919 |
+
}
|
920 |
+
},
|
921 |
+
"node_modules/stylis": {
|
922 |
+
"version": "4.2.0",
|
923 |
+
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
|
924 |
+
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
|
925 |
+
},
|
926 |
+
"node_modules/supports-preserve-symlinks-flag": {
|
927 |
+
"version": "1.0.0",
|
928 |
+
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
929 |
+
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
|
930 |
+
"engines": {
|
931 |
+
"node": ">= 0.4"
|
932 |
+
},
|
933 |
+
"funding": {
|
934 |
+
"url": "https://github.com/sponsors/ljharb"
|
935 |
+
}
|
936 |
+
},
|
937 |
+
"node_modules/yaml": {
|
938 |
+
"version": "1.10.2",
|
939 |
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
940 |
+
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
|
941 |
+
"engines": {
|
942 |
+
"node": ">= 6"
|
943 |
+
}
|
944 |
+
}
|
945 |
+
}
|
946 |
+
}
|
api/package.json
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"dependencies": {
|
3 |
+
"@emotion/react": "^11.14.0",
|
4 |
+
"@emotion/styled": "^11.14.0",
|
5 |
+
"@mui/material": "^6.3.1"
|
6 |
+
}
|
7 |
+
}
|
app.py
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from flask import Flask, request, jsonify
|
2 |
+
from flask_cors import CORS
|
3 |
+
import pandas as pd
|
4 |
+
import sys
|
5 |
+
import os
|
6 |
+
|
7 |
+
# Add parent directory to path for imports
|
8 |
+
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
9 |
+
from generate_recommendations import RecommendationGenerator
|
10 |
+
|
11 |
+
app = Flask(__name__)
|
12 |
+
CORS(app, resources={r"/*": {"origins": "*"}}, supports_credentials=True)
|
13 |
+
# # Load allowed origins from environment variable
|
14 |
+
# allowed_origins = os.environ.get("ALLOWED_ORIGINS", "http://localhost:3000").split(",")
|
15 |
+
# CORS(app, resources={r"/*": {"origins": allowed_origins}}, supports_credentials=True)
|
16 |
+
# print("CORS is configured with allowed origins:", allowed_origins)
|
17 |
+
|
18 |
+
# Setup paths relative to the project structure
|
19 |
+
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
20 |
+
MODEL_PATH = os.path.join(ROOT_DIR, 'checkpoints', 'best_model.pth')
|
21 |
+
DATA_PATH = os.path.join(ROOT_DIR, 'data', 'test_data.csv')
|
22 |
+
ENCODERS_PATH = os.path.join(ROOT_DIR, 'data', 'data_encoders.pt')
|
23 |
+
|
24 |
+
print(f"Root directory: {ROOT_DIR}")
|
25 |
+
print(f"Model path: {MODEL_PATH}")
|
26 |
+
print(f"Data path: {DATA_PATH}")
|
27 |
+
print(f"Encoders path: {ENCODERS_PATH}")
|
28 |
+
|
29 |
+
# Initialize model and data
|
30 |
+
try:
|
31 |
+
if not os.path.exists(MODEL_PATH):
|
32 |
+
raise FileNotFoundError(f"Model file not found at {MODEL_PATH}")
|
33 |
+
if not os.path.exists(DATA_PATH):
|
34 |
+
raise FileNotFoundError(f"Data file not found at {DATA_PATH}")
|
35 |
+
if not os.path.exists(ENCODERS_PATH):
|
36 |
+
raise FileNotFoundError(f"Encoders file not found at {ENCODERS_PATH}")
|
37 |
+
|
38 |
+
catalog_data = pd.read_csv(DATA_PATH)
|
39 |
+
recommender = RecommendationGenerator(
|
40 |
+
model_path=MODEL_PATH,
|
41 |
+
catalog_data=catalog_data,
|
42 |
+
encoders_path=ENCODERS_PATH
|
43 |
+
)
|
44 |
+
print("Model loaded successfully")
|
45 |
+
except Exception as e:
|
46 |
+
print(f"Error loading model: {str(e)}")
|
47 |
+
raise
|
48 |
+
|
49 |
+
@app.route('/routes', methods=['GET'])
|
50 |
+
def list_routes():
|
51 |
+
routes = []
|
52 |
+
for rule in app.url_map.iter_rules():
|
53 |
+
routes.append({
|
54 |
+
"endpoint": rule.endpoint,
|
55 |
+
"methods": list(rule.methods),
|
56 |
+
"url": str(rule)
|
57 |
+
})
|
58 |
+
return {"routes": routes}, 200
|
59 |
+
|
60 |
+
@app.route('/')
|
61 |
+
def home():
|
62 |
+
return "Welcome to the app!"
|
63 |
+
|
64 |
+
# @app.route('/api/recommendations', methods=['POST'])
|
65 |
+
# def get_recommendations():
|
66 |
+
# try:
|
67 |
+
# data = request.json
|
68 |
+
# user_info = {
|
69 |
+
# 'user_id': data['user_id'],
|
70 |
+
# 'age': int(data['age']),
|
71 |
+
# 'gender': data['gender'],
|
72 |
+
# 'genre': data['genre'],
|
73 |
+
# 'music': data['music']
|
74 |
+
# }
|
75 |
+
|
76 |
+
# recommendations = recommender.generate_recommendations(user_info, n_recommendations=5)
|
77 |
+
|
78 |
+
# return jsonify({
|
79 |
+
# 'status': 'success',
|
80 |
+
# 'recommendations': recommendations.to_dict(orient='records')
|
81 |
+
# })
|
82 |
+
# except Exception as e:
|
83 |
+
# return jsonify({
|
84 |
+
# 'status': 'error',
|
85 |
+
# 'message': str(e)
|
86 |
+
# }), 500
|
87 |
+
@app.route('/api/recommendations', methods=['POST'])
|
88 |
+
def get_recommendations():
|
89 |
+
try:
|
90 |
+
print("Request received") # Log start
|
91 |
+
data = request.json
|
92 |
+
print("Request data:", data) # Log data
|
93 |
+
|
94 |
+
user_info = {
|
95 |
+
'user_id': data['user_id'],
|
96 |
+
'age': int(data['age']),
|
97 |
+
'gender': data['gender'],
|
98 |
+
'genre': data['genre'],
|
99 |
+
'music': data['music']
|
100 |
+
}
|
101 |
+
print("Generating recommendations...") # Log before calling the model
|
102 |
+
|
103 |
+
recommendations = recommender.generate_recommendations(user_info, n_recommendations=5)
|
104 |
+
|
105 |
+
print("Recommendations generated") # Log success
|
106 |
+
return jsonify({
|
107 |
+
'status': 'success',
|
108 |
+
'recommendations': recommendations.to_dict(orient='records')
|
109 |
+
})
|
110 |
+
except Exception as e:
|
111 |
+
print("Error occurred:", str(e)) # Log errors
|
112 |
+
return jsonify({
|
113 |
+
'status': 'error',
|
114 |
+
'message': str(e)
|
115 |
+
}), 500
|
116 |
+
|
117 |
+
|
118 |
+
@app.route('/api/health', methods=['GET'])
|
119 |
+
def health_check():
|
120 |
+
return jsonify({'status': 'healthy'})
|
121 |
+
|
122 |
+
if __name__ == '__main__':
|
123 |
+
port = int(os.environ.get('PORT', 8000))
|
124 |
+
app.run(host='0.0.0.0', port=port, debug=True)
|
checkpoints/best_model.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ed66806af3d4a2fc27871e0967ebed8889755299ad77a9dfaf60d62253ce2b9a
|
3 |
+
size 21607885
|
checkpoints/best_model_cv.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:28fbbfc7ff7c43624a789097920c582a9931903a21fb05b3cddacd9638fa666c
|
3 |
+
size 8273787
|
checkpoints/latest_checkpoint.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fc336bee4aec71e695821d0f9747638bd27235d7e5e195f060528c98aa52beaf
|
3 |
+
size 21608914
|
config/model_config.json
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"learning_rate": 0.001,
|
3 |
+
"weight_decay": 1e-05,
|
4 |
+
"epochs": 20,
|
5 |
+
"batch_size": 32,
|
6 |
+
"embedding_dim": 64,
|
7 |
+
"model_dir": "models",
|
8 |
+
"hidden_layers": [
|
9 |
+
256,
|
10 |
+
128,
|
11 |
+
64
|
12 |
+
],
|
13 |
+
"dropout": 0.3,
|
14 |
+
"early_stopping_patience": 2,
|
15 |
+
"max_grad_norm": 1.0,
|
16 |
+
"l1_lambda": 1e-05,
|
17 |
+
"n_splits": 5
|
18 |
+
}
|
data/cleaned_modv2.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/data_encoders.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:f4e60f8ec993e84b8d4475484010774a10bb4c19a13e452e94b797c2583be973
|
3 |
+
size 1788856
|
data/dataset.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:650c373cadce8479ba15f3602867392c90b61aeceeb731f6098d9532f96f49d4
|
3 |
+
size 13859442
|
data/engineered_data.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/music_data.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/name_gender.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/o2_data.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:1b23097172f8f50e089acdea0c9c9f10e5b9162d926aa017578b751c6561d1dc
|
3 |
+
size 13122336
|
data/test_data.csv
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/train_data.csv
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:9d52510a2e92b5907e5e07710f60f515920fd5b836d325485f9863cd3e24f934
|
3 |
+
size 24971750
|
data_utils.py
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
from sklearn.model_selection import train_test_split
|
3 |
+
import os
|
4 |
+
import logging
|
5 |
+
from encoder_utils import DataEncoder
|
6 |
+
import torch
|
7 |
+
import numpy as np
|
8 |
+
from tqdm import tqdm
|
9 |
+
|
10 |
+
logging.basicConfig(level=logging.INFO)
|
11 |
+
logger = logging.getLogger(__name__)
|
12 |
+
|
13 |
+
def generate_negative_samples(df: pd.DataFrame, num_negatives: int = 4) -> pd.DataFrame:
|
14 |
+
"""
|
15 |
+
Generate negative samples for each user by randomly sampling items they haven't interacted with.
|
16 |
+
|
17 |
+
Args:
|
18 |
+
df: DataFrame containing user-item interactions
|
19 |
+
num_negatives: Number of negative samples per positive interaction
|
20 |
+
|
21 |
+
Returns:
|
22 |
+
DataFrame with both positive and negative samples
|
23 |
+
"""
|
24 |
+
# Create a set of all items
|
25 |
+
all_items = set(df['music_id'].unique())
|
26 |
+
|
27 |
+
negative_samples = []
|
28 |
+
for user_id in tqdm(df['user_id'].unique(), desc="Generating negative samples"):
|
29 |
+
# Get items the user has interacted with
|
30 |
+
user_items = set(df[df['user_id'] == user_id]['music_id'])
|
31 |
+
|
32 |
+
# Get items the user hasn't interacted with
|
33 |
+
negative_items = list(all_items - user_items)
|
34 |
+
|
35 |
+
if len(negative_items) > 0:
|
36 |
+
# Sample negative items
|
37 |
+
num_samples = min(len(negative_items), num_negatives)
|
38 |
+
sampled_negatives = np.random.choice(negative_items, size=num_samples, replace=False)
|
39 |
+
|
40 |
+
# Create negative samples
|
41 |
+
user_data = df[df['user_id'] == user_id].iloc[0].to_dict()
|
42 |
+
for item_id in sampled_negatives:
|
43 |
+
negative = user_data.copy()
|
44 |
+
negative['music_id'] = item_id
|
45 |
+
negative['playcount'] = 0 # Mark as negative sample
|
46 |
+
negative_samples.append(negative)
|
47 |
+
|
48 |
+
# Convert negative samples to DataFrame
|
49 |
+
negative_df = pd.DataFrame(negative_samples)
|
50 |
+
|
51 |
+
# Combine positive and negative samples
|
52 |
+
combined_df = pd.concat([df, negative_df], ignore_index=True)
|
53 |
+
|
54 |
+
return combined_df
|
55 |
+
|
56 |
+
def split_and_save_data(data_path: str, test_size: float = 0.2, random_state: int = 42):
|
57 |
+
"""
|
58 |
+
Split data into train and test sets while maintaining consistent encoding.
|
59 |
+
"""
|
60 |
+
# Read data
|
61 |
+
df = pd.read_csv(data_path)
|
62 |
+
logger.info(f"Total records: {len(df)}")
|
63 |
+
|
64 |
+
# Generate negative samples
|
65 |
+
df = generate_negative_samples(df)
|
66 |
+
logger.info(f"Total records after negative sampling: {len(df)}")
|
67 |
+
|
68 |
+
# Initialize and fit encoders on full dataset
|
69 |
+
encoder = DataEncoder()
|
70 |
+
encoder.fit(df)
|
71 |
+
|
72 |
+
# Split by user to avoid data leakage
|
73 |
+
users = df['user_id'].unique()
|
74 |
+
train_users, test_users = train_test_split(
|
75 |
+
users,
|
76 |
+
test_size=test_size,
|
77 |
+
random_state=random_state
|
78 |
+
)
|
79 |
+
|
80 |
+
train_data = df[df['user_id'].isin(train_users)]
|
81 |
+
test_data = df[df['user_id'].isin(test_users)]
|
82 |
+
|
83 |
+
# Save splits
|
84 |
+
data_dir = os.path.dirname(data_path)
|
85 |
+
os.makedirs(data_dir, exist_ok=True)
|
86 |
+
|
87 |
+
train_path = os.path.join(data_dir, 'train_data.csv')
|
88 |
+
test_path = os.path.join(data_dir, 'test_data.csv')
|
89 |
+
encoder_path = os.path.join(data_dir, 'data_encoders.pt')
|
90 |
+
|
91 |
+
# Save data splits
|
92 |
+
train_data.to_csv(train_path, index=False)
|
93 |
+
test_data.to_csv(test_path, index=False)
|
94 |
+
|
95 |
+
# Save encoders
|
96 |
+
torch.save(encoder.get_encoders(), encoder_path)
|
97 |
+
|
98 |
+
logger.info(f"Training set size: {len(train_data)}")
|
99 |
+
logger.info(f"Test set size: {len(test_data)}")
|
100 |
+
logger.info(f"\nFiles saved to:")
|
101 |
+
logger.info(f"Training data: {train_path}")
|
102 |
+
logger.info(f"Test data: {test_path}")
|
103 |
+
logger.info(f"Encoders: {encoder_path}")
|
104 |
+
|
105 |
+
# Log some statistics about the encodings
|
106 |
+
dims = encoder.get_dims()
|
107 |
+
logger.info("\nEncoding dimensions:")
|
108 |
+
for key, value in dims.items():
|
109 |
+
logger.info(f"{key}: {value}")
|
110 |
+
|
111 |
+
return train_path, test_path, encoder_path
|
112 |
+
|
113 |
+
if __name__ == "__main__":
|
114 |
+
data_path = 'data/o2_data.csv'
|
115 |
+
train_path, test_path, encoder_path = split_and_save_data(data_path)
|
encoder_utils.py
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from sklearn.preprocessing import LabelEncoder, RobustScaler
|
2 |
+
import pandas as pd
|
3 |
+
from typing import Dict, Any
|
4 |
+
import numpy as np
|
5 |
+
|
6 |
+
class DataEncoder:
|
7 |
+
def __init__(self):
|
8 |
+
self.user_encoder = LabelEncoder()
|
9 |
+
self.music_encoder = LabelEncoder()
|
10 |
+
self.artist_encoder = LabelEncoder()
|
11 |
+
self.genre_encoder = LabelEncoder()
|
12 |
+
self.scaler = RobustScaler()
|
13 |
+
|
14 |
+
self.numerical_features = [
|
15 |
+
'age', 'duration', 'acousticness', 'key', 'mode', 'speechiness',
|
16 |
+
'instrumentalness', 'liveness', 'tempo', 'time_signature',
|
17 |
+
'energy_loudness', 'dance_valence' # Removed 'playcount'
|
18 |
+
]
|
19 |
+
|
20 |
+
def fit(self, df: pd.DataFrame) -> None:
|
21 |
+
"""Fit all encoders on the full dataset."""
|
22 |
+
self.user_encoder.fit(df['user_id'].values)
|
23 |
+
self.music_encoder.fit(df['music_id'].values)
|
24 |
+
self.artist_encoder.fit(df['artist_id'].values)
|
25 |
+
self.genre_encoder.fit(df['main_genre'].values)
|
26 |
+
self.scaler.fit(df[self.numerical_features].values)
|
27 |
+
|
28 |
+
def transform(self, df: pd.DataFrame) -> Dict[str, np.ndarray]:
|
29 |
+
"""Transform data using fitted encoders."""
|
30 |
+
return {
|
31 |
+
'users': self.user_encoder.transform(df['user_id'].values),
|
32 |
+
'music': self.music_encoder.transform(df['music_id'].values),
|
33 |
+
'artists': self.artist_encoder.transform(df['artist_id'].values),
|
34 |
+
'genres': self.genre_encoder.transform(df['main_genre'].values),
|
35 |
+
'numerical_features': self.scaler.transform(df[self.numerical_features].values)
|
36 |
+
}
|
37 |
+
|
38 |
+
def get_dims(self) -> Dict[str, int]:
|
39 |
+
"""Get dimensions for model initialization."""
|
40 |
+
return {
|
41 |
+
'num_users': len(self.user_encoder.classes_),
|
42 |
+
'num_music': len(self.music_encoder.classes_),
|
43 |
+
'num_artists': len(self.artist_encoder.classes_),
|
44 |
+
'num_genres': len(self.genre_encoder.classes_),
|
45 |
+
'num_numerical': len(self.numerical_features)
|
46 |
+
}
|
47 |
+
|
48 |
+
def get_encoders(self) -> Dict[str, Any]:
|
49 |
+
"""Get all encoders for saving."""
|
50 |
+
return {
|
51 |
+
'user_encoder': self.user_encoder,
|
52 |
+
'music_encoder': self.music_encoder,
|
53 |
+
'artist_encoder': self.artist_encoder,
|
54 |
+
'genre_encoder': self.genre_encoder,
|
55 |
+
'scaler': self.scaler
|
56 |
+
}
|
evaluate_model.py
ADDED
@@ -0,0 +1,497 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
import numpy as np
|
3 |
+
import pandas as pd
|
4 |
+
import matplotlib.pyplot as plt
|
5 |
+
import seaborn as sns
|
6 |
+
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score, ndcg_score
|
7 |
+
from typing import Dict, List, Tuple
|
8 |
+
import json
|
9 |
+
import os
|
10 |
+
from train_model import HybridMusicRecommender, MusicRecommenderDataset
|
11 |
+
from torch.utils.data import DataLoader
|
12 |
+
import logging
|
13 |
+
from sklearn.preprocessing import LabelEncoder
|
14 |
+
from sklearn.model_selection import ParameterGrid, train_test_split
|
15 |
+
|
16 |
+
logging.basicConfig(
|
17 |
+
level=logging.INFO,
|
18 |
+
format='%(asctime)s - %(levelname)s - %(message)s',
|
19 |
+
handlers=[
|
20 |
+
logging.FileHandler('model_evaluation.log'),
|
21 |
+
logging.StreamHandler()
|
22 |
+
]
|
23 |
+
)
|
24 |
+
logger = logging.getLogger(__name__)
|
25 |
+
|
26 |
+
class ModelEvaluator:
|
27 |
+
def __init__(self, model_path: str, test_data: pd.DataFrame, batch_size: int = 32):
|
28 |
+
self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
|
29 |
+
self.model_path = model_path
|
30 |
+
self.test_data = test_data
|
31 |
+
self.batch_size = batch_size
|
32 |
+
|
33 |
+
# Load model and config
|
34 |
+
torch.serialization.add_safe_globals([LabelEncoder])
|
35 |
+
self.checkpoint = torch.load(model_path, map_location=self.device, weights_only=False)
|
36 |
+
self.config = self.checkpoint['config']
|
37 |
+
self.encoders = self.checkpoint['encoders']
|
38 |
+
|
39 |
+
# Initialize model
|
40 |
+
self.model = self._initialize_model()
|
41 |
+
self.test_loader = self._prepare_data()
|
42 |
+
|
43 |
+
# Create metrics directory with absolute path
|
44 |
+
self.metrics_dir = os.path.join(os.path.dirname(model_path), 'metrics')
|
45 |
+
os.makedirs(self.metrics_dir, exist_ok=True)
|
46 |
+
|
47 |
+
def _initialize_model(self, custom_config: Dict = None) -> HybridMusicRecommender:
|
48 |
+
"""Initialize and load the model from checkpoint."""
|
49 |
+
# Use custom config if provided, otherwise use default
|
50 |
+
config = custom_config if custom_config else self.config
|
51 |
+
|
52 |
+
model = HybridMusicRecommender(
|
53 |
+
num_users=len(self.encoders['user_encoder'].classes_),
|
54 |
+
num_music=len(self.encoders['music_encoder'].classes_),
|
55 |
+
num_artists=len(self.encoders['artist_encoder'].classes_),
|
56 |
+
num_genres=len(self.encoders['genre_encoder'].classes_),
|
57 |
+
num_numerical=12,
|
58 |
+
embedding_dim=config['embedding_dim'],
|
59 |
+
layers=config['hidden_layers'],
|
60 |
+
dropout=config['dropout']
|
61 |
+
)
|
62 |
+
|
63 |
+
# Only load state dict if using default config
|
64 |
+
if not custom_config:
|
65 |
+
model.load_state_dict(self.checkpoint['model_state_dict'])
|
66 |
+
|
67 |
+
model = model.to(self.device)
|
68 |
+
model.eval()
|
69 |
+
return model
|
70 |
+
|
71 |
+
def _prepare_data(self) -> DataLoader:
|
72 |
+
"""Prepare test data loader using saved encoders."""
|
73 |
+
# Create a custom dataset for test data with the saved encoders
|
74 |
+
test_dataset = MusicRecommenderDataset(
|
75 |
+
self.test_data,
|
76 |
+
mode='test',
|
77 |
+
encoders=self.encoders
|
78 |
+
)
|
79 |
+
|
80 |
+
logger.info(f"Prepared test dataset with {len(self.test_data)} samples")
|
81 |
+
return DataLoader(test_dataset, batch_size=self.batch_size, shuffle=False)
|
82 |
+
|
83 |
+
def calculate_metrics(self) -> Dict[str, float]:
|
84 |
+
"""Calculate various performance metrics."""
|
85 |
+
true_values = []
|
86 |
+
predictions = []
|
87 |
+
|
88 |
+
with torch.no_grad():
|
89 |
+
for batch in self.test_loader:
|
90 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
91 |
+
pred = self.model(batch)
|
92 |
+
true_values.extend(batch['playcount'].cpu().numpy())
|
93 |
+
predictions.extend(pred.cpu().numpy())
|
94 |
+
|
95 |
+
true_values = np.array(true_values)
|
96 |
+
predictions = np.array(predictions)
|
97 |
+
|
98 |
+
metrics = {
|
99 |
+
'mse': float(mean_squared_error(true_values, predictions)),
|
100 |
+
'rmse': float(np.sqrt(mean_squared_error(true_values, predictions))),
|
101 |
+
'mae': float(mean_absolute_error(true_values, predictions)),
|
102 |
+
'r2': float(r2_score(true_values, predictions))
|
103 |
+
}
|
104 |
+
|
105 |
+
# Calculate prediction distribution statistics
|
106 |
+
metrics.update({
|
107 |
+
'pred_mean': float(np.mean(predictions)),
|
108 |
+
'pred_std': float(np.std(predictions)),
|
109 |
+
'true_mean': float(np.mean(true_values)),
|
110 |
+
'true_std': float(np.std(true_values))
|
111 |
+
})
|
112 |
+
|
113 |
+
return metrics
|
114 |
+
|
115 |
+
def analyze_prediction_bias(self) -> Dict[str, float]:
|
116 |
+
"""Analyze prediction bias across different value ranges."""
|
117 |
+
true_values = []
|
118 |
+
predictions = []
|
119 |
+
|
120 |
+
with torch.no_grad():
|
121 |
+
for batch in self.test_loader:
|
122 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
123 |
+
pred = self.model(batch)
|
124 |
+
true_values.extend(batch['playcount'].cpu().numpy())
|
125 |
+
predictions.extend(pred.cpu().numpy())
|
126 |
+
|
127 |
+
true_values = np.array(true_values)
|
128 |
+
predictions = np.array(predictions)
|
129 |
+
|
130 |
+
# Calculate bias for different value ranges
|
131 |
+
percentiles = np.percentile(true_values, [25, 50, 75])
|
132 |
+
ranges = [
|
133 |
+
(float('-inf'), percentiles[0]),
|
134 |
+
(percentiles[0], percentiles[1]),
|
135 |
+
(percentiles[1], percentiles[2]),
|
136 |
+
(percentiles[2], float('inf'))
|
137 |
+
]
|
138 |
+
|
139 |
+
bias_analysis = {}
|
140 |
+
for i, (low, high) in enumerate(ranges):
|
141 |
+
mask = (true_values >= low) & (true_values < high)
|
142 |
+
if np.any(mask):
|
143 |
+
bias = np.mean(predictions[mask] - true_values[mask])
|
144 |
+
bias_analysis[f'bias_range_{i+1}'] = float(bias)
|
145 |
+
|
146 |
+
return bias_analysis
|
147 |
+
|
148 |
+
def plot_prediction_distribution(self, save_dir: str = None):
|
149 |
+
"""Plot the distribution of predictions vs true values."""
|
150 |
+
if save_dir is None:
|
151 |
+
save_dir = self.metrics_dir
|
152 |
+
|
153 |
+
true_values = []
|
154 |
+
predictions = []
|
155 |
+
|
156 |
+
with torch.no_grad():
|
157 |
+
for batch in self.test_loader:
|
158 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
159 |
+
pred = self.model(batch)
|
160 |
+
true_values.extend(batch['playcount'].cpu().numpy())
|
161 |
+
predictions.extend(pred.cpu().numpy())
|
162 |
+
|
163 |
+
true_values = np.array(true_values)
|
164 |
+
predictions = np.array(predictions)
|
165 |
+
|
166 |
+
# Create scatter plot
|
167 |
+
plt.figure(figsize=(10, 6))
|
168 |
+
plt.scatter(true_values, predictions, alpha=0.5)
|
169 |
+
plt.plot([true_values.min(), true_values.max()],
|
170 |
+
[true_values.min(), true_values.max()],
|
171 |
+
'r--', lw=2)
|
172 |
+
plt.xlabel('True Values')
|
173 |
+
plt.ylabel('Predictions')
|
174 |
+
plt.title('Prediction vs True Values')
|
175 |
+
|
176 |
+
try:
|
177 |
+
# Save plot with absolute path
|
178 |
+
plot_path = os.path.join(save_dir, 'prediction_distribution.png')
|
179 |
+
plt.savefig(plot_path)
|
180 |
+
plt.close()
|
181 |
+
logger.info(f"Saved prediction distribution plot to: {plot_path}")
|
182 |
+
except Exception as e:
|
183 |
+
logger.error(f"Error saving prediction distribution plot: {str(e)}")
|
184 |
+
|
185 |
+
def plot_error_distribution(self, save_dir: str = None):
|
186 |
+
"""Plot the distribution of prediction errors."""
|
187 |
+
if save_dir is None:
|
188 |
+
save_dir = self.metrics_dir
|
189 |
+
|
190 |
+
true_values = []
|
191 |
+
predictions = []
|
192 |
+
|
193 |
+
with torch.no_grad():
|
194 |
+
for batch in self.test_loader:
|
195 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
196 |
+
pred = self.model(batch)
|
197 |
+
true_values.extend(batch['playcount'].cpu().numpy())
|
198 |
+
predictions.extend(pred.cpu().numpy())
|
199 |
+
|
200 |
+
errors = np.array(predictions) - np.array(true_values)
|
201 |
+
|
202 |
+
plt.figure(figsize=(10, 6))
|
203 |
+
sns.histplot(errors, kde=True)
|
204 |
+
plt.xlabel('Prediction Error')
|
205 |
+
plt.ylabel('Count')
|
206 |
+
plt.title('Distribution of Prediction Errors')
|
207 |
+
|
208 |
+
try:
|
209 |
+
plot_path = os.path.join(save_dir, 'error_distribution.png')
|
210 |
+
plt.savefig(plot_path)
|
211 |
+
plt.close()
|
212 |
+
logger.info(f"Saved error distribution plot to: {plot_path}")
|
213 |
+
except Exception as e:
|
214 |
+
logger.error(f"Error saving error distribution plot: {str(e)}")
|
215 |
+
|
216 |
+
def evaluate_top_k_recommendations(self, k: int = 10) -> Dict[str, float]:
|
217 |
+
"""Evaluate top-K recommendation metrics."""
|
218 |
+
user_metrics = []
|
219 |
+
|
220 |
+
# Group by user to evaluate per-user recommendations
|
221 |
+
for user_id in self.test_data['user_id'].unique():
|
222 |
+
user_mask = self.test_data['user_id'] == user_id
|
223 |
+
user_data = self.test_data[user_mask]
|
224 |
+
|
225 |
+
# Skip users with too few interactions
|
226 |
+
if len(user_data) < k:
|
227 |
+
continue
|
228 |
+
|
229 |
+
user_dataset = MusicRecommenderDataset(
|
230 |
+
user_data,
|
231 |
+
mode='test',
|
232 |
+
encoders=self.encoders
|
233 |
+
)
|
234 |
+
user_loader = DataLoader(user_dataset, batch_size=len(user_data), shuffle=False)
|
235 |
+
|
236 |
+
with torch.no_grad():
|
237 |
+
batch = next(iter(user_loader))
|
238 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
239 |
+
predictions = self.model(batch).cpu().numpy()
|
240 |
+
true_values = batch['playcount'].cpu().numpy()
|
241 |
+
|
242 |
+
# Normalize predictions and true values to [0, 1] range
|
243 |
+
true_values = (true_values - true_values.min()) / (true_values.max() - true_values.min() + 1e-8)
|
244 |
+
predictions = (predictions - predictions.min()) / (predictions.max() - predictions.min() + 1e-8)
|
245 |
+
|
246 |
+
# Calculate metrics for this user
|
247 |
+
top_k_pred_idx = np.argsort(predictions)[-k:][::-1]
|
248 |
+
top_k_true_idx = np.argsort(true_values)[-k:][::-1]
|
249 |
+
|
250 |
+
# Calculate NDCG
|
251 |
+
dcg = self._calculate_dcg(true_values, top_k_pred_idx, k)
|
252 |
+
idcg = self._calculate_dcg(true_values, top_k_true_idx, k)
|
253 |
+
|
254 |
+
# Handle edge case where idcg is 0
|
255 |
+
ndcg = dcg / idcg if idcg > 0 else 0.0
|
256 |
+
|
257 |
+
# Calculate precision and recall
|
258 |
+
relevant_items = set(top_k_true_idx)
|
259 |
+
recommended_items = set(top_k_pred_idx)
|
260 |
+
|
261 |
+
precision = len(relevant_items & recommended_items) / k
|
262 |
+
recall = len(relevant_items & recommended_items) / len(relevant_items)
|
263 |
+
|
264 |
+
user_metrics.append({
|
265 |
+
'ndcg': ndcg,
|
266 |
+
'precision': precision,
|
267 |
+
'recall': recall
|
268 |
+
})
|
269 |
+
|
270 |
+
# Average metrics across users
|
271 |
+
avg_metrics = {
|
272 |
+
'ndcg@10': float(np.mean([m['ndcg'] for m in user_metrics])),
|
273 |
+
'precision@10': float(np.mean([m['precision'] for m in user_metrics])),
|
274 |
+
'recall@10': float(np.mean([m['recall'] for m in user_metrics]))
|
275 |
+
}
|
276 |
+
|
277 |
+
return avg_metrics
|
278 |
+
|
279 |
+
def _calculate_dcg(self, true_values: np.ndarray, indices: np.ndarray, k: int) -> float:
|
280 |
+
"""Helper method to calculate DCG with numerical stability."""
|
281 |
+
relevance = true_values[indices[:k]]
|
282 |
+
# Cap the relevance values to prevent overflow
|
283 |
+
max_relevance = 10 # Set a reasonable maximum value
|
284 |
+
relevance = np.clip(relevance, 0, max_relevance)
|
285 |
+
|
286 |
+
# Use log2(rank + 1) directly instead of creating array
|
287 |
+
gains = (2 ** relevance - 1) / np.log2(np.arange(2, len(relevance) + 2))
|
288 |
+
return float(np.sum(gains))
|
289 |
+
|
290 |
+
def evaluate_cold_start(self, min_interactions: int = 5) -> Dict[str, Dict[str, float]]:
|
291 |
+
"""
|
292 |
+
Evaluate model performance on cold-start scenarios.
|
293 |
+
|
294 |
+
Args:
|
295 |
+
min_interactions: Minimum number of interactions to consider a user/item as non-cold
|
296 |
+
|
297 |
+
Returns:
|
298 |
+
Dictionary containing metrics for different cold-start scenarios
|
299 |
+
"""
|
300 |
+
# Get all unique users and items
|
301 |
+
all_users = self.test_data['user_id'].unique()
|
302 |
+
all_items = self.test_data['music_id'].unique()
|
303 |
+
|
304 |
+
# Count interactions per user and item
|
305 |
+
user_counts = self.test_data['user_id'].value_counts()
|
306 |
+
item_counts = self.test_data['music_id'].value_counts()
|
307 |
+
|
308 |
+
# Identify cold users and items
|
309 |
+
cold_users = set(user_counts[user_counts < min_interactions].index)
|
310 |
+
cold_items = set(item_counts[item_counts < min_interactions].index)
|
311 |
+
|
312 |
+
# Create masks for different scenarios
|
313 |
+
cold_user_mask = self.test_data['user_id'].isin(cold_users)
|
314 |
+
cold_item_mask = self.test_data['music_id'].isin(cold_items)
|
315 |
+
cold_user_warm_item = cold_user_mask & ~cold_item_mask
|
316 |
+
warm_user_cold_item = ~cold_user_mask & cold_item_mask
|
317 |
+
cold_both = cold_user_mask & cold_item_mask
|
318 |
+
warm_both = ~cold_user_mask & ~cold_item_mask
|
319 |
+
|
320 |
+
scenarios = {
|
321 |
+
'cold_user_warm_item': cold_user_warm_item,
|
322 |
+
'warm_user_cold_item': warm_user_cold_item,
|
323 |
+
'cold_both': cold_both,
|
324 |
+
'warm_both': warm_both
|
325 |
+
}
|
326 |
+
|
327 |
+
results = {}
|
328 |
+
for scenario_name, mask in scenarios.items():
|
329 |
+
if not any(mask):
|
330 |
+
logger.warning(f"No samples found for scenario: {scenario_name}")
|
331 |
+
continue
|
332 |
+
|
333 |
+
scenario_data = self.test_data[mask].copy()
|
334 |
+
|
335 |
+
# Create a temporary dataset and dataloader for this scenario
|
336 |
+
scenario_dataset = MusicRecommenderDataset(
|
337 |
+
scenario_data,
|
338 |
+
mode='test',
|
339 |
+
encoders=self.encoders
|
340 |
+
)
|
341 |
+
|
342 |
+
scenario_loader = DataLoader(
|
343 |
+
scenario_dataset,
|
344 |
+
batch_size=self.batch_size,
|
345 |
+
shuffle=False
|
346 |
+
)
|
347 |
+
|
348 |
+
# Collect predictions and true values
|
349 |
+
true_values = []
|
350 |
+
predictions = []
|
351 |
+
|
352 |
+
with torch.no_grad():
|
353 |
+
for batch in scenario_loader:
|
354 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
355 |
+
pred = self.model(batch)
|
356 |
+
true_values.extend(batch['playcount'].cpu().numpy())
|
357 |
+
predictions.extend(pred.cpu().numpy())
|
358 |
+
|
359 |
+
true_values = np.array(true_values)
|
360 |
+
predictions = np.array(predictions)
|
361 |
+
|
362 |
+
# Calculate metrics
|
363 |
+
metrics = {
|
364 |
+
'count': len(true_values),
|
365 |
+
'mse': float(mean_squared_error(true_values, predictions)),
|
366 |
+
'rmse': float(np.sqrt(mean_squared_error(true_values, predictions))),
|
367 |
+
'mae': float(mean_absolute_error(true_values, predictions)),
|
368 |
+
'r2': float(r2_score(true_values, predictions)),
|
369 |
+
'pred_mean': float(np.mean(predictions)),
|
370 |
+
'pred_std': float(np.std(predictions)),
|
371 |
+
'true_mean': float(np.mean(true_values)),
|
372 |
+
'true_std': float(np.std(true_values))
|
373 |
+
}
|
374 |
+
|
375 |
+
results[scenario_name] = metrics
|
376 |
+
|
377 |
+
# Log results for this scenario
|
378 |
+
logger.info(f"\n{scenario_name} Metrics (n={metrics['count']}):")
|
379 |
+
for metric, value in metrics.items():
|
380 |
+
if metric != 'count':
|
381 |
+
logger.info(f"{metric}: {value:.4f}")
|
382 |
+
|
383 |
+
return results
|
384 |
+
|
385 |
+
def save_evaluation_results(self, save_dir: str = 'metrics'):
|
386 |
+
"""Run all evaluations and save results."""
|
387 |
+
os.makedirs(save_dir, exist_ok=True)
|
388 |
+
|
389 |
+
# Calculate all metrics
|
390 |
+
results = {
|
391 |
+
'basic_metrics': self.calculate_metrics(),
|
392 |
+
'bias_analysis': self.analyze_prediction_bias(),
|
393 |
+
'top_k_metrics': self.evaluate_top_k_recommendations(),
|
394 |
+
'cold_start_metrics': self.evaluate_cold_start(min_interactions=5)
|
395 |
+
}
|
396 |
+
|
397 |
+
# Save results to JSON
|
398 |
+
results_file = os.path.join(save_dir, 'evaluation_results.json')
|
399 |
+
with open(results_file, 'w') as f:
|
400 |
+
json.dump(results, f, indent=4)
|
401 |
+
|
402 |
+
logger.info(f"Evaluation completed. Results saved to: {save_dir}")
|
403 |
+
|
404 |
+
return results
|
405 |
+
|
406 |
+
def tune_hyperparameters(self, param_grid: Dict[str, List], val_data: pd.DataFrame) -> Dict:
|
407 |
+
"""
|
408 |
+
Tune hyperparameters using validation set.
|
409 |
+
|
410 |
+
Args:
|
411 |
+
param_grid: Dictionary of parameters to try
|
412 |
+
val_data: Validation data
|
413 |
+
|
414 |
+
Returns:
|
415 |
+
Best parameters found
|
416 |
+
"""
|
417 |
+
best_score = float('inf')
|
418 |
+
best_params = None
|
419 |
+
|
420 |
+
# Create validation dataset
|
421 |
+
val_dataset = MusicRecommenderDataset(val_data, mode='test', encoders=self.encoders)
|
422 |
+
val_loader = DataLoader(val_dataset, batch_size=self.batch_size, shuffle=False)
|
423 |
+
|
424 |
+
# Try all parameter combinations
|
425 |
+
for params in ParameterGrid(param_grid):
|
426 |
+
# Create a new config with updated parameters
|
427 |
+
current_config = self.config.copy()
|
428 |
+
current_config.update(params)
|
429 |
+
|
430 |
+
# Initialize model with current parameters
|
431 |
+
self.model = self._initialize_model(custom_config=current_config)
|
432 |
+
|
433 |
+
# Evaluate on validation set
|
434 |
+
metrics = self.calculate_metrics()
|
435 |
+
score = metrics['rmse'] # Use RMSE as scoring metric
|
436 |
+
|
437 |
+
if score < best_score:
|
438 |
+
best_score = score
|
439 |
+
best_params = params
|
440 |
+
logger.info(f"New best parameters found: {params} (RMSE: {score:.4f})")
|
441 |
+
|
442 |
+
return best_params
|
443 |
+
|
444 |
+
def main():
|
445 |
+
# Load test data and check for data compatibility
|
446 |
+
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
447 |
+
test_path = os.path.join(ROOT_DIR, 'data', 'test_data.csv')
|
448 |
+
model_path = os.path.join(ROOT_DIR, 'data_engineered_v3', 'rs_main_v2_refactored', 'checkpoints', 'best_model.pth')
|
449 |
+
|
450 |
+
test_data = pd.read_csv(test_path)
|
451 |
+
logger.info(f"Loaded test data with {len(test_data)} samples")
|
452 |
+
|
453 |
+
# Split test data into validation and test
|
454 |
+
val_data, test_data = train_test_split(test_data, test_size=0.5, random_state=42)
|
455 |
+
|
456 |
+
try:
|
457 |
+
# Initialize evaluator
|
458 |
+
evaluator = ModelEvaluator(
|
459 |
+
model_path=model_path,
|
460 |
+
test_data=test_data,
|
461 |
+
batch_size=32
|
462 |
+
)
|
463 |
+
|
464 |
+
# Tune hyperparameters
|
465 |
+
param_grid = {
|
466 |
+
'embedding_dim': [32, 64, 128],
|
467 |
+
'dropout': [0.1, 0.2, 0.3],
|
468 |
+
'hidden_layers': [[128, 64], [256, 128, 64], [512, 256, 128]]
|
469 |
+
}
|
470 |
+
|
471 |
+
best_params = evaluator.tune_hyperparameters(param_grid, val_data)
|
472 |
+
logger.info(f"Best parameters: {best_params}")
|
473 |
+
|
474 |
+
# Run evaluation
|
475 |
+
results = evaluator.save_evaluation_results()
|
476 |
+
|
477 |
+
# Print summary
|
478 |
+
logger.info("\nEvaluation Summary:")
|
479 |
+
logger.info("Basic Metrics:")
|
480 |
+
for metric, value in results['basic_metrics'].items():
|
481 |
+
logger.info(f"{metric}: {value:.4f}")
|
482 |
+
|
483 |
+
logger.info("\nTop-K Metrics:")
|
484 |
+
for metric, value in results['top_k_metrics'].items():
|
485 |
+
logger.info(f"{metric}: {value:.4f}")
|
486 |
+
|
487 |
+
logger.info("\nBias Analysis:")
|
488 |
+
for range_name, bias in results['bias_analysis'].items():
|
489 |
+
logger.info(f"{range_name}: {bias:.4f}")
|
490 |
+
|
491 |
+
except Exception as e:
|
492 |
+
logger.error(f"Error during evaluation: {str(e)}")
|
493 |
+
raise
|
494 |
+
|
495 |
+
if __name__ == "__main__":
|
496 |
+
main()
|
497 |
+
|
generate_recommendations.py
ADDED
@@ -0,0 +1,312 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
import torch.nn as nn
|
3 |
+
import pandas as pd
|
4 |
+
import numpy as np
|
5 |
+
import json
|
6 |
+
import logging
|
7 |
+
from sklearn.preprocessing import LabelEncoder
|
8 |
+
from torch.utils.data import DataLoader
|
9 |
+
import os
|
10 |
+
from train_model import HybridMusicRecommender, MusicRecommenderDataset
|
11 |
+
|
12 |
+
# Set up logging
|
13 |
+
logging.basicConfig(level=logging.INFO)
|
14 |
+
logger = logging.getLogger(__name__)
|
15 |
+
|
16 |
+
# Add safe globals for numpy types
|
17 |
+
torch.serialization.add_safe_globals([
|
18 |
+
np.generic, # Allow numpy scalar types
|
19 |
+
np.ndarray, # Allow numpy arrays
|
20 |
+
np.dtype, # Allow numpy dtypes
|
21 |
+
np.float64, # Allow specific numpy types
|
22 |
+
np.float32,
|
23 |
+
np.int64,
|
24 |
+
np.int32
|
25 |
+
])
|
26 |
+
|
27 |
+
class RecommendationGenerator:
|
28 |
+
def __init__(self, model_path: str, catalog_data: pd.DataFrame, encoders_path: str):
|
29 |
+
self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
|
30 |
+
self.catalog_data = catalog_data
|
31 |
+
|
32 |
+
# Load model checkpoint with safety settings
|
33 |
+
logger.info(f"Loading model from {model_path}")
|
34 |
+
try:
|
35 |
+
self.checkpoint = torch.load(model_path, map_location=self.device)
|
36 |
+
logger.info("Model loaded successfully")
|
37 |
+
except Exception as e:
|
38 |
+
logger.error(f"Error loading model: {str(e)}")
|
39 |
+
raise
|
40 |
+
|
41 |
+
# Get config and encoders from the checkpoint
|
42 |
+
self.config = self.checkpoint.get('config', {})
|
43 |
+
if not self.config:
|
44 |
+
# Try loading from config file as fallback
|
45 |
+
try:
|
46 |
+
with open('config/model_config.json', 'r') as f:
|
47 |
+
self.config = json.load(f)
|
48 |
+
except FileNotFoundError:
|
49 |
+
logger.warning("Config file not found, using default values")
|
50 |
+
self.config = {
|
51 |
+
'embedding_dim': 64,
|
52 |
+
'hidden_layers': [256, 128, 64],
|
53 |
+
'dropout': 0.3
|
54 |
+
}
|
55 |
+
|
56 |
+
# Load encoders with safety settings
|
57 |
+
torch.serialization.add_safe_globals([LabelEncoder])
|
58 |
+
self.encoders = torch.load(encoders_path, weights_only=False)
|
59 |
+
|
60 |
+
# Print shape info for debugging
|
61 |
+
logger.info("Encoder class counts:")
|
62 |
+
for key, encoder in self.encoders.items():
|
63 |
+
if isinstance(encoder, LabelEncoder):
|
64 |
+
logger.info(f"{key}: {len(encoder.classes_)}")
|
65 |
+
|
66 |
+
# Get state dict dimensions with safety checks
|
67 |
+
state_dict = self.checkpoint['model_state_dict']
|
68 |
+
self.embedding_dims = {
|
69 |
+
'num_users': state_dict['user_embedding.weight'].shape[0],
|
70 |
+
'num_music': state_dict['music_embedding.weight'].shape[0],
|
71 |
+
'num_artists': state_dict['artist_embedding.weight'].shape[0],
|
72 |
+
'num_genres': len(self.encoders['genre_encoder'].classes_),
|
73 |
+
'num_numerical': 12
|
74 |
+
}
|
75 |
+
|
76 |
+
logger.info("Model dimensions from state dict:")
|
77 |
+
for key, value in self.embedding_dims.items():
|
78 |
+
logger.info(f"{key}: {value}")
|
79 |
+
|
80 |
+
# Safety check for catalog data
|
81 |
+
max_music_id = self.catalog_data['music_id'].nunique()
|
82 |
+
if max_music_id >= self.embedding_dims['num_music']:
|
83 |
+
logger.warning(f"Catalog contains music IDs larger than model capacity. Filtering out excess items.")
|
84 |
+
valid_music_ids = set(self.encoders['music_encoder'].transform(
|
85 |
+
self.encoders['music_encoder'].classes_[:self.embedding_dims['num_music']]
|
86 |
+
))
|
87 |
+
self.catalog_data = self.catalog_data[
|
88 |
+
self.catalog_data['music_id'].apply(
|
89 |
+
lambda x: self.encoders['music_encoder'].transform([x])[0] in valid_music_ids
|
90 |
+
)
|
91 |
+
]
|
92 |
+
logger.info(f"Filtered catalog size: {len(self.catalog_data)}")
|
93 |
+
|
94 |
+
self.model = self._initialize_model(self.embedding_dims)
|
95 |
+
|
96 |
+
def _initialize_model(self, embedding_dims):
|
97 |
+
"""Initialize and load the model from checkpoint."""
|
98 |
+
# Get dimensions from encoders
|
99 |
+
model = HybridMusicRecommender(
|
100 |
+
num_users=embedding_dims['num_users'],
|
101 |
+
num_music=embedding_dims['num_music'],
|
102 |
+
num_artists=embedding_dims['num_artists'],
|
103 |
+
num_genres=embedding_dims['num_genres'],
|
104 |
+
num_numerical=embedding_dims['num_numerical'],
|
105 |
+
embedding_dim=64,
|
106 |
+
layers=[256, 128, 64],
|
107 |
+
dropout=0.2
|
108 |
+
)
|
109 |
+
|
110 |
+
# Load state dict from checkpoint
|
111 |
+
state_dict = self.checkpoint['model_state_dict']
|
112 |
+
model.load_state_dict(state_dict)
|
113 |
+
|
114 |
+
# Move model to device and set to eval mode
|
115 |
+
model = model.to(self.device)
|
116 |
+
model.eval()
|
117 |
+
|
118 |
+
return model
|
119 |
+
|
120 |
+
def generate_recommendations(self, user_info: dict, n_recommendations: int = 10) -> pd.DataFrame:
|
121 |
+
"""
|
122 |
+
Generate music recommendations for a specific user.
|
123 |
+
|
124 |
+
Args:
|
125 |
+
user_info: Dictionary containing user information (age, gender, user_id)
|
126 |
+
n_recommendations: Number of recommendations to generate
|
127 |
+
|
128 |
+
Returns:
|
129 |
+
DataFrame containing recommended songs with predicted play counts
|
130 |
+
"""
|
131 |
+
# Create a temporary DataFrame with all songs for the user
|
132 |
+
user_candidates = self.catalog_data.copy()
|
133 |
+
user_candidates['age'] = user_info['age']
|
134 |
+
user_candidates['gender'] = user_info['gender']
|
135 |
+
user_candidates['user_id'] = user_info['user_id']
|
136 |
+
|
137 |
+
# Debug user encoding with more detailed error handling
|
138 |
+
try:
|
139 |
+
encoded_user = self.encoders['user_encoder'].transform([user_info['user_id']])[0]
|
140 |
+
logger.info(f"User ID {user_info['user_id']} encoded as: {encoded_user}")
|
141 |
+
except Exception as e:
|
142 |
+
logger.warning(f"Error encoding user ID: {str(e)}")
|
143 |
+
logger.warning("Using default encoding (0)")
|
144 |
+
encoded_user = 0
|
145 |
+
user_candidates['user_id'] = '0' # Use default user ID
|
146 |
+
|
147 |
+
# Debug catalog data
|
148 |
+
print(f"\nCatalog Statistics:")
|
149 |
+
print(f"Total songs: {len(user_candidates)}")
|
150 |
+
print(f"Unique artists: {user_candidates['artist_name'].nunique()}")
|
151 |
+
print(f"Unique genres: {user_candidates['main_genre'].nunique()}")
|
152 |
+
|
153 |
+
try:
|
154 |
+
# Create dataset with safety checks
|
155 |
+
test_dataset = MusicRecommenderDataset(
|
156 |
+
user_candidates,
|
157 |
+
mode='test',
|
158 |
+
encoders=self.encoders,
|
159 |
+
embedding_dims=self.embedding_dims # Pass embedding dimensions
|
160 |
+
)
|
161 |
+
test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False)
|
162 |
+
|
163 |
+
# Generate predictions
|
164 |
+
predictions = []
|
165 |
+
indices = []
|
166 |
+
|
167 |
+
with torch.no_grad():
|
168 |
+
for i, batch in enumerate(test_loader):
|
169 |
+
batch = {k: v.to(self.device) for k, v in batch.items()}
|
170 |
+
pred = self.model(batch)
|
171 |
+
predictions.extend(pred.cpu().numpy())
|
172 |
+
indices.extend(range(i * test_loader.batch_size,
|
173 |
+
min((i + 1) * test_loader.batch_size, len(test_dataset))))
|
174 |
+
except Exception as e:
|
175 |
+
logger.error(f"Error generating recommendations: {str(e)}")
|
176 |
+
raise
|
177 |
+
|
178 |
+
# Create recommendations DataFrame and ensure uniqueness
|
179 |
+
recommendations = pd.DataFrame({
|
180 |
+
'music': user_candidates['music'].values[indices],
|
181 |
+
'artist_name': user_candidates['artist_name'].values[indices],
|
182 |
+
'genre': user_candidates['main_genre'].values[indices],
|
183 |
+
'predicted_plays': predictions
|
184 |
+
})
|
185 |
+
|
186 |
+
# Drop duplicates keeping first occurrence (highest predicted play count)
|
187 |
+
recommendations = recommendations.drop_duplicates(subset=['music'], keep='first')
|
188 |
+
|
189 |
+
# Convert predictions to scalar values and sort
|
190 |
+
recommendations['predicted_plays'] = recommendations['predicted_plays'].apply(lambda x: float(x[0]))
|
191 |
+
|
192 |
+
# Sort by predicted plays and get top N recommendations
|
193 |
+
recommendations = recommendations.sort_values('predicted_plays', ascending=False)
|
194 |
+
recommendations = recommendations.head(n_recommendations)
|
195 |
+
|
196 |
+
# Debug predictions
|
197 |
+
print(f"\nPrediction Statistics:")
|
198 |
+
min_pred = recommendations['predicted_plays'].min()
|
199 |
+
max_pred = recommendations['predicted_plays'].max()
|
200 |
+
std_pred = recommendations['predicted_plays'].std()
|
201 |
+
print(f"Prediction range: {min_pred:.2f} to {max_pred:.2f}")
|
202 |
+
print(f"Prediction std: {std_pred:.2f}")
|
203 |
+
|
204 |
+
# Print top recommendations with better formatting
|
205 |
+
print("\nTop 10 Recommended Songs:")
|
206 |
+
pd.set_option('display.max_columns', None)
|
207 |
+
pd.set_option('display.width', None)
|
208 |
+
print(recommendations.to_string(index=False, float_format=lambda x: '{:.2f}'.format(x) if isinstance(x, (float, np.float32, np.float64)) else str(x)))
|
209 |
+
|
210 |
+
return recommendations.reset_index(drop=True)
|
211 |
+
|
212 |
+
class HybridMusicRecommender(nn.Module):
|
213 |
+
def __init__(self, num_users, num_music, num_artists, num_genres, num_numerical,
|
214 |
+
embedding_dim=64, layers=[256, 128, 64], dropout=0.2):
|
215 |
+
super().__init__()
|
216 |
+
|
217 |
+
# Embedding layers
|
218 |
+
self.user_embedding = nn.Embedding(num_users, embedding_dim)
|
219 |
+
self.music_embedding = nn.Embedding(num_music, embedding_dim)
|
220 |
+
self.artist_embedding = nn.Embedding(num_artists, embedding_dim)
|
221 |
+
self.genre_embedding = nn.Embedding(num_genres, embedding_dim)
|
222 |
+
|
223 |
+
# Feature processing layers with residual connections
|
224 |
+
self.numerical_layer = nn.Sequential(
|
225 |
+
nn.Linear(num_numerical, embedding_dim),
|
226 |
+
nn.ReLU(),
|
227 |
+
nn.BatchNorm1d(embedding_dim)
|
228 |
+
)
|
229 |
+
|
230 |
+
self.binary_layer = nn.Sequential(
|
231 |
+
nn.Linear(2, embedding_dim),
|
232 |
+
nn.ReLU(),
|
233 |
+
nn.BatchNorm1d(embedding_dim)
|
234 |
+
)
|
235 |
+
|
236 |
+
# Calculate total input features
|
237 |
+
total_features = embedding_dim * 6 # 4 embeddings + numerical + binary
|
238 |
+
|
239 |
+
# MLP layers with residual connections
|
240 |
+
self.fc_layers = nn.ModuleList()
|
241 |
+
input_dim = total_features
|
242 |
+
|
243 |
+
for layer_size in layers:
|
244 |
+
self.fc_layers.append(nn.ModuleDict({
|
245 |
+
'main': nn.Sequential(
|
246 |
+
nn.Linear(input_dim, layer_size),
|
247 |
+
nn.ReLU(),
|
248 |
+
nn.BatchNorm1d(layer_size),
|
249 |
+
nn.Dropout(dropout)
|
250 |
+
),
|
251 |
+
'residual': nn.Linear(input_dim, layer_size) if input_dim != layer_size else None
|
252 |
+
}))
|
253 |
+
input_dim = layer_size
|
254 |
+
|
255 |
+
self.final_layer = nn.Linear(layers[-1], 1)
|
256 |
+
|
257 |
+
def forward(self, batch):
|
258 |
+
# Get embeddings
|
259 |
+
user_emb = self.user_embedding(batch['user_id'])
|
260 |
+
music_emb = self.music_embedding(batch['music_id'])
|
261 |
+
artist_emb = self.artist_embedding(batch['artist_id'])
|
262 |
+
genre_emb = self.genre_embedding(batch['genre_id'])
|
263 |
+
|
264 |
+
# Process numerical features
|
265 |
+
numerical = self.numerical_layer(batch['numerical_features'])
|
266 |
+
|
267 |
+
# Process binary features
|
268 |
+
binary = torch.stack([batch['explicit'], batch['gender']], dim=1).float()
|
269 |
+
binary = self.binary_layer(binary)
|
270 |
+
|
271 |
+
# Concatenate all features
|
272 |
+
x = torch.cat([
|
273 |
+
user_emb, music_emb, artist_emb, genre_emb, numerical, binary
|
274 |
+
], dim=1)
|
275 |
+
|
276 |
+
# Apply MLP layers with residual connections
|
277 |
+
for layer in self.fc_layers:
|
278 |
+
identity = x
|
279 |
+
x = layer['main'](x)
|
280 |
+
if layer['residual'] is not None:
|
281 |
+
x = x + layer['residual'](identity)
|
282 |
+
|
283 |
+
# Final prediction
|
284 |
+
return self.final_layer(x)
|
285 |
+
|
286 |
+
def main():
|
287 |
+
# Example usage
|
288 |
+
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
289 |
+
model_path = 'checkpoints/best_model.pth'
|
290 |
+
catalog_data = pd.read_csv(os.path.join(BASE_DIR, 'data', 'test_data.csv'))
|
291 |
+
encoders_path = os.path.join(BASE_DIR, 'data', 'data_encoders.pt')
|
292 |
+
|
293 |
+
# Initialize recommendation generator
|
294 |
+
recommender = RecommendationGenerator(model_path, catalog_data, encoders_path)
|
295 |
+
|
296 |
+
# Example user
|
297 |
+
user_info = {
|
298 |
+
'age': 32,
|
299 |
+
'gender': 'M',
|
300 |
+
'genre': 'Pop',
|
301 |
+
'music': 'Shape of You',
|
302 |
+
'user_id': '44d39c6e5e7b45bfc2187fb3c89be58c5a3dc6a54d2a0075402c551c14ea1459'
|
303 |
+
}
|
304 |
+
|
305 |
+
# Generate recommendations
|
306 |
+
recommendations = recommender.generate_recommendations(user_info, n_recommendations=10)
|
307 |
+
|
308 |
+
print("\nTop 10 Recommended Songs:")
|
309 |
+
print(recommendations.to_string(index=False))
|
310 |
+
|
311 |
+
if __name__ == "__main__":
|
312 |
+
main()
|
metrics/evaluation_results.json
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"basic_metrics": {
|
3 |
+
"mse": 3079.0234375,
|
4 |
+
"rmse": 55.488948822021484,
|
5 |
+
"mae": 23.4454402923584,
|
6 |
+
"r2": -0.21279525756835938,
|
7 |
+
"pred_mean": -1.0994174480438232,
|
8 |
+
"pred_std": 9.724736213684082,
|
9 |
+
"true_mean": 19.224706649780273,
|
10 |
+
"true_std": 50.38633346557617
|
11 |
+
},
|
12 |
+
"bias_analysis": {
|
13 |
+
"bias_range_3": -2.6668460369110107,
|
14 |
+
"bias_range_4": -67.3138656616211
|
15 |
+
},
|
16 |
+
"top_k_metrics": {
|
17 |
+
"ndcg@10": 0.76645658997246,
|
18 |
+
"precision@10": 0.8794117647058824,
|
19 |
+
"recall@10": 0.8794117647058824
|
20 |
+
},
|
21 |
+
"cold_start_metrics": {
|
22 |
+
"cold_user_warm_item": {
|
23 |
+
"count": 139,
|
24 |
+
"mse": 1254.147705078125,
|
25 |
+
"rmse": 35.41394805908203,
|
26 |
+
"mae": 24.895784378051758,
|
27 |
+
"r2": -0.9901391267776489,
|
28 |
+
"pred_mean": 1.0831069946289062,
|
29 |
+
"pred_std": 11.065825462341309,
|
30 |
+
"true_mean": 23.73381233215332,
|
31 |
+
"true_std": 25.103404998779297
|
32 |
+
},
|
33 |
+
"warm_user_cold_item": {
|
34 |
+
"count": 1751,
|
35 |
+
"mse": 365.7469177246094,
|
36 |
+
"rmse": 19.12451171875,
|
37 |
+
"mae": 12.106451034545898,
|
38 |
+
"r2": -0.924481987953186,
|
39 |
+
"pred_mean": -0.9319719672203064,
|
40 |
+
"pred_std": 10.093915939331055,
|
41 |
+
"true_mean": 7.401484966278076,
|
42 |
+
"true_std": 13.785845756530762
|
43 |
+
},
|
44 |
+
"cold_both": {
|
45 |
+
"count": 4107,
|
46 |
+
"mse": 169.58038330078125,
|
47 |
+
"rmse": 13.022303581237793,
|
48 |
+
"mae": 8.721110343933105,
|
49 |
+
"r2": -1.5553205013275146,
|
50 |
+
"pred_mean": -1.2563493251800537,
|
51 |
+
"pred_std": 8.511791229248047,
|
52 |
+
"true_mean": 4.080350399017334,
|
53 |
+
"true_std": 8.14638900756836
|
54 |
+
},
|
55 |
+
"warm_both": {
|
56 |
+
"count": 714,
|
57 |
+
"mse": 26994.263671875,
|
58 |
+
"rmse": 164.29931640625,
|
59 |
+
"mae": 136.50509643554688,
|
60 |
+
"r2": -2.396286725997925,
|
61 |
+
"pred_mean": -1.9450238943099976,
|
62 |
+
"pred_std": 13.863030433654785,
|
63 |
+
"true_mean": 134.4537811279297,
|
64 |
+
"true_std": 89.15250396728516
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
metrics/training_metrics_20250102_064900.json
ADDED
@@ -0,0 +1,290 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
27.87820368424011,
|
4 |
+
0.8559115440289997,
|
5 |
+
0.5168477836848956,
|
6 |
+
0.421229469199382,
|
7 |
+
0.33146533420268165,
|
8 |
+
0.31913505295583317,
|
9 |
+
0.27628301501810504,
|
10 |
+
0.1922393307175275,
|
11 |
+
0.22288809188706446,
|
12 |
+
0.2036261794325318,
|
13 |
+
0.17079091021242918,
|
14 |
+
0.13815377909827187,
|
15 |
+
0.1524550925849648,
|
16 |
+
0.1501235003079158,
|
17 |
+
0.1421720849812809,
|
18 |
+
0.1081244022875753,
|
19 |
+
0.09324924281689256,
|
20 |
+
0.1108920008247671,
|
21 |
+
0.09771170746442961,
|
22 |
+
0.09051197385297546,
|
23 |
+
0.08150478607652226,
|
24 |
+
0.0860889327385952,
|
25 |
+
0.05988402931827203,
|
26 |
+
0.049674075748550386,
|
27 |
+
0.05377031577186647,
|
28 |
+
0.04540467359397495,
|
29 |
+
0.04073900714773785,
|
30 |
+
0.03540054572981199,
|
31 |
+
0.033688442806066365,
|
32 |
+
0.025686628671688663
|
33 |
+
],
|
34 |
+
"train_rmse": [
|
35 |
+
3.6065338792777895,
|
36 |
+
0.7172188698897799,
|
37 |
+
0.5629538247819917,
|
38 |
+
0.4971097810866635,
|
39 |
+
0.4503646820492115,
|
40 |
+
0.4126986173330652,
|
41 |
+
0.3966659381984858,
|
42 |
+
0.3457994023430261,
|
43 |
+
0.3494550960797524,
|
44 |
+
0.33324397309356185,
|
45 |
+
0.3095208795818895,
|
46 |
+
0.2862384810888418,
|
47 |
+
0.2971145911978121,
|
48 |
+
0.294086353497263,
|
49 |
+
0.2809138228068532,
|
50 |
+
0.2536127242472163,
|
51 |
+
0.24007327436595324,
|
52 |
+
0.2581924051221915,
|
53 |
+
0.231609092571742,
|
54 |
+
0.23556566189850986,
|
55 |
+
0.21719404996320857,
|
56 |
+
0.22204710487363657,
|
57 |
+
0.18534403303185937,
|
58 |
+
0.17526732037716256,
|
59 |
+
0.16678127027175485,
|
60 |
+
0.16144292278880193,
|
61 |
+
0.15759382268230296,
|
62 |
+
0.151095087343919,
|
63 |
+
0.1478537986232017,
|
64 |
+
0.13138720508414045
|
65 |
+
],
|
66 |
+
"train_mae": [
|
67 |
+
2.485820442273081,
|
68 |
+
0.39211485435879684,
|
69 |
+
0.2973032114626486,
|
70 |
+
0.26411598030760697,
|
71 |
+
0.23414922938269528,
|
72 |
+
0.21794895377434506,
|
73 |
+
0.20361037203405477,
|
74 |
+
0.18592927409218082,
|
75 |
+
0.1848273886002223,
|
76 |
+
0.1786883569593671,
|
77 |
+
0.1653798102177208,
|
78 |
+
0.1611096473599348,
|
79 |
+
0.1563368417393369,
|
80 |
+
0.1569892016263042,
|
81 |
+
0.15296285591217912,
|
82 |
+
0.1440688233728273,
|
83 |
+
0.13509617341517272,
|
84 |
+
0.14298199075922557,
|
85 |
+
0.1298971869982779,
|
86 |
+
0.1322182358855594,
|
87 |
+
0.12218869595988831,
|
88 |
+
0.12325722614562587,
|
89 |
+
0.10556309332752813,
|
90 |
+
0.10367214477538497,
|
91 |
+
0.09859485125546402,
|
92 |
+
0.09540063718958652,
|
93 |
+
0.091572887579545,
|
94 |
+
0.08790545361234417,
|
95 |
+
0.08544569545354741,
|
96 |
+
0.0796616122427196
|
97 |
+
],
|
98 |
+
"train_ndcg": [
|
99 |
+
0.7553261820231697,
|
100 |
+
0.980978106254641,
|
101 |
+
0.9915008039414128,
|
102 |
+
0.9941110056412371,
|
103 |
+
0.9949865918370742,
|
104 |
+
0.9959262692475621,
|
105 |
+
0.996802295404899,
|
106 |
+
0.9977287187983718,
|
107 |
+
0.9980168807544286,
|
108 |
+
0.9981021317122858,
|
109 |
+
0.9982030255885064,
|
110 |
+
0.9981919676065445,
|
111 |
+
0.9981716039437282,
|
112 |
+
0.9983992185207862,
|
113 |
+
0.9986318444149404,
|
114 |
+
0.9986614803724652,
|
115 |
+
0.9986458724435372,
|
116 |
+
0.9988089872500564,
|
117 |
+
0.9986771755392039,
|
118 |
+
0.9989267108561117,
|
119 |
+
0.9989624058332625,
|
120 |
+
0.9990676654667794,
|
121 |
+
0.9993524018533623,
|
122 |
+
0.9992948143353945,
|
123 |
+
0.9993984651150583,
|
124 |
+
0.9994121940830086,
|
125 |
+
0.9994110327355469,
|
126 |
+
0.9993546765439117,
|
127 |
+
0.9993868231584754,
|
128 |
+
0.9994757758288444
|
129 |
+
],
|
130 |
+
"val_loss": [
|
131 |
+
2.6038931080887857,
|
132 |
+
0.42139411665184395,
|
133 |
+
0.5583879465342197,
|
134 |
+
0.5912148774745809,
|
135 |
+
0.1528182963211037,
|
136 |
+
0.0660524533038408,
|
137 |
+
0.06361346382936331,
|
138 |
+
0.2829914318502579,
|
139 |
+
0.08077898435294628,
|
140 |
+
0.1952337881510841,
|
141 |
+
0.021767998960288897,
|
142 |
+
0.08877882309926963,
|
143 |
+
0.10638422484863812,
|
144 |
+
0.09464026343497173,
|
145 |
+
0.17117542348487277,
|
146 |
+
0.01830679320559745,
|
147 |
+
0.23323201920351827,
|
148 |
+
0.019560120029138848,
|
149 |
+
0.35590659407898784,
|
150 |
+
0.02099220870836625,
|
151 |
+
0.044291495658706506,
|
152 |
+
0.07464934456404823,
|
153 |
+
0.012729868114906244,
|
154 |
+
0.03145649619269329,
|
155 |
+
0.050918724355091094,
|
156 |
+
0.03800152110109683,
|
157 |
+
0.017424330367824772,
|
158 |
+
0.021061579725528006,
|
159 |
+
0.022086826497426545,
|
160 |
+
0.09187827698728988
|
161 |
+
],
|
162 |
+
"val_rmse": [
|
163 |
+
1.227388935805597,
|
164 |
+
0.5224974024123069,
|
165 |
+
0.6048934326354144,
|
166 |
+
0.6049047626572546,
|
167 |
+
0.3302447454209666,
|
168 |
+
0.23142119054455396,
|
169 |
+
0.2183617163470732,
|
170 |
+
0.4530892844997041,
|
171 |
+
0.24832345713733542,
|
172 |
+
0.3671097701498112,
|
173 |
+
0.12747864468838,
|
174 |
+
0.2430218135282559,
|
175 |
+
0.30256272023257963,
|
176 |
+
0.2506676406163341,
|
177 |
+
0.3361681103043667,
|
178 |
+
0.12415225520053427,
|
179 |
+
0.40363619780248056,
|
180 |
+
0.1291709818860191,
|
181 |
+
0.4182344907318643,
|
182 |
+
0.12986300297695713,
|
183 |
+
0.1892241361203728,
|
184 |
+
0.21875232263482927,
|
185 |
+
0.10009871166199444,
|
186 |
+
0.15774307681073538,
|
187 |
+
0.18965065946268103,
|
188 |
+
0.16470045194214208,
|
189 |
+
0.1186338556556314,
|
190 |
+
0.126187734792172,
|
191 |
+
0.1361035455701023,
|
192 |
+
0.24475607175453948
|
193 |
+
],
|
194 |
+
"val_mae": [
|
195 |
+
0.48379497796716825,
|
196 |
+
0.23567856250094696,
|
197 |
+
0.23373650455139053,
|
198 |
+
0.23686996742453373,
|
199 |
+
0.14755814968490263,
|
200 |
+
0.11753897017366449,
|
201 |
+
0.10286616764857735,
|
202 |
+
0.19093803421292507,
|
203 |
+
0.11378036680775629,
|
204 |
+
0.1527806678918046,
|
205 |
+
0.06928311026012393,
|
206 |
+
0.0994793389412299,
|
207 |
+
0.13523404830148522,
|
208 |
+
0.10427081506227104,
|
209 |
+
0.1191780242386838,
|
210 |
+
0.0704273562091337,
|
211 |
+
0.14606773890030217,
|
212 |
+
0.07778757238681887,
|
213 |
+
0.12943885727247723,
|
214 |
+
0.06381919528816787,
|
215 |
+
0.08109805966451974,
|
216 |
+
0.08783078723600213,
|
217 |
+
0.05034292317454664,
|
218 |
+
0.07293910756182502,
|
219 |
+
0.07728687141248038,
|
220 |
+
0.06920250056600066,
|
221 |
+
0.05822602801129852,
|
222 |
+
0.054009364550592194,
|
223 |
+
0.06341128547111867,
|
224 |
+
0.09263877749023303
|
225 |
+
],
|
226 |
+
"val_ndcg": [
|
227 |
+
0.9763069874803785,
|
228 |
+
0.9905599171007183,
|
229 |
+
0.9956201222580923,
|
230 |
+
0.9944330084491784,
|
231 |
+
0.9976292898957159,
|
232 |
+
0.9979534023244616,
|
233 |
+
0.9982731333920654,
|
234 |
+
0.99887366362021,
|
235 |
+
0.9985417631310476,
|
236 |
+
0.9982523078649816,
|
237 |
+
0.9987894985037791,
|
238 |
+
0.9986976905607842,
|
239 |
+
0.9984535944293922,
|
240 |
+
0.9988085778666215,
|
241 |
+
0.9989596126784741,
|
242 |
+
0.999552890448503,
|
243 |
+
0.9992313611675316,
|
244 |
+
0.9991534839213734,
|
245 |
+
0.9993672387700685,
|
246 |
+
0.9993135954292727,
|
247 |
+
0.9997000123413515,
|
248 |
+
0.9991327692085589,
|
249 |
+
0.9997313878905605,
|
250 |
+
0.9998314808791792,
|
251 |
+
0.9997146868369948,
|
252 |
+
0.999613323681791,
|
253 |
+
0.9994647427343987,
|
254 |
+
0.9998794181246153,
|
255 |
+
0.9998371995670695,
|
256 |
+
0.999895690192639
|
257 |
+
],
|
258 |
+
"lr": [
|
259 |
+
0.001,
|
260 |
+
0.001,
|
261 |
+
0.001,
|
262 |
+
0.001,
|
263 |
+
0.001,
|
264 |
+
0.001,
|
265 |
+
0.001,
|
266 |
+
0.001,
|
267 |
+
0.001,
|
268 |
+
0.001,
|
269 |
+
0.001,
|
270 |
+
0.001,
|
271 |
+
0.001,
|
272 |
+
0.001,
|
273 |
+
0.001,
|
274 |
+
0.001,
|
275 |
+
0.001,
|
276 |
+
0.001,
|
277 |
+
0.001,
|
278 |
+
0.001,
|
279 |
+
0.001,
|
280 |
+
0.0005,
|
281 |
+
0.0005,
|
282 |
+
0.0005,
|
283 |
+
0.0005,
|
284 |
+
0.0005,
|
285 |
+
0.0005,
|
286 |
+
0.0005,
|
287 |
+
0.00025,
|
288 |
+
0.00025
|
289 |
+
]
|
290 |
+
}
|
metrics/training_metrics_20250102_200715.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
16.630361146328948,
|
4 |
+
1.0519671638413697,
|
5 |
+
0.6806203248362422,
|
6 |
+
0.5999031775878577,
|
7 |
+
0.38576608685529024,
|
8 |
+
0.37990841519712365,
|
9 |
+
0.32125464765520034,
|
10 |
+
0.32947756348714186,
|
11 |
+
0.2796809829740573,
|
12 |
+
0.26263155958606405,
|
13 |
+
0.22337860409450375,
|
14 |
+
0.21770194551282668,
|
15 |
+
0.20779085973472206,
|
16 |
+
0.19294912434887448,
|
17 |
+
0.16268228239429927,
|
18 |
+
0.14605150811663015,
|
19 |
+
0.10150069270660228,
|
20 |
+
0.09985721124044349,
|
21 |
+
0.08507130466603462,
|
22 |
+
0.07544498139980567
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
2.863982798072898,
|
26 |
+
0.8541538475465146,
|
27 |
+
0.6655497856482756,
|
28 |
+
0.581696385112508,
|
29 |
+
0.49990246750103334,
|
30 |
+
0.4743720037700144,
|
31 |
+
0.4505155451364705,
|
32 |
+
0.43122559500317537,
|
33 |
+
0.3971644740236298,
|
34 |
+
0.39396504545080907,
|
35 |
+
0.3645592624501923,
|
36 |
+
0.35849524360048596,
|
37 |
+
0.35538791011264326,
|
38 |
+
0.323913015413718,
|
39 |
+
0.30786606214792145,
|
40 |
+
0.29631268685022677,
|
41 |
+
0.25046254811820845,
|
42 |
+
0.23011919047341975,
|
43 |
+
0.22660661390438122,
|
44 |
+
0.22238455647548008
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
2.03278648278004,
|
48 |
+
0.5439351351012157,
|
49 |
+
0.40516641280979293,
|
50 |
+
0.33099308163163405,
|
51 |
+
0.2850040086910506,
|
52 |
+
0.26743246170491736,
|
53 |
+
0.25230235576959725,
|
54 |
+
0.23815869162731532,
|
55 |
+
0.22401378526576335,
|
56 |
+
0.21376478848860989,
|
57 |
+
0.19854636769741774,
|
58 |
+
0.19313653017971902,
|
59 |
+
0.19581266243270115,
|
60 |
+
0.17797640798896364,
|
61 |
+
0.17057573761720257,
|
62 |
+
0.16374789397644846,
|
63 |
+
0.14231451646766707,
|
64 |
+
0.136660557045731,
|
65 |
+
0.13092111585119479,
|
66 |
+
0.1310928447372457
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.7903884568124939,
|
70 |
+
0.9611835469362102,
|
71 |
+
0.9845947593073302,
|
72 |
+
0.9888029080591624,
|
73 |
+
0.9926418597939648,
|
74 |
+
0.9949627612965016,
|
75 |
+
0.9956346042925799,
|
76 |
+
0.9959749847273284,
|
77 |
+
0.995856225396259,
|
78 |
+
0.9971607260500328,
|
79 |
+
0.9975389946676507,
|
80 |
+
0.9979873643834379,
|
81 |
+
0.9976527691830562,
|
82 |
+
0.9976573833559133,
|
83 |
+
0.9981214035349556,
|
84 |
+
0.9984748543629164,
|
85 |
+
0.9988606087391889,
|
86 |
+
0.9986500904152665,
|
87 |
+
0.9987482092803037,
|
88 |
+
0.9989969030588488
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
0.9391880847618613,
|
92 |
+
0.33018025593228745,
|
93 |
+
0.29448598827904376,
|
94 |
+
0.10832524415053113,
|
95 |
+
0.09883832279592752,
|
96 |
+
0.3074022309172531,
|
97 |
+
0.04706974979490042,
|
98 |
+
4398.830707835696,
|
99 |
+
0.06168749292289287,
|
100 |
+
0.04185816639719505,
|
101 |
+
0.3049863429123562,
|
102 |
+
0.10778629867701044,
|
103 |
+
0.06723947737785713,
|
104 |
+
0.15211456833066236,
|
105 |
+
0.07834466032250981,
|
106 |
+
0.11750198668524833,
|
107 |
+
0.06605192532920291,
|
108 |
+
0.037398795541507046,
|
109 |
+
0.06266450706515199,
|
110 |
+
0.12772463355869265
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
0.8742571992372088,
|
114 |
+
0.5188966228554525,
|
115 |
+
0.44921875046319315,
|
116 |
+
0.2970077133693569,
|
117 |
+
0.27803433719802095,
|
118 |
+
0.44352033814287356,
|
119 |
+
0.1965003144412618,
|
120 |
+
8.122202649888228,
|
121 |
+
0.2323713941352663,
|
122 |
+
0.18472808669509327,
|
123 |
+
0.45586269918615224,
|
124 |
+
0.2856760431654221,
|
125 |
+
0.23925698861051023,
|
126 |
+
0.3356445257421406,
|
127 |
+
0.22166776637524868,
|
128 |
+
0.28559799659439566,
|
129 |
+
0.23039545566113326,
|
130 |
+
0.17412639513748637,
|
131 |
+
0.22186359509402045,
|
132 |
+
0.31559877438923417
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
0.5880991115536488,
|
136 |
+
0.2766197122318644,
|
137 |
+
0.275182307186261,
|
138 |
+
0.18265998478926404,
|
139 |
+
0.15468566203621073,
|
140 |
+
0.2013326367022286,
|
141 |
+
0.11106940243445651,
|
142 |
+
1.5140733947111686,
|
143 |
+
0.13223919471804524,
|
144 |
+
0.1058114748185789,
|
145 |
+
0.18697005872365455,
|
146 |
+
0.14604388649614763,
|
147 |
+
0.1279687943383002,
|
148 |
+
0.17097019593060855,
|
149 |
+
0.095513791265622,
|
150 |
+
0.1156781678363471,
|
151 |
+
0.11046315509248787,
|
152 |
+
0.0784462515894376,
|
153 |
+
0.0981923619836149,
|
154 |
+
0.12334266032131624
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.9549657870346392,
|
158 |
+
0.9888905731725021,
|
159 |
+
0.9928302638967272,
|
160 |
+
0.9962951557737001,
|
161 |
+
0.9976059718870781,
|
162 |
+
0.9967397762016511,
|
163 |
+
0.9963979788229499,
|
164 |
+
0.9976575357813231,
|
165 |
+
0.996619462966919,
|
166 |
+
0.9973971952854748,
|
167 |
+
0.9986196420562099,
|
168 |
+
0.9986509705933047,
|
169 |
+
0.9987828496476294,
|
170 |
+
0.9985354710632647,
|
171 |
+
0.9992627098526753,
|
172 |
+
0.9986722528094977,
|
173 |
+
0.9993009642815925,
|
174 |
+
0.9996941467406044,
|
175 |
+
0.9993367253894537,
|
176 |
+
0.9993710811709015
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.001,
|
193 |
+
0.001,
|
194 |
+
0.0005,
|
195 |
+
0.0005,
|
196 |
+
0.0005,
|
197 |
+
0.0005,
|
198 |
+
0.0005
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250102_203004.json
ADDED
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
1647.3079700711407,
|
4 |
+
271.8049797589266,
|
5 |
+
125.04480907585048,
|
6 |
+
77.73157471493829,
|
7 |
+
57.64490697353701,
|
8 |
+
47.655617599245865,
|
9 |
+
38.39268538318103,
|
10 |
+
35.70278034481821,
|
11 |
+
31.083040306085273,
|
12 |
+
28.446285428880135,
|
13 |
+
25.850659030902236,
|
14 |
+
22.36630686928954,
|
15 |
+
20.566794234740584,
|
16 |
+
18.177497906020925,
|
17 |
+
15.825210771983183,
|
18 |
+
14.747446770154976,
|
19 |
+
13.595882269400585,
|
20 |
+
12.136639672744122,
|
21 |
+
11.482755628567707
|
22 |
+
],
|
23 |
+
"train_rmse": [
|
24 |
+
36.2100092540611,
|
25 |
+
15.789009180868153,
|
26 |
+
10.837184203620641,
|
27 |
+
8.55066505615135,
|
28 |
+
7.395000940441376,
|
29 |
+
6.741258009334249,
|
30 |
+
6.064591712646066,
|
31 |
+
5.836212617014259,
|
32 |
+
5.463458494168958,
|
33 |
+
5.219115193044183,
|
34 |
+
4.991978818769204,
|
35 |
+
4.644320877131546,
|
36 |
+
4.456296742640931,
|
37 |
+
4.190699669415659,
|
38 |
+
3.9148655267239025,
|
39 |
+
3.7699117465426917,
|
40 |
+
3.6200522574294958,
|
41 |
+
3.415201579531864,
|
42 |
+
3.32776171304689
|
43 |
+
],
|
44 |
+
"train_mae": [
|
45 |
+
24.187040963504888,
|
46 |
+
10.407274974297874,
|
47 |
+
7.378058982423589,
|
48 |
+
6.026885859196699,
|
49 |
+
5.331949593145636,
|
50 |
+
4.930537258145176,
|
51 |
+
4.537671755386304,
|
52 |
+
4.348816263524792,
|
53 |
+
4.134116251068779,
|
54 |
+
3.9585593863378596,
|
55 |
+
3.805101910346671,
|
56 |
+
3.5380139833764184,
|
57 |
+
3.3881275284139414,
|
58 |
+
3.198319486424893,
|
59 |
+
2.985232395650465,
|
60 |
+
2.8795697855044016,
|
61 |
+
2.7671318642700773,
|
62 |
+
2.594415445116502,
|
63 |
+
2.544669221096401
|
64 |
+
],
|
65 |
+
"train_ndcg": [
|
66 |
+
0.8654950500430563,
|
67 |
+
0.9803339956870561,
|
68 |
+
0.9905076340029512,
|
69 |
+
0.9933372302145898,
|
70 |
+
0.9951020953587338,
|
71 |
+
0.9954008313862583,
|
72 |
+
0.9961625558288791,
|
73 |
+
0.9965977871531173,
|
74 |
+
0.9968882183296771,
|
75 |
+
0.997179942794993,
|
76 |
+
0.9975472675471366,
|
77 |
+
0.9977047993223879,
|
78 |
+
0.9980483460652677,
|
79 |
+
0.9982810467481613,
|
80 |
+
0.9984322096916693,
|
81 |
+
0.9985130795195133,
|
82 |
+
0.9987035832261737,
|
83 |
+
0.9988488200344617,
|
84 |
+
0.9990080705360521
|
85 |
+
],
|
86 |
+
"val_loss": [
|
87 |
+
305.71448699521346,
|
88 |
+
160.61727652751225,
|
89 |
+
80.21698145799233,
|
90 |
+
98.31909397286428,
|
91 |
+
49.420991561782195,
|
92 |
+
59.082267438861685,
|
93 |
+
43.67495231897059,
|
94 |
+
72.63750117933246,
|
95 |
+
48.056477439235636,
|
96 |
+
41.66889061726315,
|
97 |
+
35.77338268387486,
|
98 |
+
35.76565934570743,
|
99 |
+
31.368162182015432,
|
100 |
+
33.274764087838186,
|
101 |
+
33.155672825558085,
|
102 |
+
35.2773457245088,
|
103 |
+
27.710626266372035,
|
104 |
+
31.434065845650686,
|
105 |
+
34.327566388627176
|
106 |
+
],
|
107 |
+
"val_rmse": [
|
108 |
+
17.022804091540404,
|
109 |
+
12.271968236097596,
|
110 |
+
8.72418977659167,
|
111 |
+
9.709547110801775,
|
112 |
+
6.7575173606994605,
|
113 |
+
7.409723379025435,
|
114 |
+
6.299271141309055,
|
115 |
+
8.006477652290222,
|
116 |
+
6.648790959508824,
|
117 |
+
6.184272301984485,
|
118 |
+
5.669115998567993,
|
119 |
+
5.690017370100179,
|
120 |
+
5.339802895383791,
|
121 |
+
5.477513496694701,
|
122 |
+
5.518767848296002,
|
123 |
+
5.65460351262253,
|
124 |
+
5.089552422218077,
|
125 |
+
5.38412636710746,
|
126 |
+
5.598072784959465
|
127 |
+
],
|
128 |
+
"val_mae": [
|
129 |
+
10.921298624764026,
|
130 |
+
8.098800907672292,
|
131 |
+
5.978513751231449,
|
132 |
+
6.6365152278416595,
|
133 |
+
4.7836375807372615,
|
134 |
+
5.320080206427775,
|
135 |
+
4.492307612593745,
|
136 |
+
5.221484758484531,
|
137 |
+
4.820733540494677,
|
138 |
+
4.5011892285145505,
|
139 |
+
4.127895778333637,
|
140 |
+
4.077923868743467,
|
141 |
+
3.8279382947465064,
|
142 |
+
3.8839682491732317,
|
143 |
+
4.023950902509018,
|
144 |
+
3.9869604480098673,
|
145 |
+
3.7528539744900984,
|
146 |
+
3.9172230438447335,
|
147 |
+
4.0608437061309814
|
148 |
+
],
|
149 |
+
"val_ndcg": [
|
150 |
+
0.9772571300117063,
|
151 |
+
0.9857122864521725,
|
152 |
+
0.9920756976369401,
|
153 |
+
0.9934450102524018,
|
154 |
+
0.9934527152021166,
|
155 |
+
0.9938533314516846,
|
156 |
+
0.9945179601790199,
|
157 |
+
0.9936678846117476,
|
158 |
+
0.9944843129372932,
|
159 |
+
0.9952997682799756,
|
160 |
+
0.9957836681688336,
|
161 |
+
0.9954666562483344,
|
162 |
+
0.9959287416767066,
|
163 |
+
0.9957366736841874,
|
164 |
+
0.9958119459555183,
|
165 |
+
0.9955161961031632,
|
166 |
+
0.9962866423835217,
|
167 |
+
0.9957908878863697,
|
168 |
+
0.9961979238080306
|
169 |
+
],
|
170 |
+
"lr": [
|
171 |
+
0.001,
|
172 |
+
0.001,
|
173 |
+
0.001,
|
174 |
+
0.001,
|
175 |
+
0.001,
|
176 |
+
0.001,
|
177 |
+
0.001,
|
178 |
+
0.001,
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001
|
190 |
+
]
|
191 |
+
}
|
metrics/training_metrics_20250102_210550.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
1573.4106846580023,
|
4 |
+
241.66802635675745,
|
5 |
+
129.58585886110234,
|
6 |
+
81.33055539976192,
|
7 |
+
60.043437613716605,
|
8 |
+
49.388961017886295,
|
9 |
+
42.711713415157945,
|
10 |
+
37.04401670226568,
|
11 |
+
31.510297592682175,
|
12 |
+
28.098169061202036,
|
13 |
+
24.962806463996067,
|
14 |
+
22.979653856422328,
|
15 |
+
20.624650590781926,
|
16 |
+
18.37248856508279,
|
17 |
+
16.41032188376294,
|
18 |
+
15.106652148162262,
|
19 |
+
13.923152925092962,
|
20 |
+
12.319169042608406,
|
21 |
+
11.82735844239404,
|
22 |
+
11.080743769301645
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
34.87875299744444,
|
26 |
+
14.987261795962356,
|
27 |
+
11.041098153423027,
|
28 |
+
8.77760558087468,
|
29 |
+
7.553408715871261,
|
30 |
+
6.851181174457468,
|
31 |
+
6.383387834579968,
|
32 |
+
5.959030248017024,
|
33 |
+
5.510335440600911,
|
34 |
+
5.21213214792664,
|
35 |
+
4.909669503700807,
|
36 |
+
4.7199303371251276,
|
37 |
+
4.454014988545468,
|
38 |
+
4.2114133277321955,
|
39 |
+
3.98082874088483,
|
40 |
+
3.8168967012856276,
|
41 |
+
3.6601786489112054,
|
42 |
+
3.4488687216236493,
|
43 |
+
3.381452993476122,
|
44 |
+
3.263646540076566
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
23.23654489577571,
|
48 |
+
9.965823018852669,
|
49 |
+
7.528117040290108,
|
50 |
+
6.2109670386284215,
|
51 |
+
5.483522375550451,
|
52 |
+
5.0336463987072815,
|
53 |
+
4.707722712921191,
|
54 |
+
4.446547166078905,
|
55 |
+
4.185598470364945,
|
56 |
+
3.958317776646795,
|
57 |
+
3.72663677229157,
|
58 |
+
3.6098021332976185,
|
59 |
+
3.396712816968749,
|
60 |
+
3.2209290422593493,
|
61 |
+
3.036197697437262,
|
62 |
+
2.9069111562227903,
|
63 |
+
2.789865439639816,
|
64 |
+
2.63726353588738,
|
65 |
+
2.5662053268921525,
|
66 |
+
2.475501270045208
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.8705413748474815,
|
70 |
+
0.9820866142458553,
|
71 |
+
0.9893646090279652,
|
72 |
+
0.993068425055546,
|
73 |
+
0.9943591235559198,
|
74 |
+
0.995412773252288,
|
75 |
+
0.9958077484293829,
|
76 |
+
0.9964935148629961,
|
77 |
+
0.9967850607029999,
|
78 |
+
0.9972585009623177,
|
79 |
+
0.9974314333705963,
|
80 |
+
0.9975759675608405,
|
81 |
+
0.9978548384542707,
|
82 |
+
0.9979887845206864,
|
83 |
+
0.9983101436231709,
|
84 |
+
0.9985514830184888,
|
85 |
+
0.998682281261758,
|
86 |
+
0.9987842735799053,
|
87 |
+
0.9989815183644053,
|
88 |
+
0.9989825742720049
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
242.48699736259354,
|
92 |
+
110.35868351896045,
|
93 |
+
104.70559149728695,
|
94 |
+
81.94685237508425,
|
95 |
+
59.759863571381906,
|
96 |
+
63.3234116460236,
|
97 |
+
51.44393080053195,
|
98 |
+
47.11555201570753,
|
99 |
+
44.119545775400084,
|
100 |
+
50.042676992819345,
|
101 |
+
38.21174539646632,
|
102 |
+
36.11512255332839,
|
103 |
+
33.29190435543866,
|
104 |
+
36.34482394473653,
|
105 |
+
34.90276159367091,
|
106 |
+
36.881933789857676,
|
107 |
+
30.79913027857391,
|
108 |
+
29.94282915222813,
|
109 |
+
26.5078580345906,
|
110 |
+
28.964485262481258
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
15.222749438304598,
|
114 |
+
10.259006386057093,
|
115 |
+
9.975184629147016,
|
116 |
+
8.64159275856882,
|
117 |
+
7.390977598876305,
|
118 |
+
7.406066388447391,
|
119 |
+
6.88580765737273,
|
120 |
+
6.4700765907057844,
|
121 |
+
6.344710511920356,
|
122 |
+
6.7324958332755,
|
123 |
+
5.816017498074644,
|
124 |
+
5.647238446646834,
|
125 |
+
5.485007851809264,
|
126 |
+
5.67274044556089,
|
127 |
+
5.584264915042236,
|
128 |
+
5.748266146448996,
|
129 |
+
5.254208615862825,
|
130 |
+
5.175323364620961,
|
131 |
+
4.899611512774226,
|
132 |
+
5.034349147356589
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
10.016210032181002,
|
136 |
+
7.133039588659582,
|
137 |
+
6.888899380052593,
|
138 |
+
5.7716174830853095,
|
139 |
+
5.325613498687744,
|
140 |
+
5.063329330632384,
|
141 |
+
4.936540596921679,
|
142 |
+
4.571258101664799,
|
143 |
+
4.56014216114098,
|
144 |
+
4.771088475912389,
|
145 |
+
4.026445123511301,
|
146 |
+
4.005806899406541,
|
147 |
+
3.9677629907366256,
|
148 |
+
4.055088516692041,
|
149 |
+
4.026658931248624,
|
150 |
+
4.182556256442003,
|
151 |
+
3.76256963568674,
|
152 |
+
3.6913866660964323,
|
153 |
+
3.554204907215817,
|
154 |
+
3.5717549458355973
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.981707148988482,
|
158 |
+
0.9877026433676062,
|
159 |
+
0.9903137557943102,
|
160 |
+
0.9918068135288399,
|
161 |
+
0.9937682865371167,
|
162 |
+
0.9937528178725444,
|
163 |
+
0.993917101705578,
|
164 |
+
0.9942726148685939,
|
165 |
+
0.9948195336570202,
|
166 |
+
0.9943590919736406,
|
167 |
+
0.9952160749636906,
|
168 |
+
0.9956254682070772,
|
169 |
+
0.995776547512538,
|
170 |
+
0.9952850341796875,
|
171 |
+
0.9950294519813967,
|
172 |
+
0.9960594983168052,
|
173 |
+
0.9959340909836998,
|
174 |
+
0.9961577998080724,
|
175 |
+
0.9958094618689846,
|
176 |
+
0.9958491266613275
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.001,
|
193 |
+
0.001,
|
194 |
+
0.001,
|
195 |
+
0.001,
|
196 |
+
0.001,
|
197 |
+
0.001,
|
198 |
+
0.001
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250103_030301.json
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
6039.769612179527,
|
4 |
+
5941.704713169533,
|
5 |
+
5914.564727203756,
|
6 |
+
5836.091276820702
|
7 |
+
],
|
8 |
+
"train_rmse": [
|
9 |
+
75.06372706676143,
|
10 |
+
74.61218414418902,
|
11 |
+
74.47395658940658,
|
12 |
+
73.67107757410997
|
13 |
+
],
|
14 |
+
"train_mae": [
|
15 |
+
50.31086837792699,
|
16 |
+
50.907999479317965,
|
17 |
+
50.94638104076627,
|
18 |
+
50.31608098368101
|
19 |
+
],
|
20 |
+
"train_ndcg": [
|
21 |
+
0.36966318728496567,
|
22 |
+
0.3835963750894688,
|
23 |
+
0.38830770708950635,
|
24 |
+
0.451513979324623
|
25 |
+
],
|
26 |
+
"val_loss": [
|
27 |
+
5906.023872482944,
|
28 |
+
5803.814482353103,
|
29 |
+
5709.954079211598,
|
30 |
+
5801.15322489134
|
31 |
+
],
|
32 |
+
"val_rmse": [
|
33 |
+
74.61562375812093,
|
34 |
+
72.7763033395989,
|
35 |
+
72.59723830805083,
|
36 |
+
73.05621628711616
|
37 |
+
],
|
38 |
+
"val_mae": [
|
39 |
+
57.40647469104176,
|
40 |
+
45.45087704188387,
|
41 |
+
49.78841300749443,
|
42 |
+
49.173527166876994
|
43 |
+
],
|
44 |
+
"val_ndcg": [
|
45 |
+
0.3630109893184313,
|
46 |
+
0.4052694315012072,
|
47 |
+
0.7254581948820974,
|
48 |
+
0.3376818069479835
|
49 |
+
],
|
50 |
+
"lr": [
|
51 |
+
0.001,
|
52 |
+
0.001,
|
53 |
+
0.001,
|
54 |
+
0.001
|
55 |
+
]
|
56 |
+
}
|
metrics/training_metrics_20250103_030828.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
1475.7049554993835,
|
4 |
+
379.17743226546276,
|
5 |
+
170.54567088960093,
|
6 |
+
104.06700551057163,
|
7 |
+
76.1038736602928,
|
8 |
+
59.17003956625733,
|
9 |
+
51.22404585005362,
|
10 |
+
43.72882807405689,
|
11 |
+
40.60840407806107,
|
12 |
+
34.13230947754051,
|
13 |
+
31.245400774328015,
|
14 |
+
27.855964557279513,
|
15 |
+
26.76359580589246,
|
16 |
+
24.135131220274335,
|
17 |
+
21.92132758415198,
|
18 |
+
20.577230770376666,
|
19 |
+
19.48057757072811,
|
20 |
+
18.04268748850762,
|
21 |
+
17.653404054007954,
|
22 |
+
17.05115290684036
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
34.1962431550628,
|
26 |
+
18.801574966118118,
|
27 |
+
12.689654892251957,
|
28 |
+
9.87278275161242,
|
29 |
+
8.449554354098428,
|
30 |
+
7.44580231768099,
|
31 |
+
6.920708883027974,
|
32 |
+
6.429545916515828,
|
33 |
+
6.19063189467571,
|
34 |
+
5.708895129538141,
|
35 |
+
5.46680839896866,
|
36 |
+
5.169277343994283,
|
37 |
+
5.062612587674039,
|
38 |
+
4.822805409506358,
|
39 |
+
4.588967730179266,
|
40 |
+
4.45248032017342,
|
41 |
+
4.333507796834372,
|
42 |
+
4.169329592103006,
|
43 |
+
4.1118980921011445,
|
44 |
+
4.041849615971436
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
22.27033799509459,
|
48 |
+
12.89405941812298,
|
49 |
+
8.832277373422551,
|
50 |
+
6.853627974473977,
|
51 |
+
5.98043404764767,
|
52 |
+
5.36616400299193,
|
53 |
+
5.0564211214645,
|
54 |
+
4.735194380902037,
|
55 |
+
4.577013487302804,
|
56 |
+
4.306544921820676,
|
57 |
+
4.119050872854039,
|
58 |
+
3.942401315969757,
|
59 |
+
3.8522814964946313,
|
60 |
+
3.6689407468973836,
|
61 |
+
3.5085206480720377,
|
62 |
+
3.4013164577227606,
|
63 |
+
3.3126965953579433,
|
64 |
+
3.1720640664990944,
|
65 |
+
3.1186785250902176,
|
66 |
+
3.043237811779674
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.8878439911464348,
|
70 |
+
0.9664217960796778,
|
71 |
+
0.9849025442064563,
|
72 |
+
0.9909372538139548,
|
73 |
+
0.992851044181027,
|
74 |
+
0.9944684115014498,
|
75 |
+
0.9955004250890092,
|
76 |
+
0.9954500748198244,
|
77 |
+
0.9963730471798137,
|
78 |
+
0.9967452410278441,
|
79 |
+
0.9970897467264647,
|
80 |
+
0.997403313936312,
|
81 |
+
0.9972991103990169,
|
82 |
+
0.9975678757587566,
|
83 |
+
0.9974553273825706,
|
84 |
+
0.9980509397161158,
|
85 |
+
0.9981773383443868,
|
86 |
+
0.998248864295362,
|
87 |
+
0.9982810442960715,
|
88 |
+
0.9985020799161513
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
518.2866107779489,
|
92 |
+
196.49689827502613,
|
93 |
+
108.25126443782322,
|
94 |
+
82.35544583495233,
|
95 |
+
64.4055624142499,
|
96 |
+
64.73163228639415,
|
97 |
+
69.00259841327936,
|
98 |
+
73.7572065541442,
|
99 |
+
46.70021191449233,
|
100 |
+
51.2034899348944,
|
101 |
+
59.88945630570532,
|
102 |
+
46.171227925260304,
|
103 |
+
38.14610894968812,
|
104 |
+
41.36720026043099,
|
105 |
+
40.145658331857604,
|
106 |
+
40.95807745758916,
|
107 |
+
36.44995172258834,
|
108 |
+
37.648309882258026,
|
109 |
+
40.110850562512034,
|
110 |
+
34.8642008741137
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
22.175751544849163,
|
114 |
+
13.627327422581926,
|
115 |
+
10.084425877541213,
|
116 |
+
8.7474406358769,
|
117 |
+
7.698267432884312,
|
118 |
+
7.714951849599426,
|
119 |
+
7.970698293332266,
|
120 |
+
8.308298844563378,
|
121 |
+
6.3903562067549045,
|
122 |
+
6.7515749053250795,
|
123 |
+
7.348427681843771,
|
124 |
+
6.375031763854914,
|
125 |
+
5.864137658752988,
|
126 |
+
6.080929566007648,
|
127 |
+
5.97723259149377,
|
128 |
+
6.083237096050345,
|
129 |
+
5.640871318599802,
|
130 |
+
5.7711622988360025,
|
131 |
+
5.998258900137503,
|
132 |
+
5.628703590478307
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
15.3913011416583,
|
136 |
+
9.468683840523303,
|
137 |
+
6.864865544816138,
|
138 |
+
6.077065958103663,
|
139 |
+
5.370076864538058,
|
140 |
+
5.423657706086065,
|
141 |
+
5.450087026810982,
|
142 |
+
5.731729675346697,
|
143 |
+
4.450722744767095,
|
144 |
+
4.684651660247588,
|
145 |
+
5.084945682068946,
|
146 |
+
4.410807441657697,
|
147 |
+
4.10906414246895,
|
148 |
+
4.262183797191566,
|
149 |
+
4.182462527718343,
|
150 |
+
4.403699760705653,
|
151 |
+
3.9841212252495994,
|
152 |
+
4.099793424069042,
|
153 |
+
4.281244986493823,
|
154 |
+
4.025566181666415
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.9491317574407013,
|
158 |
+
0.9809850437540404,
|
159 |
+
0.9894338082259809,
|
160 |
+
0.9927881418819159,
|
161 |
+
0.9925727038316323,
|
162 |
+
0.993241311798633,
|
163 |
+
0.9938505401074047,
|
164 |
+
0.9935763100503197,
|
165 |
+
0.9939105409971425,
|
166 |
+
0.9937452371691314,
|
167 |
+
0.9939587519202434,
|
168 |
+
0.9940523916566876,
|
169 |
+
0.9945629667228376,
|
170 |
+
0.9945879385504924,
|
171 |
+
0.9951134777404893,
|
172 |
+
0.9949196988428143,
|
173 |
+
0.9954190170261222,
|
174 |
+
0.9959209158386982,
|
175 |
+
0.9951174175235588,
|
176 |
+
0.9956686404389394
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.001,
|
193 |
+
0.001,
|
194 |
+
0.001,
|
195 |
+
0.001,
|
196 |
+
0.001,
|
197 |
+
0.001,
|
198 |
+
0.001
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250103_033513.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
1435.060329775267,
|
4 |
+
352.2340569315077,
|
5 |
+
164.56359785417968,
|
6 |
+
96.81200471105454,
|
7 |
+
67.34939731525469,
|
8 |
+
53.12608155419555,
|
9 |
+
44.58751765987541,
|
10 |
+
38.42660973796362,
|
11 |
+
34.44303543205503,
|
12 |
+
31.319766175897815,
|
13 |
+
28.912457778484008,
|
14 |
+
27.199046002913125,
|
15 |
+
25.081022571913802,
|
16 |
+
22.87438059079496,
|
17 |
+
20.80075543439841,
|
18 |
+
20.669258119939247,
|
19 |
+
18.51449005965945,
|
20 |
+
17.437184510351738,
|
21 |
+
15.839009639205813,
|
22 |
+
14.724061391021632
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
34.16462143750128,
|
26 |
+
18.133741742649008,
|
27 |
+
12.479908767197573,
|
28 |
+
9.533131123991046,
|
29 |
+
7.993323629576951,
|
30 |
+
7.129096690749047,
|
31 |
+
6.538397691999737,
|
32 |
+
6.06964856221789,
|
33 |
+
5.755456311497981,
|
34 |
+
5.487252373904924,
|
35 |
+
5.260899197134256,
|
36 |
+
5.112084049532784,
|
37 |
+
4.906783164787575,
|
38 |
+
4.686919144259876,
|
39 |
+
4.482920539985945,
|
40 |
+
4.449389267406377,
|
41 |
+
4.2221425125174985,
|
42 |
+
4.077745623309648,
|
43 |
+
3.9076029899822107,
|
44 |
+
3.7612553914109483
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
22.42367218717744,
|
48 |
+
12.666036196147338,
|
49 |
+
8.629599928101406,
|
50 |
+
6.682308893792237,
|
51 |
+
5.701853976219515,
|
52 |
+
5.185871489440339,
|
53 |
+
4.8233660508560225,
|
54 |
+
4.548375989440121,
|
55 |
+
4.338121420220483,
|
56 |
+
4.163119960057585,
|
57 |
+
3.989376880700075,
|
58 |
+
3.886762281761894,
|
59 |
+
3.732258479806441,
|
60 |
+
3.5699768172034734,
|
61 |
+
3.437376656864263,
|
62 |
+
3.360495426986791,
|
63 |
+
3.2160783613784405,
|
64 |
+
3.0981060236315185,
|
65 |
+
2.9636218747760674,
|
66 |
+
2.8468211540315727
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.8861735068686023,
|
70 |
+
0.9673905631975283,
|
71 |
+
0.9857557027400294,
|
72 |
+
0.9915234359759318,
|
73 |
+
0.9942724066255968,
|
74 |
+
0.9951469133360477,
|
75 |
+
0.9957965078610408,
|
76 |
+
0.9963700529895251,
|
77 |
+
0.9968566370161274,
|
78 |
+
0.9970038944407354,
|
79 |
+
0.9973822481270078,
|
80 |
+
0.9971672230506246,
|
81 |
+
0.9975094205782383,
|
82 |
+
0.9977648538313334,
|
83 |
+
0.9980179846664018,
|
84 |
+
0.9981356275421155,
|
85 |
+
0.998470520105543,
|
86 |
+
0.9984775487380692,
|
87 |
+
0.9987470709447619,
|
88 |
+
0.9987366080661363
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
410.4469845194212,
|
92 |
+
182.80695052885673,
|
93 |
+
106.04734818364533,
|
94 |
+
68.17160872338523,
|
95 |
+
50.6360629444391,
|
96 |
+
68.64627241752517,
|
97 |
+
45.423886285701265,
|
98 |
+
78.9354918305303,
|
99 |
+
44.831697356533,
|
100 |
+
41.634061155184895,
|
101 |
+
43.157917936083294,
|
102 |
+
40.68462800308013,
|
103 |
+
39.753396558089996,
|
104 |
+
44.02809227688212,
|
105 |
+
48.21740244475888,
|
106 |
+
35.52609372474778,
|
107 |
+
42.4773176891703,
|
108 |
+
39.13388240169471,
|
109 |
+
34.04803727378308,
|
110 |
+
56.9983289745492
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
19.807712859563207,
|
114 |
+
13.154047283218882,
|
115 |
+
9.973827810514075,
|
116 |
+
7.9165926582847925,
|
117 |
+
6.7908423920085985,
|
118 |
+
7.912192454970619,
|
119 |
+
6.277257651484929,
|
120 |
+
8.45227570668767,
|
121 |
+
6.338847829619797,
|
122 |
+
6.025232891791129,
|
123 |
+
6.0758578337285165,
|
124 |
+
5.943435587770236,
|
125 |
+
5.847326947488449,
|
126 |
+
6.090798816429889,
|
127 |
+
6.580154817004584,
|
128 |
+
5.534270403127238,
|
129 |
+
6.03797093456972,
|
130 |
+
5.794032251456846,
|
131 |
+
5.2841298330328055,
|
132 |
+
7.244037790588833
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
14.308727197244133,
|
136 |
+
8.982651488881716,
|
137 |
+
6.783395169486462,
|
138 |
+
5.465634762401312,
|
139 |
+
4.799200672498891,
|
140 |
+
5.412561322601748,
|
141 |
+
4.415327538906689,
|
142 |
+
5.735453635873929,
|
143 |
+
4.556723201778573,
|
144 |
+
4.222258715562417,
|
145 |
+
4.230704216889932,
|
146 |
+
4.195163380931801,
|
147 |
+
4.090030817918374,
|
148 |
+
4.1431486237217,
|
149 |
+
4.625208894971391,
|
150 |
+
3.9091772327960377,
|
151 |
+
4.2994451388506825,
|
152 |
+
4.042285610252703,
|
153 |
+
3.663872933723557,
|
154 |
+
5.090360748935753
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.9563382897578495,
|
158 |
+
0.9829646886234552,
|
159 |
+
0.9902353975134837,
|
160 |
+
0.9931762016994853,
|
161 |
+
0.9938783435754373,
|
162 |
+
0.9936022330337847,
|
163 |
+
0.9940772854106527,
|
164 |
+
0.9942635306170289,
|
165 |
+
0.994526959640879,
|
166 |
+
0.994710107084731,
|
167 |
+
0.9943417713675701,
|
168 |
+
0.9952644856882767,
|
169 |
+
0.9947412333018343,
|
170 |
+
0.9947131947732307,
|
171 |
+
0.9957452072224147,
|
172 |
+
0.9959601877440869,
|
173 |
+
0.9957177504687242,
|
174 |
+
0.9960256244095278,
|
175 |
+
0.9959515937617127,
|
176 |
+
0.9956882721941236
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.001,
|
193 |
+
0.001,
|
194 |
+
0.001,
|
195 |
+
0.001,
|
196 |
+
0.001,
|
197 |
+
0.001,
|
198 |
+
0.001
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250103_043332.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
1351.0113486277905,
|
4 |
+
352.3077262866346,
|
5 |
+
167.32429698750943,
|
6 |
+
103.08953188944467,
|
7 |
+
69.1875813610946,
|
8 |
+
54.25784658631192,
|
9 |
+
44.57601911055891,
|
10 |
+
40.01520497285867,
|
11 |
+
34.644554676888866,
|
12 |
+
31.293750059001052,
|
13 |
+
28.812668193744706,
|
14 |
+
26.442434762097612,
|
15 |
+
23.031041573874557,
|
16 |
+
22.20530678350714,
|
17 |
+
19.99327388669871,
|
18 |
+
18.68147025908096,
|
19 |
+
16.995510369916506,
|
20 |
+
15.845708420005026,
|
21 |
+
15.787844214258314,
|
22 |
+
14.747453052031842
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
33.209800136624345,
|
26 |
+
18.2435796333922,
|
27 |
+
12.549612336516933,
|
28 |
+
9.841988781026261,
|
29 |
+
8.071622587094533,
|
30 |
+
7.137606808702729,
|
31 |
+
6.477514088010586,
|
32 |
+
6.162852056927469,
|
33 |
+
5.755617270195042,
|
34 |
+
5.477392564370788,
|
35 |
+
5.256519986669205,
|
36 |
+
5.046400770248145,
|
37 |
+
4.708584689891357,
|
38 |
+
4.619441727399584,
|
39 |
+
4.395451810730182,
|
40 |
+
4.227234469912232,
|
41 |
+
4.049099866559392,
|
42 |
+
3.9108673639536904,
|
43 |
+
3.8833373469625383,
|
44 |
+
3.755766218028664
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
22.03341102298302,
|
48 |
+
12.686087564577031,
|
49 |
+
8.723137673697893,
|
50 |
+
6.865933564644825,
|
51 |
+
5.739644124915328,
|
52 |
+
5.1618613159354725,
|
53 |
+
4.776871337920805,
|
54 |
+
4.587744018699549,
|
55 |
+
4.33242931773391,
|
56 |
+
4.157995220981067,
|
57 |
+
3.993489240543752,
|
58 |
+
3.8578739743443986,
|
59 |
+
3.6205275092698352,
|
60 |
+
3.532670849486242,
|
61 |
+
3.3538063560860065,
|
62 |
+
3.2110798879514766,
|
63 |
+
3.0780662824458713,
|
64 |
+
2.972256003301355,
|
65 |
+
2.912875095122977,
|
66 |
+
2.8233952163895473
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.8791214263514627,
|
70 |
+
0.9651105227538302,
|
71 |
+
0.9844696806578697,
|
72 |
+
0.9911428662606433,
|
73 |
+
0.9935568665401845,
|
74 |
+
0.9948240366729,
|
75 |
+
0.9953797318135635,
|
76 |
+
0.995786432223984,
|
77 |
+
0.9964222386479378,
|
78 |
+
0.9969813658655444,
|
79 |
+
0.9970793777817413,
|
80 |
+
0.9971918700427949,
|
81 |
+
0.9978629457233827,
|
82 |
+
0.9979353491452676,
|
83 |
+
0.9979386804979059,
|
84 |
+
0.9981750877031798,
|
85 |
+
0.9985391404243964,
|
86 |
+
0.9983644762748405,
|
87 |
+
0.9987040338448331,
|
88 |
+
0.99851057178612
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
416.53340750680843,
|
92 |
+
190.91952998201612,
|
93 |
+
104.1640454144545,
|
94 |
+
72.3938918315189,
|
95 |
+
73.03941280741087,
|
96 |
+
49.85962137034242,
|
97 |
+
48.56202842819859,
|
98 |
+
48.4794106281979,
|
99 |
+
40.51393108636561,
|
100 |
+
43.22256162133015,
|
101 |
+
41.64596470308975,
|
102 |
+
37.488306649973694,
|
103 |
+
41.163437480657876,
|
104 |
+
40.262249718249684,
|
105 |
+
41.858627131287484,
|
106 |
+
33.52191503283004,
|
107 |
+
35.463427651096396,
|
108 |
+
34.34374282729458,
|
109 |
+
35.07537248772635,
|
110 |
+
35.725776531326936
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
20.037238599342864,
|
114 |
+
13.578766652473123,
|
115 |
+
9.972929540364614,
|
116 |
+
8.205374721377183,
|
117 |
+
8.255005243890967,
|
118 |
+
6.720256714664904,
|
119 |
+
6.593885938298914,
|
120 |
+
6.5710771451384025,
|
121 |
+
5.956024617439825,
|
122 |
+
6.109059175367006,
|
123 |
+
6.1021625173050005,
|
124 |
+
5.629496071562468,
|
125 |
+
6.040688794055788,
|
126 |
+
6.02400883553649,
|
127 |
+
6.181112128194623,
|
128 |
+
5.4490271083728095,
|
129 |
+
5.579791722023324,
|
130 |
+
5.5375956799899,
|
131 |
+
5.512524228406886,
|
132 |
+
5.587302219995305
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
13.448163207148163,
|
136 |
+
9.25817228370989,
|
137 |
+
6.8640187357513,
|
138 |
+
5.719145002499433,
|
139 |
+
5.654466313375553,
|
140 |
+
4.759454754036917,
|
141 |
+
4.746351557718197,
|
142 |
+
4.631843724720914,
|
143 |
+
4.244970445901576,
|
144 |
+
4.2405674323229725,
|
145 |
+
4.311174513588489,
|
146 |
+
3.970265506019055,
|
147 |
+
4.271067021598278,
|
148 |
+
4.344380452599324,
|
149 |
+
4.383088038001262,
|
150 |
+
3.914992782431589,
|
151 |
+
3.9759923236470827,
|
152 |
+
3.9289716364632192,
|
153 |
+
3.853868887458049,
|
154 |
+
3.879887836080202
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.9552615352079902,
|
158 |
+
0.9803778302501625,
|
159 |
+
0.9900085867290765,
|
160 |
+
0.9927245554789691,
|
161 |
+
0.9929810569319927,
|
162 |
+
0.9937699966027703,
|
163 |
+
0.9954146490970128,
|
164 |
+
0.9936058378555406,
|
165 |
+
0.9941671062523211,
|
166 |
+
0.9947078941573559,
|
167 |
+
0.9938346449757965,
|
168 |
+
0.9955057291917397,
|
169 |
+
0.9949795964738013,
|
170 |
+
0.9951892134169458,
|
171 |
+
0.9950296677334208,
|
172 |
+
0.9954134653991377,
|
173 |
+
0.9948479037889293,
|
174 |
+
0.9956618916820472,
|
175 |
+
0.9953685369290096,
|
176 |
+
0.9951692357869215
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.001,
|
193 |
+
0.001,
|
194 |
+
0.001,
|
195 |
+
0.001,
|
196 |
+
0.001,
|
197 |
+
0.001,
|
198 |
+
0.001
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250103_044652.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
1568.4600394526615,
|
4 |
+
380.66691172877444,
|
5 |
+
186.19200922869427,
|
6 |
+
100.4270657587655,
|
7 |
+
63.62437669989429,
|
8 |
+
54.30184430562997,
|
9 |
+
44.79294805285297,
|
10 |
+
39.49484346335447,
|
11 |
+
34.37678491465653,
|
12 |
+
33.189656402491316,
|
13 |
+
28.456958789614184,
|
14 |
+
26.819092845614954,
|
15 |
+
24.388968602011474,
|
16 |
+
22.539706074738806,
|
17 |
+
21.393888397307336,
|
18 |
+
21.72506937346881,
|
19 |
+
18.861068978339812,
|
20 |
+
18.040212118927435,
|
21 |
+
16.478899402708947,
|
22 |
+
16.40729931562762
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
35.548012435356554,
|
26 |
+
18.833375530651306,
|
27 |
+
13.181894009336585,
|
28 |
+
9.730285929416734,
|
29 |
+
7.768600108746146,
|
30 |
+
7.177732931851947,
|
31 |
+
6.531449950219701,
|
32 |
+
6.137238532111352,
|
33 |
+
5.733839722016422,
|
34 |
+
5.634765137953384,
|
35 |
+
5.231876051724629,
|
36 |
+
5.0846880401971495,
|
37 |
+
4.860513306432777,
|
38 |
+
4.66520351242637,
|
39 |
+
4.541058985538234,
|
40 |
+
4.54559837113959,
|
41 |
+
4.258056244870012,
|
42 |
+
4.154343473970143,
|
43 |
+
3.975153880119614,
|
44 |
+
3.9717052584565744
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
23.885840191116817,
|
48 |
+
12.806354168095167,
|
49 |
+
8.911165521869176,
|
50 |
+
6.75464779704432,
|
51 |
+
5.5718319597123545,
|
52 |
+
5.191718755643579,
|
53 |
+
4.798439809415914,
|
54 |
+
4.567531941812249,
|
55 |
+
4.311504548863519,
|
56 |
+
4.217083642377129,
|
57 |
+
3.9817271043982685,
|
58 |
+
3.8729505618161792,
|
59 |
+
3.722985306118108,
|
60 |
+
3.5677872411435163,
|
61 |
+
3.455016141450858,
|
62 |
+
3.4211620231972466,
|
63 |
+
3.250691982198365,
|
64 |
+
3.1469848567171943,
|
65 |
+
3.0175175525342364,
|
66 |
+
2.981323989886272
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.8788194583398821,
|
70 |
+
0.966001775162884,
|
71 |
+
0.9844999542530579,
|
72 |
+
0.9917020818477944,
|
73 |
+
0.9941305821832223,
|
74 |
+
0.9949844571985776,
|
75 |
+
0.9958647024593775,
|
76 |
+
0.99609034367,
|
77 |
+
0.9968955215962627,
|
78 |
+
0.9968772376828556,
|
79 |
+
0.9968342000170599,
|
80 |
+
0.9971945462158963,
|
81 |
+
0.9974722178487838,
|
82 |
+
0.9978334335963938,
|
83 |
+
0.9980168634954887,
|
84 |
+
0.9980882780649994,
|
85 |
+
0.9983908321849907,
|
86 |
+
0.9983578184737435,
|
87 |
+
0.9985815234765222,
|
88 |
+
0.9986211659410332
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
480.90674945670116,
|
92 |
+
221.32546642464652,
|
93 |
+
119.41638223889848,
|
94 |
+
71.85167360977388,
|
95 |
+
61.77250488711075,
|
96 |
+
50.31877966330085,
|
97 |
+
45.95686971637565,
|
98 |
+
47.26317527932181,
|
99 |
+
42.16901689180186,
|
100 |
+
48.815807651466045,
|
101 |
+
43.76307472712557,
|
102 |
+
47.48831813436159,
|
103 |
+
39.1390000464211,
|
104 |
+
45.411110475029744,
|
105 |
+
37.73349936579315,
|
106 |
+
39.927634789910115,
|
107 |
+
36.944171274212046,
|
108 |
+
41.41304953669159,
|
109 |
+
35.50801792950698,
|
110 |
+
32.267287845342935
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
21.523574966213687,
|
114 |
+
14.500466189588247,
|
115 |
+
10.713845038053803,
|
116 |
+
8.220808155284956,
|
117 |
+
7.514927146441144,
|
118 |
+
6.752058818549558,
|
119 |
+
6.462109366346076,
|
120 |
+
6.511514011606931,
|
121 |
+
6.158016624407551,
|
122 |
+
6.581518399887021,
|
123 |
+
6.202932100631911,
|
124 |
+
6.500268678699365,
|
125 |
+
5.90938766806474,
|
126 |
+
6.40362695837909,
|
127 |
+
5.69099401318934,
|
128 |
+
5.916818186110754,
|
129 |
+
5.705122979201211,
|
130 |
+
6.073733684418374,
|
131 |
+
5.6619658280147735,
|
132 |
+
5.327907316202149
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
14.952053258116816,
|
136 |
+
9.653207577450175,
|
137 |
+
7.315994601854136,
|
138 |
+
5.805767361546906,
|
139 |
+
5.203530687681386,
|
140 |
+
4.783049848717703,
|
141 |
+
4.532520059128882,
|
142 |
+
4.608333439894126,
|
143 |
+
4.3324834057982535,
|
144 |
+
4.6344721921732726,
|
145 |
+
4.302189464300451,
|
146 |
+
4.506923057663609,
|
147 |
+
4.166391057027897,
|
148 |
+
4.4321763280411846,
|
149 |
+
3.919857750476246,
|
150 |
+
4.015890766197527,
|
151 |
+
4.011639339823119,
|
152 |
+
4.196899498012704,
|
153 |
+
4.0046954658669485,
|
154 |
+
3.760457559370659
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.951992391700476,
|
158 |
+
0.977657847001519,
|
159 |
+
0.9905902751734559,
|
160 |
+
0.9921590744609564,
|
161 |
+
0.9932476533970362,
|
162 |
+
0.9936211083976316,
|
163 |
+
0.9946853535276063,
|
164 |
+
0.9945137148172083,
|
165 |
+
0.9951216788359092,
|
166 |
+
0.9952481229540328,
|
167 |
+
0.9955367848906719,
|
168 |
+
0.9950585843811572,
|
169 |
+
0.9953058387192202,
|
170 |
+
0.9952809441257531,
|
171 |
+
0.9950784814189857,
|
172 |
+
0.99469767322003,
|
173 |
+
0.9955671723459808,
|
174 |
+
0.9958358297885304,
|
175 |
+
0.9950448165477161,
|
176 |
+
0.9960291091824921
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.001,
|
193 |
+
0.001,
|
194 |
+
0.001,
|
195 |
+
0.001,
|
196 |
+
0.001,
|
197 |
+
0.001,
|
198 |
+
0.001
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250103_092757.json
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
35.48313679539044,
|
4 |
+
0.3329015611376189,
|
5 |
+
0.2187574881724306,
|
6 |
+
0.18027265684950294,
|
7 |
+
0.1406513607848577,
|
8 |
+
0.1254000432385556,
|
9 |
+
0.11406336508874039,
|
10 |
+
0.10675579064991325,
|
11 |
+
0.09156012369313903,
|
12 |
+
0.07837757181090338,
|
13 |
+
0.07272699182923836,
|
14 |
+
0.06715140057598017,
|
15 |
+
0.062056878547750036,
|
16 |
+
0.05528454597276058,
|
17 |
+
0.041029059951476564,
|
18 |
+
0.0335420139783793,
|
19 |
+
0.036650182961492174,
|
20 |
+
0.029730955377159217,
|
21 |
+
0.028419958240399727,
|
22 |
+
0.02979619682197683
|
23 |
+
],
|
24 |
+
"train_rmse": [
|
25 |
+
3.566621652047163,
|
26 |
+
0.530789752552005,
|
27 |
+
0.42882655275830606,
|
28 |
+
0.39050047079668965,
|
29 |
+
0.3451002656171299,
|
30 |
+
0.3198269751787553,
|
31 |
+
0.3001346394637745,
|
32 |
+
0.2921615258101418,
|
33 |
+
0.2725297490255808,
|
34 |
+
0.2540439729435462,
|
35 |
+
0.246652456054755,
|
36 |
+
0.23201455367153614,
|
37 |
+
0.22159482499638555,
|
38 |
+
0.2105041584167228,
|
39 |
+
0.17940080854646312,
|
40 |
+
0.16423403010169302,
|
41 |
+
0.16818002084247397,
|
42 |
+
0.156031105634702,
|
43 |
+
0.15166975253445347,
|
44 |
+
0.15514037664907793
|
45 |
+
],
|
46 |
+
"train_mae": [
|
47 |
+
2.474846361275715,
|
48 |
+
0.35925816277725786,
|
49 |
+
0.2973010249176546,
|
50 |
+
0.2712645805028232,
|
51 |
+
0.23956697093487916,
|
52 |
+
0.22156769500550214,
|
53 |
+
0.20947162143273068,
|
54 |
+
0.20169177190459606,
|
55 |
+
0.18987821878370229,
|
56 |
+
0.17740302610717998,
|
57 |
+
0.16870605046094594,
|
58 |
+
0.15788957317465846,
|
59 |
+
0.15054547920516587,
|
60 |
+
0.14159253656369034,
|
61 |
+
0.12221413583765868,
|
62 |
+
0.11224046216310957,
|
63 |
+
0.1128907774315699,
|
64 |
+
0.10629052081133557,
|
65 |
+
0.10315093468827537,
|
66 |
+
0.10465153291986524
|
67 |
+
],
|
68 |
+
"train_ndcg": [
|
69 |
+
0.7558364655765044,
|
70 |
+
0.9866188587267187,
|
71 |
+
0.9924304947445665,
|
72 |
+
0.9944303837380831,
|
73 |
+
0.9945827830064146,
|
74 |
+
0.9955582045301606,
|
75 |
+
0.9960351542015619,
|
76 |
+
0.9960824549198151,
|
77 |
+
0.9969269312635253,
|
78 |
+
0.9973954099077212,
|
79 |
+
0.9975902201442779,
|
80 |
+
0.9975214942912513,
|
81 |
+
0.9980273539129692,
|
82 |
+
0.9979620438210571,
|
83 |
+
0.9985541199581532,
|
84 |
+
0.9987976839648017,
|
85 |
+
0.9990266956671884,
|
86 |
+
0.9990728838911539,
|
87 |
+
0.99896576755409,
|
88 |
+
0.9988336536703231
|
89 |
+
],
|
90 |
+
"val_loss": [
|
91 |
+
0.1295502951342455,
|
92 |
+
0.2112117204028116,
|
93 |
+
0.06708751296178556,
|
94 |
+
0.07748625563903594,
|
95 |
+
0.026657289018670857,
|
96 |
+
0.03803096673595653,
|
97 |
+
0.11389587175520793,
|
98 |
+
0.019189091058264315,
|
99 |
+
9.442593926262163,
|
100 |
+
0.06281777142389665,
|
101 |
+
0.04309269220200958,
|
102 |
+
0.028098553369923587,
|
103 |
+
0.028143494626061177,
|
104 |
+
0.029877805413389708,
|
105 |
+
0.06912251699610915,
|
106 |
+
0.017713357130406608,
|
107 |
+
0.023466069523481205,
|
108 |
+
0.040607516850594064,
|
109 |
+
0.01309489512907892,
|
110 |
+
0.05713046110615554
|
111 |
+
],
|
112 |
+
"val_rmse": [
|
113 |
+
0.3452739258859094,
|
114 |
+
0.38631782291620353,
|
115 |
+
0.2544532690529006,
|
116 |
+
0.26332937789789096,
|
117 |
+
0.15258707677027508,
|
118 |
+
0.180040440315543,
|
119 |
+
0.317377862802537,
|
120 |
+
0.1345261631668834,
|
121 |
+
0.6976586474660478,
|
122 |
+
0.23486453598215457,
|
123 |
+
0.19250496017195456,
|
124 |
+
0.15698165336840292,
|
125 |
+
0.159735350016474,
|
126 |
+
0.16061959243152069,
|
127 |
+
0.25054671630297654,
|
128 |
+
0.1271297410243889,
|
129 |
+
0.14636496537083996,
|
130 |
+
0.18951016164216974,
|
131 |
+
0.1060548357531114,
|
132 |
+
0.2244844007582963
|
133 |
+
],
|
134 |
+
"val_mae": [
|
135 |
+
0.24210304588499204,
|
136 |
+
0.21295641247235553,
|
137 |
+
0.17747273296117783,
|
138 |
+
0.16516592374569933,
|
139 |
+
0.09974751967779348,
|
140 |
+
0.11922594799961843,
|
141 |
+
0.1758638471364975,
|
142 |
+
0.09786017784770105,
|
143 |
+
0.21067505287872235,
|
144 |
+
0.12701583128999655,
|
145 |
+
0.10494426013508314,
|
146 |
+
0.09307881859196744,
|
147 |
+
0.11108123605519953,
|
148 |
+
0.10864213707161621,
|
149 |
+
0.1366678663122822,
|
150 |
+
0.0756039809907826,
|
151 |
+
0.08223065046567313,
|
152 |
+
0.10061165155239508,
|
153 |
+
0.06615498132059272,
|
154 |
+
0.1153957793935084
|
155 |
+
],
|
156 |
+
"val_ndcg": [
|
157 |
+
0.9898358978016276,
|
158 |
+
0.9916317068355184,
|
159 |
+
0.9960200240914251,
|
160 |
+
0.9962448696015587,
|
161 |
+
0.9982525723081239,
|
162 |
+
0.9980665319402453,
|
163 |
+
0.9982161471541499,
|
164 |
+
0.9984719904375748,
|
165 |
+
0.9983214626849537,
|
166 |
+
0.9979129400051815,
|
167 |
+
0.9987074657225273,
|
168 |
+
0.9983981830973021,
|
169 |
+
0.9983506748374079,
|
170 |
+
0.998569496080909,
|
171 |
+
0.9996046138481355,
|
172 |
+
0.9992532646152336,
|
173 |
+
0.9991910919337206,
|
174 |
+
0.9996341869864666,
|
175 |
+
0.9994951436217402,
|
176 |
+
0.9995241685652397
|
177 |
+
],
|
178 |
+
"lr": [
|
179 |
+
0.001,
|
180 |
+
0.001,
|
181 |
+
0.001,
|
182 |
+
0.001,
|
183 |
+
0.001,
|
184 |
+
0.001,
|
185 |
+
0.001,
|
186 |
+
0.001,
|
187 |
+
0.001,
|
188 |
+
0.001,
|
189 |
+
0.001,
|
190 |
+
0.001,
|
191 |
+
0.001,
|
192 |
+
0.0005,
|
193 |
+
0.0005,
|
194 |
+
0.0005,
|
195 |
+
0.0005,
|
196 |
+
0.0005,
|
197 |
+
0.0005,
|
198 |
+
0.0005
|
199 |
+
]
|
200 |
+
}
|
metrics/training_metrics_20250103_165619.json
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
17.839974135632,
|
4 |
+
0.3717077037531741,
|
5 |
+
0.27244204249162274,
|
6 |
+
0.20226187456717504,
|
7 |
+
0.15897851241192532
|
8 |
+
],
|
9 |
+
"train_rmse": [
|
10 |
+
2.513843766362758,
|
11 |
+
0.5616386250729694,
|
12 |
+
0.4718983753994247,
|
13 |
+
0.4053866316095696,
|
14 |
+
0.3614962610700034
|
15 |
+
],
|
16 |
+
"train_mae": [
|
17 |
+
1.8133598699034015,
|
18 |
+
0.41028543391936945,
|
19 |
+
0.34171164455481723,
|
20 |
+
0.2959879683448544,
|
21 |
+
0.2629419069595729
|
22 |
+
],
|
23 |
+
"train_ndcg": [
|
24 |
+
0.7995104605473483,
|
25 |
+
0.9858645969365216,
|
26 |
+
0.9920885355412206,
|
27 |
+
0.9945323769993419,
|
28 |
+
0.9957412415290181
|
29 |
+
],
|
30 |
+
"val_loss": [
|
31 |
+
3.491730105079396,
|
32 |
+
0.11632824206436185,
|
33 |
+
0.0817769760606994,
|
34 |
+
0.04945154333303512,
|
35 |
+
0.032795523575336584
|
36 |
+
],
|
37 |
+
"val_rmse": [
|
38 |
+
0.6826991777101171,
|
39 |
+
0.3341630921570146,
|
40 |
+
0.2778393792775709,
|
41 |
+
0.21099134118754137,
|
42 |
+
0.16966517827770045
|
43 |
+
],
|
44 |
+
"val_mae": [
|
45 |
+
0.3260452077842095,
|
46 |
+
0.2573499553640124,
|
47 |
+
0.1916451218052649,
|
48 |
+
0.13111490493928882,
|
49 |
+
0.11222708917839426
|
50 |
+
],
|
51 |
+
"val_ndcg": [
|
52 |
+
0.9786449779926891,
|
53 |
+
0.9901216953573092,
|
54 |
+
0.9963186937318721,
|
55 |
+
0.9982596190882401,
|
56 |
+
0.9985142963033327
|
57 |
+
],
|
58 |
+
"lr": [
|
59 |
+
0.001,
|
60 |
+
0.001,
|
61 |
+
0.001,
|
62 |
+
0.001,
|
63 |
+
0.001
|
64 |
+
]
|
65 |
+
}
|
metrics/training_metrics_20250104_000005.json
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
25.03897695070062,
|
4 |
+
0.4459359470071106,
|
5 |
+
0.27832151357603224,
|
6 |
+
0.20583774432940763,
|
7 |
+
0.18026240458240425,
|
8 |
+
0.14846552507008745,
|
9 |
+
0.13040077824387228
|
10 |
+
],
|
11 |
+
"train_rmse": [
|
12 |
+
3.0084060317310333,
|
13 |
+
0.6273383269022131,
|
14 |
+
0.490819894011052,
|
15 |
+
0.4215487596927151,
|
16 |
+
0.38429657859467986,
|
17 |
+
0.34830508471687494,
|
18 |
+
0.32169545626989093
|
19 |
+
],
|
20 |
+
"train_mae": [
|
21 |
+
2.131225818838877,
|
22 |
+
0.4455115708133465,
|
23 |
+
0.348309932229451,
|
24 |
+
0.30484239554292036,
|
25 |
+
0.27675854565599295,
|
26 |
+
0.2519048037879829,
|
27 |
+
0.23417054670803908
|
28 |
+
],
|
29 |
+
"train_ndcg": [
|
30 |
+
0.7440686262193537,
|
31 |
+
0.9760115248493001,
|
32 |
+
0.9892069459715976,
|
33 |
+
0.9922320850287811,
|
34 |
+
0.9943632159052016,
|
35 |
+
0.9953864646863334,
|
36 |
+
0.996499631035177
|
37 |
+
],
|
38 |
+
"val_loss": [
|
39 |
+
1.486161563702872,
|
40 |
+
0.22653832601409563,
|
41 |
+
0.13026042740372284,
|
42 |
+
0.660742336411921,
|
43 |
+
0.05408989013710492,
|
44 |
+
235.78654905395504,
|
45 |
+
230.38252206704198
|
46 |
+
],
|
47 |
+
"val_rmse": [
|
48 |
+
0.6370334281670409,
|
49 |
+
0.4570268694023932,
|
50 |
+
0.31359623377048396,
|
51 |
+
0.3187152725970594,
|
52 |
+
0.22422285815586,
|
53 |
+
2.016764449154497,
|
54 |
+
1.9790944850806804
|
55 |
+
],
|
56 |
+
"val_mae": [
|
57 |
+
0.35360592939484287,
|
58 |
+
0.34342973102146473,
|
59 |
+
0.173662431538105,
|
60 |
+
0.16381227319509212,
|
61 |
+
0.15005545307632903,
|
62 |
+
0.4578449399748319,
|
63 |
+
0.43453011346954695
|
64 |
+
],
|
65 |
+
"val_ndcg": [
|
66 |
+
0.9759331832469349,
|
67 |
+
0.990474347497376,
|
68 |
+
0.9955524055051131,
|
69 |
+
0.9955590568797689,
|
70 |
+
0.9953686981134011,
|
71 |
+
0.9971668946910912,
|
72 |
+
0.9971519842953749
|
73 |
+
],
|
74 |
+
"lr": [
|
75 |
+
0.001,
|
76 |
+
0.001,
|
77 |
+
0.001,
|
78 |
+
0.001,
|
79 |
+
0.001,
|
80 |
+
0.001,
|
81 |
+
0.001
|
82 |
+
]
|
83 |
+
}
|
metrics/training_metrics_20250104_002329.json
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
654.9977416510918,
|
4 |
+
133.8768731886014,
|
5 |
+
77.50994042476334,
|
6 |
+
57.487973242325296,
|
7 |
+
45.93395253734918
|
8 |
+
],
|
9 |
+
"train_rmse": [
|
10 |
+
21.76599518576593,
|
11 |
+
10.92139800435689,
|
12 |
+
8.43026184290633,
|
13 |
+
7.31956257053143,
|
14 |
+
6.586492155885355
|
15 |
+
],
|
16 |
+
"train_mae": [
|
17 |
+
12.904080948823319,
|
18 |
+
7.260352644629054,
|
19 |
+
6.020984615146085,
|
20 |
+
5.396023633153948,
|
21 |
+
4.993897577364289
|
22 |
+
],
|
23 |
+
"train_ndcg": [
|
24 |
+
0.8222233522745223,
|
25 |
+
0.9201224937560074,
|
26 |
+
0.935419495184108,
|
27 |
+
0.9456507629191733,
|
28 |
+
0.9510964462323335
|
29 |
+
],
|
30 |
+
"val_loss": [
|
31 |
+
233.38946832929338,
|
32 |
+
94.92865151450748,
|
33 |
+
84.01622210230146,
|
34 |
+
88.02083689825875,
|
35 |
+
251.29637086959113
|
36 |
+
],
|
37 |
+
"val_rmse": [
|
38 |
+
14.416855071947188,
|
39 |
+
9.046542380697913,
|
40 |
+
8.66063907904624,
|
41 |
+
8.716143566689402,
|
42 |
+
8.070561499731667
|
43 |
+
],
|
44 |
+
"val_mae": [
|
45 |
+
9.039377394176665,
|
46 |
+
6.144316837901161,
|
47 |
+
6.062099817253294,
|
48 |
+
5.8308244077932265,
|
49 |
+
5.27947231843358
|
50 |
+
],
|
51 |
+
"val_ndcg": [
|
52 |
+
0.901470630740126,
|
53 |
+
0.9210642547391,
|
54 |
+
0.9303346751701265,
|
55 |
+
0.934778360561246,
|
56 |
+
0.9401383463382011
|
57 |
+
],
|
58 |
+
"lr": [
|
59 |
+
0.001,
|
60 |
+
0.001,
|
61 |
+
0.001,
|
62 |
+
0.001,
|
63 |
+
0.001
|
64 |
+
]
|
65 |
+
}
|
metrics/training_metrics_20250104_003816.json
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
655.2924103831865,
|
4 |
+
137.81348060136773,
|
5 |
+
77.87851923997026,
|
6 |
+
60.0420509011622,
|
7 |
+
46.96173634598771,
|
8 |
+
40.52427888644802,
|
9 |
+
35.571622559115546,
|
10 |
+
31.858311056299197,
|
11 |
+
27.281973488302345
|
12 |
+
],
|
13 |
+
"train_rmse": [
|
14 |
+
21.63339813905697,
|
15 |
+
11.078644741924332,
|
16 |
+
8.481624908336705,
|
17 |
+
7.476557546854199,
|
18 |
+
6.660614014874347,
|
19 |
+
6.191670639031987,
|
20 |
+
5.810964058506354,
|
21 |
+
5.503427484370053,
|
22 |
+
5.096925591852883
|
23 |
+
],
|
24 |
+
"train_mae": [
|
25 |
+
12.795672080114702,
|
26 |
+
7.30440814957359,
|
27 |
+
6.002602778582934,
|
28 |
+
5.495873220255017,
|
29 |
+
5.041820852088422,
|
30 |
+
4.739296629925965,
|
31 |
+
4.417383114813492,
|
32 |
+
4.152467428450565,
|
33 |
+
3.7957898891304596
|
34 |
+
],
|
35 |
+
"train_ndcg": [
|
36 |
+
0.8197692561558241,
|
37 |
+
0.9231711810932137,
|
38 |
+
0.9376293856843534,
|
39 |
+
0.9425875070204298,
|
40 |
+
0.9503919912445276,
|
41 |
+
0.9540359039393911,
|
42 |
+
0.9593489245668667,
|
43 |
+
0.9625757746151086,
|
44 |
+
0.9665195502410056
|
45 |
+
],
|
46 |
+
"val_loss": [
|
47 |
+
182.59727460997445,
|
48 |
+
115.0690230414981,
|
49 |
+
127.87416275909969,
|
50 |
+
70.06721037910098,
|
51 |
+
80.27486997558957,
|
52 |
+
59.44625475293114,
|
53 |
+
55.08135130291893,
|
54 |
+
55.871143658955894,
|
55 |
+
6659.085475047429
|
56 |
+
],
|
57 |
+
"val_rmse": [
|
58 |
+
12.557709290761498,
|
59 |
+
9.918567012807063,
|
60 |
+
9.48277149453734,
|
61 |
+
7.70885356906008,
|
62 |
+
8.371686730469683,
|
63 |
+
6.979592169329438,
|
64 |
+
6.689580094676087,
|
65 |
+
6.870983494561128,
|
66 |
+
13.458319354048012
|
67 |
+
],
|
68 |
+
"val_mae": [
|
69 |
+
7.897627572218577,
|
70 |
+
6.56597325915382,
|
71 |
+
6.200662170137678,
|
72 |
+
5.50618282244319,
|
73 |
+
5.874495851142066,
|
74 |
+
5.199094084047136,
|
75 |
+
4.840447388944172,
|
76 |
+
5.065636995292845,
|
77 |
+
5.93146392986888
|
78 |
+
],
|
79 |
+
"val_ndcg": [
|
80 |
+
0.9034571490649667,
|
81 |
+
0.9252599633875347,
|
82 |
+
0.9298035546338984,
|
83 |
+
0.9361445135658696,
|
84 |
+
0.9352943633816072,
|
85 |
+
0.9418964138520616,
|
86 |
+
0.9416976965786445,
|
87 |
+
0.9426969763423715,
|
88 |
+
0.9398589121798674
|
89 |
+
],
|
90 |
+
"lr": [
|
91 |
+
0.001,
|
92 |
+
0.001,
|
93 |
+
0.001,
|
94 |
+
0.001,
|
95 |
+
0.001,
|
96 |
+
0.001,
|
97 |
+
0.001,
|
98 |
+
0.001,
|
99 |
+
0.001
|
100 |
+
]
|
101 |
+
}
|
metrics/training_metrics_20250104_010732.json
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
692.2268594424168,
|
4 |
+
155.58579151731894,
|
5 |
+
91.02494073715381,
|
6 |
+
62.284806612625864,
|
7 |
+
47.696007902716595,
|
8 |
+
38.79570380175977,
|
9 |
+
32.10595765445017
|
10 |
+
],
|
11 |
+
"train_rmse": [
|
12 |
+
22.40536726075939,
|
13 |
+
11.802893998549271,
|
14 |
+
9.076339798846956,
|
15 |
+
7.597033458710151,
|
16 |
+
6.689866192745471,
|
17 |
+
6.0580873553579595,
|
18 |
+
5.513845330073774
|
19 |
+
],
|
20 |
+
"train_mae": [
|
21 |
+
13.051485515691345,
|
22 |
+
7.651320030299294,
|
23 |
+
6.286715831749469,
|
24 |
+
5.468741066692657,
|
25 |
+
4.908279659856692,
|
26 |
+
4.434657849154426,
|
27 |
+
3.9721677486713114
|
28 |
+
],
|
29 |
+
"train_ndcg": [
|
30 |
+
0.8087768409661309,
|
31 |
+
0.9128060766827535,
|
32 |
+
0.93383413372955,
|
33 |
+
0.947167278855171,
|
34 |
+
0.9551643581645003,
|
35 |
+
0.9637041410196174,
|
36 |
+
0.9702560895854987
|
37 |
+
],
|
38 |
+
"val_loss": [
|
39 |
+
651.0634523192448,
|
40 |
+
133.79051945529767,
|
41 |
+
106.96319920696429,
|
42 |
+
85.06644299350567,
|
43 |
+
64.02761468175632,
|
44 |
+
73.5220956830836,
|
45 |
+
78.7099423735889
|
46 |
+
],
|
47 |
+
"val_rmse": [
|
48 |
+
13.131415164476463,
|
49 |
+
10.055183463157267,
|
50 |
+
8.756330566095277,
|
51 |
+
8.131971300432767,
|
52 |
+
7.268484960466997,
|
53 |
+
7.782613046313818,
|
54 |
+
8.050298634841678
|
55 |
+
],
|
56 |
+
"val_mae": [
|
57 |
+
8.55465096430992,
|
58 |
+
7.276789544233635,
|
59 |
+
6.283327481995768,
|
60 |
+
5.751810121536255,
|
61 |
+
5.33152237080816,
|
62 |
+
5.470134524445036,
|
63 |
+
5.669236395252285
|
64 |
+
],
|
65 |
+
"val_ndcg": [
|
66 |
+
0.4010162910418724,
|
67 |
+
0.4096747400155708,
|
68 |
+
0.41334134856266763,
|
69 |
+
0.4137950132142252,
|
70 |
+
0.4159794373298759,
|
71 |
+
0.41582945051477915,
|
72 |
+
0.4164658988589671
|
73 |
+
],
|
74 |
+
"lr": [
|
75 |
+
0.001,
|
76 |
+
0.001,
|
77 |
+
0.001,
|
78 |
+
0.001,
|
79 |
+
0.001,
|
80 |
+
0.001,
|
81 |
+
0.001
|
82 |
+
]
|
83 |
+
}
|
metrics/training_metrics_20250104_011443.json
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
747.3488913914265,
|
4 |
+
145.96466789430784,
|
5 |
+
86.39479489572196,
|
6 |
+
64.20039664960068,
|
7 |
+
51.28491067993187,
|
8 |
+
43.607586832167584,
|
9 |
+
36.55425032472504,
|
10 |
+
31.25288286166373,
|
11 |
+
28.14833299431719,
|
12 |
+
23.908967951859353,
|
13 |
+
21.428236955666915,
|
14 |
+
18.679253836012848
|
15 |
+
],
|
16 |
+
"train_rmse": [
|
17 |
+
23.184188219227416,
|
18 |
+
11.45168295735762,
|
19 |
+
8.8864819143681,
|
20 |
+
7.723792975325597,
|
21 |
+
6.940280548097029,
|
22 |
+
6.405828542767508,
|
23 |
+
5.8662402382937495,
|
24 |
+
5.424234613831899,
|
25 |
+
5.121161785708606,
|
26 |
+
4.746361522360717,
|
27 |
+
4.497774703122681,
|
28 |
+
4.185096451859765
|
29 |
+
],
|
30 |
+
"train_mae": [
|
31 |
+
13.71706475349751,
|
32 |
+
7.50529452007684,
|
33 |
+
6.259701011606435,
|
34 |
+
5.580138392729756,
|
35 |
+
5.098060473476977,
|
36 |
+
4.688325964576545,
|
37 |
+
4.2858362388397175,
|
38 |
+
3.895885395327106,
|
39 |
+
3.616349921198012,
|
40 |
+
3.3526823201047744,
|
41 |
+
3.12058784901161,
|
42 |
+
2.8688033105189272
|
43 |
+
],
|
44 |
+
"train_ndcg": [
|
45 |
+
0.8063238421107257,
|
46 |
+
0.9175900664511593,
|
47 |
+
0.9312679269883151,
|
48 |
+
0.9422594188664545,
|
49 |
+
0.9506532769981296,
|
50 |
+
0.9590009508558491,
|
51 |
+
0.9641841692742881,
|
52 |
+
0.9713488008390174,
|
53 |
+
0.9751414411810461,
|
54 |
+
0.9765989279195032,
|
55 |
+
0.9805166315373598,
|
56 |
+
0.984279945949016
|
57 |
+
],
|
58 |
+
"val_loss": [
|
59 |
+
184.07673564455402,
|
60 |
+
108.30949287983908,
|
61 |
+
90.20219907618281,
|
62 |
+
473.1458847216706,
|
63 |
+
72.058516757168,
|
64 |
+
68.01195372823459,
|
65 |
+
67.81648602841506,
|
66 |
+
58.370672943342974,
|
67 |
+
61.947438388795995,
|
68 |
+
52.14976073023099,
|
69 |
+
63.069723879401366,
|
70 |
+
54.61616339754703
|
71 |
+
],
|
72 |
+
"val_rmse": [
|
73 |
+
11.634516435881071,
|
74 |
+
9.221781411128266,
|
75 |
+
8.318100175119454,
|
76 |
+
9.578305728731655,
|
77 |
+
7.4885203644097045,
|
78 |
+
7.3712299298358985,
|
79 |
+
7.198502113314191,
|
80 |
+
6.9242316173129375,
|
81 |
+
6.918810462818225,
|
82 |
+
6.618950349174297,
|
83 |
+
7.152791654657651,
|
84 |
+
6.622356772554203
|
85 |
+
],
|
86 |
+
"val_mae": [
|
87 |
+
8.255931179559052,
|
88 |
+
6.688144994137892,
|
89 |
+
5.8846641960428725,
|
90 |
+
6.175251124510124,
|
91 |
+
5.329085095249005,
|
92 |
+
5.345389533398756,
|
93 |
+
5.003653562246863,
|
94 |
+
5.040316158977907,
|
95 |
+
4.728284999861646,
|
96 |
+
4.580177233112392,
|
97 |
+
4.811583769499366,
|
98 |
+
4.467982399997426
|
99 |
+
],
|
100 |
+
"val_ndcg": [
|
101 |
+
0.40758441028310294,
|
102 |
+
0.4145419465961741,
|
103 |
+
0.41645416679667,
|
104 |
+
0.4170703012551834,
|
105 |
+
0.4193937687731501,
|
106 |
+
0.41901908401233046,
|
107 |
+
0.41975115822322334,
|
108 |
+
0.4202720586933307,
|
109 |
+
0.42026146952785665,
|
110 |
+
0.4205170225741258,
|
111 |
+
0.42038892685477414,
|
112 |
+
0.4204279004637875
|
113 |
+
],
|
114 |
+
"lr": [
|
115 |
+
0.001,
|
116 |
+
0.001,
|
117 |
+
0.001,
|
118 |
+
0.001,
|
119 |
+
0.001,
|
120 |
+
0.001,
|
121 |
+
0.001,
|
122 |
+
0.001,
|
123 |
+
0.001,
|
124 |
+
0.001,
|
125 |
+
0.001,
|
126 |
+
0.001
|
127 |
+
]
|
128 |
+
}
|
metrics/training_metrics_20250104_012344.json
ADDED
@@ -0,0 +1,173 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
722.9548574494639,
|
4 |
+
146.40175312147647,
|
5 |
+
85.42187348865056,
|
6 |
+
60.501964287049205,
|
7 |
+
46.8718575875736,
|
8 |
+
38.23729195854751,
|
9 |
+
32.00270525638162,
|
10 |
+
26.729942461018066,
|
11 |
+
22.60702768967524,
|
12 |
+
19.945530043153997,
|
13 |
+
17.704082511092764,
|
14 |
+
15.55396806561653,
|
15 |
+
14.22020652518511,
|
16 |
+
13.117395714470662,
|
17 |
+
11.661882876147967,
|
18 |
+
10.93010081454299,
|
19 |
+
10.063436130786494
|
20 |
+
],
|
21 |
+
"train_rmse": [
|
22 |
+
22.846375160921244,
|
23 |
+
11.488120501193247,
|
24 |
+
8.85727562168705,
|
25 |
+
7.5123279911361145,
|
26 |
+
6.651862302193106,
|
27 |
+
6.015104275769991,
|
28 |
+
5.503403441923615,
|
29 |
+
5.023545856386948,
|
30 |
+
4.613676628631371,
|
31 |
+
4.327437248494172,
|
32 |
+
4.075261877032907,
|
33 |
+
3.8140716091468234,
|
34 |
+
3.6273248958625297,
|
35 |
+
3.482522223257597,
|
36 |
+
3.287567164428574,
|
37 |
+
3.185012855283296,
|
38 |
+
3.0444534353048933
|
39 |
+
],
|
40 |
+
"train_mae": [
|
41 |
+
13.455125815125879,
|
42 |
+
7.575254692258543,
|
43 |
+
6.217654748671619,
|
44 |
+
5.466741007241498,
|
45 |
+
4.886993498122006,
|
46 |
+
4.304617277270738,
|
47 |
+
3.8304975337284195,
|
48 |
+
3.4418799343885462,
|
49 |
+
3.1144455406895495,
|
50 |
+
2.875781349587387,
|
51 |
+
2.696398690086946,
|
52 |
+
2.517050676865752,
|
53 |
+
2.362347985756228,
|
54 |
+
2.2487000726870052,
|
55 |
+
2.1161791984940574,
|
56 |
+
2.028291983956984,
|
57 |
+
1.9097916470079657
|
58 |
+
],
|
59 |
+
"train_ndcg": [
|
60 |
+
0.8235555761219006,
|
61 |
+
0.9166275169964688,
|
62 |
+
0.9388797100663986,
|
63 |
+
0.9502400709809965,
|
64 |
+
0.9563324356631079,
|
65 |
+
0.9658247269606572,
|
66 |
+
0.9723488926175283,
|
67 |
+
0.9765766591078493,
|
68 |
+
0.9812312149752246,
|
69 |
+
0.9848286770812783,
|
70 |
+
0.985791131575843,
|
71 |
+
0.9877286714969774,
|
72 |
+
0.9889362170413147,
|
73 |
+
0.9895972986556061,
|
74 |
+
0.9907311449930506,
|
75 |
+
0.9918896107196452,
|
76 |
+
0.9920450084862912
|
77 |
+
],
|
78 |
+
"val_loss": [
|
79 |
+
167.6522611874253,
|
80 |
+
124.15631333251498,
|
81 |
+
88.2374712104228,
|
82 |
+
77.93126045340922,
|
83 |
+
96.88929993216671,
|
84 |
+
62.72705197120781,
|
85 |
+
81.45877939338115,
|
86 |
+
56.441899389295436,
|
87 |
+
55.19662875559793,
|
88 |
+
55.066983817940326,
|
89 |
+
51.7734276614972,
|
90 |
+
74.40411837421246,
|
91 |
+
51.016412199789016,
|
92 |
+
51.02640529177082,
|
93 |
+
48.52456700766265,
|
94 |
+
52.53771702922992,
|
95 |
+
49.43981172220031
|
96 |
+
],
|
97 |
+
"val_rmse": [
|
98 |
+
11.189840606415867,
|
99 |
+
9.58600997111548,
|
100 |
+
8.292045612260651,
|
101 |
+
7.99427763195157,
|
102 |
+
7.6412259979978945,
|
103 |
+
7.274987733142102,
|
104 |
+
7.713936945366049,
|
105 |
+
6.845516443905154,
|
106 |
+
6.897868368615047,
|
107 |
+
6.99134984579161,
|
108 |
+
6.809175488282247,
|
109 |
+
7.420135492837055,
|
110 |
+
6.766768687883562,
|
111 |
+
6.770783006127933,
|
112 |
+
6.4910948027873525,
|
113 |
+
6.757588578758839,
|
114 |
+
6.594931427040444
|
115 |
+
],
|
116 |
+
"val_mae": [
|
117 |
+
7.976505904411202,
|
118 |
+
6.769147197524114,
|
119 |
+
5.974825873303769,
|
120 |
+
5.764017573399331,
|
121 |
+
5.348576226874964,
|
122 |
+
5.293500059754101,
|
123 |
+
5.225544199303015,
|
124 |
+
4.757777753160961,
|
125 |
+
4.790411420366658,
|
126 |
+
4.871365610165382,
|
127 |
+
4.69525331347736,
|
128 |
+
5.044188578804927,
|
129 |
+
4.645911375444327,
|
130 |
+
4.551653947047333,
|
131 |
+
4.403688052163195,
|
132 |
+
4.524548444107397,
|
133 |
+
4.412602953412639
|
134 |
+
],
|
135 |
+
"val_ndcg": [
|
136 |
+
0.3854664285681141,
|
137 |
+
0.3970626523245626,
|
138 |
+
0.3993091859034638,
|
139 |
+
0.40061406377536146,
|
140 |
+
0.40129871381752524,
|
141 |
+
0.40149890638109464,
|
142 |
+
0.4004063760166738,
|
143 |
+
0.40111275430935533,
|
144 |
+
0.40202835949499216,
|
145 |
+
0.40123411852922014,
|
146 |
+
0.4020480241348494,
|
147 |
+
0.4016766359112156,
|
148 |
+
0.4013568968025606,
|
149 |
+
0.40230912454982304,
|
150 |
+
0.40139322908066993,
|
151 |
+
0.4017819784915269,
|
152 |
+
0.40200455873759827
|
153 |
+
],
|
154 |
+
"lr": [
|
155 |
+
0.001,
|
156 |
+
0.001,
|
157 |
+
0.001,
|
158 |
+
0.001,
|
159 |
+
0.001,
|
160 |
+
0.001,
|
161 |
+
0.001,
|
162 |
+
0.001,
|
163 |
+
0.001,
|
164 |
+
0.001,
|
165 |
+
0.001,
|
166 |
+
0.001,
|
167 |
+
0.001,
|
168 |
+
0.001,
|
169 |
+
0.001,
|
170 |
+
0.001,
|
171 |
+
0.001
|
172 |
+
]
|
173 |
+
}
|
metrics/training_metrics_20250104_021315.json
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
708.2152493528861,
|
4 |
+
146.5171740804705,
|
5 |
+
85.76771927449666,
|
6 |
+
63.229462375028355,
|
7 |
+
49.763298486221004,
|
8 |
+
42.55385646791579
|
9 |
+
],
|
10 |
+
"train_rmse": [
|
11 |
+
22.764913456014224,
|
12 |
+
11.484859694358866,
|
13 |
+
8.869339527044579,
|
14 |
+
7.658590551511417,
|
15 |
+
6.847131576050916,
|
16 |
+
6.3402288735225705
|
17 |
+
],
|
18 |
+
"train_mae": [
|
19 |
+
13.560497156802713,
|
20 |
+
7.479677234504363,
|
21 |
+
6.2542528368983366,
|
22 |
+
5.5760266296537715,
|
23 |
+
5.116533957282672,
|
24 |
+
4.754307395224254
|
25 |
+
],
|
26 |
+
"train_ndcg": [
|
27 |
+
0.8192471829406456,
|
28 |
+
0.921438950547271,
|
29 |
+
0.9353899640254426,
|
30 |
+
0.9402380620196873,
|
31 |
+
0.9492815241629371,
|
32 |
+
0.9570066111914874
|
33 |
+
],
|
34 |
+
"val_loss": [
|
35 |
+
161.44745741317521,
|
36 |
+
109.14599984581791,
|
37 |
+
90.46889235368415,
|
38 |
+
87.12105213136816,
|
39 |
+
466.9354229471577,
|
40 |
+
1302.5879631554903
|
41 |
+
],
|
42 |
+
"val_rmse": [
|
43 |
+
10.559003265112123,
|
44 |
+
9.104435882279088,
|
45 |
+
8.444436996559249,
|
46 |
+
8.23822649753548,
|
47 |
+
9.129098270401919,
|
48 |
+
11.23793314526776
|
49 |
+
],
|
50 |
+
"val_mae": [
|
51 |
+
7.498428307718306,
|
52 |
+
6.650554202919576,
|
53 |
+
6.160198556131391,
|
54 |
+
5.933253830582348,
|
55 |
+
5.8467706381385005,
|
56 |
+
6.12841546784586
|
57 |
+
],
|
58 |
+
"val_ndcg": [
|
59 |
+
0.40186114240048537,
|
60 |
+
0.4085635163890782,
|
61 |
+
0.41129920856276553,
|
62 |
+
0.4130042755781715,
|
63 |
+
0.41324490735779945,
|
64 |
+
0.41233258656601407
|
65 |
+
],
|
66 |
+
"lr": [
|
67 |
+
0.001,
|
68 |
+
0.001,
|
69 |
+
0.001,
|
70 |
+
0.001,
|
71 |
+
0.001,
|
72 |
+
0.001
|
73 |
+
]
|
74 |
+
}
|
metrics/training_metrics_20250104_021913.json
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
732.8318314612847,
|
4 |
+
141.73860721431444,
|
5 |
+
84.18782035622515,
|
6 |
+
63.14002042105164,
|
7 |
+
50.55775786621344,
|
8 |
+
44.19075770018437,
|
9 |
+
37.73816345875792,
|
10 |
+
34.06126776375461
|
11 |
+
],
|
12 |
+
"train_rmse": [
|
13 |
+
22.99165184330979,
|
14 |
+
11.323542329528655,
|
15 |
+
8.814999768566919,
|
16 |
+
7.657488695076422,
|
17 |
+
6.889741401117676,
|
18 |
+
6.445235970464815,
|
19 |
+
5.984314805835451,
|
20 |
+
5.662435650372836
|
21 |
+
],
|
22 |
+
"train_mae": [
|
23 |
+
13.584246410372723,
|
24 |
+
7.424672826534781,
|
25 |
+
6.1922993643948,
|
26 |
+
5.566740326422021,
|
27 |
+
5.093327478475763,
|
28 |
+
4.778021319042488,
|
29 |
+
4.4446718904667595,
|
30 |
+
4.133069074536723
|
31 |
+
],
|
32 |
+
"train_ndcg": [
|
33 |
+
0.8110227949946529,
|
34 |
+
0.9211597838804204,
|
35 |
+
0.937679745028765,
|
36 |
+
0.9412411521505384,
|
37 |
+
0.9503305667344984,
|
38 |
+
0.9545676151792712,
|
39 |
+
0.9600524606546241,
|
40 |
+
0.967420418263372
|
41 |
+
],
|
42 |
+
"val_loss": [
|
43 |
+
160.6261031933685,
|
44 |
+
128.34096046846304,
|
45 |
+
85.32431740974313,
|
46 |
+
80.64392247128842,
|
47 |
+
67.0554843091253,
|
48 |
+
66.06501499147558,
|
49 |
+
1049.1388928541496,
|
50 |
+
69.18329388205684
|
51 |
+
],
|
52 |
+
"val_rmse": [
|
53 |
+
10.805885756804322,
|
54 |
+
9.089829880151473,
|
55 |
+
8.07756226301517,
|
56 |
+
7.707812207446884,
|
57 |
+
6.890123732031058,
|
58 |
+
7.136241044110198,
|
59 |
+
9.04072006674995,
|
60 |
+
7.161699365254218
|
61 |
+
],
|
62 |
+
"val_mae": [
|
63 |
+
7.704081655616191,
|
64 |
+
6.686001412548236,
|
65 |
+
5.980107501015734,
|
66 |
+
5.5615818735378895,
|
67 |
+
5.153203635429269,
|
68 |
+
5.337269631428505,
|
69 |
+
5.525877652951141,
|
70 |
+
5.073120658789108
|
71 |
+
],
|
72 |
+
"val_ndcg": [
|
73 |
+
0.40463845373979257,
|
74 |
+
0.41194865721375196,
|
75 |
+
0.41457322889299536,
|
76 |
+
0.4161684600274954,
|
77 |
+
0.4162150126784595,
|
78 |
+
0.4159772846236158,
|
79 |
+
0.41703249518551044,
|
80 |
+
0.4172478131393888
|
81 |
+
],
|
82 |
+
"lr": [
|
83 |
+
0.001,
|
84 |
+
0.001,
|
85 |
+
0.001,
|
86 |
+
0.001,
|
87 |
+
0.001,
|
88 |
+
0.001,
|
89 |
+
0.001,
|
90 |
+
0.001
|
91 |
+
]
|
92 |
+
}
|
metrics/training_metrics_20250104_024710.json
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
698.9571214965068,
|
4 |
+
159.28611053398424,
|
5 |
+
94.177260281347,
|
6 |
+
68.67736714058977,
|
7 |
+
52.19162373831238,
|
8 |
+
43.988458228876915,
|
9 |
+
38.1462167963508,
|
10 |
+
33.081662080108096,
|
11 |
+
28.3430894199283,
|
12 |
+
24.18672723535106,
|
13 |
+
20.909505849814042,
|
14 |
+
18.01416439347698
|
15 |
+
],
|
16 |
+
"train_rmse": [
|
17 |
+
22.664169959178874,
|
18 |
+
11.85711222954263,
|
19 |
+
9.258804724471577,
|
20 |
+
7.915980144950924,
|
21 |
+
6.947577161715384,
|
22 |
+
6.403177358387431,
|
23 |
+
5.9451505323781495,
|
24 |
+
5.515501669518754,
|
25 |
+
5.114904968799297,
|
26 |
+
4.701472378918194,
|
27 |
+
4.367025956447108,
|
28 |
+
4.040677529004106
|
29 |
+
],
|
30 |
+
"train_mae": [
|
31 |
+
13.043204946781469,
|
32 |
+
7.643941563220946,
|
33 |
+
6.423641862221134,
|
34 |
+
5.645208807290714,
|
35 |
+
5.099023518765302,
|
36 |
+
4.734131901365683,
|
37 |
+
4.364591504674602,
|
38 |
+
4.010108899678465,
|
39 |
+
3.6647100993463404,
|
40 |
+
3.291041061983258,
|
41 |
+
2.980214517983685,
|
42 |
+
2.6817004160706546
|
43 |
+
],
|
44 |
+
"train_ndcg": [
|
45 |
+
0.8104183176939972,
|
46 |
+
0.9130722236575433,
|
47 |
+
0.9314459845273463,
|
48 |
+
0.9441268801844948,
|
49 |
+
0.9525130322791463,
|
50 |
+
0.9570151019154243,
|
51 |
+
0.9625859918257832,
|
52 |
+
0.9686254831149206,
|
53 |
+
0.974737417795838,
|
54 |
+
0.9780842145714321,
|
55 |
+
0.9821972065313793,
|
56 |
+
0.9857209688073401
|
57 |
+
],
|
58 |
+
"val_loss": [
|
59 |
+
172.88161589494393,
|
60 |
+
426.1052271003154,
|
61 |
+
112.51207539714984,
|
62 |
+
72.3706546854617,
|
63 |
+
294.6680413772811,
|
64 |
+
62.068981108024936,
|
65 |
+
58.63476648473028,
|
66 |
+
56.30721573900821,
|
67 |
+
59.38546958467854,
|
68 |
+
53.21272474545152,
|
69 |
+
27868.435395572436,
|
70 |
+
1104.9548586503784
|
71 |
+
],
|
72 |
+
"val_rmse": [
|
73 |
+
11.102760222063104,
|
74 |
+
10.900741960806847,
|
75 |
+
8.854496686646492,
|
76 |
+
7.612281812653077,
|
77 |
+
9.060998067683073,
|
78 |
+
6.995194889772411,
|
79 |
+
7.0915024895963485,
|
80 |
+
6.86413349464537,
|
81 |
+
7.045319108247602,
|
82 |
+
6.5340257952496295,
|
83 |
+
29.066774280978127,
|
84 |
+
9.589615194488836
|
85 |
+
],
|
86 |
+
"val_mae": [
|
87 |
+
7.9578251155454724,
|
88 |
+
7.149700511391483,
|
89 |
+
6.4138230003527745,
|
90 |
+
5.7778721852089046,
|
91 |
+
5.830743086515968,
|
92 |
+
5.309667143892886,
|
93 |
+
5.423977222015608,
|
94 |
+
5.078170818357325,
|
95 |
+
5.1515387592031,
|
96 |
+
4.622512403886709,
|
97 |
+
8.53286396104898,
|
98 |
+
5.080765780406212
|
99 |
+
],
|
100 |
+
"val_ndcg": [
|
101 |
+
0.3995119698012053,
|
102 |
+
0.4074448676474059,
|
103 |
+
0.41436846994642,
|
104 |
+
0.41535265410124367,
|
105 |
+
0.415723830995275,
|
106 |
+
0.4158541956944252,
|
107 |
+
0.4157818028286322,
|
108 |
+
0.4167915175210184,
|
109 |
+
0.4170165019248849,
|
110 |
+
0.4162059310656875,
|
111 |
+
0.4151763634895211,
|
112 |
+
0.41661322686209606
|
113 |
+
],
|
114 |
+
"lr": [
|
115 |
+
0.001,
|
116 |
+
0.001,
|
117 |
+
0.001,
|
118 |
+
0.001,
|
119 |
+
0.001,
|
120 |
+
0.001,
|
121 |
+
0.001,
|
122 |
+
0.001,
|
123 |
+
0.001,
|
124 |
+
0.001,
|
125 |
+
0.001,
|
126 |
+
0.001
|
127 |
+
]
|
128 |
+
}
|
metrics/training_metrics_20250104_030507.json
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
735.3264224940579,
|
4 |
+
151.60405352153023,
|
5 |
+
89.78745444698775
|
6 |
+
],
|
7 |
+
"train_rmse": [
|
8 |
+
23.047277585501725,
|
9 |
+
11.651142931361225,
|
10 |
+
9.012670799733398
|
11 |
+
],
|
12 |
+
"train_mae": [
|
13 |
+
13.923379173734634,
|
14 |
+
7.57802535029291,
|
15 |
+
6.274760499474182
|
16 |
+
],
|
17 |
+
"train_ndcg": [
|
18 |
+
0.8126091989344285,
|
19 |
+
0.9122520486161368,
|
20 |
+
0.9342558337535495
|
21 |
+
],
|
22 |
+
"val_loss": [
|
23 |
+
11324.795474004033,
|
24 |
+
504789.3357626616,
|
25 |
+
60333.76644566095
|
26 |
+
],
|
27 |
+
"val_rmse": [
|
28 |
+
24.241182599915337,
|
29 |
+
77.56569549417645,
|
30 |
+
27.3166621065554
|
31 |
+
],
|
32 |
+
"val_mae": [
|
33 |
+
10.046802049608372,
|
34 |
+
22.964381659920537,
|
35 |
+
9.750387768247235
|
36 |
+
],
|
37 |
+
"val_ndcg": [
|
38 |
+
0.40520864476018875,
|
39 |
+
0.41310783446724736,
|
40 |
+
0.4158413812295714
|
41 |
+
],
|
42 |
+
"lr": [
|
43 |
+
0.001,
|
44 |
+
0.001,
|
45 |
+
0.001
|
46 |
+
]
|
47 |
+
}
|
metrics/training_metrics_20250104_030726.json
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train_loss": [
|
3 |
+
707.4203591421525,
|
4 |
+
151.07523157776427,
|
5 |
+
84.22673951021498,
|
6 |
+
58.70951760002176,
|
7 |
+
48.33882554846971
|
8 |
+
],
|
9 |
+
"train_rmse": [
|
10 |
+
22.78345383665935,
|
11 |
+
11.619997248790062,
|
12 |
+
8.761896087930726,
|
13 |
+
7.343267081961219,
|
14 |
+
6.71071821741142
|
15 |
+
],
|
16 |
+
"train_mae": [
|
17 |
+
13.44424786720817,
|
18 |
+
7.635795480551517,
|
19 |
+
6.188227196430608,
|
20 |
+
5.423829537705755,
|
21 |
+
5.011434268203576
|
22 |
+
],
|
23 |
+
"train_ndcg": [
|
24 |
+
0.8127191672971037,
|
25 |
+
0.9208593445206151,
|
26 |
+
0.937281206661948,
|
27 |
+
0.948826389427591,
|
28 |
+
0.9551151390392625
|
29 |
+
],
|
30 |
+
"val_loss": [
|
31 |
+
227.13909398833317,
|
32 |
+
91.5767605084092,
|
33 |
+
91.0302365459613,
|
34 |
+
103.32767609553551,
|
35 |
+
141.4468235556759
|
36 |
+
],
|
37 |
+
"val_rmse": [
|
38 |
+
12.660615976782926,
|
39 |
+
8.360802165435022,
|
40 |
+
8.298719194047607,
|
41 |
+
7.70032410250077,
|
42 |
+
8.050560559871839
|
43 |
+
],
|
44 |
+
"val_mae": [
|
45 |
+
8.709459909752233,
|
46 |
+
6.094283602130947,
|
47 |
+
5.971917348121529,
|
48 |
+
5.656715124044846,
|
49 |
+
5.366701940991986
|
50 |
+
],
|
51 |
+
"val_ndcg": [
|
52 |
+
0.382423224377988,
|
53 |
+
0.3980416394881348,
|
54 |
+
0.3991476348976591,
|
55 |
+
0.4011840544529815,
|
56 |
+
0.40102315963204227
|
57 |
+
],
|
58 |
+
"lr": [
|
59 |
+
0.001,
|
60 |
+
0.001,
|
61 |
+
0.001,
|
62 |
+
0.001,
|
63 |
+
0.001
|
64 |
+
]
|
65 |
+
}
|