Dedicated Endpoints

Run this model inference on single tenant GPU with unmatched speed and reliability at scale.

Learn more
Container

Run this model inference with full control and performance in your environment.

Learn more

Get help setting up a custom Dedicated Endpoints.

Talk with our engineer to get a quote for reserved GPU instances with discounts.

README

License: apache-2.0

Changelog

  • v1.2.0: Multilingual upgrade. Extends coverage to 94 languages while holding English performance flat, and adds currency / G10-geography coverage.
  • v1.1.0: English financial-sentiment model trained on real-world Nosible Search Feeds.

financial-sentiment-v1.2-base is a financial sentiment classification model built to determine whether a short text snippet describes an event likely to have a positive, neutral, or negative financial impact. It is fine-tuned from Qwen3-0.6B-Base and reframes sentiment classification as instruction following, producing a single label token per input.

This is the multilingual successor to financial-sentiment-v1.1-base. v1.1 was trained primarily on English; v1.2 extends the same task to 94 languages (English plus 93 additional languages) so the model can classify financial sentiment on text as it appears across global news and search feeds.

What's new in v1.2

  • Multilingual coverage. The training corpus extends the English Financial Sentiment data with faithful translations across 93 additional languages, where the financial-sentiment label is preserved through translation (a financially negative snippet stays negative, etc.).
  • Wider topic coverage. v1.2 adds currency and G10-geography feeds, improving sentiment classification on currency- and country / region-focused text, not just company news.
  • English held flat. v1.2 is a multilingual extension, not an English re-train. English accuracy and macro-F1 are unchanged within run noise (see below).
  • The multilingual gap roughly halved. On the held-out validation set, the English-vs-multilingual accuracy gap shrinks from ~11.0pp (v1.1) to ~4.8pp (v1.2).

Performance overview

All numbers below are measured on the live SGLang endpoint (OpenAI-compatible chat-completions, enable_thinking=False, temperature=0), scored against the same held-out validation splits for both models. Deltas are in percentage points (pp).

Headline

SlicenMetricv1.1v1.2Δ
English val20,000Accuracy87.70%87.97%+0.27pp
English val20,000Macro-F187.95%88.22%+0.27pp
Multilingual val19,194Accuracy76.69%83.16%+6.47pp
Multilingual val19,194Macro-F176.90%83.27%+6.37pp
Currency / geo feeds4,012Accuracy67.30%76.17%+8.87pp
Currency / geo feeds4,012Macro-F167.44%75.69%+8.25pp

English is held flat while multilingual accuracy improves by +6.47pp and the currency / geography feeds improve by +8.87pp.

Selected languages (largest validation slices)

Languagenv1.1 accv1.2 accΔ acc
German (de)1,59782.22%87.16%+4.94pp
Japanese (ja)1,50880.17%85.08%+4.91pp
Spanish (es)1,26382.82%86.54%+3.72pp
Russian (ru)1,68683.75%86.89%+3.14pp
French (fr)1,23384.18%86.94%+2.76pp
Portuguese (pt)73082.60%85.07%+2.47pp
Italian (it)67385.14%87.37%+2.23pp
Chinese (zh)1,38384.24%86.12%+1.88pp
Polish (pl)59478.45%85.35%+6.90pp
Dutch (nl)51177.89%83.56%+5.67pp

The gains are largest on lower-resource languages, where v1.1 tended to collapse to the dominant class. For example, accuracy rises on Tamil (40.35% → 73.68%), Hausa (39.39% → 65.66%), and Swahili (44.74% → 63.16%), with even larger macro-F1 improvements as the model recovers per-class signal.

Strict Usage Requirements

[!CAUTION]

  1. Disable Thinking: You must set enable_thinking=False (or disable reasoning tokens).
  2. Exact System Prompt: You must use the specific system prompt: "Classify the financial sentiment as positive, neutral, or negative."
  3. Constrain Output: You must restrict generation to the valid labels (["positive", "neutral", "negative"]) using grammars, regex, or guided decoding.
    • SGLang: Use regex="(positive|neutral|negative)" in the API call.
    • vLLM: Use guided_choice=["positive", "negative", "neutral"] in the API call.
    • llama.cpp / GGUF: Apply a GBNF grammar or regex to force selection from the list.

Deviating from these requirements will severely impact performance and reliability.

Quickstart (local GPU)

Since this model was trained as a Causal LM using specific chat templates, you must use apply_chat_template with the exact system prompt used during training.

python

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "NOSIBLE/financial-sentiment-v1.2-base"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
trust_remote_code=True,
torch_dtype=torch.bfloat16,
)
# Multilingual input is supported (94 languages).
text = "La empresa reportó un margen de beneficio récord del 15% este trimestre."
# 1. Structure the prompt exactly as used in training
messages = [
{"role": "system", "content": "Classify the financial sentiment as positive, neutral, or negative."},
{"role": "user", "content": text},
]
# 2. Apply chat template (thinking MUST be disabled)
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False,
)
inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
# 3. Generate the label (only a single token is expected)
outputs = model.generate(**inputs, max_new_tokens=1)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response.split("<|im_start|>assistant\n")[-1])
# Expected Output: positive

Deployment

For production we recommend serving with SGLang (sglang>=0.4.6.post1), which exposes an OpenAI-compatible API endpoint. The model is based on Qwen3-0.6B and can be deployed anywhere Qwen3-0.6B can.

Launch the server:

shell

python3 -m sglang.launch_server --model-path NOSIBLE/financial-sentiment-v1.2-base --dtype bfloat16 --host 0.0.0.0 --port 8080

Call the endpoint using the OpenAI-compatible client. Requesting logprobs lets you read a calibrated confidence for each label.

python

import math
from openai import OpenAI
# OpenAI-compatible client pointed at your SGLang server (set base_url to your
# endpoint URL if remote). The request shape mirrors signals_deploy_v12.predict_one.
client = OpenAI(base_url="http://localhost:8080/v1", api_key="EMPTY")
model_id = "NOSIBLE/financial-sentiment-v1.2-base"
# Multilingual input is supported.
text = "La empresa reportó un margen de beneficio récord del 15% este trimestre."
messages = [
{"role": "system", "content": "Classify the financial sentiment as positive, neutral, or negative."},
{"role": "user", "content": text},
]
completion = client.chat.completions.create(
model=model_id,
messages=messages,
temperature=0,
stream=False,
logprobs=True,
top_logprobs=3,
extra_body={"chat_template_kwargs": {"enable_thinking": False}}, # Must be set to false.
)
# The top-1 token is the predicted label; the full top_logprobs slice gives a
# per-label confidence.
top = completion.choices[0].logprobs.content[0].top_logprobs
print(f"Input: {text}")
print(f"Predicted Label: {top[0].token.strip()}")
print("--- Label Confidence ---")
for lp in top:
print(f"Token: {lp.token.strip()!r} | Probability: {math.exp(lp.logprob):.2%}")

Expected Output

text

Input: La empresa reportó un margen de beneficio récord del 15% este trimestre.
Predicted Label: positive
--- Label Confidence ---
Token: 'positive' | Probability: 99.87%
Token: 'neutral' | Probability: 0.11%
Token: 'negative' | Probability: 0.02%

Legal Notice: This model is a modification of the Qwen3-0.6B model. In compliance with the Apache 2.0 license, we retain all original copyright notices and provide this modification under the same license terms.

Limitations

  • Parameter Size (0.6B): As a small language model, it is designed for fast, specific classification and may struggle with highly nuanced or ambiguous text that requires extensive world knowledge.
  • Per-language quality varies. Accuracy on the highest-resource languages approaches the English baseline; lower-resource languages remain below it despite the large v1.2 improvements.
  • Domain Specificity: The model is fine-tuned on financial contexts. It is not suitable for general sentiment analysis (e.g. product reviews).
  • Not aspect-based: The model returns a single, blunt sentiment for the snippet as a whole. It does not perform aspect-based sentiment analysis — it will not attribute different sentiments to different entities, companies, or aspects mentioned in the same text.
  • Factuality: The model analyzes the sentiment of the text provided; it does not verify the factual accuracy of any figures, dates, or claims within it.

Disclaimer

  • Not Financial Advice: The outputs of this model should not be interpreted as financial advice, investment recommendations, or an endorsement of any financial instrument or asset.
  • Risk: Financial markets are inherently volatile and risky. Never make investment decisions based solely on the output of an AI model. Always consult with a qualified financial professional.

Team & Credits

This model was developed and maintained by the following team:

Citation

If you use this model, please cite it as follows:

bibtex

@misc{nosible2025financialsentimentv12,
author = {NOSIBLE},
title = {Financial Sentiment v1.2 Base},
year = {2025},
publisher = {Hugging Face},
journal = {Hugging Face Repository},
howpublished = {https://huggingface.co/NOSIBLE/financial-sentiment-v1.2-base}
}

Full language breakdown

v1.1 was trained on English only; v1.2 adds the 93 languages below (94 total with English). The figures are the training-time evaluation per language and reproduce on the served SGLang endpoint to within ~0.2pp. Deltas are in percentage points (pp), sorted by validation row count.

Languagenv1.1 accv1.2 accΔ accv1.1 F1v1.2 F1Δ F1
Russian (ru)1,68683.63%86.83%+3.20pp83.91%86.88%+2.97pp
German (de)1,59782.15%87.16%+5.01pp82.25%87.50%+5.25pp
Japanese (ja)1,50780.36%85.14%+4.78pp80.50%85.59%+5.09pp
Chinese (zh)1,38284.30%86.25%+1.95pp84.59%86.49%+1.90pp
Spanish (es)1,26382.90%86.38%+3.48pp82.91%86.57%+3.66pp
French (fr)1,23384.02%86.86%+2.84pp84.81%87.55%+2.74pp
Portuguese (pt)73082.60%85.21%+2.61pp82.96%85.58%+2.62pp
Italian (it)67385.44%87.37%+1.93pp85.54%87.75%+2.21pp
Polish (pl)59478.45%85.52%+7.07pp78.61%85.37%+6.76pp
Dutch (nl)51178.28%83.76%+5.48pp79.13%84.28%+5.15pp
Turkish (tr)39379.13%81.93%+2.80pp78.78%81.71%+2.93pp
Indonesian (id)38380.94%86.42%+5.48pp80.99%86.62%+5.63pp
Vietnamese (vi)36683.06%82.51%-0.55pp83.82%82.83%-0.99pp
Czech (cs)33178.55%84.59%+6.04pp78.62%84.18%+5.56pp
Korean (ko)29180.41%84.54%+4.13pp81.46%85.04%+3.58pp
Arabic (ar)28878.82%82.29%+3.47pp77.98%82.15%+4.17pp
Ukrainian (uk)24779.76%84.21%+4.45pp80.32%84.52%+4.20pp
Swedish (sv)22881.14%84.65%+3.51pp80.61%84.71%+4.10pp
Romanian (ro)22778.85%84.58%+5.73pp79.82%85.19%+5.37pp
Hindi (hi)19068.42%80.53%+12.11pp66.87%80.80%+13.93pp
Greek (el)18767.91%77.54%+9.63pp64.64%76.79%+12.15pp
Hungarian (hu)17872.47%81.46%+8.99pp72.05%81.06%+9.01pp
Thai (th)17875.84%87.64%+11.80pp77.31%88.06%+10.75pp
Danish (da)17779.66%84.75%+5.09pp78.53%83.92%+5.39pp
Bengali (bn)14562.07%75.86%+13.79pp57.80%75.14%+17.34pp
Slovak (sk)14576.55%81.38%+4.83pp75.76%81.08%+5.32pp
Malay (ms)14381.12%83.22%+2.10pp81.49%83.97%+2.48pp
Persian (fa)13675.74%79.41%+3.67pp74.98%79.14%+4.16pp
Finnish (fi)13664.71%79.41%+14.70pp62.60%79.55%+16.95pp
Urdu (ur)12171.07%76.03%+4.96pp68.50%73.49%+4.99pp
Norwegian (no)11576.52%82.61%+6.09pp77.06%82.95%+5.89pp
Swahili (sw)11444.74%62.28%+17.54pp28.99%61.13%+32.14pp
Tamil (ta)11440.35%73.68%+33.33pp31.49%72.14%+40.65pp
Serbian (sr)11383.19%86.73%+3.54pp83.84%87.42%+3.58pp
Hebrew (he)11077.27%82.73%+5.46pp76.88%82.95%+6.07pp
Marathi (mr)11050.00%80.00%+30.00pp48.89%79.98%+31.09pp
Bulgarian (bg)10884.26%87.96%+3.70pp83.11%86.97%+3.86pp
Punjabi (pa)10755.14%75.70%+20.56pp51.59%74.99%+23.40pp
Telugu (te)10342.72%80.58%+37.86pp32.33%80.19%+47.86pp
Hausa (ha)9939.39%64.65%+25.26pp25.76%63.19%+37.43pp
Tagalog (tl)9973.74%77.78%+4.04pp72.53%77.42%+4.89pp
Gujarati (gu)9853.06%78.57%+25.51pp46.11%75.81%+29.70pp
Kannada (kn)9251.09%72.83%+21.74pp38.24%72.06%+33.82pp
Croatian (hr)9076.67%81.11%+4.44pp73.00%80.94%+7.94pp
Azerbaijani (az)8869.32%75.00%+5.68pp60.86%71.82%+10.96pp
Pashto (ps)8845.45%69.32%+23.87pp34.32%68.89%+34.57pp
Malayalam (ml)8647.67%72.09%+24.42pp38.68%72.09%+33.41pp
Nepali (ne)8464.29%76.19%+11.90pp62.22%76.41%+14.19pp
Uzbek (uz)8454.76%73.81%+19.05pp48.65%73.47%+24.82pp
Burmese (my)8348.19%69.88%+21.69pp36.83%70.75%+33.92pp
Odia (or)8243.90%69.51%+25.61pp32.05%68.73%+36.68pp
Amharic (am)7742.86%66.23%+23.37pp23.46%59.46%+36.00pp
Kazakh (kk)7757.14%79.22%+22.08pp50.37%78.74%+28.37pp
Somali (so)7753.25%51.95%-1.30pp33.35%50.88%+17.53pp
Sindhi (sd)7565.33%69.33%+4.00pp63.63%67.47%+3.84pp
Lithuanian (lt)7363.01%71.23%+8.22pp58.04%69.78%+11.74pp
Sinhala (si)6940.58%52.17%+11.59pp23.58%45.35%+21.77pp
Assamese (as)6657.58%80.30%+22.72pp54.79%79.92%+25.13pp
Khmer (km)6663.64%69.70%+6.06pp57.87%67.45%+9.58pp
Slovenian (sl)6669.70%77.27%+7.57pp63.82%73.55%+9.73pp
Afrikaans (af)6473.44%84.38%+10.94pp73.38%84.64%+11.26pp
Armenian (hy)5657.14%67.86%+10.72pp51.87%66.44%+14.57pp
Kyrgyz (ky)4843.75%77.08%+33.33pp39.29%77.76%+38.47pp
Latvian (lv)4862.50%75.00%+12.50pp56.46%74.84%+18.38pp
Mongolian (mn)4647.83%78.26%+30.43pp31.94%75.92%+43.98pp
Lao (lo)4468.18%70.45%+2.27pp68.80%68.63%-0.17pp
Georgian (ka)4141.46%75.61%+34.15pp37.59%71.54%+33.95pp
Sanskrit (sa)2268.18%81.82%+13.64pp65.56%78.89%+13.33pp
Catalan (ca)2161.90%85.71%+23.81pp63.83%86.25%+22.42pp
Bosnian (bs)2075.00%85.00%+10.00pp74.64%83.87%+9.23pp
Irish (ga)2035.00%55.00%+20.00pp17.28%54.43%+37.15pp
Malagasy (mg)2050.00%75.00%+25.00pp29.76%73.26%+43.50pp
Welsh (cy)1936.84%78.95%+42.11pp23.33%76.67%+53.34pp
Macedonian (mk)1989.47%89.47%+0.00pp91.07%91.07%+0.00pp
Belarusian (be)1861.11%72.22%+11.11pp54.56%64.59%+10.03pp
Basque (eu)1833.33%72.22%+38.89pp16.67%71.39%+54.72pp
Latin (la)1855.56%88.89%+33.33pp37.78%81.75%+43.97pp
Serbo-Croatian (sh)1883.33%88.89%+5.56pp82.44%88.97%+6.53pp
Yiddish (yi)1844.44%33.33%-11.11pp20.51%42.91%+22.40pp
Scottish Gaelic (gd)1752.94%58.82%+5.88pp23.08%55.58%+32.50pp
Galician (gl)1782.35%88.24%+5.89pp81.10%84.72%+3.62pp
Icelandic (is)1747.06%64.71%+17.65pp34.21%47.22%+13.01pp
Oromo (om)1741.18%58.82%+17.64pp19.44%53.53%+34.09pp
Xhosa (xh)1735.29%47.06%+11.77pp17.39%33.33%+15.94pp
Breton (br)1637.50%68.75%+31.25pp35.56%70.56%+35.00pp
Estonian (et)1668.75%62.50%-6.25pp67.97%63.57%-4.40pp
Western Frisian (fy)1668.75%62.50%-6.25pp68.81%62.63%-6.18pp
Javanese (jv)1681.25%87.50%+6.25pp77.46%82.37%+4.91pp
Kurdish (ku)1668.75%75.00%+6.25pp47.62%82.14%+34.52pp
Albanian (sq)1668.75%81.25%+12.50pp60.00%80.94%+20.94pp
Sundanese (su)1668.75%68.75%+0.00pp71.31%72.03%+0.72pp
Uyghur (ug)1650.00%68.75%+18.75pp22.22%48.81%+26.59pp
Esperanto (eo)1593.33%66.67%-26.66pp91.58%67.74%-23.84pp

Model provider

NOSIBLE

Model tree

Base

Qwen/Qwen3-0.6B-Base

Fine-tuned

this model

Modalities

Input

Text

Output

Text

Pricing

Dedicated Endpoints

View details

Supported Functionality

Model APIs

Dedicated Endpoints

Container

More information

Explore FriendliAI today