Downloads · 30 days
0
Faraiba/patentsBERTa_greenpatent
patentsBERTa_greenpatent is a machine learning model from Faraiba. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
A comprehensive deep learning system for classifying patent claims as green/environmentally beneficial technology using baseline models, LLM fine-tuning, and multi-agent debate.
Downloads · 30 days
0
Access
Public
Updated Mar 4, 2026
Repo size
—
Likes
0
Public
Click a slice to open those files.
.csv269 KB · 51%
From the Hugging Face model README
A comprehensive deep learning system for classifying patent claims as green/environmentally beneficial technology using baseline models, LLM fine-tuning, and multi-agent debate.
This project implements an end-to-end pipeline for classifying patent claims as GREEN (environmentally beneficial) or NOT GREEN technology. The system progresses from baseline models to advanced LLM fine-tuning and culminates in a sophisticated multi-agent debate system for robust predictions.
Dataset: 1.37M patent claims from Hugging Face with 650+ CPC code columns
| Method | F1 Score | Key Advantage |
|---|---|---|
| Baseline (LogReg + Frozen) | 0.777 | Fast, lightweight |
| Fine-tuned PatentSBERTa | 0.808 | Best accuracy-speed tradeoff |
| QLoRA Mistral | 0.811 | JSON output, memory efficient |
| Multi-Agent Debate | 0.867 | Most interpretable, robust |
git clone https://github.com/KarolinaBohdan/Deep_Learning_Final.git
cd Deep_Learning_Final
python -m venv venv
source venv/bin/activate # Linux/Mac
# OR
venv\Scripts\activate # Windows
pip install --upgrade pip
pip install -r requirements.txt
# PatentSBERTa auto-downloads
python -c "from transformers import AutoModel; AutoModel.from_pretrained('AI-Growth-Lab/PatentSBERTa')"
# Mistral-7B-Instruct
python -c "from transformers import AutoModel; AutoModel.from_pretrained('mistralai/Mistral-7B-Instruct-v0.2')"
# Core ML/DL
torch>=2.0.0
transformers>=4.41.0
peft>=0.11.0
trl>=0.8.0
datasets>=2.14.0
# Scientific Computing
numpy>=1.24.0
pandas>=2.0.0
scikit-learn>=1.3.0
# Utilities
tqdm>=4.66.0
joblib>=1.3.0
bitsandbytes>=0.42.0
accelerate>=0.25.0
pyarrow>=13.0.0
import torch
import json
from transformers import AutoTokenizer, AutoModel
from peft import PeftModel
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Load fine-tuned PatentSBERTa (fastest, best accuracy)
tokenizer = AutoTokenizer.from_pretrained("AI-Growth-Lab/PatentSBERTa")
model = AutoModel.from_pretrained(
"partD_patentsberta_finetuned_evalsilver_only/",
device_map=device
)
# Classify a claim
new_claim = "A method for converting wind energy into electrical power with 95% efficiency..."
inputs = tokenizer(new_claim, return_tensors="pt", truncation=True, max_length=256)
outputs = model(**inputs)
# Process embeddings for classification...
python A3_qlora_inference_.py \
--adapter_dir qlora_mistral_adapter_json \
--eval_silver eval_silver.parquet \
--output_csv predictions.csv
Deep_Learning_Final/
│
├── README.md (this file)
├── requirements.txt
│
├── ASSIGNMENT 2 - BASELINE & LLM INTEGRATION
│ ├── Assignment 2_Part A.ipynb [Data prep & splitting]
│ ├── Assigment2_baseline_partA.py [Frozen embeddings baseline]
│ ├── A2_partB_uncertainty.py [Uncertainty estimation]
│ ├── A2_partC_llm_local.py [Mistral labeling + HITL]
│ ├── A2_partD_finetune.py [PatentSBERTa fine-tuning]
│ └── results/
│ ├── A2_LR_results_partA.out
│ ├── A2PartD_finetuned_results/
│ └── finetune_part3_final_metrics/
│
├── ASSIGNMENT 3 - QLORA FINE-TUNING
│ ├── A3_qlora_finetuning.py [QLoRA training]
│ ├── A3_qlora_inference_.py [QLoRA inference]
│ ├── qlora_mistral_adapter_json/ [LoRA adapter checkpoint]
│ └── Qlora_patentsberta_finetuning_final_metrics/
│
├── ASSIGNMENT 4 - MULTI-AGENT DEBATE
│ ├── mas_final.py [MAS implementation]
│ ├── MAS_train_patentsberta_human3/ [Training procedures]
│ └── results/
│ ├── mas_debate_results.csv
│ └── MAS evaluation reports
│
├── DATA FILES
│ ├── patents_50k_green.parquet [50k balanced dataset]
│ ├── train_silver.parquet [30k training split]
│ ├── eval_silver.parquet [10k eval split]
│ ├── pool_unlabeled.parquet [10k pool split]
│ ├── hitl_green_100.csv [100 HITL samples]
│ ├── hitl_green_100_llm_corrected.csv [100 HITL samples (verified)]
│ └── embeddings/
│ ├── X_train.npy
│ ├── X_eval.npy
│ └── X_pool.npy
│
├── MODEL CHECKPOINTS
│ ├── baseline_logreg.joblib
│ ├── partD_patentsberta_finetuned_evalsilver_only/
│ └── qlora_mistral_adapter_json/
│
└── M4_ASSIGNEMENT1_BDS_MFC.ipynb [Portfolio assignment]
Load 1.37M raw patent claims
↓
Create is_green_silver labels from Y02* CPC codes
↓
Balance to 50k (25k green + 25k non-green)
↓
Split into train/eval/pool (60/20/20)
↓
Output: 4 parquet files
Run: jupyter notebook "Assignment 2_Part A.ipynb"
Generate PatentSBERTa embeddings (frozen, 768-dim)
↓
Train Logistic Regression on train_silver
↓
Evaluate on eval_silver
↓
Output: Baseline metrics + model checkpoint
Run: python Assigment2_baseline_partA.py
Results: 0.777 F1 score
Calculate uncertainty scores on pool_unlabeled
↓
Select top-100 uncertain samples
↓
Use Mistral-7B to generate initial labels + rationales
↓
Human review and correction (HITL)
↓
Output: 100 gold labels with human validation
Run: python A2_partC_llm_local.py
Load 30k train_silver + 100 gold labels
↓
Tokenize with PatentSBERTa tokenizer
↓
Fine-tune PatentSBERTa (unfrozen)
↓
Evaluate on eval_silver
Run: python A2_partD_finetune.py
Results: 0.808 F1 score
Quantize Mistral-7B to 4-bit
↓
Add LoRA adapters (trainable)
↓
Train on 30k train_silver + 100 gold
↓
Output JSON predictions with rationales
Run Training:
python A3_qlora_finetuning.py \
--output_dir qlora_mistral_adapter_json \
--num_train_epochs 3 \
--per_device_train_batch_size 4
Run Inference: python A3_qlora_inference_.py --adapter_dir qlora_mistral_adapter_json
Results: 0.811 F1 score
Load fine-tuned Advocate (Mistral + LoRA)
↓
Load base Skeptic (Mistral base)
↓
Load base Judge (Mistral base)
↓
For each claim: Advocate argues GREEN,
Skeptic argues NOT GREEN, Judge decides
↓
Output: Final predictions with explanations
Run:
python mas_final.py \
--eval_silver eval_silver.parquet \
--hitl_file hitl_green_100_llm_corrected.csv \
--adapter_path qlora_mistral_adapter_json \
--output mas_debate_results.csv
Results: 0.867 F1 score
Three specialized agents provide robust predictions:
Patent Claim
├─→ ADVOCATE (Mistral + LoRA) → "Argue for GREEN (1)"
│
├─→ SKEPTIC (Mistral base) → "Argue against NOT GREEN (0)"
│
└─→ JUDGE (Mistral base) → Reviews both, decides
Output: {label, confidence, reasoning}
Why MAS Works:
| Method | F1 Score | Key Advantage |
|---|---|---|
| Baseline (LogReg + Frozen) | 0.777 | Fast, lightweight |
| Fine-tuned PatentSBERTa | 0.808 | Best accuracy-speed tradeoff |
| QLoRA Mistral | 0.811 | JSON output, memory efficient |
| Multi-Agent Debate | 0.867 | Most interpretable, robust |
import torch
from transformers import AutoTokenizer, AutoModel
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Load fine-tuned PatentSBERTa
tokenizer = AutoTokenizer.from_pretrained("AI-Growth-Lab/PatentSBERTa")
model = AutoModel.from_pretrained(
"partD_patentsberta_finetuned_evalsilver_only/",
device_map=device
)
# Classify
new_claim = "A method for converting wind energy..."
inputs = tokenizer(new_claim, return_tensors="pt", truncation=True, max_length=256)
outputs = model(**inputs)
# Process embeddings...
python A3_qlora_inference_.py \
--adapter_dir qlora_mistral_adapter_json \
--eval_silver eval_silver.parquet \
--output_csv predictions.csv
python mas_final.py \
--eval_silver your_data.parquet \
--adapter_path qlora_mistral_adapter_json \
--output results.csv
The system classifies patents as GREEN if they describe:
For questions or issues, please open a GitHub issue or contact the project maintainers.
Happy classifying! 🚀