inventory-spec-extractor

A small model (33M parameters, int8 ONNX, about 34 MB) that finds structured attributes in one line of a free-text product specification:

input line output spans
Output: 12V 3A 12V output_voltage, 3A output_current
Length: 2m, USB-C to USB-A 2m cable_length, USB-C connector, USB-A connector
Inlet: IEC C14, Outlets: 8x C13 IEC C14 connector, C13 connector
Plug: Israeli (Type H), Power: 2200W Type H plug_type, 2200W power
Power Source: 2x AAA batteries AAA battery_type, batteries power_source
S/N: C02XG1ABJG5H C02XG1ABJG5H serial_number

The model finds and labels spans; it does not convert units or pick enum spellings. Do that in deterministic code: "100-240V AC" → 100–240 V, AC. The model is built to run on CPU in the browser or on a small server through onnxruntime-web, at about 20 ms per line.

Labels (25 attributes, BIO)

manufacturer, model_number, mpn, serial_number, version, power_source, input_voltage, input_current, output_voltage, output_current, rated_voltage, rated_current, power, battery_capacity, battery_type, connector, plug_type, cable_length, diameter, volume, storage_capacity, pack_count, material, colour, ip_rating

Input text is {product_type} | {line} (product type may be empty). Labels sit on the first word-piece of each word; continuation pieces extend the open span. labels.json maps logit index → O / B-attr / I-attr.

Evaluation

Validation split of inventory-spec-lines (1477 lines, split by item, never trained on). Scoring is span-level exact match on (start, end, attribute). The eval labels are silver (Claude Haiku 5.5, not hand-checked), so these numbers measure agreement with that teacher. The baseline is a regex extractor (key names plus number+unit patterns).

precision recall F1
regex baseline 0.804 0.454 0.580
this model 0.834 0.860 0.847
attribute n baseline F1 model F1 model P model R
material 184 0.54 0.93 0.93 0.92
connector 140 0.36 0.84 0.78 0.90
colour 72 0.82 0.88 0.82 0.94
battery_type 26 0.27 0.77 0.86 0.69
output_voltage 26 0.67 0.83 0.95 0.73
power_source 26 0.00 0.78 0.80 0.77
plug_type 24 0.70 0.77 0.78 0.75
output_current 20 0.97 0.63 0.67 0.60
input_voltage 15 0.73 0.77 0.75 0.80
rated_voltage 15 0.80 0.97 0.94 1.00
storage_capacity 12 0.79 0.72 0.69 0.75
manufacturer 11 0.00 0.70 0.67 0.73
cable_length 10 0.63 0.91 0.83 1.00
volume 10 0.76 1.00 1.00 1.00
pack_count 9 0.18 0.78 0.64 1.00
power 8 0.93 0.80 0.86 0.75
diameter 6 0.80 0.77 0.71 0.83
version 6 0.00 0.29 1.00 0.17
battery_capacity 5 1.00 1.00 1.00 1.00
rated_current 4 0.80 0.67 0.60 0.75
input_current 3 1.00 0.00 0.00 0.00
model_number 2 0.00 1.00 1.00 1.00
ip_rating 1 1.00 1.00 1.00 1.00

Known weaknesses

  • Currents. output_current, rated_current and input_current score below the regex baseline. On mixed lines ("Power: 12V, 3A, 36W") the model can label an amp value as power. A unit check in the caller catches this: an amp value is never a power.
  • Decimals in some contexts. "0.5A" has been seen cut to "0".
  • version is weak (few examples), and "Gen 2" can come out as model_number.
  • mpn has only 6 training examples.
  • serial_number is learned only from generated serials, because real serial lines are removed from the public data. It handles Serial Number: / S/N: / SN: lines well; it has not been measured on real serials.

Training

Fine-tuned from BAAI/bge-small-en-v1.5 for 6 epochs on a Modal T4. Lines with attributes that have fewer than 300 spans were repeated 4×, and 300 synthetic serial lines were added. Trained 2026-10-15. Code, labelling and redaction pipeline: danielrosehill/Inventory-Spec-Extractor.

Files

model_quantized.onnx (int8, what to load), tokenizer.json, labels.json. Inputs: input_ids, attention_mask, token_type_ids (int64 [batch, seq]). Output: logits float32 [batch, seq, 51].

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for danielrosehill/inventory-spec-extractor

Quantized
(32)
this model

Dataset used to train danielrosehill/inventory-spec-extractor

Collection including danielrosehill/inventory-spec-extractor