[docs]classProtTransBertBFDEmbedder(ProtTransBertBaseEmbedder):"""ProtTrans-Bert-BFD Embedder (ProtBert-BFD) Elnaggar, Ahmed, et al. "ProtTrans: Towards Cracking the Language of Life's Code Through Self-Supervised Deep Learning and High Performance Computing." arXiv preprint arXiv:2007.06225 (2020). https://arxiv.org/abs/2007.06225 """_model:BertModelname="prottrans_bert_bfd"embedding_dimension=1024number_of_layers=1
[docs]def__init__(self,**kwargs):"""Initialize Bert embedder. :param model_directory: :param half_precision_model: """super().__init__(**kwargs)self._model_directory=self._options["model_directory"]self._half_precision_model=self._options.get("half_precision_model",False)# make modelself._model=BertModel.from_pretrained(self._model_directory)# Compute in half precision, which is a lot faster and saves us half the memoryifself._half_precision_model:self._model=self._model.half()self._model=self._model.eval().to(self._device)self._model_fallback=Noneself._tokenizer=BertTokenizer(str(Path(self._model_directory)/"vocab.txt"),do_lower_case=False)
def_get_fallback_model(self)->BertModel:""" Returns the CPU model """ifnotself._model_fallback:self._model_fallback=BertModel.from_pretrained(self._model_directory).eval()returnself._model_fallback