fastNLP icon indicating copy to clipboard operation
fastNLP copied to clipboard

提供对HuggingFace的Transformers的支持

Open onebula opened this issue 4 years ago • 3 comments

HuggingFace的Transformers上提供了大量SOTA的NLP预训练模型,包括很多先进的tiny模型。 可以作为fastNLP的embeddings导入(类似已有的BERT),但是目前没有办法直接使用,可否提供相应的API呢?

写了一段代码尝试了Albert的导入,下游任务使用了BertForSentenceMatching:

from torch import nn
from transformers import BertTokenizer, AlbertModel

class AlbertEmbedding(nn.Module):
    def __init__(self, tokenizer, model):
        super(AlbertEmbedding, self).__init__()
        self.tokenizer = tokenizer
        self.model = model
        self.model.include_cls_sep = True
        self.embedding_dim = self.model.config.hidden_size
    
    def forward(self, words):
        max_len = self.model.config.max_position_embeddings
        truncate_words = words[:, 0:max_len]
        truncate_words[:, -1] = self.tokenizer.sep_token_id
        outputs = self.model(truncate_words)
        hidden = outputs[0]
        return hidden

tokenizer = BertTokenizer.from_pretrained("voidful/albert_chinese_tiny")
albert = AlbertModel.from_pretrained("voidful/albert_chinese_tiny")

embed = AlbertEmbedding(tokenizer, albert)
model = BertForSentenceMatching(embed)

onebula avatar Apr 02 '20 03:04 onebula

嗯嗯,我们会加紧解决下这个问题。但是fastNLP的Embedding会比你写的这个稍微复杂一下,不过,我们尽快研究下如何引入更多的Embedding吧

yhcc avatar Apr 03 '20 16:04 yhcc

嗯嗯,我们会加紧解决下这个问题。但是fastNLP的Embedding会比你写的这个稍微复杂一下,不过,我们尽快研究下如何引入更多的Embedding吧 大佬您好!何时可以支持Albert呢?急急急

taotao033 avatar Sep 02 '21 14:09 taotao033

现在fastNLP有提供一个叫做TransformersEmbeddding的类,你可以看看是否可以用上。但是这个Embedding没有针对各种pretrain model做adaptation,性能上不一定能够发挥到模型的最大化。

yhcc avatar Sep 03 '21 01:09 yhcc