Views
No views yet
1from transformers import GPT2TokenizerFast, GPT2LMHeadModel
2
3tokenizer = GPT2TokenizerFast.from_pretrained("entropy/gpt2_zinc_87m", max_len=256)
4model = GPT2LMHeadModel.from_pretrained('entropy/gpt2_zinc_87m')1inputs = torch.tensor([[tokenizer.bos_token_id]])
2
3gen = model.generate(
4 inputs,
5 do_sample=True,
6 max_length=256,
7 temperature=1.,
8 early_stopping=True,
9 pad_token_id=tokenizer.pad_token_id,
10 num_return_sequences=32
11 )
12smiles = tokenizer.batch_decode(gen, skip_special_tokens=True)1from transformers import DataCollatorWithPadding
2
3collator = DataCollatorWithPadding(tokenizer, padding=True, return_tensors='pt')
4
5inputs = collator(tokenizer(smiles))
6outputs = model(**inputs, output_hidden_states=True)
7full_embeddings = outputs[-1][-1]
8mask = inputs['attention_mask']
9embeddings = ((full_embeddings * mask.unsqueeze(-1)).sum(1) / mask.sum(-1).unsqueeze(-1))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.inputs = collator(tokenizer([tokenizer.bos_token+i+tokenizer.eos_token for i in smiles]))percent_unique denotes n_unique_smiles/n_total_smilespercent_valid denotes n_valid_smiles/n_unique_smilespercent_unique_and_valid denotes n_valid_smiles/n_total_smiles| temperature | percent_unique | percent_valid | percent_unique_and_valid |
|---|---|---|---|
| 0.5 | 0.928074 | 1 | 0.928074 |
| 0.75 | 0.998468 | 0.999967 | 0.998436 |
| 1 | 0.999659 | 0.999164 | 0.998823 |
| 1.25 | 0.999514 | 0.99351 | 0.993027 |
| 1.5 | 0.998749 | 0.970223 | 0.96901 |
