aydiet commited on
Commit
ffd0bf0
·
verified ·
1 Parent(s): 6149ad1

Add README.md

Browse files
Files changed (1) hide show
  1. README.md +106 -0
README.md ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - en
4
+ license: apache-2.0
5
+ base_model: mpi-inno-comp/paecter
6
+ library_name: transformers
7
+ pipeline_tag: text-classification
8
+ tags:
9
+ - patents
10
+ - plant-patents
11
+ - plant-breeding
12
+ - text-classification
13
+ - paecter
14
+ - reproducibility
15
+ ---
16
+
17
+ # PAEcTER Plant-Related Patent-Family Detector
18
+
19
+ This is the first-stage production classifier for the manuscript *Identifying
20
+ Plant-Related Patents: Corpus Construction and Global Patterns*. It fine-tunes
21
+ `mpi-inno-comp/paecter` to classify English patent-family title and abstract
22
+ text as plant-related or not plant-related.
23
+
24
+ This private draft release is prepared for review before public publication.
25
+ The Apache-2.0 metadata follows the base model license and should be confirmed
26
+ before making the repository public.
27
+
28
+ ## Model Details
29
+
30
+ - Base model: `mpi-inno-comp/paecter`
31
+ - Architecture: `BertForSequenceClassification`
32
+ - Task: binary text classification
33
+ - Input text: English title, blank line, English abstract
34
+ - Maximum length: 512 tokens
35
+ - Labels:
36
+ - `no`: not plant-related
37
+ - `yes`: plant-related
38
+ - Recommended decision rule: classify as `yes` when `p_yes >= 0.992003`
39
+
40
+ ## Training Data
41
+
42
+ The model was trained on the repository's internal 600-family labeled DOCDB
43
+ sample, split into 420 train, 90 validation, and 90 test families. The row-level
44
+ labeling queue, patent text, split manifest, and prediction files are not part
45
+ of this model release.
46
+
47
+ ## Evaluation
48
+
49
+ Internal validation and test metrics use the validation-selected threshold
50
+ `p_yes >= 0.992003`.
51
+
52
+ | Split | PR-AUC | Precision | Recall | F1 |
53
+ |---|---:|---:|---:|---:|
54
+ | Validation | 0.9989 | 0.9677 | 1.0000 | 0.9836 |
55
+ | Test | 0.9761 | 0.9091 | 0.9677 | 0.9375 |
56
+
57
+ An external positive-only recall check on 450 independently curated
58
+ plant-related families recovered 447 families at the training-derived threshold
59
+ (recall = 0.993). This external check tests recall transfer, not precision.
60
+
61
+ ## Intended Use
62
+
63
+ Use this model to score English title and abstract text for patent families
64
+ where the goal is a high-confidence plant-related corpus. The threshold is part
65
+ of the documented release behavior and should be recalibrated if used on a
66
+ different corpus or label distribution.
67
+
68
+ ## Limitations
69
+
70
+ - The labeled training set contains 600 families, so borderline behavior can
71
+ shift across jurisdictions, time periods, or technical domains.
72
+ - Inputs longer than 512 tokens are truncated.
73
+ - The external gold check is positive-only and does not estimate external
74
+ precision.
75
+ - The model is trained on English title and abstract text, not full patent
76
+ claims or descriptions.
77
+
78
+ ## Reproducibility
79
+
80
+ Reference artifacts in the companion repository:
81
+
82
+ - Training report: `metadata/paecter_report_2026-01-29_rerun.md`
83
+ - Model card source: `metadata/model_card_paecter.md`
84
+ - Public companion repository:
85
+ <https://github.com/aydiet/plant-patent-classifier-reproducibility>
86
+
87
+ ## Example
88
+
89
+ ```python
90
+ from transformers import AutoModelForSequenceClassification, AutoTokenizer
91
+ import torch
92
+
93
+ model_id = "YOUR_NAMESPACE/plant-patent-paecter-plant-detector"
94
+ text = "Drought tolerant maize plant\n\nA maize plant with improved drought tolerance is provided."
95
+
96
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
97
+ model = AutoModelForSequenceClassification.from_pretrained(model_id)
98
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, padding="max_length", max_length=512)
99
+
100
+ with torch.no_grad():
101
+ probs = torch.softmax(model(**inputs).logits, dim=-1)[0]
102
+
103
+ p_yes = float(probs[model.config.label2id["yes"]])
104
+ label = "yes" if p_yes >= 0.992003 else "no"
105
+ print(label, p_yes)
106
+ ```