| --- |
| license: mit |
| tags: |
| - text-classification |
| - multi-label-classification |
| - crypto |
| - technology |
| - twitter |
| - x |
| - roberta |
| pipeline_tag: text-classification |
| --- |
| |
| # Techpto Transformer |
|
|
| RoBERTa multi-label classifier for detecting whether X/Twitter posts or profile text are crypto-related, tech-related, both, or neither. |
|
|
| This is the V5B transformer checkpoint trained for the Techpto classifier project. It was later distilled into the faster `techpto-classifier` hashed linear model for full-corpus scanning. |
|
|
| ## Labels |
|
|
| - `crypto` |
| - `tech` |
|
|
| The model uses sigmoid probabilities, not softmax. A text can match neither label, one label, or both labels. |
|
|
| ## Files |
|
|
| - `model.safetensors`: transformer weights. |
| - `config.json`: `RobertaForSequenceClassification` config with `problem_type = multi_label_classification`. |
| - `tokenizer.json` and `tokenizer_config.json`: tokenizer files. |
| - `metrics.json`: full training/eval metrics. |
| - `classification_thresholds.json`: recommended threshold sets. |
|
|
| ## Recommended Thresholds |
|
|
| For high precision on the test split: |
|
|
| ```json |
| { |
| "crypto": 0.80, |
| "tech": 0.86 |
| } |
| ``` |
|
|
| For best F1 on the test split: |
|
|
| ```json |
| { |
| "crypto": 0.41, |
| "tech": 0.57 |
| } |
| ``` |
|
|
| For higher recall / F2: |
|
|
| ```json |
| { |
| "crypto": 0.12, |
| "tech": 0.16 |
| } |
| ``` |
|
|
| ## Test Metrics |
|
|
| At the higher-recall thresholds stored in `metrics.json`: |
|
|
| - Exact match accuracy: `0.9071` |
| - Micro F1: `0.9200` |
| - Macro F1: `0.9099` |
|
|
| At the high-precision threshold set: |
|
|
| - Exact match accuracy: `0.9305` |
| - Micro precision: `0.9704` |
| - Micro recall: `0.8873` |
| - Micro F1: `0.9270` |
| - Macro F1: `0.9186` |
|
|
| ## Usage |
|
|
| ```python |
| import torch |
| from transformers import AutoModelForSequenceClassification, AutoTokenizer |
| |
| repo_id = "pompompur-in/techpto-transformer" |
| tokenizer = AutoTokenizer.from_pretrained(repo_id) |
| model = AutoModelForSequenceClassification.from_pretrained(repo_id) |
| model.eval() |
| |
| text = "Building a new AI agent workflow for crypto wallet monitoring." |
| inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=192) |
| |
| with torch.no_grad(): |
| logits = model(**inputs).logits[0] |
| probs = torch.sigmoid(logits) |
| |
| labels = ["crypto", "tech"] |
| thresholds = {"crypto": 0.80, "tech": 0.86} |
| predictions = { |
| label: float(prob) >= thresholds[label] |
| for label, prob in zip(labels, probs) |
| } |
| |
| print(dict(zip(labels, map(float, probs)))) |
| print(predictions) |
| ``` |
|
|
| ## Notes |
|
|
| This checkpoint is intended for classification/research workflows over social text. It is not a general-purpose language model. |
|
|