--- language: - en license: apache-2.0 base_model: mpi-inno-comp/paecter library_name: transformers pipeline_tag: text-classification tags: - patents - plant-patents - plant-breeding - text-classification - paecter - reproducibility widget: - text: |- Drought tolerant maize plant A maize plant with improved drought tolerance is provided, together with seeds and methods for producing the plant. - text: |- Packaging film with improved barrier properties A multilayer polymer film is disclosed for use in food packaging, wherein the film provides improved oxygen and moisture resistance. --- # PaECTER Plant-Related Patent-Family Detector This is the first-stage production classifier for the manuscript *Identifying Plant-Related Patents: Corpus Construction and Global Patterns*. It fine-tunes `mpi-inno-comp/paecter` to classify English patent-family title and abstract text as plant-related or not plant-related. This release is a companion checkpoint for reproducible research on plant-related patent classification. The Apache-2.0 license metadata follows the PaECTER base-model release. ## Model Details - Base model: [`mpi-inno-comp/paecter`](https://huggingface.co/mpi-inno-comp/paecter) - Architecture: `BertForSequenceClassification` - Task: binary text classification - Input text: English title, blank line, English abstract - Maximum length: 512 tokens - Labels: - `no`: not plant-related - `yes`: plant-related - Recommended decision rule: classify as `yes` when `p_yes >= 0.992003` This model is a supervised fine-tune of PaECTER. Please cite or link the original PaECTER model and paper when reusing this checkpoint. ## Training Data The model was trained on the repository's internal 600-family labeled DOCDB sample, split into 420 train, 90 validation, and 90 test families. The row-level labeling queue, patent text, split manifest, and prediction files are not part of this model release. ## Evaluation Internal validation and test metrics use the validation-selected threshold `p_yes >= 0.992003`. | Split | PR-AUC | Precision | Recall | F1 | |---|---:|---:|---:|---:| | Validation | 0.9989 | 0.9677 | 1.0000 | 0.9836 | | Test | 0.9761 | 0.9091 | 0.9677 | 0.9375 | An external positive-only recall check on 450 independently curated plant-related families recovered 447 families at the training-derived threshold (recall = 0.993). This external check tests recall transfer, not precision. ## Intended Use Use this model to score English title and abstract text for patent families where the goal is a high-confidence plant-related corpus. The threshold is part of the documented release behavior and should be recalibrated if used on a different corpus or label distribution. ## Limitations - The labeled training set contains 600 families, so borderline behavior can shift across jurisdictions, time periods, or technical domains. - Inputs longer than 512 tokens are truncated. - The external gold check is positive-only and does not estimate external precision. - The model is trained on English title and abstract text, not full patent claims or descriptions. ## Reproducibility Reference artifacts in the companion repository: - Training report: `metadata/paecter_report_2026-01-29_rerun.md` - Model card source: `metadata/model_card_paecter.md` - Public companion repository: ## Companion Resources - Original PaECTER base model: - Interactive demo Space: - Second-stage variety-vs-technology classifier: - Public companion repository: - Manuscript context: *Identifying Plant-Related Patents: Corpus Construction and Global Patterns* ## Example ```python from transformers import AutoModelForSequenceClassification, AutoTokenizer import torch model_id = "aydiet/plant-patent-paecter-plant-detector" text = "Drought tolerant maize plant\n\nA maize plant with improved drought tolerance is provided." tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForSequenceClassification.from_pretrained(model_id) inputs = tokenizer(text, return_tensors="pt", truncation=True, padding="max_length", max_length=512) with torch.no_grad(): probs = torch.softmax(model(**inputs).logits, dim=-1)[0] p_yes = float(probs[model.config.label2id["yes"]]) label = "yes" if p_yes >= 0.992003 else "no" print(label, p_yes) ```