YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
GLiClass Adverse Risk Scorer
A fine-tuned GLiClass Edge V3.0 model that produces continuous 0โ1 adverse-salience scores for 13 risk factors mentioned in earnings-call transcripts. Given a passage of text, the model outputs a score for each risk category reflecting how prominently that adverse factor is discussed โ not a binary present/absent classification. No fixed label set is baked in at inference time, so it retains GLiClass's zero-shot flexibility.
Model Details
| Base model | knowledgator/gliclass-edge-v3.0 |
| Encoder | ModernBERT 32M (jhu-clsp/ettin-encoder-32m) |
| Architecture | GLiClass uni-encoder with MLP scorer |
| Parameters | ~32M (125 MB safetensors) |
| Output | Continuous scores (0โ1) per risk factor |
| Max sequence length | 8 192 tokens |
| Training method | LoRA (r=64, ฮฑ=128) on the encoder |
| Training data | Earnings-call excerpts soft-labeled by GPT 4.1 mini |
| Loss | Focal loss (ฮฑ=0.7, ฮณ=2.0) |
Labels
The model was trained on these 13 risk/headwind categories:
| # | Label |
|---|---|
| 1 | Climate Risk |
| 2 | Demand Risk |
| 3 | Economic Policy |
| 4 | Equity Market Volatility |
| 5 | Financial Risk |
| 6 | Geopolitical Risk |
| 7 | Inflation Risk |
| 8 | Labor Risk |
| 9 | Monetary Policy |
| 10 | Oil Risk |
| 11 | Political Risk |
| 12 | Supply Chain Risk |
| 13 | Trade Policy |
Quickstart
Installation
pip install gliclass transformers torch
Inference
from gliclass import GLiClassModel, ZeroShotClassificationPipeline
from transformers import AutoTokenizer
# Load model and tokenizer
model = GLiClassModel.from_pretrained("./gliclass_adverse_model")
tokenizer = AutoTokenizer.from_pretrained("./gliclass_adverse_model")
pipeline = ZeroShotClassificationPipeline(
model, tokenizer,
classification_type="multi-label",
device="cpu", # or "cuda:0"
)
# All 13 risk labels
labels = [
"Climate Risk", "Demand Risk", "Economic Policy",
"Equity Market Volatility", "Financial Risk", "Geopolitical Risk",
"Inflation Risk", "Labor Risk", "Monetary Policy", "Oil Risk",
"Political Risk", "Supply Chain Risk", "Trade Policy",
]
text = (
"Our operations in the region face growing uncertainty following "
"the escalation of the conflict in the Middle East. We suspended "
"shipments through the Suez Canal and rerouted through the Cape "
"of Good Hope, adding 12 days and significant fuel cost to each "
"voyage. Sanctions on several of our former trading partners "
"further limited our sourcing options."
)
results = pipeline([text], labels, threshold=0.0)
# Sort by score descending
sorted_results = sorted(results[0], key=lambda x: x["score"], reverse=True)
for pred in sorted_results:
print(f" {pred['label']:30s} {pred['score']:.3f}")
Expected output:
Geopolitical Risk 0.799
Political Risk 0.455
Supply Chain Risk 0.333
Demand Risk 0.283
Economic Policy 0.194
Financial Risk 0.167
Equity Market Volatility 0.118
Trade Policy 0.112
Labor Risk 0.101
Inflation Risk 0.095
Climate Risk 0.081
Oil Risk 0.080
Monetary Policy 0.061
Scores are continuous โ higher means the risk factor is more adversely salient in the passage. Use them directly as exposure measures rather than thresholding into binary labels.
Batch inference
texts = ["...", "...", "..."] # list of passages
batch_results = pipeline(texts, labels, threshold=0.0)
# batch_results[i] โ list of {label, score} dicts for texts[i]
Evaluation
Evaluated on a held-out 10% split (1 267 examples, seed 42) against the GPT 4.1 mini soft-label ground truth:
| Metric | Value |
|---|---|
| MAE | 0.061 |
| RMSE | 0.110 |
| MAE (median) | 0.034 |
| MAE (p90) | 0.091 |
| MAE (p95) | 0.243 |
Per-topic MAE
| Topic | MAE | RMSE | |---|---|---|---|---| | Climate Risk | 0.035 | 0.052 | | Demand Risk | 0.084 | 0.161 | | Economic Policy | 0.083 | 0.106 | | Equity Market Volatility | 0.057 | 0.086 | | Financial Risk | 0.050 | 0.079 | | Geopolitical Risk | 0.050 | 0.106 | | Inflation Risk | 0.078 | 0.166 | | Labor Risk | 0.060 | 0.103 | | Monetary Policy | 0.058 | 0.086 | | Oil Risk | 0.049 | 0.096 | | Political Risk | 0.061 | 0.098 | | Supply Chain Risk | 0.069 | 0.126 | | Trade Policy | 0.058 | 0.115 |
Limitations
- Domain-specific โ trained on earnings-call transcripts; may underperform on other financial text genres (e.g. 10-K filings, news articles) without further tuning.
- Soft-label teacher โ ground truth comes from GPT 4.1 mini, so the model inherits any systematic biases of the teacher.
- Imbalanced topics โ some categories (Climate Risk: 34 positives, Equity Market Volatility: 63) are rare in the training set; expect noisier predictions there.
Citation
If you use this model, please cite the paper it was developed for and the underlying GLiClass framework:
@article{renault2025measuring,
title = {Measuring Directional Firm-level Exposures Using Transformers and Large Language Models},
author = {Thomas Renault and Thomas Rigou},
year = {2025},
}
@misc{gliclass,
title = {GLiClass: Generalist and Lightweight Model for Zero-Shot Classification},
author = {Knowledgator},
year = {2024},
url = {https://github.com/knowledgator/GLiClass}
}
- Downloads last month
- 12