Skip to content
Back to skills

Structured Gt Serialization Tokens

ASecurity

Serialize structured ground truth (chart data, table rows, form fields) as special-token-delimited sequences for generative vision-language model training

  • 61 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
documentationpython

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill structured-gt-serialization-tokens --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Structured Gt Serialization Tokens?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Structured Gt Serialization Tokens
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-structured-gt-serialization-tokens/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-structured-gt-serialization-tokens)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cv-structured-gt-serialization-tokens
description: Serialize structured ground truth (chart data, table rows, form fields) as special-token-delimited sequences for generative vision-language model training
---

# Structured GT Serialization with Special Tokens

## Overview

When training a generative vision model to extract structured data from images (charts, tables, forms), encode the ground truth as a flat token sequence using custom special tokens as delimiters. Add type tokens, separator tokens, and field boundary tokens to the tokenizer, then serialize each sample's annotations into a string the decoder can learn to produce.

## Quick Start

```python
from transformers import DonutProcessor

PROMPT_TOKEN = "<|PROMPT|>"
X_START, X_END = "<x_start>", "<x_end>"
Y_START, Y_END = "<y_start>", "<y_end>"
TYPE_TOKENS = ["<line>", "<bar>", "<scatter>", "<dot>"]

processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base")
processor.tokenizer.add_tokens([PROMPT_TOKEN, X_START, X_END, Y_START, Y_END] + TYPE_TOKENS)

def serialize_gt(chart_type, x_values, y_values):
    type_token = f"<{chart_type}>"
    x_str = X_START + ";".join(map(str, x_values)) + X_END
    y_str = Y_START + ";".join(map(str, y_values)) + Y_END
    return PROMPT_TOKEN + type_token + x_str + y_str

gt_string = serialize_gt("line", ["2020", "2021", "2022"], [10.5, 15.2, 20.1])
# "<|PROMPT|><line><x_start>2020;2021;2022<x_end><y_start>10.5;15.2;20.1<y_end>"
```

## Workflow

1. Define special tokens for structure boundaries and type labels
2. Add all special tokens to the tokenizer
3. Resize model token embeddings to match: `model.decoder.resize_token_embeddings(len(tokenizer))`
4. Serialize each training sample's annotations into the token format
5. At inference, parse the generated sequence by splitting on special tokens

## Key Decisions

- **Semicolon separator**: within fields, use `;` to delimit list items — avoids ambiguity with commas in numbers
- **Type token first**: placing the type token early lets the model condition all subsequent generation on chart type
- **Resize embeddings**: must call `resize_token_embeddings` after adding tokens
- **Parsing**: at inference, split on boundary tokens and handle missing delimiters gracefully

## References

- [donut-train [benetech]](https://www.kaggle.com/code/nbroad/donut-train-benetech)
- [donut-infer (LB 0.44) [benetech]](https://www.kaggle.com/code/nbroad/donut-infer-lb-0-44-benetech)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.