a ki-bekko koi with a propeller tail

Propella-bekko-static

propella-1 is a family of document annotators from ellamind. Given a document, a propella-1 model returns 18 properties of it — how complete and readable it is, how dense, educational or safe, what kind of document it is, which business sector and region it belongs to — as JSON, without a task-specific prompt.

Propella-bekko-static distils the largest of them, propella-1-4b, into a model small enough to run over whole corpora: the same 17 properties, predicted in one forward pass, without generating text. It has 206M parameters and annotates 296 documents per second on one RTX A6000.

annotation quality against throughput, against two independent annotators

Agreement with two annotators that are not the teacher — DeepSeek-V4.1-Flash on the left, GLM-5.3-Flash on the right — against throughput. Both were asked to annotate the same 300 held-out documents with propella's own prompt and schema.

What it predicts

Propella-bekko-static predicts 17 of propella-1's 18 properties — everything except the free-text one_sentence_description — with one head per property. The label names are propella-1's own, so an annotation from this model and one from propella-1 can be read side by side without a mapping.

category property type what it means
Core content content_integrity ordinal, 4 completeness and technical quality of the content
content_ratio ordinal, 5 proportion of content vs. navigation and boilerplate
content_length ordinal, 4 amount of substantive content
Classification content_type multi-label, 18 functional purpose of the document
business_sector multi-label, 37 industry relevance
technical_content multi-label, 7 kind and intensity of specialised knowledge
Quality and value content_quality ordinal, 5 overall writing and presentation quality
information_density ordinal, 5 valuable information relative to redundancy
educational_value ordinal, 5 potential for teaching and learning
reasoning_indicators ordinal, 5 presence of logical reasoning and analysis
Audience and purpose audience_level ordinal, 6 target sophistication level
commercial_bias ordinal, 5 commercial influence on objectivity
time_sensitivity ordinal, 4 how quickly the value of the content decays
Safety and compliance content_safety ordinal, 5 presence of inappropriate or harmful content
pii_presence binary contains personally identifiable information
Geography regional_relevance multi-label, 14 primary regional and cultural context
country_relevance multi-label, 65 specific country relevance — the 64 countries seen most often in training, plus other

country_relevance is open vocabulary: propella-1 accepts any country. In our 845k training documents 749 different values occur, of which the 64 most frequent carry 96% of the annotated countries, so this model predicts those 64 plus other — 65 values. A country outside the 64 comes back as other, which is how the property narrows in practice — the numbers behind that cut are in docs/coverage.md.

What each level means — and the rubric the annotators were given — is in the property reference: propella-1's own definitions, reproduced here so they stay online with the model.

Architecture

  • Backbone: bekko-static-embedding-v1 — static token embeddings pooled into one document vector, no attention
  • Heads: one per property, softmax for single-select and sigmoid for multi-select, with no cross-property conditioning — the properties are predicted independently from one shared document state.
  • Input: 8,192 tokens of the document head plus 512 tokens of its tail, so the end of a long document is not lost; document-level length features are passed to the heads.
  • Decoding: ordinal properties are decoded to the expected level (round(Σ p_i · rank_i)) rather than by argmax, which is worth about +0.013 QWK on its own.

Training

Propella-bekko-static was trained on propella-1-4b labels derived from the Dynaword corpora, FineWeb-2 and FinePDFs: 844,912 documents in 17 languages — Danish, Norwegian, Swedish, Icelandic, Faroese, Dutch, German, English, French, Spanish, Italian, Portuguese, Romanian, Polish, Czech, Hungarian and Finnish. Training took 13 minutes on one Quadro RTX 8000 (3 epochs, 262,144 tokens per batch), with a cross-entropy objective for the single-select properties, binary cross-entropy for the multi-select ones and a token-level F1 loss for PII. The annotations are published in propella-bekko-data and the training code in propella-bekko.

Results

As a held-out test, we measure agreement with DeepSeek-V4.1-Flash and GLM-5.3-Flash annotations on the same 300 held-out documents and report macro-F1 across all properties. Throughput is documents per second on one RTX A6000, bf16 for every model including the propella-1 baselines; chance — always predicting the most frequent label — is 0.123.

model params docs/s vs DeepSeek vs GLM-5.3
propella-bekko-a25m 123M 188 0.519 0.510
propella-bekko-a8m 106M 248 0.489 0.479
propella-bekko-static 206M 296 0.479 0.468
propella-1-0.6b 600M 2.73 0.501 0.500
propella-1-1.7b 1.7B 2.11 0.548 0.535
propella-1-4b 4B 1.00 0.571 0.544
DeepSeek-V4.1-Flash — — — 0.659
GLM-5.3-Flash — — 0.659 —

Where that single number comes from, property by property: this model's agreement with each reference annotator on the same 300 documents (DeepSeek-V4.1-Flash on the left, GLM-5.3-Flash on the right), next to propella-1-4b's own on those documents.

per-property macro-F1 of this model against DeepSeek-V4.1-Flash and GLM-5.3-Flash, with propella-1-4b on the same documents

Against DeepSeek-V4.1-Flash the distance to the teacher sits mostly in three properties — commercial_bias (−0.33), country_relevance (−0.20), content_integrity (−0.18) — with a mean gap of +0.09; 2 of 17 properties are at or above propella-1-4b's own score (audience_level, content_ratio). Against GLM-5.3-Flash it is closer: mean gap +0.08, 1 of 17 at or above.

content_safety sits at the no-signal floor for both models here: on these documents it is almost always "safe", so the property says little in this comparison.

Usage

from transformers import AutoModel, AutoTokenizer

repo = "danish-foundation-models/propella-bekko-static"
tokenizer = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model = AutoModel.from_pretrained(repo, trust_remote_code=True).eval()

print(model.annotate(tokenizer, ["a document"]))

annotate takes a document or a list of them and returns propella-style dicts, one per document: single-select properties as their label name, multi-select ones as a list of label names. trust_remote_code=True runs modeling_propella_bekko.py, the modeling file shipped in this repository — the same code as in the training repository, where the model is also importable as propella_bekko.PropellaBekko with a batched Annotator for whole corpora.

On the full document — a Dutch government report on making neighbourhoods gas-free — the model answers:

{
    "content_integrity": "complete",
    "content_ratio": "complete_content",
    "content_length": "substantial",
    "content_type": [
        "analytical",
        "technical_documentation"
    ],
    "business_sector": [
        "government_public",
        "energy_utilities"
    ],
    "technical_content": [
        "scientific",
        "data_heavy",
        "engineering"
    ],
    "content_quality": "excellent",
    "information_density": "dense",
    "educational_value": "moderate",
    "reasoning_indicators": "analytical",
    "audience_level": "expert",
    "commercial_bias": "none",
    "time_sensitivity": "slowly_changing",
    "content_safety": "safe",
    "pii_presence": "no_pii",
    "regional_relevance": [
        "european"
    ],
    "country_relevance": [
        "netherlands"
    ]
}

Multi-select properties are decoded at a sigmoid threshold of 0.5.

For a whole corpus, the batched equivalent is propella_bekko.Annotator in the training package — the same forward pass over length-bucketed batches, several times the throughput of one document at a time.

Citation

The model and the code are MIT. If you use this model, please cite the Dynaword paper (arXiv:2508.02271) and the project:

@inproceedings{dynaword,
    title = {Dynaword: {From} {One}-shot to {Continuously} {Developed} {Datasets}},
    booktitle = {Proceedings of the {Language} {Resources} and {Evaluation} {Conference} ({LREC} 2026)},
    author = {Enevoldsen, Kenneth and Jensen, Kristian Nørgaard and Kostkan, Jan and Szabó, Balázs and Kardos, Márton and Vad, Kirsten and Núñez, Andrea Blasi and Barmina, Gianluca and Nielsen, Jacob and Larsen, Rasmus and Vahlstrup, Peter and Dalum, Per Møldrup and Elliott, Desmond and Galke, Lukas and Schneider-Kamp, Peter and Nielbo, Kristoffer},
    year = {2026},
}
@misc{enevoldsenDanishFoundationModels2023,
    title = {Danish {Foundation} {Models}},
    url = {http://arxiv.org/abs/2311.07264},
    publisher = {arXiv},
    author = {Enevoldsen, Kenneth and Hansen, Lasse and Nielsen, Dan S. and Egebæk, Rasmus A. F. and Holm, Søren V. and Nielsen, Martin C. and Bernstorff, Martin and Larsen, Rasmus and Jørgensen, Peter B. and Højmark-Bertelsen, Malte and Vahlstrup, Peter B. and Møldrup-Dalum, Per and Nielbo, Kristoffer},
    year = {2023},
}

A Danish Foundation Models model

Downloads last month
135
Safetensors
Model size
0.2B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including danish-foundation-models/propella-bekko-static

Papers for danish-foundation-models/propella-bekko-static