Upload 9 files
Browse files- README.md +89 -12
- app.py +224 -0
- day_encoder.pkl +3 -0
- email_quality_models.pkl +3 -0
- feature_names.pkl +3 -0
- feature_scaler.pkl +3 -0
- list_encoder.pkl +3 -0
- model_results.pkl +3 -0
- requirements.txt +7 -0
README.md
CHANGED
|
@@ -1,13 +1,90 @@
|
|
| 1 |
-
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
--
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ๐ Email Performance Predictor - Forks Over Knives
|
| 2 |
+
|
| 3 |
+
An AI-powered email marketing tool that predicts email performance and provides actionable recommendations based on historical campaign data.
|
| 4 |
+
|
| 5 |
+
## ๐ฏ Features
|
| 6 |
+
|
| 7 |
+
- **Performance Prediction**: Predict open rates, click rates, and unsubscribe rates
|
| 8 |
+
- **Sentiment Analysis**: Analyze email sentiment using DistilBERT
|
| 9 |
+
- **Content Classification**: Categorize emails as engaging, promotional, informative, etc.
|
| 10 |
+
- **Smart Recommendations**: Get actionable tips to improve email performance
|
| 11 |
+
- **Real-time Analysis**: Instant feedback on your email content
|
| 12 |
+
|
| 13 |
+
## ๐ Model Performance
|
| 14 |
+
|
| 15 |
+
The app uses machine learning models trained on 311 email campaigns:
|
| 16 |
+
|
| 17 |
+
- **Click Rate Model**: Ridge Regression (Rยฒ = 0.28)
|
| 18 |
+
- **Open Rate Model**: Random Forest (Rยฒ = -0.06)
|
| 19 |
+
- **Unsubscribe Rate Model**: Random Forest (Rยฒ = -0.02)
|
| 20 |
+
|
| 21 |
+
*Note: Models show varying performance. Click rate predictions are most reliable.*
|
| 22 |
+
|
| 23 |
+
## ๐ ๏ธ How to Use
|
| 24 |
+
|
| 25 |
+
1. **Subject Line**: Enter your email subject line
|
| 26 |
+
2. **Preview Text**: Add preview text (optional)
|
| 27 |
+
3. **Campaign Name**: Enter your campaign name
|
| 28 |
+
4. **Day of Week**: Select when you plan to send
|
| 29 |
+
5. **Email List**: Choose your target audience
|
| 30 |
+
6. **Send Time**: Specify send time (e.g., "9:00 AM")
|
| 31 |
+
7. **Recipients**: Enter total recipient count
|
| 32 |
+
8. **Target Metric**: Choose what you want to optimize for
|
| 33 |
+
|
| 34 |
+
## ๐ What You Get
|
| 35 |
+
|
| 36 |
+
- **Performance Score**: 0-100 score based on predicted metrics
|
| 37 |
+
- **Sentiment Analysis**: Positive/negative sentiment with confidence
|
| 38 |
+
- **Content Classification**: How your email is categorized
|
| 39 |
+
- **Recommendations**: Specific tips to improve performance
|
| 40 |
+
- **Email Details**: Summary of key metrics
|
| 41 |
+
|
| 42 |
+
## ๐ง Technical Details
|
| 43 |
|
| 44 |
+
### Models Used
|
| 45 |
+
- **Sentiment**: DistilBERT (Hugging Face)
|
| 46 |
+
- **Classification**: BART-large-MNLI (Zero-shot)
|
| 47 |
+
- **Performance**: Custom trained models on campaign data
|
| 48 |
+
|
| 49 |
+
### Features Extracted
|
| 50 |
+
- Text length and word count
|
| 51 |
+
- Punctuation usage (!, ?)
|
| 52 |
+
- Emoji and number counts
|
| 53 |
+
- Capitalization ratio
|
| 54 |
+
- Send timing
|
| 55 |
+
- Audience segmentation
|
| 56 |
+
|
| 57 |
+
## ๐ Example Predictions
|
| 58 |
+
|
| 59 |
+
**High-performing email:**
|
| 60 |
+
- Subject: "Wrap Up Your Monday with Flavor ๐ฏ๐ฅ"
|
| 61 |
+
- Predicted Click Rate: ~1.24%
|
| 62 |
+
- Score: 85/100
|
| 63 |
+
|
| 64 |
+
**Low-performing email:**
|
| 65 |
+
- Subject: "Newsletter Update"
|
| 66 |
+
- Predicted Click Rate: ~0.3%
|
| 67 |
+
- Score: 45/100
|
| 68 |
+
|
| 69 |
+
## โ ๏ธ Limitations
|
| 70 |
+
|
| 71 |
+
- Models trained on limited dataset (311 campaigns)
|
| 72 |
+
- Performance varies by metric type
|
| 73 |
+
- Predictions are estimates based on historical patterns
|
| 74 |
+
- Best used as guidance alongside marketing expertise
|
| 75 |
+
|
| 76 |
+
## ๐ Deployment
|
| 77 |
+
|
| 78 |
+
This app is designed for Hugging Face Spaces. Upload all files and it will automatically deploy.
|
| 79 |
+
|
| 80 |
+
### Required Files
|
| 81 |
+
- `app.py` - Main application
|
| 82 |
+
- `requirements.txt` - Dependencies
|
| 83 |
+
- `*.pkl` files - Trained models and preprocessors
|
| 84 |
+
|
| 85 |
+
## ๐ Support
|
| 86 |
+
|
| 87 |
+
For questions about the model or improvements, refer to your campaign data analysis and model training logs.
|
| 88 |
+
|
| 89 |
+
---
|
| 90 |
+
*Built with Gradio, Transformers, and Scikit-learn*
|
app.py
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import joblib
|
| 3 |
+
import pandas as pd
|
| 4 |
+
import numpy as np
|
| 5 |
+
import re
|
| 6 |
+
from transformers import pipeline
|
| 7 |
+
from datetime import datetime
|
| 8 |
+
|
| 9 |
+
# ---------- Load trained models and preprocessors ----------
|
| 10 |
+
try:
|
| 11 |
+
models = joblib.load('email_quality_models.pkl')
|
| 12 |
+
scaler = joblib.load('feature_scaler.pkl')
|
| 13 |
+
day_encoder = joblib.load('day_encoder.pkl')
|
| 14 |
+
list_encoder = joblib.load('list_encoder.pkl')
|
| 15 |
+
feature_names = joblib.load('feature_names.pkl')
|
| 16 |
+
model_results = joblib.load('model_results.pkl')
|
| 17 |
+
print("โ
All models loaded successfully!")
|
| 18 |
+
except Exception as e:
|
| 19 |
+
print(f"โ Error loading models: {e}")
|
| 20 |
+
|
| 21 |
+
# Load sentiment analysis pipeline
|
| 22 |
+
sentiment = pipeline("sentiment-analysis")
|
| 23 |
+
classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
|
| 24 |
+
|
| 25 |
+
def extract_text_features(text):
|
| 26 |
+
"""Extract features from text"""
|
| 27 |
+
if pd.isna(text) or text == '':
|
| 28 |
+
return {
|
| 29 |
+
'length': 0,
|
| 30 |
+
'word_count': 0,
|
| 31 |
+
'exclamation_count': 0,
|
| 32 |
+
'question_count': 0,
|
| 33 |
+
'emoji_count': 0,
|
| 34 |
+
'number_count': 0,
|
| 35 |
+
'caps_ratio': 0
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
return {
|
| 39 |
+
'length': len(text),
|
| 40 |
+
'word_count': len(text.split()),
|
| 41 |
+
'exclamation_count': text.count('!'),
|
| 42 |
+
'question_count': text.count('?'),
|
| 43 |
+
'emoji_count': len(re.findall(r'[^\w\s,.]', text)),
|
| 44 |
+
'number_count': len(re.findall(r'\d+', text)),
|
| 45 |
+
'caps_ratio': sum(1 for c in text if c.isupper()) / len(text) if len(text) > 0 else 0
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
def predict_email_performance(subject, preview_text, campaign_name, day_of_week,
|
| 49 |
+
email_list, send_time, total_recipients, target_metric):
|
| 50 |
+
"""Predict email performance based on input features"""
|
| 51 |
+
|
| 52 |
+
try:
|
| 53 |
+
# Extract text features
|
| 54 |
+
subject_features = extract_text_features(subject)
|
| 55 |
+
campaign_features = extract_text_features(campaign_name)
|
| 56 |
+
preview_features = extract_text_features(preview_text)
|
| 57 |
+
|
| 58 |
+
# Parse send time
|
| 59 |
+
try:
|
| 60 |
+
send_hour = datetime.strptime(send_time, '%I:%M %p').hour
|
| 61 |
+
except:
|
| 62 |
+
send_hour = 9 # Default to 9 AM
|
| 63 |
+
|
| 64 |
+
# Encode categorical variables
|
| 65 |
+
try:
|
| 66 |
+
day_encoded = day_encoder.transform([day_of_week])[0]
|
| 67 |
+
except:
|
| 68 |
+
day_encoded = 0 # Default encoding
|
| 69 |
+
|
| 70 |
+
try:
|
| 71 |
+
list_encoded = list_encoder.transform([email_list])[0]
|
| 72 |
+
except:
|
| 73 |
+
list_encoded = 0 # Default encoding
|
| 74 |
+
|
| 75 |
+
# Create feature vector
|
| 76 |
+
features = [
|
| 77 |
+
total_recipients,
|
| 78 |
+
send_hour,
|
| 79 |
+
day_encoded,
|
| 80 |
+
list_encoded
|
| 81 |
+
]
|
| 82 |
+
|
| 83 |
+
# Add text features in correct order
|
| 84 |
+
for prefix in ['subject_', 'campaign_', 'preview_']:
|
| 85 |
+
for suffix in ['length', 'word_count', 'exclamation_count', 'question_count',
|
| 86 |
+
'emoji_count', 'number_count', 'caps_ratio']:
|
| 87 |
+
if prefix == 'subject_':
|
| 88 |
+
features.append(subject_features[suffix])
|
| 89 |
+
elif prefix == 'campaign_':
|
| 90 |
+
features.append(campaign_features[suffix])
|
| 91 |
+
else:
|
| 92 |
+
features.append(preview_features[suffix])
|
| 93 |
+
|
| 94 |
+
# Scale features
|
| 95 |
+
features_scaled = scaler.transform([features])
|
| 96 |
+
|
| 97 |
+
# Make prediction
|
| 98 |
+
model = models[target_metric]
|
| 99 |
+
prediction = model.predict(features_scaled)[0]
|
| 100 |
+
|
| 101 |
+
# Convert to percentage and ensure reasonable bounds
|
| 102 |
+
if target_metric == 'open_rate':
|
| 103 |
+
prediction = max(0, min(1, prediction)) * 100
|
| 104 |
+
elif target_metric == 'click_rate':
|
| 105 |
+
prediction = max(0, min(0.5, prediction)) * 100
|
| 106 |
+
else: # unsubscribe_rate
|
| 107 |
+
prediction = max(0, min(0.1, prediction)) * 100
|
| 108 |
+
|
| 109 |
+
return prediction
|
| 110 |
+
|
| 111 |
+
except Exception as e:
|
| 112 |
+
print(f"Prediction error: {e}")
|
| 113 |
+
return 0.0
|
| 114 |
+
|
| 115 |
+
def analyze_email_complete(subject, preview_text, campaign_name, day_of_week,
|
| 116 |
+
email_list, send_time, total_recipients, target_metric):
|
| 117 |
+
"""Complete email analysis with predictions and recommendations"""
|
| 118 |
+
|
| 119 |
+
# Get performance prediction
|
| 120 |
+
predicted_performance = predict_email_performance(
|
| 121 |
+
subject, preview_text, campaign_name, day_of_week,
|
| 122 |
+
email_list, send_time, total_recipients, target_metric
|
| 123 |
+
)
|
| 124 |
+
|
| 125 |
+
# Sentiment analysis
|
| 126 |
+
text_for_sentiment = f"{subject}\n{preview_text}"
|
| 127 |
+
sentiment_result = sentiment(text_for_sentiment)[0]
|
| 128 |
+
|
| 129 |
+
# Zero-shot classification
|
| 130 |
+
labels = ["engaging", "promotional", "informative", "urgent", "personal"]
|
| 131 |
+
classification_result = classifier(text_for_sentiment, labels)
|
| 132 |
+
|
| 133 |
+
# Generate recommendations
|
| 134 |
+
recommendations = []
|
| 135 |
+
|
| 136 |
+
# Subject line recommendations
|
| 137 |
+
subject_features = extract_text_features(subject)
|
| 138 |
+
if subject_features['length'] > 50:
|
| 139 |
+
recommendations.append("๐ง Consider shortening your subject line (currently {:.0f} chars)".format(subject_features['length']))
|
| 140 |
+
if subject_features['exclamation_count'] == 0 and target_metric == 'click_rate':
|
| 141 |
+
recommendations.append("โ Adding an exclamation mark might increase engagement")
|
| 142 |
+
if subject_features['emoji_count'] == 0:
|
| 143 |
+
recommendations.append("๐ Consider adding an emoji to make the subject more eye-catching")
|
| 144 |
+
|
| 145 |
+
# Timing recommendations
|
| 146 |
+
try:
|
| 147 |
+
hour = datetime.strptime(send_time, '%I:%M %p').hour
|
| 148 |
+
if hour < 8 or hour > 18:
|
| 149 |
+
recommendations.append("โฐ Consider sending during business hours (8 AM - 6 PM) for better engagement")
|
| 150 |
+
except:
|
| 151 |
+
pass
|
| 152 |
+
|
| 153 |
+
# Day recommendations
|
| 154 |
+
if day_of_week in ['Saturday', 'Sunday'] and target_metric == 'open_rate':
|
| 155 |
+
recommendations.append("๐
Weekday sends typically have higher open rates")
|
| 156 |
+
|
| 157 |
+
# Format output
|
| 158 |
+
output = f"""
|
| 159 |
+
## ๐ Predicted {target_metric.replace('_', ' ').title()}: {predicted_performance:.2f}%
|
| 160 |
+
|
| 161 |
+
### ๐ฏ Performance Score: {min(100, max(0, predicted_performance * 2)):.0f}/100
|
| 162 |
+
|
| 163 |
+
### ๐ Sentiment Analysis
|
| 164 |
+
- **Sentiment**: {sentiment_result['label']} (confidence: {sentiment_result['score']:.2f})
|
| 165 |
+
|
| 166 |
+
### ๐ท๏ธ Content Classification
|
| 167 |
+
"""
|
| 168 |
+
|
| 169 |
+
for i, (label, score) in enumerate(zip(classification_result['labels'][:3], classification_result['scores'][:3])):
|
| 170 |
+
output += f"- **{label.title()}**: {score:.2f}\n"
|
| 171 |
+
|
| 172 |
+
if recommendations:
|
| 173 |
+
output += "\n### ๐ก Recommendations\n"
|
| 174 |
+
for rec in recommendations[:5]: # Limit to top 5 recommendations
|
| 175 |
+
output += f"{rec}\n"
|
| 176 |
+
|
| 177 |
+
output += f"""
|
| 178 |
+
### ๐ Email Details
|
| 179 |
+
- **Subject Length**: {extract_text_features(subject)['length']} characters
|
| 180 |
+
- **Word Count**: {extract_text_features(subject)['word_count']} words
|
| 181 |
+
- **Send Time**: {send_time} on {day_of_week}
|
| 182 |
+
- **Target Audience**: {total_recipients:,} recipients
|
| 183 |
+
"""
|
| 184 |
+
|
| 185 |
+
return output
|
| 186 |
+
|
| 187 |
+
# Available options
|
| 188 |
+
day_options = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
| 189 |
+
list_options = [
|
| 190 |
+
'C4 - Very Engaged',
|
| 191 |
+
'C4 - Less Engaged',
|
| 192 |
+
'C4 - Very Engaged, C4 - Less Engaged',
|
| 193 |
+
'C4 - Re-Engage',
|
| 194 |
+
'New Users added in last 30 days (all entry points)',
|
| 195 |
+
'FMP: 2024 Premium Users Opted In to Weekly'
|
| 196 |
+
] # Simplified list for demo
|
| 197 |
+
|
| 198 |
+
# Create Gradio interface
|
| 199 |
+
demo = gr.Interface(
|
| 200 |
+
fn=analyze_email_complete,
|
| 201 |
+
inputs=[
|
| 202 |
+
gr.Textbox(label="๐ง Subject Line", placeholder="Enter your email subject line"),
|
| 203 |
+
gr.Textbox(label="๐ Preview Text", placeholder="Enter preview text (optional)"),
|
| 204 |
+
gr.Textbox(label="๐ Campaign Name", placeholder="Enter campaign name"),
|
| 205 |
+
gr.Dropdown(choices=day_options, label="๐
Day of Week", value="Thursday"),
|
| 206 |
+
gr.Dropdown(choices=list_options, label="๐ฎ Email List", value="C4 - Very Engaged"),
|
| 207 |
+
gr.Textbox(label="โฐ Send Time", placeholder="9:00 AM", value="9:00 AM"),
|
| 208 |
+
gr.Number(label="๐ฅ Total Recipients", value=500000),
|
| 209 |
+
gr.Radio(choices=['open_rate', 'click_rate', 'unsubscribe_rate'],
|
| 210 |
+
label="๐ฏ Target Metric", value='click_rate')
|
| 211 |
+
],
|
| 212 |
+
outputs=gr.Markdown(),
|
| 213 |
+
title="๐ Email Performance Predictor - Forks Over Knives",
|
| 214 |
+
description="Predict email performance and get actionable recommendations based on your campaign data",
|
| 215 |
+
examples=[
|
| 216 |
+
["Wrap Up Your Monday with Flavor ๐ฏ๐ฅ", "Ready in minutesโperfect for lunch, dinner, or...",
|
| 217 |
+
"Meatless Monday | Black Bean Avo Wraps", "Monday", "C4 - Very Engaged", "9:00 AM", 545464, "click_rate"],
|
| 218 |
+
["NEW Special Issue: Plant-Based Bowls", "Get your first look inside the latest issue...",
|
| 219 |
+
"Plant-Based Bowls Special Issue", "Saturday", "C4 - Very Engaged, C4 - Less Engaged", "1:30 AM", 650681, "open_rate"]
|
| 220 |
+
]
|
| 221 |
+
)
|
| 222 |
+
|
| 223 |
+
if __name__ == "__main__":
|
| 224 |
+
demo.launch()
|
day_encoder.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ae7ffda1c980b982e496436ff98ae8576d5f6b7d7c2dd41208cdf698868b86f2
|
| 3 |
+
size 543
|
email_quality_models.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:07d18f9208411ce543c3e04970b5710819d2b91e16df734382091b764e518671
|
| 3 |
+
size 1959858
|
feature_names.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7ca110cf7b7df9ddea6506d6043718660091cf114f44996d8ca719d1804bc1eb
|
| 3 |
+
size 554
|
feature_scaler.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:90e8b2f11d23e8b66e1007890ad684189939dc94293d582c5a0cc5b8678fdfa4
|
| 3 |
+
size 1983
|
list_encoder.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:629e15a5b9f993115f518a89e700d48bac7451d67dcf201ca9f5dde658ef8bcf
|
| 3 |
+
size 1946
|
model_results.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8647d7e14e97de5645b82decc5d5ef4898d08a21307b9dab76c429671f8df605
|
| 3 |
+
size 390
|
requirements.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio
|
| 2 |
+
transformers
|
| 3 |
+
torch
|
| 4 |
+
scikit-learn
|
| 5 |
+
pandas
|
| 6 |
+
numpy
|
| 7 |
+
joblib
|