Views
No views yet
roberta_zinc_480m is a ~102m parameter Roberta-style masked language model ~480m SMILES
strings from the ZINC database. This model is useful for
generating embeddings from SMILES strings.1from transformers import AutoModel, AutoTokenizer
2
3tokenizer = AutoTokenizer.from_pretrained("entropy/roberta_zinc_480m")
4roberta_zinc = AutoModel.from_pretrained("entropy/roberta_zinc_480m",
5 add_pooling_layer=False) # model was not trained with a pooler
6
7# smiles should be canonicalized
8smiles = [
9 "Brc1cc2c(NCc3ccccc3)ncnc2s1",
10 "Brc1cc2c(NCc3ccccn3)ncnc2s1",
11 "Brc1cc2c(NCc3cccs3)ncnc2s1",
12 "Brc1cc2c(NCc3ccncc3)ncnc2s1",
13 "Brc1cc2c(Nc3ccccc3)ncnc2s1"
14]
15
16batch = tokenizer(smiles, return_tensors='pt', padding=True, pad_to_multiple_of=8)
17
18# mean pooling
19outputs = roberta_zinc(**batch, output_hidden_states=True)
20full_embeddings = outputs[1][-1]
21mask = batch['attention_mask']
22embeddings = ((full_embeddings * mask.unsqueeze(-1)).sum(1) / mask.sum(-1).unsqueeze(-1))1from sentence_transformers import models, SentenceTransformer
2
3transformer = models.Transformer("entropy/roberta_zinc_480m",
4 max_seq_length=256,
5 model_args={"add_pooling_layer": False})
6
7pooling = models.Pooling(transformer.get_word_embedding_dimension(),
8 pooling_mode="mean")
9
10model = SentenceTransformer(modules=[transformer, pooling])
11
12# smiles should be canonicalized
13smiles = [
14 "Brc1cc2c(NCc3ccccc3)ncnc2s1",
15 "Brc1cc2c(NCc3ccccn3)ncnc2s1",
16 "Brc1cc2c(NCc3cccs3)ncnc2s1",
17 "Brc1cc2c(NCc3ccncc3)ncnc2s1",
18 "Brc1cc2c(Nc3ccccc3)ncnc2s1"
19]
20
21embeddings = model.encode(smiles, convert_to_tensor=True)