binomial-marks
Binomial's earnings-call NLP scorer — 23 structured signals per transcript, in ~50ms on CPU.
Part of Binomial AI Research's specialist zoo — small, deployable models for quantitative finance. Named after Howard Marks (Oaktree), whose memos parse market sentiment and tone.
Model card: BinomialTechnologies/binomial-marks-1.
Install
pip install binomial-marks
Pulls in torch, transformers>=4.48, huggingface-hub. Weights (~1.6 GB) are downloaded
from HuggingFace on first use.
One-shot
from binomial_marks import score
result = score(
transcript="Operator: Welcome to NVIDIA's Q4 2025 earnings call...",
ticker="NVDA", sector="Technology", country="US",
year=2025, quarter=4,
)
Returns:
{
"topics": {
"guidance": {"mentioned": True, "mention_prob": 0.94, "score": 1.7},
"revenue_growth": {"mentioned": True, "mention_prob": 0.97, "score": 1.5},
"margins": {"mentioned": True, "mention_prob": 0.91, "score": 0.8},
# ... 7 more topics
},
"mgmt_confidence": 4.6, # 1 = uncertain "we hope" → 5 = "we will deliver X"
"mgmt_defensiveness": 1.4, # 1 = open Q&A → 5 = pivots, refuses to commit
"analyst_skepticism": 1.8, # 1 = congratulatory → 5 = re-asking same question
}
Batched
from binomial_marks import MarksScorer
scorer = MarksScorer() # loads model once
results = scorer.score_batch([
{"transcript": "...", "ticker": "NVDA", "sector": "Technology", "year": 2025, "quarter": 4},
{"transcript": "...", "ticker": "AAPL", "sector": "Technology", "year": 2025, "quarter": 1},
])
Configuration
MarksScorer(
model_id="BinomialTechnologies/binomial-marks-1", # or local path / pinned version
device="cuda", # auto-detect: cuda > mps > cpu
dtype=torch.bfloat16, # default: bf16 on GPU, fp32 on CPU
max_length=16384, # tokenizer truncation cap
mention_threshold=0.5, # sigmoid threshold for the topic_mentioned heads
)
What it returns
10 topic-direction scores (each: was the topic discussed? if so, what direction in [-2, +2]?):
| Topic | What −2 / +2 mean |
|---|---|
guidance |
lowered hard / raised significantly |
revenue_growth |
decelerating / accelerating |
margins |
compressing / expanding |
demand |
softening / strong |
buybacks |
paused or reduced / new or upsized |
dividends |
cut or skipped / raised or initiated |
m_and_a |
divestiture / strategic acquisition |
headcount |
layoffs / aggressive hiring |
macro_exposure |
clear headwind / clear tailwind |
competition |
losing share / gaining share |
3 tone scores (1 to 5): mgmt_confidence, mgmt_defensiveness, analyst_skepticism.
When mentioned=False, score is forced to 0 — the topic wasn't discussed, so direction
is undefined.
Hardware
- CPU: ~50ms/call on a modern laptop.
- GPU: ~10ms/call on A100/H100/B200, ~12 calls/sec batched.
- Memory: ~1.6 GB weights, ~3 GB peak with a 16k-token context.
Limitations
The model card has the full picture. In short:
headcountis the weakest dimension (Spearman 0.39 vs. frontier — half the others).- Tone has rank-order signal but absolute levels drift; normalize cross-sectionally.
- English transcripts only.
- Truncates at 16,384 tokens (~50k characters; covers ~p99 of calls).
- Pure NLP scorer — outputs are features, not trades. The trading rule is yours.
License
Apache 2.0. If you build on this, a citation is appreciated.
Release files for binomial-marks 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| binomial_marks-0.1.2.tar.gz | 5.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| binomial_marks-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.9 kB
Release files / binomial_marks-0.1.2.tar.gz
| Download URL | binomial_marks-0.1.2.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a1fcfc5f936f43bd83cc241816dfcb61339d2287b8e4c5f135d78b6b293f5c04
|
|
BLAKE2b-256 checksum How to use checksums |
e0b40101f1edc3a9c1d0b1aa8012af4be4397050bc0bc27779b3f8713f44ecc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 27, 2026.
Transparency logRelease files / binomial_marks-0.1.2-py3-none-any.whl
| Download URL | binomial_marks-0.1.2-py3-none-any.whl |
|---|---|
| Size | 6.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb73a93d78cb407227584da21f4a701060d386ece0cf74b444ee567ea5663748
|
|
BLAKE2b-256 checksum How to use checksums |
e489c1eb062553ecd3a8f386bb77cd21bd821aff0e8de105eca92a56d697f069
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 27, 2026.
Transparency log