--- base_model: unsloth/Qwen3.5-4B library_name: peft license: apache-2.0 tags: - law - trademark - abercrombie - legalbench - unsloth - decision-model - clef - lora --- # Abercrombie-Decision An [Unsloth](https://github.com/unslothai/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](https://huggingface.co/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. ```bash pip install unsloth==2026.10.3 unsloth_zoo==2026.10.3 ``` ```python 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 `FastDecisionModel` with a Clef decision head, 16-bit LoRA (r = 16, alpha = 16) on `unsloth/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.