Access to Intenter

Intenter is released for research, evaluation, internal validation and education. Tell us who you are and we will grant access.

By requesting access you agree to the Elda Community License 1.0: no commercial use, no redistribution of the weights or derivatives, and attribution as "Built with Elda". Commercial licensing is available on request.

Log in or Sign Up to review the conditions and access this model content.

Intenter — real-time Korean speech-act + entity extraction in a single pass

Intenter reads an utterance and returns, in one forward pass, four aligned channels: what the speaker is doing (speech act), what they are talking about (entities), and the attribute/predicate structure that binds them.

It is not a general-purpose NER model. It is the perception layer of a live conversational system, built for the one constraint that shapes everything else in that setting: latency budgets measured in tens of milliseconds.

"간판의 품격이라는 음식점이 있다며, 그 음식점은 어디에 있냐고"

  intent    QUESTION
  entity    간판의 품격 → ORGANIZATION
            음식점이   → ORGANIZATION
  signals   is_pure_negation=0 · is_claim=0 · polarity=0 · depends_on_prev=1

Why an encoder

Intenter typical small-LLM extraction
Parameters 281M 500M – 4B
Latency (single, incl. heads) p50 27.8 ms hundreds of ms
Latency (batch of 16) 118.5 ms seconds
Serving precision fp32 (2 workers, 6.1 GB GPU) varies
Output fixed contract, char offsets free text to be parsed

Measured on the production serving path (RTX 3060, fp32, heads attached).

A decoder can be prompted into this task and will be more flexible. It cannot be fast at it. When a dialogue turn has a 300 ms end-to-end budget and perception is one of five stages inside it, 27.8 ms is the difference between a design that works and one that does not.


Output contract

Four Global Pointer channels over one shared mDeBERTa-v3 backbone, plus four frozen binary-signal heads and five gap-fill heads.

channels     entity · intent · attribute · predicate     (span, char offsets)
entity types 17   ANIMAL · ARTIFACTS · CIVILIZATION · DATE · DURATION · EVENT ·
                  KNOWLEDGE · LOCATION · MATERIAL · ORGANIZATION · PERSONA ·
                  PHENOMENON · PLANT · QUANTITY · TERM · TIME · WORK
speech acts  17   DESCRIBE · NARRATE · RECALL · EVALUATE · EXPRESS_EMOTION ·
                  EXCLAIM · SOCIAL_RITUAL · REQUEST · COMMAND · INSTRUCT · OFFER ·
                  PROMISE · PLAN · ANNOUNCE · QUESTION · AGREE · DISAGREE
signals       4   is_pure_negation · is_claim · polarity · depends_on_prev

Spans follow a published convention (see below): particles stay outside the span, names are never split internally, and head nouns adjacent to a name are not folded in.

Entity subtypes are emitted on a best-effort basis. The subtype catalogue is not published; out-of-catalogue values can appear and downstream consumers are expected to treat subtype as advisory. Type is the deterministic axis.


Usage

The bundle is self-contained — weights, tokenizer, modelling code and the backbone configuration. Nothing further is fetched at load time.

import torch, json
from pathlib import Path
from transformers import AutoTokenizer

REPO = "Elda-AI/intenter"          # gated — request access first
from huggingface_hub import snapshot_download
d = Path(snapshot_download(REPO))

cfg = json.loads((d / "config.json").read_text())
tok = AutoTokenizer.from_pretrained(d)

# modeling_btrack_4ch*.py are included in the repo
import sys; sys.path.insert(0, str(d))
from modeling_btrack_4ch_w4 import UnifiedBTrack4

model = UnifiedBTrack4(cfg["base_model"]).float().eval()
model.load_state_dict(torch.load(d / "model.pt", map_location="cpu"))

# model.safetensors carries the same weights in the same dtype, if you prefer it:
# from safetensors.torch import load_file
# model.load_state_dict(load_file(d / "model.safetensors"))

Notes that matter in practice:

  • Serve in fp32. Dynamic INT8 quantisation is not supported for this architecture.
  • Do not strip the trailing ?. Punctuation carries signal; the model handles both punctuated and unpunctuated forms.
  • The five gap-fill heads only ever fill spans the base did not produce — base span output is unchanged by their presence.

How it was built

Four months of cycles, and the model is the smallest part of what came out of them.

The corpus is the asset. Training data is hand-curated and continuously audited — 38k sentences across Korean, English and Japanese, grown one narrow capability at a time rather than by bulk generation. Every addition is targeted at a weakness that was first measured, and the builder refuses to emit a file that repeats a failure pattern we have already named.

Every round is a regression test. A build ships only after it survives a standing battery of frozen held-out gates covering role nouns, referent expressions, possessive structure, occupational drift, organisation generalisation, safety-critical utterances and binary discourse signals. Gates are evaluated per surface, not summed — a total that rises while a single surface falls is treated as a regression and blocks the round.

Boundaries are a written contract. Span conventions are agreed across the teams that consume this model and versioned by content hash, so a change in compliance can always be attributed to the model or to the ruler, never left ambiguous.

Capabilities are added without disturbing what works. New behaviour is introduced through isolated, frozen-stage training so that existing detection and type outputs are unchanged by construction rather than by hope — then verified against held-out surfaces the model was never shown.

Selected measurements

Production build 42c7c248 (2026-09-24), measured on frozen held-out sets that are excluded from training by construction. Each row is a distinct capability axis; all of them are re-run on every build.

Role nouns — detection / typing (405 slots) 405 / 399
Occupational drift (56 cells) 56 / 56
Organisation generalisation (24 cells) 20 / 24, zero misses
Referent expressions, held out 23 · 23 · 22
Conversational-speech detection / safety floor 91.7 % · 12 / 12
Possessive structure (40 surfaces) 32 / 40
Discourse signals — false positives on short utterances 0 / 48
Discourse signals — polarity grid 24 / 24
Name-span probe, third-party ruler (126 sentences) exact 72, ORG 48, missing 0
Span-convention compliance, third-party ruler 67 / 126

The name-span probe and the convention compliance figure are produced by a separate team on their own infrastructure, from sentences this model has never been trained on.

Public benchmark — KLUE-NER (dev)

entity F1 boundary F1
as emitted 59.8 62.3
with our published span convention applied 66.2 69.2

600 dev sentences, 1,687 gold entities, none of which appear anywhere in training — the evaluator refuses to run if an overlap is found. Our 17 entity types are mapped back onto KLUE's six; anything outside that mapping is counted as an error rather than skipped.

Our span convention keeps Korean particles outside the span, as KLUE's annotation does. The second row applies that published rule to the raw output — it is a format conversion, not a tuned post-process, and the gap between the rows is itself a measurement we track.

The two schemes also differ in scope, not only in labels. We mark 관객 ("audience"), 여배우 ("actress") and 식당 ("restaurant") as entities where KLUE annotates proper names only. Those are counted against us in the table above.


Versioning

Internal builds move fast; this repository does not. It is refreshed roughly monthly, and every refresh carries the full gate battery described above — a build is never published on a single headline number.

Promotion to production is a separate track with its own bar: a staging round, a downstream end-to-end gate on live harnesses, and a human decision.

  • Previously published: 42c7c248 (promoted to production 2026-09-24)
  • Current: v6.4.1 — the first build trained with public-benchmark material, published for the benchmark results above. Production promotion follows its own schedule.

License & access

Released under the Elda Community License 1.0 (see LICENSE).

  • ✅ Research, evaluation, internal validation, education — free of charge
  • ✳ Attribution: "Built with Elda"
  • ⛔ Commercial use and redistribution require a separate agreement

Access is gated: tell us who you are and access is granted automatically. Training data and evaluation sets are not distributed.

Citation

@software{intenter2026,
  title  = {Intenter: real-time Korean speech-act and entity extraction},
  author = {Elda AI},
  year   = {2026},
  url    = {https://huggingface.co/Elda-AI/intenter}
}
Downloads last month
-
Safetensors
Model size
0.3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support