Downloads · 30 days
0
LazyPranay01/ROBERTa_FOMC
ROBERTa_FOMC is a machine learning model from LazyPranay01. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
Classifies sentences from Federal Reserve communications as hawkish, dovish, or neutral.
Downloads · 30 days
0
Access
Public
Updated Sep 6, 2026
Parameters
125M
499 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors499 MB · 100%
From the Hugging Face model README
Classifies sentences from Federal Reserve communications as hawkish, dovish, or neutral.
Trained on the Trillion Dollar Words annotated corpus (Shah et al., ACL 2023) under a strict temporal split rather than the random split shipped with the source dataset.
The upstream train/test split spans 1996–2022 on both sides. FOMC minutes recycle near-identical boilerplate across meetings, so a random split lets a model memorise sentences it is later evaluated on.
This model is trained on 1996–2014 and evaluated on 2015–2022, with zero overlap. The reported score is therefore lower than commonly cited numbers on this dataset and not directly comparable to them — the temporal task is harder.
| macro F1 | |
|---|---|
| 5-fold CV (inside train block) | 0.664 ± 0.026 |
| Test 2015–2022, per seed | 0.659 ± 0.009 |
| Test, 3-seed ensemble | 0.673 |
Per-class F1: neutral 0.744, hawkish 0.659, dovish 0.617. Dovish language is more hedged and conditional, making it the hardest class.
CV and test agree within 0.005 — evidence that model selection did not overfit, since all tuning ran inside the training block.
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tok = AutoTokenizer.from_pretrained("LazyPranay01/ROBERTa_FOMC")
model = AutoModelForSequenceClassification.from_pretrained("LazyPranay01/ROBERTa_FOMC")
text = "The Committee judges that inflation remains elevated and further tightening may be warranted."
enc = tok(text, return_tensors="pt", truncation=True, max_length=128)
probs = torch.softmax(model(**enc).logits, dim=1)[0]
# index 0 = dovish, 1 = hawkish, 2 = neutral
To score a whole document, average probabilities, not predicted labels:
stance = (probs[:, 1] - probs[:, 0]).mean() # positive = hawkish
Averaging predicted label integers is a silent bug — with dovish=0, hawkish=1, neutral=2, the mean places neutral above hawkish and inverts the signal.
Applied to 75 FOMC meeting minutes (2015–2024), the resulting stance index tracks known policy regimes:
| Regime | Mean stance | |
|---|---|---|
| 2020 COVID | −0.277 | most dovish |
| 2019 cuts | −0.206 | dovish |
| 2015–2018 hiking | −0.060 | |
| 2022 hiking | +0.113 | most hawkish |
RoBERTa-base, 3 seeds (5768 / 78516 / 944601), class-weighted cross-entropy (neutral is ~2× the minority classes), dynamic padding, max length 128, LR 2e-5, batch 16, early stopping on validation macro F1. Single T4, ~35 minutes.
Training data was deduplicated before splitting — 50 verbatim-repeated sentences (mandate boilerplate) removed — and the build asserts zero cross-split sentence overlap.
Source dataset:
Shah, A., Paturi, S., & Chava, S. (2023). Trillion Dollar Words: A New Financial Dataset, Task & Market Analysis. ACL 2023.
Code and full analysis: https://github.com/<your-github>/fomc-stance-pipeline