基于bert预训练后处理任务,根据intent做文本分类和slot做实体识别任务的简要总结

一、基于bert的分类任务识别intent

01 数据包含一段话和这段话所包含的intent+entity,然后从中识别出标注的intent+entity

  (1)处理数据部分,将文本数据切分为token列表。

  (2)将intent+entity构成的列表数据,然后为对应位置数字

  (3)将token根据bert模型,将文本形式转化为数字

  (4)将数据输入构建好的基于bert的预训练模型,并对结果进行finetinue,得到loss

          (5) 设置500epochs,每100epoch记录一次loss,然后用验证的数据,预测loss和对应的f1,presion,recall指标值。并将每一次最优的模型记录。

02 遇到的问题:

          (1) 对于  self.tokenizer.convert_tokens_to_ids(words)、self.bert.config.hidden_size这类型的参数还是比较不了解。

          (2)对于代码部分,这部分代码还没有弄懂是什么意思。

no_decay = ["bias", "LayerNorm.weight"]
        optimizer_grouped_parameters = [
            {
                "params": [
                    p
                    for n, p in model.named_parameters()
                    if not any(nd in n for nd in no_decay) and p.requires_grad
                ],
                "weight_decay": config["model"]["weight_decay"],
            },
            {
                "params": [
                    p
                    for n, p in model.named_parameters()
                    if any(nd in n for nd in no_decay) and p.requires_grad
                ],
                "weight_decay": 0.0,
            },
        ]
        optimizer = AdamW(
            optimizer_grouped_parameters,
            lr=config["model"]["learning_rate"],
            eps=config["model"]["adam_epsilon"],
        )
        scheduler = get_linear_schedule_with_warmup(
            optimizer,
            num_warmup_steps=config["model"]["warmup_steps"],
            num_training_steps=config["model"]["max_step"],
        )

 (3)writer = SummaryWriter(log_dir)这个还没有弄懂是什么意思

         二、基于bert的序列标注任务识别slot

  这一部分,因为时间原因,只是跑通了代码。还没有时间看更多的细节。后续做为补充。

  

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一段基于BERT预训练模型进行微调的文本分类代码,使用PyTorch实现: ```python import torch import torch.nn as nn from transformers import BertTokenizer, BertForSequenceClassification # 加载预训练BERT模型和分词器 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased') # 定义分类器,输出层为2个类别 classifier = nn.Linear(model.config.hidden_size, 2) # 将BERT模型和分类器拼接成一个完整的模型 model.classifier = classifier # 加载数据 train_dataset = ... val_dataset = ... # 定义训练器 optimizer = torch.optim.Adam(model.parameters(), lr=1e-5) criterion = nn.CrossEntropyLoss() # 开始训练 for epoch in range(num_epochs): # 训练 model.train() for inputs, labels in train_dataset: optimizer.zero_grad() outputs = model(inputs['input_ids'], attention_mask=inputs['attention_mask'], labels=labels) loss = criterion(outputs.logits, labels) loss.backward() optimizer.step() # 验证 model.eval() with torch.no_grad(): total_loss = 0.0 total_correct = 0 for inputs, labels in val_dataset: outputs = model(inputs['input_ids'], attention_mask=inputs['attention_mask'], labels=labels) total_loss += criterion(outputs.logits, labels).item() total_correct += (outputs.logits.argmax(-1) == labels).sum().item() val_loss = total_loss / len(val_dataset) val_acc = total_correct / len(val_dataset) print(f"Epoch {epoch}: Val Loss: {val_loss:.4f}, Val Acc: {val_acc:.4f}") ``` 在这段代码中,我们首先加载了预训练BERT模型和分词器,然后定义了一个分类器,将其与BERT模型拼接在一起,得到一个完整的分类模型。接着加载了训练和验证数据,并定义了训练器。最后,进行了训练和验证,并输出了验证损失和准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值