| import torch.nn.functional as F |
| from transformers import AutoTokenizer, AutoModel, AutoConfig |
| from transformers import BertModel, BertTokenizer |
| import torch.nn as nn |
| import torch |
| import os |
| from collections import OrderedDict |
| import copy |
|
|
|
|
| class MyModel(nn.Module): |
| def __init__(self, nlp_model, mode): |
| super().__init__() |
| self.nlp_model = nlp_model |
| if mode == 'large': |
| nb_feature = 1024 |
| else: |
| nb_feature = 768 |
|
|
| self.cls = nn.Linear(nb_feature, 2) |
|
|
|
|
| def forward(self, **data): |
| x = self.nlp_model(**data) |
| y = self.cls(x['last_hidden_state'][:, 0]) |
| return y |
|
|
|
|
| def get_model(cfg, mode='large'): |
| |
| |
| tokenizer = AutoTokenizer.from_pretrained(cfg['pretrained_transformers'], use_fast=True, cache_dir=cfg['cache_dir']) |
|
|
| nlp_model = AutoModel.from_pretrained(cfg['pretrained_transformers'], cache_dir=cfg['cache_dir']) |
| model = MyModel(nlp_model=nlp_model, mode=mode) |
|
|
| return_dict = { |
| 'model': model, |
| 'tokenizer': tokenizer, |
| } |
| return return_dict |
|
|
|
|