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'])
Exemple #2
0
 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"])