--- license: mit language: - en - de - multilingual library_name: transformers pipeline_tag: text-classification tags: - email - classification - multi-label - onnx - int8 - priority base_model: microsoft/Multilingual-MiniLM-L12-H384 model-index: - name: franz-email-classifier results: [] --- # Franz Email Classifier Multi-label email classification model used by [Franz](https://meetfranz.com) to automatically prioritize emails. Fine-tuned from [`microsoft/Multilingual-MiniLM-L12-H384`](https://huggingface.co/microsoft/Multilingual-MiniLM-L12-H384) and exported as **ONNX INT8** for fast CPU inference in Electron. ## Labels The model predicts 8 binary labels per email: | Label | Meaning | |---|---| | `IS_URGENT` | Needs attention today | | `NEEDS_REPLY` | Direct question or action request to the user | | `HAS_DEADLINE` | Explicit or relative deadline mentioned | | `IS_ACTIONABLE` | Any action required (broader than NEEDS_REPLY) | | `IS_INFORMATIONAL` | FYI / status update, no action needed | | `IS_AUTOMATED` | Machine-generated (CI/CD, monitoring, alerts) | | `IS_NEWSLETTER` | Content marketing / newsletter | | `IS_TRANSACTIONAL` | Receipt, invoice, order confirmation | ## Priority Mapping Labels are combined into priority tiers in the Franz app: | Condition | Priority | |---|---| | IS_URGENT + NEEDS_REPLY | `urgent` | | IS_URGENT | `important` | | NEEDS_REPLY + IS_ACTIONABLE | `important` | | IS_NEWSLETTER or IS_TRANSACTIONAL | `noise` | | IS_AUTOMATED (not urgent) | `noise` | | IS_INFORMATIONAL (not urgent/reply) | `low` | | Everything else | `normal` | ## Usage ### With @huggingface/transformers (Node.js / Electron) ```ts import { pipeline, env } from '@huggingface/transformers' env.allowLocalModels = true env.localModelPath = '/path/to/models' // parent dir const classifier = await pipeline( 'text-classification', 'email-classifier', // subdirectory name { dtype: 'int8', device: 'cpu', multi_label: true } ) const result = await classifier('Re: Urgent: Invoice #4521 due Friday') // [ // { label: 'IS_URGENT', score: 0.94 }, // { label: 'NEEDS_REPLY', score: 0.12 }, // { label: 'HAS_DEADLINE', score: 0.91 }, // ... // ] ``` ### With transformers (Python) ```python from transformers import pipeline classifier = pipeline( "text-classification", model="meetfranz/franz-models", top_k=None ) result = classifier("Re: Urgent: Invoice #4521 due Friday") ``` ## Model Details | Property | Value | |---|---| | Architecture | BertForSequenceClassification | | Base model | microsoft/Multilingual-MiniLM-L12-H384 | | Hidden size | 384 | | Layers | 12 | | Attention heads | 12 | | Max sequence length | 512 | | Vocab size | 250,037 | | Tokenizer | XLMRobertaTokenizer (SentencePiece BPE) | | Problem type | Multi-label classification | | Quantization | ONNX INT8 | | Model size | ~113 MB (quantized) | ## Training Trained on LLM-generated synthetic email data. No real user emails or personal data were used in training. Labels were bootstrapped via LLM annotation and human-reviewed for quality. Fine-tuned with multi-label BCE loss, then exported to ONNX with INT8 dynamic quantization. ## How Franz Uses This Model This model is **Stage 2** in Franz's three-stage email classification funnel: 1. **Stage 1 — Heuristics**: Fast rules-based classification for obvious cases 2. **Stage 2 — ML (this model)**: ONNX inference for ambiguous emails (confidence threshold: 0.75) 3. **Stage 3 — LLM**: Local or cloud LLM for emails below the ML confidence threshold The model is downloaded on demand when a user first adds an email account to Franz. If unavailable, the app gracefully falls through to Stage 3. ## License MIT