What it does
Given a candidate explanation, one gold reason point, and that point's aspect, the adapter outputs 是 (asserted) or 否 (not asserted). Entailment is semantic: a paraphrase counts, a polarity reversal does not. Coverage for a case is the fraction of its reason points the candidate hits, which makes a score decomposable into the reasons it covered and the ones it missed.
The four aspects come from §5.2 of TIPO's Examination Guidelines on Likelihood of Confusion, restricted to factors decidable from the marks themselves:
Table with columns: Aspect, Covers| Aspect | Covers |
|---|
主要識別部分 | the salient element the two marks share |
差異 | the concrete distinguishing element |
外觀 | whether the marks resemble each other in appearance; examiners routinely write appearance, concept and pronunciation as one inseparable clause, and such a clause is kept whole under this aspect |
近似程度結論 | whether similarity is found, and to what degree |
Not a coverage engine
Fed pure procedural boilerplate, this adapter reports coverage of 0.993, against 0.004 for a zero-shot Qwen2.5-7B-Instruct; LETITBE's qualification gate requires no higher than 0.05. Use it as a per-point classifier, not to produce a coverage score.
Measurements
500 balanced held-out pairs, drawn from cases published after 2023 while training used cases up to 2023.
Table with columns: value | value |
|---|
| Accuracy | 0.988 |
| Precision | 0.977 |
| Recall | 1.000 |
| F1 | 0.988 |
| Specificity on polarity flips | ≥ 0.99 |
| Judgments that flip when the candidate is paraphrased | ≤ 1 in 100 |
Its precision is lower than the Gemma adapter's (0.977 against 0.992).
Usage
Use letitbe.py, which builds the exact prompt these numbers were measured with:
python letitbe.py detector --input your_pairs.jsonl \ --backend hf --engine MediaTek-Research/Breeze-7B-Instruct-v1_0 --adapter annieyii/letitbe-hitdet-breeze-7b
Loading it directly:
from peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfigimport torch base_id = "MediaTek-Research/Breeze-7B-Instruct-v1_0"rev = "60d4fa07ae4ddd4174864b257be0563f1806cd6d" # the base revision the adapter was trained onbnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True)tok = AutoTokenizer.from_pretrained(base_id, revision=rev, padding_side="left")base = AutoModelForCausalLM.from_pretrained(base_id, revision=rev, quantization_config=bnb, device_map="auto")model = PeftModel.from_pretrained(base, "annieyii/letitbe-hitdet-breeze-7b")
It was trained and evaluated in 4-bit NF4 with double quantisation. Running it at another precision is untested.
Training
LoRA r=16, α=32, dropout 0.05, on all seven linear projections (q,k,v,o,gate,up,down) of a 4-bit NF4 base. At most 10 epochs with early stopping on validation loss. 3,000 training and 500 validation examples, balanced 2:1:1 across positive, easy-negative and hard-negative, stratified by aspect and sampled deterministically.
Base revision: MediaTek-Research/Breeze-7B-Instruct-v1_0@60d4fa07ae4ddd4174864b257be0563f1806cd6d.
Versions: torch 2.10.0, transformers 5.12.1, peft 0.19.1, trl 1.7.0, datasets 5.0.0, tokenizers 0.22.2.
License
Apache-2.0, following its base MediaTek-Research/Breeze-7B-Instruct-v1_0. The full text is in LICENSE. The adapter files are new files produced by fine-tuning that base; no base-model file is redistributed here.