pipeline_tag: 句子相似度
tags:
widget:
- source_sentence: "[]CC[]"
sentences:
kuelumbus/polyBERT
这是polyBERT:一个化学语言模型,旨在实现完全由机器驱动的超快聚合物信息学。polyBERT将PSMILES字符串映射为600维密集指纹。这些指纹以数值形式表示聚合物化学结构。请参阅LICENSE文件中的许可协议。
使用方法(Sentence-Transformers)
安装sentence-transformers后,使用此模型变得非常简单:
pip install sentence-transformers
然后您可以像这样使用模型:
from sentence_transformers import SentenceTransformer
psmiles_strings = ["[*]CC[*]", "[*]COC[*]"]
polyBERT = SentenceTransformer('kuelumbus/polyBERT')
embeddings = polyBERT.encode(psmiles_strings)
print(embeddings)
使用方法(HuggingFace Transformers)
如果没有安装sentence-transformers,您可以这样使用模型:首先,将输入传递给转换器模型,然后需要在上下文化的词嵌入之上应用正确的池化操作。
from transformers import AutoTokenizer, AutoModel
import torch
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
psmiles_strings = ["[*]CC[*]", "[*]COC[*]"]
tokenizer = AutoTokenizer.from_pretrained('kuelumbus/polyBERT')
polyBERT = AutoModel.from_pretrained('kuelumbus/polyBERT')
encoded_input = tokenizer(psmiles_strings, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = polyBERT(**encoded_input)
fingerprints = mean_pooling(model_output, encoded_input['attention_mask'])
print("指纹:")
print(fingerprints)
评估结果
参见https://github.com/Ramprasad-Group/polyBERT及arXiv上的论文。
完整模型架构
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: DebertaV2Model
(1): Pooling({'word_embedding_dimension': 600, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)
引用与作者
Kuenneth, C., Ramprasad, R. polyBERT:一种化学语言模型,旨在实现完全由机器驱动的超快聚合物信息学。《自然通讯》14, 4099 (2023)。https://doi.org/10.1038/s41467-023-39868-6