BioNERD's own typed relation-extraction model "C": microsoft/BiomedNLP-BiomedBERT-base-uncased-abstract-fulltext (MIT) fine-tuned on the BioRED Train split (public domain) as an entity-marker sequence classifier. No accuracy is claimed here. BioNERD shows its measured labels in the app's model catalog, each tied to this exact artefact.
Open-weight model · Text classification
finbert-crypto-stock-news-sentiment
by David Kurniawan HuangYiYang/finbert-crypto-stock-news-sentiment
finbert-crypto-stock-news-sentiment is an open-weight model for text classification from David Kurniawan, released under Apache License 2.0. It has 110M parameters and a 512-token context. At 16-bit it needs about 0.3 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index.
Classifies a news headline as positive, negative or neutral for holders of the asset it is filed under. Fine-tuned from ProsusAI/finbert on headlines filed under Bitcoin, gold (the GLD fund) and US stocks (the SPY fund). It describes the tone of the news.
Runs On
What it takes to serve finbert-crypto-stock-news-sentiment (110M parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.
| Precision | Weights | Memory needed | Cheapest setup | Per hour | Also fits |
|---|---|---|---|---|---|
| 16-bit | 0.2 GB | 0.3 GB | 1x MI300X (192 GB) Vultr |
$1.85 | 1x H100 $1.99 · 1x MI325X $2.00 |
| 8-bit | 0.1 GB | 0.1 GB | 1x MI300X (192 GB) Vultr |
$1.85 | 1x H100 $1.99 · 1x MI325X $2.00 |
| 4-bit | 0.1 GB | 0.1 GB | 1x MI300X (192 GB) Vultr |
$1.85 | 1x H100 $1.99 · 1x MI325X $2.00 |
Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Oct 18, 2026.
finbert-crypto-stock-news-sentiment on every accelerator the SAVRN Index prices, at every precision
Model Card
By David Kurniawan, published under apache-2.0, revision 15d274d4cf4c.
Classifies a news headline as positive, negative or neutral for holders of the asset it is filed under. Fine-tuned from ProsusAI/finbert on headlines filed under Bitcoin, gold (the GLD fund) and US stocks (the SPY fund). It describes the tone of the news. It does not forecast prices. Scored once on a held-out test set of 854 headlines from 2026-04-01 to 2026-10-14, after every choice had been made on validation data. The test set holds more positive and negative headlines than the news feed does, so the figures are shown as drawn and also re-weighted to the feed's natural mix. McNemar's exact test against the base model: p = 9e-77. On headlines where both the label and the prediction are…
Read David Kurniawan's full model card
FinBERT for crypto and stock news sentiment
Classifies a news headline as positive, negative or neutral for holders of the
asset it is filed under. Fine-tuned from ProsusAI/finbert
on headlines filed under Bitcoin, gold (the GLD fund) and US stocks (the SPY fund).
Internal version name: finbert-tone-2.
It describes the tone of the news. It does not forecast prices.
Results
Scored once on a held-out test set of 854 headlines from 2026-04-01 to 2026-10-14, after every choice had been made on validation data. The test set holds more positive and negative headlines than the news feed does, so the figures are shown as drawn and also re-weighted to the feed's natural mix.
| Accuracy | Macro-F1 | |
|---|---|---|
| This model | 84.0% | 0.826 |
| This model, re-weighted to the feed's mix | 93.4% | 0.841 |
| Base ProsusAI/finbert, no fine-tuning | 44.1% | 0.446 |
McNemar's exact test against the base model: p = 9e-77.
| Class | Precision | Recall | F1 | Headlines |
|---|---|---|---|---|
| positive | 68.2% | 95.5% | 0.796 | 155 |
| negative | 71.8% | 95.4% | 0.819 | 152 |
| neutral | 97.5% | 77.5% | 0.864 | 547 |
| Asset | Headlines | Accuracy | Macro-F1 |
|---|---|---|---|
| BTC/USD | 427 | 83.6% | 0.840 |
| SPY | 427 | 84.3% | 0.760 |
On headlines where both the label and the prediction are positive or negative, the model picks the same direction 99.0% of the time (296 headlines).
An earlier natural-mix test set of 826 headlines, already used to evaluate the previous version, gives accuracy 87.3% and macro-F1 0.814; because it was reused it is a secondary figure.
Training
- Method: LoRA r=16, lr=0.0001 with 10% linear warm-up, class-weighted cross-entropy, merged.
- Head: dense 768->256, ReLU, dropout 0.3, dense 256->3; set model.classifier to this before loading.
- Input: the headline, at most 128 tokens.
- Training window: 2015-01-02 to 2026-03-24; test window 2026-04-01 to 2026-10-14. Splits are in time order, never shuffled.
- Labels: written by language-model labellers (claude sonnet subagent, rubric v2, claude subagent, rubric v2) under a fixed written rubric, with agreement checks. The headlines themselves are not redistributed.
- Calibration: divide the logits by a temperature of 1.5 before the softmax.
Usage
The classifier head has two layers, which from_pretrained does not build by itself. Loaded
the usual way, the head would be new random weights and the scores meaningless, so put the
saved head back after loading:
import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoModelForSequenceClassification, AutoTokenizer
repo = "HuangYiYang/finbert-crypto-stock-news-sentiment"
tokenizer = AutoTokenizer.from_pretrained(repo)
model = AutoModelForSequenceClassification.from_pretrained(repo)
state = load_file(hf_hub_download(repo, "model.safetensors"))
hidden, width = state["classifier.0.weight"].shape
head = torch.nn.Sequential(
torch.nn.Linear(width, hidden), torch.nn.ReLU(), torch.nn.Dropout(0.0),
torch.nn.Linear(hidden, state["classifier.3.weight"].shape[0]),
)
prefix = "classifier."
head_state = {k.removeprefix(prefix): v for k, v in state.items() if k.startswith(prefix)}
head.load_state_dict(head_state)
model.classifier = head
model.eval()
text = "Bitcoin plunges 15% as exchange hack wipes out billions"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)
with torch.no_grad():
probs = (model(**inputs).logits / 1.5).softmax(-1)[0]
print({model.config.id2label[i]: round(float(p), 3) for i, p in enumerate(probs)})
Limitations
- Trained on three markets: Bitcoin, gold and US stocks. The test set covers Bitcoin and US stocks only: after removing headlines too similar to ones already labelled, gold had almost no headlines left in the test window, so gold has no separate test figure. Other assets and other kinds of text (articles, social posts) are untested.
- Much of the news filed under the gold fund is general market commentary, so it is labelled for the market it describes, not for gold.
- The base FinBERT was fine-tuned on Financial PhraseBank: full sentences about companies, labelled for investors. This model's inputs are short headlines, including crypto news and economic-data templates, labelled for holders of the asset they are filed under. The gap between the two is why the base model scores low here.
- English headlines only.
- Labels come from language-model labellers under a rubric, not from human annotators.
- The tone of a headline says nothing about where the price goes next.
Paper
A paper describing this model is in preparation; the arXiv link will be added here. Code: https://github.com/LouSens/RADAR.
Configuration
- Architecture
- BertForSequenceClassification
- Context length (tokens)
- 512
- Layers
- 12
- Hidden size
- 768
- Feed-forward size
- 3,072
- Attention heads
- 12
- Vocabulary size
- 30,522
- Model type
- bert
Identity and Version
- Repository
- HuangYiYang/finbert-crypto-stock-news-sentiment
- Publisher
- David Kurniawan
- Task
- Text classification
- Modality
- Text
- Library
- transformers
- Parameters
- 110M parameters
- Languages
- en
- Revision
- 15d274d4cf4c5293a429d78f2f48138d33c74168
- First published
- 2026-10-16
- Last updated
- 2026-10-16
Files and Weights
7 files, 439.5 MB in total. The weights are 1 file totalling 438.7 MB in safetensors.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| model.safetensors | Weights | 438.7 MB | a5d8477640ce |
| config.json | Configuration | 964 B | — |
| model_card.json | Configuration | 2.7 KB | — |
| README.md | Documentation | 5.2 KB | — |
| .gitattributes | Repository | 1.5 KB | — |
| tokenizer.json | Tokenizer | 711.6 KB | — |
| tokenizer_config.json | Tokenizer | 366 B | — |
License and Download
- License
- apache-2.0
- Access
- Open weights, no gate
- Download size
- 438.7 MB
Released by David Kurniawan through its official repository on Hugging Face. Read the license.
Built From
- Adapter of ProsusAI/finbert
- Derived from ProsusAI/finbert
Memory Requirements
| Precision | Weights in memory |
|---|---|
| As published | 438.7 MB |
| 16-bit | 0.2 GB |
| 8-bit | 0.1 GB |
| 4-bit | 0.1 GB |
Weights only, from the published parameter count; the key-value cache and runtime add to this.
Questions About finbert-crypto-stock-news-sentiment
How much GPU memory does finbert-crypto-stock-news-sentiment need?
About 0.3 GB at 16-bit and 0.1 GB at 4-bit: the weights (110M parameters) plus a working margin. A long context needs more.
What is the cheapest GPU to run finbert-crypto-stock-news-sentiment on?
At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.
Can I use finbert-crypto-stock-news-sentiment commercially?
Yes. finbert-crypto-stock-news-sentiment is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.
What is finbert-crypto-stock-news-sentiment's context length?
512 tokens, from the maximum position embeddings in its published configuration.
Similar Models
This model was fine-tuned on the AG News dataset (fancyzhx/agnews) for four-class news topic classification: The dataset was divided into 108,000 training examples, 12,000 validation examples, and 7,600 test examples. A random seed of 42 was used. This model is intended for English news topic classification into the four AG News categories: World, Sports, Business, and Sci/Tech. It was developed for educational purposes and experimentation with BERT adaptation methods. The model is trained on English news data and may not generalize well to other domains or languages. It only supports the four categories present in AG News. Performance on real-world data may differ from the reported…
Full fine-tuning of bert-base-uncased for 4-class news topic classification, delivered as part of assignment U2T01 (Adapting BERT for NLP tasks — Trends in Data Science, Unit 2, Universidad Politécnica de Yucatán). bert-base-uncased with a linear classification head on top of the [CLS] token's last hidden state, mapping to 4 topic classes: World, Sports, Business, Sci/Tech. - 10% of the official train split was held out as validation; the official test split was left untouched. - 4 balanced classes. Two adaptation methods were trained and compared; full fine-tuning is the delivered model, since it beat the feature-based baseline by a margin well above the run-to-run noise floor (±1–3 points…
This model is a fine-tuned version of bert-base-uncased on an unknown dataset. It achieves the following results on the evaluation set: The following hyperparameters were used during training: - learningrate: 5e-05 - trainbatchsize: 32 - evalbatchsize: 64 - lrschedulertype: linear - numepochs: 2 - Transformers 5.16.1 - Pytorch 2.11.0+cu128 - Datasets 4.8.5 - Tokenizers 0.23.1
FinBERT is a pre-trained NLP model to analyze sentiment of financial text. It is built by further training the BERT language model in the finance domain, using a large financial corpus and thereby fine-tuning it for financial sentiment classification. Financial PhraseBank by Malo et al. (2014) is used for fine-tuning. For more details, please see the paper FinBERT: Financial Sentiment Analysis with Pre-trained Language Models and our related blog post on Medium. The model will give softmax outputs for three labels: positive, negative or neutral. To get the scores for all three labels, pass topk=None to the classifier. This model was trained using the Financial PhraseBank dataset: The…
This is the model card of a transformers model that has been pushed on the Hub. Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. Use the code below to get started with the model. Carbon emissions can be estimated using the Machine Learning Impact calculator presented in Lacoste et al. (2019).
