Gemma4EC-2B-Predict / README.md
josefinaarcagni's picture
Model card
af5e3b6 verified
|
Raw History Blame Contribute Delete
2.66 kB
---
license: apache-2.0
base_model: google/txgemma-2b-predict
library_name: peft
pipeline_tag: text-generation
tags:
- gemma
- txgemma
- ec-number
- enzyme-commission
- biochemical-reactions
- lora
- peft
- gemma4ec
---
# Gemma4EC-2B-Predict
LoRA adapter for [google/txgemma-2b-predict](https://huggingface.co/google/txgemma-2b-predict) that predicts the
**Enzyme Commission (EC) number** of a biochemical reaction from its SMILES, down to the sub-subclass level.
- **Input:** a reaction SMILES, e.g. `CCO.O=O>>CC=O.OO`
- **Output:** an EC number, e.g. `1.01.03`
- **Code, preprocessing and benchmarks:** [github.com/PlanesLab/Gemma4EC](https://github.com/PlanesLab/Gemma4EC)
## Usage
The base model is gated: request access to [google/txgemma-2b-predict](https://huggingface.co/google/txgemma-2b-predict), then `huggingface-cli login`.
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
base = "google/txgemma-2b-predict"
tokenizer = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, torch_dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(model, "PlanesLab/Gemma4EC-2B-Predict").eval()
PROMPT = (
"Instructions: Given a reaction SMILES, predict the first three parts of its "
"Enzyme Commission (EC) number (class.subclass.sub-subclass).\n"
"EC numbers are four-part hierarchical codes (e.g., 1.3.2.4) describing the type "
"of enzyme and its reaction mechanism.\n"
"Only output the first three digits (e.g., 1.03.02) representing the enzyme's "
"general class, subclass, and sub-subclass.\n"
"Reaction SMILES: {reaction_smiles}\nAnswer:"
)
inputs = tokenizer(PROMPT.format(reaction_smiles="CCO.O=O>>CC=O.OO"), return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=8, do_sample=False)
print(tokenizer.decode(out[0][inputs.input_ids.shape[1]:], skip_special_tokens=True).strip())
```
Use this exact prompt. Preprocess SMILES with `preprocess_smiles.py` from the repository first; batch prediction
and chat explanations are also there.
## Training
LoRA (r = 16, alpha = 16) on `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj`,
fine-tuned on [ECReact](https://github.com/rxn4chemistry/biocatalysis-model).
## Citation
Please cite Gemma4EC (see the [repository](https://github.com/PlanesLab/Gemma4EC)) and
[TxGemma](https://huggingface.co/google/txgemma-2b-predict).
## License
Adapter weights: Apache-2.0. TxGemma weights: [Health AI Developer Foundations terms](https://developers.google.com/health-ai-developer-foundations/terms).