Skip to content
Ankit Aglawe
FinSense· financial news sentiment

distilbert-base-uncased, fine-tuned for financial news sentiment

This is not distilbert-base-uncased, and it is not FinBERT. It is DistilBERT fine-tuned on the Financial PhraseBank for three-class sentiment on financial text, at 67M parameters against FinBERT's 110M.

FinSense bull mascot

FinSense

AnkitAI/distilbert-base-uncased-financial-news-sentiment-analysis
67M parametersApache-2.018,347 downloads, checked 2026-07-27

The Financial PhraseBank is CC BY-NC-SA. The model weights are Apache-2.0, but commercial users should check the dataset terms.

General-purpose sentiment models read financial text badly. Shares fell 4% after the announcement is neutral reporting to a market analyst and strongly negative to a model trained on product reviews. This is DistilBERT fine-tuned on the Financial PhraseBank, which is the standard annotated corpus for the task — professionally written English financial news at sentence level — emitting three classes: negative, neutral, positive. That corpus is also the edge of what it has seen: social-media finance chatter and earnings-call transcripts are out of distribution, and its errors concentrate on the positive-versus-neutral boundary, the same boundary human annotators disagree on around a quarter of the time. That is a structural ceiling on the task, and FinBERT hits it too.

At 67M parameters it is the small end of the domain. It runs comfortably on CPU and it is the right pick when you are scoring a headline feed at volume rather than looking for the last point of accuracy: the ModernBERT flagship in the same series reports 0.8675 accuracy against this model's 0.8447, at 149M parameters against 67M.

The number that matters here is not the accuracy — it is the split. There is no official train/test split for the Financial PhraseBank, which means most published FinBERT-era numbers were measured on different data and cannot be compared with each other at all. Some of the higher published FinBERT scores come from evaluating on sentences that overlap its own training data. This model's card publishes the stratified split script and the raw evaluation outputs, so its number can be re-run and checked, and the FinBERT row it is compared against was reproduced under the same harness rather than quoted from a paper.

This is the v2 release, retrained in place on the cleaner recipe. Same labels and same API as v1, so it is a drop-in for existing users.

The numbers

Financial PhraseBank, published held-out test split, identical harness for every row.

ModelAccuracyMacro-F1
This model (v2)0.84470.8316
FinBERT (reproduced)0.84230.8439
v1 of this model0.83230.8064
FinSense ModernBERT (flagship)0.86750.8589

Figures as reported on the model's own Hugging Face card. Quoted here, not re-measured. The FinBERT row is that card's independent reproduction of the public FinBERT checkpoint, not FinBERT's self-reported number.

Run it

Transformers
from transformers import pipeline

clf = pipeline(
    "text-classification",
    model="AnkitAI/distilbert-base-uncased-financial-news-sentiment-analysis",
)
clf("The company's quarterly earnings surpassed all estimates.")
# [{'label': 'positive', 'score': 0.99}]

Try others

Where to get it

Base model
distilbert/distilbert-base-uncased
Training data
Financial PhraseBank (sentences_50agree, 4,846 sentences)