def __init__(self, max_seq_len, batch_size, with_cuda=True): # 解析配置文件,取得字典大小信息,以及字典文件路径 config_ = configparser.ConfigParser() config_.read('./config/sentiment_model_config.ini') self.config = config_['DEFAULT'] self.vocab_size = int(self.config['vocab_size']) with open(self.config['word2idx_path'], 'r', encoding='utf-8') as f: self.word2idx = json.load(f) # 初始化传入参数 self.max_seq_len = max_seq_len self.batch_size = batch_size # 设置执行设备 cuda_condition = torch.cuda.is_available() and with_cuda self.device = torch.device('cuda:0' if cuda_condition else 'cpu') # 初始化模型超参数 bertconfig = BertConfig(vocab_size=self.vocab_size) # 初始化BERT情感分析模型 self.bert_model = Bert_Sentiment_Analysis(config=bertconfig) # # 将模型发送到计算设备 self.bert_model.to(self.device) # # 转换为评估模式 self.bert_model.eval() self.hidden_dim = bertconfig.hidden_size self.positional_enc = self.init_positional_encoding() # 初始化文本预处理器 self.process_batch = preprocessing(hidden_dim=bertconfig.hidden_size, max_positions=max_seq_len, word2idx=self.word2idx) self.load_model(self.bert_model, dir_path=self.config['state_dict_dir'])
def __init__( self, max_seq_len, batch_size=1, with_cuda=False, ): # 加载配置文件 config_ = configparser.ConfigParser() config_.read("./model_config.ini") self.config = config_["DEFAULT"] # 词量, 注意在这里实际字(词)汇量 = vocab_size - 20, # 因为前20个token用来做一些特殊功能, 如padding等等 self.vocab_size = int(self.config["vocab_size"]) self.batch_size = batch_size # 是否使用GPU cuda_condition = torch.cuda.is_available() and with_cuda self.device = torch.device("cuda:0" if cuda_condition else "cpu") # 限定的单句最大长度 self.max_seq_len = max_seq_len # 初始化超参数的配置 bertconfig = BertConfig(vocab_size=self.vocab_size) # 初始化bert模型 self.bert_model = BertModel(config=bertconfig) self.bert_model.to(self.device) # 加载字典 self.word2idx = self.load_dic(self.config["word2idx_path"]) # 初始化预处理器 self.process_batch = preprocessing(hidden_dim=bertconfig.hidden_size, max_positions=max_seq_len, word2idx=self.word2idx) # 加载BERT预训练模型 self.load_model(self.bert_model, dir_path=self.config["state_dict_dir"]) # disable dropout layers self.bert_model.eval()
def __init__( self, max_seq_len, batch_size, with_cuda=True, # 是否使用GPU, 如未找到GPU, 则自动切换CPU ): config_ = configparser.ConfigParser() config_.read("./config/sentiment_model_config.ini") self.result = {} self.config = config_["DEFAULT"] self.vocab_size = int(self.config["vocab_size"]) self.batch_size = batch_size # 加载字典 with open(self.config["word2idx_path"], "r", encoding="utf-8") as f: self.word2idx = json.load(f) # 判断是否有可用GPU cuda_condition = torch.cuda.is_available() and with_cuda self.device = torch.device("cuda:0" if cuda_condition else "cpu") # 允许的最大序列长度 self.max_seq_len = max_seq_len # 定义模型超参数 bertconfig = BertConfig(vocab_size=self.vocab_size) # 初始化BERT情感分析模型 self.bert_model = Bert_Sentiment_Analysis(config=bertconfig) # 将模型发送到计算设备(GPU或CPU) self.bert_model.to(self.device) # 开去evaluation模型, 关闭模型内部的dropout层 self.bert_model.eval() # 初始化位置编码 self.hidden_dim = bertconfig.hidden_size self.positional_enc = self.init_positional_encoding() # 扩展位置编码的维度, 留出batch维度, # 即positional_enc: [batch_size, embedding_dimension] self.positional_enc = torch.unsqueeze(self.positional_enc, dim=0) # 初始化预处理器 self.process_batch = preprocessing(hidden_dim=bertconfig.hidden_size, max_positions=max_seq_len, word2idx=self.word2idx) # 加载BERT预训练模型 self.load_model(self.bert_model, dir_path=self.config["state_dict_dir"])