Instructions to use DoodDood/abercrombie-decision with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use DoodDood/abercrombie-decision with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("unsloth/Qwen3.5-4B") model = PeftModel.from_pretrained(base_model, "DoodDood/abercrombie-decision") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Unsloth Desktop
Abercrombie-Decision
An Unsloth decision model that classifies trademarks on the
Abercrombie distinctiveness spectrum (Generic / Descriptive / Suggestive / Arbitrary / Fanciful). It is a
LoRA adapter on unsloth/Qwen3.5-4B plus a Clef-style decision head.
It does not generate text. The LLM reads the mark once, and the head scores the options for six questions together: five yes/no doctrine sub-questions and a final 5-level distinctiveness score. Every answer comes with a probability.
This is a proof of concept and the companion to DoodDood/abercrombie-grpo. It uses the same base model, training marks and test set, with a different training method.
Results
On the 95-row LegalBench Abercrombie test set. Training data excluded every test mark.
| Category | Base Qwen3.5-4B | Abercrombie-GRPO | This model (seed 42) | Mean of 3 seeds |
|---|---|---|---|---|
| Generic | 89% | 100% | 100% | 100% |
| Descriptive | 100% | 74% | 95% | 95% |
| Suggestive | 5% | 26% | 26% | 25% |
| Arbitrary | 0% | 47% | 68% | 65% |
| Fanciful | 5% | 95% | 89% | 91% |
| Overall | 40.0% | 68.4% | 75.8% | 75.1% +/- 1.2 |
Mean ordinal distance: 0.34 (GRPO 0.53, base 1.09). Training took about 7 minutes on one RTX PRO 6000 (Colab G4).
Sub-question accuracy (seed 42): coined 98%, semantic link 93%, imagination 82%, conveys 81%, genus 95%. The sub-answers, run through the routing rule below, agree with the model's own final answer on 94% of marks.
A single-question variant (distinctiveness only) scored 74.4% +/- 3.7, which is not a significant difference (paired sign test p = 0.50).
Limitations (read before using)
- Small test set. 95 rows means each run's accuracy carries roughly +/- 9 points of uncertainty.
- Suggestive marks are weak (about 25%). They mostly get called Descriptive (Coppertone, Chicken of the Sea, Orange Crush).
- Famous brands get pulled toward Generic. Microsoft, Netflix, Airbus and Amazon are misclassified in every run. All training marks are synthetic and invented, so the model has never seen a famous real brand.
- Overconfident on real marks. Probabilities were calibrated on a synthetic holdout (ECE 0.008) but are overconfident on LegalBench (ECE 0.145 for this seed, about 0.16 averaged over seeds). Treat the probabilities as a ranking, not as calibrated odds.
- Sub-question labels are derived, not annotated. The training data labels only the final category. Sub-question gold was derived from the routing rule plus fixed conventions (for example, a generic name "conveys" its goods).
- Not legal advice. This is a research demo, not a clearance or registrability opinion.
Usage
Needs a GPU and Unsloth (trained with unsloth==2026.10.3). It loads with FastDecisionModel, not a
transformers text-generation pipeline.
pip install unsloth==2026.10.3 unsloth_zoo==2026.10.3
from unsloth import FastDecisionModel
model, tokenizer = FastDecisionModel.from_pretrained("DoodDood/abercrombie-decision")
FastDecisionModel.for_inference(model)
CATEGORIES = ["Generic", "Descriptive", "Suggestive", "Arbitrary", "Fanciful"]
QUESTIONS = {
"coined": {"type": "noul", "instructions": "Is the mark an invented term created solely for trademark use, with no prior independent meaning?"},
"semantic_link": {"type": "noul", "instructions": "Does the mark's ordinary dictionary meaning have any plausible semantic relationship to the goods or services?"},
"imagination": {"type": "noul", "instructions": "Must the consumer use imagination, thought, or a multi-step mental process to connect the mark to the nature of the goods or services?"},
"conveys": {"type": "noul", "instructions": "Does the mark immediately convey an idea of a feature, quality, function, ingredient, or characteristic of the goods or services to the relevant purchasing public?"},
"genus": {"type": "noul", "instructions": "Does the relevant purchasing public understand the mark primarily as the name of the general category of goods or services, rather than as an indicator of source?"},
"distinctiveness": {
"type": "score",
"instructions": "Where does the mark fall on the Abercrombie spectrum of trademark distinctiveness for these goods or services?",
"criteria": [
"Generic: the common name of the goods or services; never protectable.",
"Descriptive: directly describes a feature, quality or purpose of the goods.",
"Suggestive: hints at the goods but needs imagination to connect.",
"Arbitrary: a real word with no relationship to the goods.",
"Fanciful: an invented word with no prior meaning.",
],
},
}
# Input format: `The mark "X" for Y.` (the LegalBench phrasing it was trained on)
answers = FastDecisionModel.predict(model, tokenizer, 'The mark "Kodak" for cameras.', QUESTIONS)
final = answers["distinctiveness"]
print(CATEGORIES[final["answer"]], final["probabilities"])
for q in ["coined", "semantic_link", "imagination", "conveys", "genus"]:
print(q, answers[q]["answer"], answers[q]["probabilities"])
Use the question wording exactly as above. The instruction and criteria text is part of the model's input, so paraphrasing it shifts the predictions.
Sub-questions and routing
The five sub-questions follow the GRPO model's doctrine decomposition:
- If coined = Yes, classify as Fanciful.
- Else if semantic_link = No, classify as Arbitrary.
- Else if genus = Yes, classify as Generic.
- Else if conveys = Yes, classify as Descriptive.
- Else if imagination = Yes, classify as Suggestive.
The head predicts the distinctiveness score directly. The routing rule is a consistency check you can run on the sub-answers, not how the final answer is produced.
Training
- Method: Unsloth
FastDecisionModelwith a Clef decision head, 16-bit LoRA (r = 16, alpha = 16) onunsloth/Qwen3.5-4B, 2 epochs, learning rate 2e-4, cosine schedule, batch size 8. The head was trained at Unsloth's default head learning rate. - Data: the same 2,100 synthetic marks as Abercrombie-GRPO, balanced across the five classes and rephrased into LegalBench form. 1,890 rows were used for training. 210 held-out rows were used for temperature calibration.
- Seeds: 3407, 42 and 1234. Seed 42 is published because, among the six-question runs, it tied for best accuracy and had the highest routing agreement and the lowest LegalBench calibration error (ECE 0.145).
- Compute: about 7 minutes per run on one Colab G4 GPU.
Acknowledgements
Huge thanks to Daniel Han and the Unsloth team for decision models in Unsloth. Going from a dataset to a calibrated decision model in an afternoon on Colab is remarkable. The decision head follows the design of Cloudflare's Clef.
- Downloads last month
- 15