sunkaiwen/sketch2stl-part-requests-text
sketch2stl-part-requests-text 100 hand-written natural-language requests for 3D-printable parts, each labelled with whether a single straight extrusion can make the part, plus 1,200 label-preserving synthetic variants. 1. Purpose Built for Homework 1 of Designing with AI, in support of my Project 1 system: a Gradio app that turns a 2D sketch into an editable, 3D-printable STL. My GUI has a free-text box next to the sketch canvas. That text is the earliest signal… See the full description on the dataset page: https://huggingface.co/datasets/sunkaiwen/sketch2stl-part-requests-text.
sketch2stl-part-requests-text
100 hand-written natural-language requests for 3D-printable parts, each labelled with whether a single straight extrusion can make the part, plus 1,200 label-preserving synthetic variants.
1. Purpose
Built for Homework 1 of Designing with AI, in support of my Project 1 system: a Gradio app that turns a 2D sketch into an editable, 3D-printable STL.
My GUI has a free-text box next to the sketch canvas. That text is the earliest signal of user intent I get — it arrives before a single line is drawn. I want to classify it immediately as extrudable or not extrudable, so the interface can warn the user up front when my straight-extrusion pipeline is about to produce the wrong shape, and offer the revolve path instead.
Intended use: teaching and prototyping short-text binary classifiers; practising text augmentation and HF Datasets. Out of scope: any production intent-classification system, and anything outside the narrow genre of "one person describing one small part to print".
2. Composition
100 short texts written by hand, 50 per class, split 70 / 15 / 15 before any augmentation, with augmentation applied to the training texts only.
Fields: text_id, text, extrudable (ClassLabel: not_extrudable / extrudable), char_len, word_count, split, split_source, aug_technique, source_text_id. split_source is authored or synthetic, so the real sentences are always recoverable.
Length: mean ≈ 200 characters, range ≈ 165–215 in original. Both classes occupy the same length band deliberately, so text length is not a usable shortcut.
Language: English only.
3. Collection
Texts were written, not collected. I wrote them in alternating batches of ten on 2026-09-15, following a protocol fixed in advance:
- Write as a user of the app, not as an engineer — everyday phrasing, approximate numbers, occasional hedging.
- Always include at least one dimension in millimetres.
- Never use the words extrude, extrudable, extrusion, revolve, loft or 2.5D. (Enforced by an assertion in the notebook, which passes.)
- Vary the sentence opening across "A…", "I want…", "Make…", "This part is…", "I need…", "Please…".
- Keep holes, thicknesses, rounded corners and millimetres present in both classes so no single token separates them.
- Exactly 50 per class.
No text was scraped, no real user was recorded, and no personal information appears anywhere.
4. Preprocessing & augmentation
Split first. The 100 texts are split 70 / 15 / 15 (stratified on extrudable) before augmentation, and only the training texts are augmented. See §6.
Preprocessing: none beyond computing char_len and word_count. The texts are stored exactly as written.
Augmentation — five techniques, ~240 rows each:
Deliberately not used: back-translation and LLM paraphrasing. Both are the standard next step and both can silently change the geometry — a paraphraser that rewrites "tapers to 12 mm" as "narrows a little", or that drops "rounded", changes the class without changing the label. My five techniques are mechanically defined and provably geometry-preserving. The cost is lower lexical diversity than a paraphraser would give, which is a real limitation of this dataset.
Guards: outputs constrained to 100–330 characters; exact duplicates rejected; no augmented text may equal an original text; every row records aug_technique and source_text_id.
5. Labels
extrudable = 1— the part can be made by drawing one flat outline and pushing it in a straight line for the full depth; the cross-section never changes; through-holes are allowed.extrudable = 0— the description requires a taper, revolve, twist, dome, doubly-curved surface, thread, undercut, or features at more than one level in the depth direction.
Labels were assigned at writing time: the class was chosen first and a sentence was written for it. This makes the labels internally consistent, but it also means they record the writers' intent rather than an independent reading of the text. An outside annotator might disagree on borderline cases (the pen holder, the soap dish). This is the single biggest weakness of the dataset and is why I would want third-party re-annotation before trusting any accuracy number from it.
6. Splits
The 100 texts were split 70 / 15 / 15, stratified on `extrudable`, before any augmentation ran, and every synthetic text descends from a training sentence.
That ordering matters more for this dataset than for most. A1 (synonym substitution) and A5 (typing noise) change only a handful of characters, so a leaked pair would be two near-identical strings sitting in train and test — the most flattering and most misleading arrangement possible. The notebook asserts that no synthetic text descends from a held-out parent, that no synthetic text equals a held-out sentence, and that validation and test contain no synthetic rows.
Use these splits as shipped. Do not concatenate and re-split them; do not report numbers from train.
7. Intended use and limitations
Appropriate: coursework; prototyping short-text classifiers; demonstrating text augmentation; a stand-in intent signal while the sketch model is built.
Limitations
- One author, one sitting. The stylistic range is one person's, written to a protocol — not the range of real users. A deployed classifier would meet phrasings nothing here prepares it for. This is the dataset's most serious limitation.
- Labels encode writer intent, not independent annotation (see §5).
- `validation` and `test` are tiny — 15 and 15 sentences each. One sentence is worth ~6.7 percentage points of accuracy, so these splits cannot separate a good model from a slightly better one. They are a sanity check, and any number quoted from them should carry that caveat.
- Synthetic rows are not independent. The 1,200 rows in
traincarry only about 70 sentences' worth of information, so the effective training set is much smaller than its row count. This does not biasvalidationortest, which contain no synthetic rows, but expect a wide train-validation gap. - The vocabulary leans by class (
flat/plate/throughvscurved/rounded/tall). This is genuine domain language, but it means a bag-of-words baseline scores well and reported accuracy should always be compared against that baseline, not against 0.5. - English only, metric units only, one narrow genre.
- Augmentation diversity is limited by design — see §4 on the back-translation trade-off.
Not appropriate: production intent classification, general instruction understanding, any manufacturing or safety decision.
8. Ethical considerations
All text is my own original writing about inanimate objects. Nothing was scraped; no real user utterances, personal data, names, or locations appear. There is no demographic content and therefore no demographic representation claim to make — which is itself a limitation if this were ever extended to real users, since the phrasing of one graduate student is not the phrasing of everyone.
The realistic harm is over-trust: a small, self-written, self-labelled dataset can produce a model that looks confident and is wrong on real input. The limitations above are stated plainly for that reason.
9. License
CC-BY-4.0. Attribution requested. All 100 original texts are my own original work.
10. AI usage disclosure
Generative AI (Claude, Anthropic) was used as a coding and writing assistant, consistent with the course's vibe-coding module. It was used to:
- draft and refactor the augmentation functions, validation checks and plotting code;
- draft the prose of this Model Card and the notebook's explanatory sections;
- assist in drafting and copy-editing the 100 original texts, which I then reviewed, edited and labelled against the rule in §5.
Every generated cell was executed and reviewed by me before being kept. The labelling rule, the writing protocol, the class assignments and the augmentation design are my own, and I am responsible for all content.
11. Citation
@misc{sketch2stl_part_requests_text_2026,
title = {sketch2stl-part-requests-text: short part requests labelled by extrusion feasibility},
author = {Serena Sun},
year = {2026},
note = {Homework 1, Designing with AI},
url = {https://huggingface.co/datasets/sunkaiwen/sketch2stl-part-requests-text}
}