Day08【基于预训练模型分词器实现交互型文本匹配】

基于预训练模型分词器实现交互型文本匹配

在这里插入图片描述

目标

本文基于预训练模型bert分词器BertTokenizer,将输入的文本以文本对的形式,送入到分词器中得到文本对的词嵌入向量,之后经过若干网络层,输出在已知2类别匹配或不匹配的概率分布,从而实现一个简单的句子对级别的匹配任务。

数据准备

预训练模型bert-base-chinese预训练模型

类别标签文件schema.json

{
   
   
  "停机保号": 0,
  "密码重置": 1,
  "宽泛业务问题": 2,
  "亲情号码设置与修改": 3,
  "固话密码修改": 4,
  "来电显示开通": 5,
  "亲情号码查询": 6,
  "密码修改": 7,
  "无线套餐变更": 8,
  "月返费查询": 9,
  "移动密码修改": 10,
  "固定宽带服务密码修改": 11,
  "UIM反查手机号": 12,
  "有限宽带障碍报修": 13,
  "畅聊套餐变更": 14,
  "呼叫转移设置": 15,
  "短信套餐取消": 16,
  "套餐余量查询": 17,
  "紧急停机": 18,
  "VIP密码修改": 19,
  "移动密码重置": 20,
  "彩信套餐变更": 21,
  "积分查询": 22,
  "话费查询": 23,
  "短信套餐开通立即生效": 24,
  "固话密码重置": 25,
  "解挂失": 26,
  "挂失": 27,
  "无线宽带密码修改": 28
}

训练集数据train.json训练集数据

验证集数据valid.json验证集数据

参数配置

config.py

# -*- coding: utf-8 -*-

"""
配置参数信息
"""

Config = {
   
   
    "model_path": "model_output",
    "schema_path": "../data/schema.json",
    "train_data_path": "../data/train.json",
    "valid_data_path": "../data/valid.json",
    "pretrain_model_path":r"../../../bert-base-chinese",
    "vocab_path":r"../../../bert-base-chinese/vocab.txt",
    "max_length": 20,
    "hidden_size": 256,
    "epoch": 10,
    "batch_size": 128,
    "epoch_data_size": 10000,     #每轮训练中采样数量
    "positive_sample_rate":0.5,  #正样本比例
    "optimizer": "adam",
    "learning_rate": 1e-3,
}

数据处理

loader.py

# -*- coding: utf-8 -*-

import json
import re
import os
import torch
import random
import logging
from torch.utils.data import Dataset, DataLoader
from collections import defaultdict
from transformers import BertTokenizer
"""
数据加载
"""

logging.getLogger("transformers").setLevel(logging.ERROR)

class DataGenerator:
    def __init__(self, data_path, config):
        self.config = config
        self.path = data_path
        self.tokenizer = load_vocab(config["vocab_path"])
        self.config["vocab_size"] = len(self.tokenizer.vocab)
        self.schema = load_schema(config["schema_path"])
        self.train_data_size = config["epoch_data_size"] #由于采取随机采样,所以需要设定一个采样数量,否则可以一直采
        self.max_length = config["max_length"]
        self.data_type = None  #用来标识加载的是训练集还是测试集 "train" or "test"
        self.load()

    def load(self):
        self.data = []
        self.knwb = defaultdict(list)
        with open(self.path, encoding="utf8") as f:
            for line in f
### 寻找 Day2Night 预训练模型 对于图像处理或计算机视觉项目中的 day2night 转换需求,可以考虑使用基于 GAN (Generative Adversarial Networks) 的方法来实现这一目标。这些模型能够学习白天和夜晚场景之间的映射关系,并有效地将日间图像转换成夜间效果。 #### 使用 CycleGAN 实现 Day2Night 转换 CycleGAN 是一种无监督的图像到图像翻译网络,在不需要配对样本的情况下也能很好地工作。这意味着即使没有对应的日夜图片对也可以训练该模型[^1]。 ```python import torch from torchvision import transforms from PIL import Image from cyclegan.models.cycle_gan_model import CycleGANModel def load_day2night_model(model_path='checkpoints/day2night/latest_net_G_A.pth'): device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') opt = { "input_nc": 3, "output_nc": 3, "ngf": 64, "ndf": 64, "netG": "resnet_9blocks", "norm": "instance", "no_dropout": True, "init_type": "normal", "init_gain": 0.02, "gpu_ids":[], "isTrain": False } model = CycleGANModel(opt) state_dict = torch.load(model_path, map_location=device) model.netG_A.load_state_dict(state_dict['model']) return model.to(device) def transform_image(image_path): transform_list = [ transforms.Resize((256, 256)), transforms.ToTensor(), transforms.Normalize(mean=[0.5]*3,std=[0.5]*3)] transform = transforms.Compose(transform_list) img = Image.open(image_path).convert('RGB') tensor_img = transform(img).unsqueeze(0) return tensor_img def apply_day2night_conversion(input_image_path, output_image_path): model = load_day2night_model() input_tensor = transform_image(input_image_path) with torch.no_grad(): result_tensor = model.netG_A(input_tensor) result_image = ((result_tensor.squeeze().permute(1, 2, 0)+1)/2*255).clamp_(0, 255).byte().numpy() from matplotlib.pyplot import imsave imsave(output_image_path, result_image) ``` 此代码片段展示了如何加载预训练好的 CycleGAN 模型并将其用于单张图片的日转夜操作。需要注意的是,实际应用时可能还需要调整参数以适应特定的数据集特性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值