|
|
--- |
|
|
language: en |
|
|
license: gpl-3.0 |
|
|
tags: |
|
|
- mbti |
|
|
- personality-classification |
|
|
- text-classification |
|
|
- multi-task-learning |
|
|
- rust |
|
|
datasets: |
|
|
- mbti-kaggle |
|
|
metrics: |
|
|
- accuracy |
|
|
model-index: |
|
|
- name: psycial-mbti-multitask |
|
|
results: |
|
|
- task: |
|
|
type: text-classification |
|
|
name: MBTI Personality Classification |
|
|
dataset: |
|
|
name: MBTI Kaggle Dataset |
|
|
type: mbti-kaggle |
|
|
metrics: |
|
|
- type: accuracy |
|
|
value: 49.80 |
|
|
name: Overall Test Accuracy |
|
|
- type: accuracy |
|
|
value: 80.58 |
|
|
name: E/I Accuracy |
|
|
- type: accuracy |
|
|
value: 87.15 |
|
|
name: S/N Accuracy |
|
|
- type: accuracy |
|
|
value: 81.90 |
|
|
name: T/F Accuracy |
|
|
- type: accuracy |
|
|
value: 75.33 |
|
|
name: J/P Accuracy |
|
|
--- |
|
|
|
|
|
<div align="center"> |
|
|
<img src="https://raw.githubusercontent.com/RyanKung/psycial/master/logo.png" alt="Psycial Logo" width="200"/> |
|
|
|
|
|
# MBTI Personality Classifier - Multi-Task Model |
|
|
</div> |
|
|
|
|
|
Production-grade MBTI (Myers-Briggs Type Indicator) personality classification model implemented in Rust with GPU acceleration. |
|
|
|
|
|
## Model Description |
|
|
|
|
|
This model predicts MBTI personality type from text using a multi-task learning approach with four independent binary classifiers for each MBTI dimension: |
|
|
- **E/I**: Extraversion vs Introversion |
|
|
- **S/N**: Sensing vs Intuition |
|
|
- **T/F**: Thinking vs Feeling |
|
|
- **J/P**: Judging vs Perceiving |
|
|
|
|
|
### Architecture |
|
|
|
|
|
- **Input Features**: 5384 dimensions |
|
|
- 5000 TF-IDF features (top words from vocabulary) |
|
|
- 384 BERT embeddings (sentence-transformers/all-MiniLM-L6-v2) |
|
|
- **Network**: 4-layer deep MLP |
|
|
- Architecture: 5384 → [1024, 768, 512, 256] → 4×2 outputs |
|
|
- Dropout: 0.5 (disabled during inference) |
|
|
- Optimizer: Adam (lr=0.001) |
|
|
- **Training**: Per-dimension epochs with weighted loss |
|
|
- E/I: 30 epochs, weight=1.2 |
|
|
- S/N: 30 epochs, weight=1.0 |
|
|
- T/F: 25 epochs, weight=1.0 |
|
|
- J/P: 30 epochs, weight=1.3 |
|
|
|
|
|
## Performance |
|
|
|
|
|
### Overall Metrics |
|
|
|
|
|
| Metric | Value | |
|
|
|--------|-------| |
|
|
| **Test Accuracy** | **49.80%** | |
|
|
| vs Random Baseline (6.25%) | 8.0x better | |
|
|
| vs TF-IDF Baseline (21.73%) | +129.2% improvement | |
|
|
| Training Time | ~50 seconds (GPU) | |
|
|
|
|
|
### Per-Dimension Accuracy |
|
|
|
|
|
| Dimension | Accuracy | Samples | |
|
|
|-----------|----------|---------| |
|
|
| E/I | 80.58% | 1398/1735 | |
|
|
| S/N | 87.15% | 1512/1735 | |
|
|
| T/F | 81.90% | 1421/1735 | |
|
|
| J/P | 75.33% | 1307/1735 | |
|
|
|
|
|
## Training Data |
|
|
|
|
|
- **Dataset**: MBTI Kaggle Dataset (8675 samples) |
|
|
- **Split**: 80% train (6940), 20% test (1735) |
|
|
- **Classes**: 16 MBTI types (INTJ, ENFP, etc.) |
|
|
- **Class Distribution**: |
|
|
- I: 77%, E: 23% (imbalanced) |
|
|
- N: 86%, S: 14% (highly imbalanced) |
|
|
- F: 54%, T: 46% (balanced) |
|
|
- J: 60%, P: 40% (moderately imbalanced) |
|
|
|
|
|
## ⚠️ Important Note |
|
|
|
|
|
**This model does NOT support Hugging Face Inference API** because it's a custom Rust/PyTorch implementation, not a standard `transformers` model. |
|
|
|
|
|
To use this model, you have two options: |
|
|
|
|
|
### Option 1: Use the Web Interface (Easiest) |
|
|
|
|
|
Visit **https://psycial.0xbase.ai** for instant MBTI predictions - no setup required! |
|
|
|
|
|
### Option 2: Run Locally (Full Control) |
|
|
|
|
|
## Usage |
|
|
|
|
|
### Requirements |
|
|
|
|
|
- Rust 1.70+ |
|
|
- PyTorch/libtorch (for tch-rs bindings) |
|
|
- CUDA (optional, for GPU acceleration) |
|
|
|
|
|
### Installation |
|
|
|
|
|
```bash |
|
|
git clone https://github.com/RyanKung/psycial |
|
|
cd psycial |
|
|
|
|
|
# Set up environment |
|
|
conda create -n psycial python=3.10 |
|
|
conda activate psycial |
|
|
conda install pytorch |
|
|
|
|
|
# Build |
|
|
export LIBTORCH_USE_PYTORCH=1 |
|
|
export LIBTORCH_BYPASS_VERSION_CHECK=1 |
|
|
cargo build --release |
|
|
``` |
|
|
|
|
|
### Download Model from Hugging Face |
|
|
|
|
|
```python |
|
|
from huggingface_hub import hf_hub_download |
|
|
|
|
|
# Download model files |
|
|
mlp_weights = hf_hub_download( |
|
|
repo_id="ElderRyan/psycial", |
|
|
filename="mlp_weights_multitask.pt" |
|
|
) |
|
|
|
|
|
vectorizer = hf_hub_download( |
|
|
repo_id="ElderRyan/psycial", |
|
|
filename="tfidf_vectorizer_multitask.json" |
|
|
) |
|
|
|
|
|
# Copy to models directory |
|
|
import shutil |
|
|
shutil.copy(mlp_weights, "models/mlp_weights_multitask.pt") |
|
|
shutil.copy(vectorizer, "models/tfidf_vectorizer_multitask.json") |
|
|
``` |
|
|
|
|
|
### Inference |
|
|
|
|
|
```bash |
|
|
# Download model files first (see above) |
|
|
|
|
|
# Predict single text |
|
|
./target/release/psycial hybrid predict "I love solving complex problems and thinking deeply about abstract concepts." |
|
|
``` |
|
|
|
|
|
### Programmatic Usage (Rust) |
|
|
|
|
|
```rust |
|
|
use psycial::hybrid::predict::predict_single; |
|
|
|
|
|
// Load model and predict |
|
|
predict_single("Your text here")?; |
|
|
``` |
|
|
|
|
|
### Quick Test |
|
|
|
|
|
```bash |
|
|
# Download inference example |
|
|
wget https://huggingface.co/ElderRyan/polyjuice/raw/main/inference_example.py |
|
|
|
|
|
# Run it |
|
|
python inference_example.py |
|
|
``` |
|
|
|
|
|
## Model Files |
|
|
|
|
|
This model repository includes: |
|
|
|
|
|
1. **mlp_weights_multitask.pt** (27MB) - Neural network weights |
|
|
2. **tfidf_vectorizer_multitask.json** (213KB) - TF-IDF vocabulary and IDF weights |
|
|
3. **feature_normalizer.json** (5KB) - Feature normalization parameters (optional) |
|
|
4. **feature_selector.json** (1KB) - Pearson feature selector indices (optional) |
|
|
|
|
|
## Limitations |
|
|
|
|
|
1. **Moderate Accuracy**: 49.80% is significantly better than random/baseline but still has room for improvement |
|
|
2. **Class Imbalance**: Model may favor majority classes (I, N, F, J) |
|
|
3. **Data Bias**: Trained on online forum posts, may not generalize to all text types |
|
|
4. **Language**: English only |
|
|
5. **MBTI Validity**: MBTI itself has limited scientific validity |
|
|
|
|
|
## Ethical Considerations |
|
|
|
|
|
- MBTI is not scientifically validated for hiring/clinical decisions |
|
|
- Predictions should be used for entertainment/research only |
|
|
- Be aware of class imbalances and potential biases |
|
|
- Do not use for discriminatory purposes |
|
|
|
|
|
## Technical Details |
|
|
|
|
|
### Framework |
|
|
- **Language**: Rust |
|
|
- **ML Framework**: tch-rs (PyTorch bindings) |
|
|
- **BERT Model**: sentence-transformers/all-MiniLM-L6-v2 |
|
|
- **Device**: CUDA-capable GPU (falls back to CPU) |
|
|
|
|
|
### Key Innovations |
|
|
|
|
|
1. **Dropout Bug Fix**: Discovered and fixed critical bug where dropout remained active during inference, causing ~5% accuracy loss |
|
|
2. **Per-Dimension Optimization**: Different epochs and loss weights for each MBTI dimension |
|
|
3. **Multi-Task Learning**: Four independent binary classifiers instead of 16-way classification |
|
|
|
|
|
## Citation |
|
|
|
|
|
If you use this model, please cite: |
|
|
|
|
|
```bibtex |
|
|
@software{psycial_mbti_2025, |
|
|
title = {Psycial: Multi-Task MBTI Personality Classifier}, |
|
|
author = {ElderRyan}, |
|
|
year = {2025}, |
|
|
url = {https://huggingface.co/ElderRyan/psycial}, |
|
|
github = {https://github.com/RyanKung/psycial} |
|
|
} |
|
|
``` |
|
|
|
|
|
## License |
|
|
|
|
|
GNU General Public License v3.0 (GPLv3) - See LICENSE file for details |
|
|
|
|
|
## Acknowledgments |
|
|
|
|
|
- **rust-bert**: Guillaume BE for BERT Rust implementation |
|
|
- **Dataset**: MBTI Kaggle Dataset |
|
|
- **sentence-transformers**: all-MiniLM-L6-v2 model |
|
|
|
|
|
|