CoolFace
Modelpublic

Aurigene-AI/gpt2_zinc_87m

sourceHugging Facemitupdated 16d agoView on Hugging Face
0likes240downloads
Model Card

<!-- aurigene-header -->

### Mirrored by Aurigene AI Discovery stage: Hit generation Autoregressive SMILES generator trained on ~480M ZINC molecules. Small enough to sample thousands of de novo structures on a laptop CPU. Upstream: `entropy/gpt2_zinc_87m` - all credit to the original authors; the model card and licence below are theirs. Explore the rest of the catalogue: Molecule Explorer - Protein Target Explorer - Drug Discovery Model Hub

GPT2 Zinc 87m

This is a GPT2 style autoregressive language model trained on ~480m SMILES strings from the ZINC database.

The model has ~87m parameters and was trained for 175000 iterations with a batch size of 3072 to a validation loss of ~.615. This model is useful for generating druglike molecules or generating embeddings from SMILES strings

How to use

python
from transformers import GPT2TokenizerFast, GPT2LMHeadModel

tokenizer = GPT2TokenizerFast.from_pretrained("entropy/gpt2_zinc_87m", max_len=256)
model = GPT2LMHeadModel.from_pretrained('entropy/gpt2_zinc_87m')

To generate molecules:

python
inputs = torch.tensor([[tokenizer.bos_token_id]])

gen = model.generate(
              inputs,
              do_sample=True, 
              max_length=256, 
              temperature=1.,
              early_stopping=True,
              pad_token_id=tokenizer.pad_token_id,
              num_return_sequences=32
                         )
smiles = tokenizer.batch_decode(gen, skip_special_tokens=True)

To compute embeddings:

python
from transformers import DataCollatorWithPadding

collator = DataCollatorWithPadding(tokenizer, padding=True, return_tensors='pt')

inputs = collator(tokenizer(smiles))
outputs = model(**inputs, output_hidden_states=True)
full_embeddings = outputs[-1][-1]
mask = inputs['attention_mask']
embeddings = ((full_embeddings * mask.unsqueeze(-1)).sum(1) / mask.sum(-1).unsqueeze(-1))

WARNING

This model was trained with bos and eos tokens around SMILES inputs. The GPT2TokenizerFast tokenizer DOES NOT ADD special tokens, even when add_special_tokens=True. Huggingface says this is intended behavior.

It may be necessary to manually add these tokens

python
inputs = collator(tokenizer([tokenizer.bos_token+i+tokenizer.eos_token for i in smiles]))

Model Performance

To test generation performance, 1m compounds were generated at various temperature values. Generated compounds were checked for uniqueness and structural validity.

  • —percent_unique denotes n_unique_smiles/n_total_smiles
  • —percent_valid denotes n_valid_smiles/n_unique_smiles
  • —percent_unique_and_valid denotes n_valid_smiles/n_total_smiles
temperaturepercent_uniquepercent_validpercent_unique_and_valid
0.50.92807410.928074
0.750.9984680.9999670.998436
10.9996590.9991640.998823
1.250.9995140.993510.993027
1.50.9987490.9702230.96901

Property histograms computed over 1m generated compounds: property histograms