迁移学习:解锁AI高效学习与泛化能力的密钥

引言
  • 迁移学习定义代码示例

    import torch
    import torch.nn as nn
    from torchvision import models
    
    # 定义迁移学习函数
    def transfer_learning(model_name, num_classes, freeze_feature_extractor=True):
        """
        实现预训练模型的知识迁移
        
        参数:
            model_name: 预训练模型名称 (如'resnet18')
            num_classes: 新任务的类别数
            freeze_feature_extractor: 是否冻结特征提取层
        """
        # 加载预训练模型
        pretrained_model = getattr(models, model_name)(pretrained=True)
        
        # 冻结特征提取层参数
        if freeze_feature_extractor:
            for param in pretrained_model.parameters():
                param.requires_grad = False
        
        # 修改最后一层适配新任务
        num_ftrs = pretrained_model.fc.in_features
        pretrained_model.fc = nn.Linear(num_ftrs, num_classes)
        
        return pretrained_model
    
    # 使用示例
    model = transfer_learning('resnet18', num_classes=10)
    print(model)
    

    关键实现说明

    冻结特征提取层能保留预训练模型学到的通用特征,只训练新添加的分类层。这种方法适用于新任务数据量较少时,能有效避免过拟合。

    修改输出层是迁移学习的标准做法,将原始模型的输出维度调整为适应新任务的类别数。PyTorch的torchvision.models模块提供了多种预训练模型可直接调用。

    进阶用法示例

    # 部分层解冻训练
    model = transfer_learning('resnet50', num_classes=5, freeze_feature_extractor=False)
    
    # 仅解冻最后两个块
    children = list(model.children())[:-2]
    for child in children:
        for param in child.parameters():
            param.requires_grad = False
    

    该实现展示了迁移学习的核心思想:利用预训练模型作为特征提取器,通过调整模型结构适配新任务,同时控制参数更新范围平衡模型适应性和计算效率。

  • 核心价值:解决数据稀缺、降低训练成本、提升模型泛化能力。
  • 应用场景:计算机视觉、自然语言处理、医疗诊断等。
迁移学习的基本原理

预训练+微调范式

mc_dropout = 20  # Monte Carlo采样次数
with torch.no_grad():
    outputs = torch.stack([model(x) for _ in range(mc_dropout)])
    uncertainty = outputs.var(dim=0).mean()

金融风控系统

class TimeSeriesTransformer(nn.Module):
    def __init__(self, d_model=64):
        super().__init__()
        self.encoder_layer = nn.TransformerEncoderLayer(d_model, nhead=4)
        self.transformer = nn.TransformerEncoder(self.encoder_layer, num_layers=3)
        
    def forward(self, src):
        return self.transformer(src.permute(1,0,2))  # [seq_len, batch, features]

性能表现对比

指标 传统方法 预训练方法
训练时间 数天至数周 数小时至数天
数据需求 数万至数百万样本 数百至数千样本
领域适应性 差(需完全重训) 强(少量微调)
初始准确率 随机初始化水平 接近SOTA水平

应用场景差异

传统机器学习适用场景

预训练模型优势场景

技术演进趋势

实际案例对比

案例1:文本情感分析

案例2:医学影像分类

案例3:客服机器人

  • 知识迁移的三种形式:特征迁移、模型迁移、关系迁移。
  • 关键假设:源任务与目标任务之间存在相关性。
  • 与传统机器学习的对比:从零训练 vs. 复用已有知识

    训练方式差异

    传统机器学习

  • 从零开始训练:每个新任务都需要从头构建模型架构并训练参数
  • 数据依赖性:完全依赖特定任务标注数据,对数据量和质量要求极高
  • 计算资源消耗:每次训练都需要大量计算资源,如GPU/TPU集群长时间运行
  • 典型场景:早期的图像分类模型(如AlexNet)、文本分类器等
  • 知识复用:基于预训练模型的已有知识(如BERT、GPT等)
  • 迁移学习:只需少量目标领域数据进行微调
  • 资源效率:显著减少训练时间和计算资源消耗
  • 典型优势代码实现(医疗/金融数据稀缺领域)

    以下代码示例聚焦于小样本学习(Few-shot Learning)和迁移学习(Transfer Learning),适用于医疗影像分类或金融风控等数据稀缺场景:

    import torch
    import torchvision
    from torch import nn
    from torch.optim import AdamW
    from torch.utils.data import DataLoader
    
    # 使用预训练模型作为特征提取器(医疗影像示例)
    pretrained_model = torchvision.models.resnet18(weights='IMAGENET1K_V1')
    for param in pretrained_model.parameters():
        param.requires_grad = False  # 冻结底层参数
    
    # 替换最后的全连接层(适应新任务)
    num_classes = 5  # 医疗影像的疾病分类数
    pretrained_model.fc = nn.Sequential(
        nn.Linear(512, 256),
        nn.ReLU(),
        nn.Dropout(0.5),
        nn.Linear(256, num_classes)
    )
    
    # 小样本数据增强策略
    train_transform = torchvision.transforms.Compose([
        torchvision.transforms.RandomResizedCrop(224),
        torchvision.transforms.RandomHorizontalFlip(),
        torchvision.transforms.ColorJitter(brightness=0.2, contrast=0.2),
        torchvision.transforms.ToTensor(),
        torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])
    
    # 金融时序数据特征提取(LSTM+Attention示例)
    class FinancialModel(nn.Module):
        def __init__(self, input_dim=10):
            super().__init__()
            self.lstm = nn.LSTM(input_dim, 64, bidirectional=True)
            self.attention = nn.Sequential(
                nn.Linear(128, 64),
                nn.Tanh(),
                nn.Linear(64, 1, bias=False)
            )
            self.classifier = nn.Linear(128, 1)  # 二分类风控模型
    
        def forward(self, x):
            lstm_out, _ = self.lstm(x)  # [seq_len, batch, 2*64]
            attention_weights = torch.softmax(self.attention(lstm_out), dim=0)
            context_vector = torch.sum(attention_weights * lstm_out, dim=0)
            return torch.sigmoid(self.classifier(context_vector))
    

    关键技术创新点

    元学习框架(MAML)实现

    # 模型无关的元学习(Model-Agnostic Meta-Learning)
    def maml_update(model, support_set, inner_lr=0.01):
        fast_weights = OrderedDict(model.named_parameters())
        for data, label in support_set:
            logits = model.functional_forward(data, fast_weights)
            loss = F.cross_entropy(logits, label)
            grads = torch.autograd.grad(loss, fast_weights.values(), create_graph=True)
            fast_weights = OrderedDict(
                (name, param - inner_lr * grad)
                for (name, param), grad in zip(fast_weights.items(), grads)
            )
        return fast_weights
    

    对比学习预训练(适用于小样本)

    # SimCLR风格的对比损失
    def contrastive_loss(features, temperature=0.07):
        batch_size = features.shape[0] // 2  # 正样本对
        labels = torch.cat([torch.arange(batch_size) for _ in range(2)], dim=0)
        labels = (labels.unsqueeze(0) == labels.unsqueeze(1)).float()
        features = F.normalize(features, dim=1)
        similarity_matrix = torch.matmul(features, features.T)
        mask = torch.eye(labels.shape[0], dtype=torch.bool)
        positives = similarity_matrix[labels.bool()].view(labels.shape[0], -1)
        negatives = similarity_matrix[~labels.bool()].view(labels.shape[0], -1)
        logits = torch.cat([positives, negatives], dim=1)
        labels = torch.zeros(logits.shape[0], dtype=torch.long)
        loss = F.cross_entropy(logits / temperature, labels)
        return loss
    

    实际应用建议

    医疗影像诊断系统

  • 使用DenseNet-121预训练模型作为基础架构
  • 采用MixUp数据增强策略:lambda x1,x2: 0.8*x1 + 0.2*x2
  • 实现不确定性估计模块:
  • 集成Transformer时序特征提取:
  • 简单任务:如线性回归预测房价
  • 数据丰富:拥有大量高质量标注数据
  • 计算受限:边缘设备等资源受限环境
  • 解释性要求:需要完全透明的模型决策过程
  • NLP任务:文本分类、问答系统、机器翻译
  • 跨模态应用:图文生成、视频理解
  • 小样本学习:医疗影像诊断、法律文书分析
  • 持续学习:通过渐进式微调适应新任务
  • 参数规模:从百万级(MB)到千亿级(GB)参数量的跃迁
  • 训练范式:从监督学习到自监督/半监督学习
  • 架构创新:Transformer逐步取代CNN/RNN成为主流
  • 多模态融合:单一模型处理文本、图像、音频等多种输入
  • 传统方法:使用TF-IDF特征+SVM分类器,准确率约85%
  • 预训练方法:微调BERT模型,准确率可达92-95%
  • 传统方法:定制CNN架构,需要5万+标注样本
  • 预训练方法:使用MedCLIP等医学预训练模型,仅需500样本微调即可达到相当性能
  • 传统方法:基于规则引擎+检索模型,维护成本高
  • 预训练方法:微调GPT类模型,支持上下文理解,减少70%人工规则编写
迁移学习的核心方法
  • 基于特征的迁移
    使用预训练模型(如ResNet、BERT)提取通用特征,微调顶层结构。
    案例:ImageNet预训练模型用于医学图像分类。

  • 基于模型的迁移
    共享部分模型参数,冻结底层网络,调整顶层结构。
    示例:Fine-tuning策略在NLP任务中的应用。

  • 基于关系的迁移
    适用于非独立同分布数据,如跨领域推荐系统。

技术挑战与解决方案

两种方法均可直接插入到深度学习训练流程中,作为额外的正则化项与其他损失函数联合优化。MMD更适合处理非线性分布差异,而CORAL计算效率更高。

  • 负迁移问题
    源任务与目标任务差异过大导致性能下降。
    解决方案:领域自适应(Domain Adaptation)、对抗训练。

  • 数据分布差异

    以下是使用最大均值差异(MMD)和CORAL损失对齐特征空间的代码实现,采用PyTorch框架,包含核心计算逻辑和示例调用方式:

    MMD损失实现

    import torch
    
    def mmd_loss(source_features, target_features, kernel_mul=2.0, kernel_num=5):
        batch_size = source_features.size(0)
        total_features = torch.cat([source_features, target_features], dim=0)
        
        # 计算高斯核矩阵
        kernel_matrix = 0
        for i in range(kernel_num):
            sigma = kernel_mul ** (i - kernel_num // 2)
            pairwise_dist = torch.cdist(total_features, total_features, p=2) ** 2
            kernel_matrix += torch.exp(-pairwise_dist / sigma)
        
        kernel_matrix = kernel_matrix / kernel_num
        
        # 分割核矩阵
        k_ss = kernel_matrix[:batch_size, :batch_size]
        k_tt = kernel_matrix[batch_size:, batch_size:]
        k_st = kernel_matrix[:batch_size, batch_size:]
        
        # 计算MMD值
        mmd = k_ss.mean() + k_tt.mean() - 2 * k_st.mean()
        return mmd
    

    CORAL损失实现

    def coral_loss(source_features, target_features):
        # 计算协方差矩阵
        def _covariance_matrix(x):
            batch_size = x.size(0)
            dim = x.size(1)
            x = x - x.mean(0, keepdim=True)
            return 1/(batch_size-1) * x.T @ x
        
        cov_source = _covariance_matrix(source_features)
        cov_target = _covariance_matrix(target_features)
        
        # 计算Frobenius范数差异
        diff = cov_source - cov_target
        loss = (diff ** 2).sum() / (4 * source_features.size(1)**2)
        return loss
    

    使用示例

    # 特征维度为256的示例数据
    source_feats = torch.randn(64, 256)  # 源域特征
    target_feats = torch.randn(64, 256)  # 目标域特征
    
    # 计算MMD损失
    mmd_value = mmd_loss(source_feats, target_feats)
    print(f"MMD Loss: {mmd_value.item():.4f}")
    
    # 计算CORAL损失
    coral_value = coral_loss(source_feats, target_feats)
    print(f"CORAL Loss: {coral_value.item():.4f}")
    

    关键参数说明

  • MMD参数kernel_mul控制核函数的宽度范围,kernel_num指定使用的核函数数量。增加核函数数量可以提高匹配精度但会增加计算量。
  • CORAL特性:无需调参,直接计算协方差矩阵差异,适合处理线性分布差异。
  • 特征归一化:建议在实际使用前对输入特征进行L2归一化,增强数值稳定性。
  • 计算资源限制
    轻量化方法:知识蒸馏(Knowledge Distillation)、参数共享。

前沿进展与案例

扩展功能建议

未来展望
结语

:大纲可根据具体需求调整深度,例如增加数学公式(如MMD计算式)或代码示例(PyTorch微调片段)。

迁移学习基础实现

使用TensorFlow/Keras框架实现一个简单的迁移学习模型,基于预训练的ResNet50进行图像分类任务:

import tensorflow as tf
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model

# 加载预训练模型(不包括顶层)
base_model = ResNet50(weights='imagenet', include_top=False)

# 冻结预训练层的权重
for layer in base_model.layers:
    layer.trainable = False

# 添加自定义分类层
x = GlobalAveragePooling2D()(base_model.output)
x = Dense(1024, activation='relu')(x)
predictions = Dense(num_classes, activation='softmax')(x)

# 构建完整模型
model = Model(inputs=base_model.input, outputs=predictions)

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

特征提取器模式

将预训练模型作为固定特征提取器,提取特征后训练独立分类器:

from sklearn.svm import SVC

# 提取特征
feature_extractor = Model(inputs=base_model.input,
                         outputs=base_model.get_layer('avg_pool').output)
train_features = feature_extractor.predict(train_images)

# 训练分类器
clf = SVC(kernel='linear')
clf.fit(train_features, train_labels)

微调模式实现

解冻部分顶层进行微调训练:

# 解冻最后两个block
for layer in base_model.layers[-20:]:
    layer.trainable = True

# 重新编译模型(必须)
model.compile(optimizer=tf.keras.optimizers.Adam(1e-5),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 使用更低的学习率训练
model.fit(train_data, epochs=10, validation_data=val_data)

跨域适应实现

使用MMD损失实现领域自适应:

def mmd_loss(source_features, target_features):
    xx = tf.matmul(source_features, source_features, transpose_b=True)
    yy = tf.matmul(target_features, target_features, transpose_b=True)
    xy = tf.matmul(source_features, target_features, transpose_b=True)
    return tf.reduce_mean(xx) + tf.reduce_mean(yy) - 2 * tf.reduce_mean(xy)

# 在模型训练循环中加入
source_features = feature_extractor(source_images)
target_features = feature_extractor(target_images)
adapt_loss = mmd_loss(source_features, target_features)
total_loss = classification_loss + 0.1 * adapt_loss

多任务学习实现

共享底层网络,输出多个任务头:

# 共享特征提取层
shared = base_model.output
shared = GlobalAveragePooling2D()(shared)

# 任务特定输出层
task1_output = Dense(10, activation='softmax', name='task1')(shared)
task2_output = Dense(1, activation='sigmoid', name='task2')(shared)

# 多输出模型
model = Model(inputs=base_model.input,
              outputs=[task1_output, task2_output])

# 多损失函数
model.compile(optimizer='adam',
              loss={'task1': 'categorical_crossentropy',
                    'task2': 'binary_crossentropy'},
              loss_weights=[1., 0.2])

迁移学习相关中文文献推荐

获取途径

如需更具体的领域(如医疗、金融等场景的迁移学习应用),可进一步补充关键词进行检索。

  • 跨模态迁移学习

    CLIP模型图像与文本联合表征迁移代码实现

    以下代码基于PyTorch和Hugging Face的transformers库实现CLIP模型的图像与文本联合表征迁移功能,包含特征提取和相似度计算:

    import torch
    from PIL import Image
    from transformers import CLIPProcessor, CLIPModel
    
    # 加载预训练CLIP模型和处理器
    model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
    processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
    
    def get_image_text_embeddings(image_path, text_list):
        """
        获取图像和文本的联合嵌入表征
        :param image_path: 图像文件路径
        :param text_list: 待比较的文本列表
        :return: 图像嵌入、文本嵌入
        """
        # 加载并预处理图像
        image = Image.open(image_path)
        
        # 处理输入数据
        inputs = processor(
            text=text_list,
            images=image,
            return_tensors="pt",
            padding=True
        )
        
        # 前向传播获取特征
        outputs = model(**inputs)
        
        # 提取图像和文本特征
        image_embeddings = outputs.image_embeds
        text_embeddings = outputs.text_embeds
        
        return image_embeddings, text_embeddings
    
    def calculate_similarity(image_embeddings, text_embeddings):
        """
        计算图像与文本的相似度
        :param image_embeddings: 图像特征向量
        :param text_embeddings: 文本特征向量
        :return: 相似度分数矩阵
        """
        # 归一化特征向量
        image_embeddings = image_embeddings / image_embeddings.norm(dim=-1, keepdim=True)
        text_embeddings = text_embeddings / text_embeddings.norm(dim=-1, keepdim=True)
        
        # 计算余弦相似度
        logit_scale = model.logit_scale.exp()
        similarity = logit_scale * image_embeddings @ text_embeddings.t()
        
        return similarity.softmax(dim=-1)
    
    # 示例使用
    if __name__ == "__main__":
        image_path = "example.jpg"
        text_list = ["a photo of a cat", "a picture of a dog", "an image of a landscape"]
        
        # 获取特征
        image_embeds, text_embeds = get_image_text_embeddings(image_path, text_list)
        
        # 计算相似度
        similarity = calculate_similarity(image_embeds, text_embeds)
        print("Image-text similarity scores:", similarity)
    

    关键功能说明

    模型加载
    使用CLIPModel.from_pretrained加载预训练的CLIP模型,基础版本为clip-vit-base-patch32,包含视觉Transformer和文本Transformer编码器。

    特征提取
    get_image_text_embeddings函数将图像和文本输入通过CLIP的共享嵌入空间映射为统一维度的特征向量(默认512维)。图像特征通过ViT提取,文本特征通过Transformer编码器提取。

    相似度计算
    calculate_similarity函数实现以下操作:

  • 对特征向量进行L2归一化
  • 通过可学习的温度参数logit_scale缩放相似度
  • 批处理支持:修改输入处理逻辑以支持多图像和多文本的批处理
  • 特征存储:将提取的特征向量保存为numpy数组或数据库以便后续检索
  • 跨模态检索:实现基于相似度的图像到文本或文本到图像的检索系统
  • 微调支持:添加训练逻辑以支持在自定义数据上微调CLIP模型
    • 计算余弦相似度矩阵
    • 通过softmax转换为概率分布
    • 元学习与迁移结合
      MAML算法快速适应新任务。

    • 工业级应用
      自动驾驶中仿真环境到真实场景的迁移。

    • 自监督学习推动无监督迁移。
    • 可解释性研究提升迁移可靠性。
    • 边缘设备上的轻量化迁移部署。
    • 迁移学习在AI民主化中的角色。
    • 呼吁关注伦理与公平性问题。

    通过合理运用这些技术,即使在数据稀缺场景下,也能显著提升深度学习模型的泛化性能。关键在于根据具体任务需求,选择适当的预训练模型和元学习方法,并进行针对性的优化调整。

    1. 《迁移学习》
      作者:杨强
      出版社:机械工业出版社
      该书系统介绍了迁移学习的理论基础、方法与应用,涵盖领域适应、多任务学习等关键技术,适合初学者和研究者。

    2. 《迁移学习:理论与实践》
      作者:王晋东等
      出版社:电子工业出版社
      结合具体案例讲解迁移学习的算法实现,包括深度迁移学习、对抗迁移学习等前沿方向。

    3. 《基于深度学习的迁移学习技术研究进展》
      期刊:自动化学报
      该论文综述了深度学习与迁移学习的结合方法,重点分析模型微调、特征映射等技术的应用场景与局限性。

    4. 《跨领域迁移学习研究综述》
      期刊:计算机研究与发展
      详细探讨了不同领域间知识迁移的挑战与解决方案,涉及文本、图像等多模态数据。

    5. 《小样本学习中的迁移学习方法》
      期刊:人工智能

      针对数据稀缺场景,如何通过预训练模型和元学习提升模型泛化能力

    6. 预训练模型的应用

      • 迁移学习策略

        • 采用领域自适应(Domain Adaptation)技术
        • 具体实施步骤:
          1. 在大规模通用数据集(如ImageNet)上预训练基础模型
          2. 对模型进行微调(Fine-tuning),通常只调整最后几层
          3. 使用目标领域的小样本数据进行二次微调
        • BERT在文本分类任务中的迁移学习示例

          以下代码展示如何使用Hugging Face的Transformers库,基于预训练的BERT模型进行微调,完成文本分类任务(如情感分析)。环境需要Python 3.8+、PyTorch和Transformers库。

        • m.ixzdpb.cn/article/20250909_438438.html
          m.ixzdpb.cn/article/20250909_98941452.html
          m.gkhoh.cn/article/20250909_438438.html
          m.gkhoh.cn/article/20250909_98941452.html
          m.wmrltx.cn/article/20250909_438438.html
          m.wmrltx.cn/article/20250909_98941452.html
          m.cdaph.cn/article/20250909_438438.html
          m.cdaph.cn/article/20250909_98941452.html
          m.tqcna.cn/article/20250909_438438.html
          m.tqcna.cn/article/20250909_98941452.html
          m.ixzdpb.cn/article/20250909_413413.html
          m.ixzdpb.cn/article/20250909_49014269.html
          m.gkhoh.cn/article/20250909_413413.html
          m.gkhoh.cn/article/20250909_49014269.html
          m.wmrltx.cn/article/20250909_413413.html
          m.wmrltx.cn/article/20250909_49014269.html
          m.cdaph.cn/article/20250909_413413.html
          m.cdaph.cn/article/20250909_49014269.html
          m.tqcna.cn/article/20250909_413413.html
          m.tqcna.cn/article/20250909_49014269.html
          m.ixzdpb.cn/article/20250909_445445.html
          m.ixzdpb.cn/article/20250909_46717075.html
          m.gkhoh.cn/article/20250909_445445.html
          m.gkhoh.cn/article/20250909_46717075.html
          m.wmrltx.cn/article/20250909_445445.html
          m.wmrltx.cn/article/20250909_46717075.html
          m.cdaph.cn/article/20250909_445445.html
          m.cdaph.cn/article/20250909_46717075.html
          m.tqcna.cn/article/20250909_445445.html
          m.tqcna.cn/article/20250909_46717075.html
          m.ixzdpb.cn/article/20250909_327327.html
          m.ixzdpb.cn/article/20250909_27176144.html
          m.gkhoh.cn/article/20250909_327327.html
          m.gkhoh.cn/article/20250909_27176144.html
          m.wmrltx.cn/article/20250909_327327.html
          m.wmrltx.cn/article/20250909_27176144.html
          m.cdaph.cn/article/20250909_327327.html
          m.cdaph.cn/article/20250909_27176144.html
          m.tqcna.cn/article/20250909_327327.html
          m.tqcna.cn/article/20250909_27176144.html
          m.ixzdpb.cn/article/20250909_001001.html
          m.ixzdpb.cn/article/20250909_35292140.html
          m.gkhoh.cn/article/20250909_001001.html
          m.gkhoh.cn/article/20250909_35292140.html
          m.wmrltx.cn/article/20250909_001001.html
          m.wmrltx.cn/article/20250909_35292140.html
          m.cdaph.cn/article/20250909_001001.html
          m.cdaph.cn/article/20250909_35292140.html
          m.tqcna.cn/article/20250909_001001.html
          m.tqcna.cn/article/20250909_35292140.html
          m.ixzdpb.cn/article/20250909_187187.html
          m.ixzdpb.cn/article/20250909_93960434.html
          m.gkhoh.cn/article/20250909_187187.html
          m.gkhoh.cn/article/20250909_93960434.html
          m.wmrltx.cn/article/20250909_187187.html
          m.wmrltx.cn/article/20250909_93960434.html
          m.cdaph.cn/article/20250909_187187.html
          m.cdaph.cn/article/20250909_93960434.html
          m.tqcna.cn/article/20250909_187187.html
          m.tqcna.cn/article/20250909_93960434.html
          m.ixzdpb.cn/article/20250909_498498.html
          m.ixzdpb.cn/article/20250909_98994835.html
          m.gkhoh.cn/article/20250909_498498.html
          m.gkhoh.cn/article/20250909_98994835.html
          m.wmrltx.cn/article/20250909_498498.html
          m.wmrltx.cn/article/20250909_98994835.html
          m.cdaph.cn/article/20250909_498498.html
          m.cdaph.cn/article/20250909_98994835.html
          m.tqcna.cn/article/20250909_498498.html
          m.tqcna.cn/article/20250909_98994835.html
          m.ixzdpb.cn/article/20250909_700700.html
          m.ixzdpb.cn/article/20250909_42138741.html
          m.gkhoh.cn/article/20250909_700700.html
          m.gkhoh.cn/article/20250909_42138741.html
          m.wmrltx.cn/article/20250909_700700.html
          m.wmrltx.cn/article/20250909_42138741.html
          m.cdaph.cn/article/20250909_700700.html
          m.cdaph.cn/article/20250909_42138741.html
          m.tqcna.cn/article/20250909_700700.html
          m.tqcna.cn/article/20250909_42138741.html
          m.ixzdpb.cn/article/20250909_259259.html
          m.ixzdpb.cn/article/20250909_95747503.html
          m.gkhoh.cn/article/20250909_259259.html
          m.gkhoh.cn/article/20250909_95747503.html
          m.wmrltx.cn/article/20250909_259259.html
          m.wmrltx.cn/article/20250909_95747503.html
          m.cdaph.cn/article/20250909_259259.html
          m.cdaph.cn/article/20250909_95747503.html
          m.tqcna.cn/article/20250909_259259.html
          m.tqcna.cn/article/20250909_95747503.html
          m.ixzdpb.cn/article/20250909_459459.html
          m.ixzdpb.cn/article/20250909_76057649.html
          m.gkhoh.cn/article/20250909_459459.html
          m.gkhoh.cn/article/20250909_76057649.html
          m.wmrltx.cn/article/20250909_459459.html
          m.wmrltx.cn/article/20250909_76057649.html
          m.cdaph.cn/article/20250909_459459.html
          m.cdaph.cn/article/20250909_76057649.html
          m.tqcna.cn/article/20250909_459459.html
          m.tqcna.cn/article/20250909_76057649.html
          m.ixzdpb.cn/article/20250909_344344.html
          m.ixzdpb.cn/article/20250909_49305406.html
          m.gkhoh.cn/article/20250909_344344.html
          m.gkhoh.cn/article/20250909_49305406.html
          m.wmrltx.cn/article/20250909_344344.html
          m.wmrltx.cn/article/20250909_49305406.html
          m.cdaph.cn/article/20250909_344344.html
          m.cdaph.cn/article/20250909_49305406.html
          m.tqcna.cn/article/20250909_344344.html
          m.tqcna.cn/article/20250909_49305406.html
          m.ixzdpb.cn/article/20250909_033033.html
          m.ixzdpb.cn/article/20250909_68803681.html
          m.gkhoh.cn/article/20250909_033033.html
          m.gkhoh.cn/article/20250909_68803681.html
          m.wmrltx.cn/article/20250909_033033.html
          m.wmrltx.cn/article/20250909_68803681.html
          m.cdaph.cn/article/20250909_033033.html
          m.cdaph.cn/article/20250909_68803681.html
          m.tqcna.cn/article/20250909_033033.html
          m.tqcna.cn/article/20250909_68803681.html
          m.ixzdpb.cn/article/20250909_993993.html
          m.ixzdpb.cn/article/20250909_86448561.html
          m.gkhoh.cn/article/20250909_993993.html
          m.gkhoh.cn/article/20250909_86448561.html
          m.wmrltx.cn/article/20250909_993993.html
          m.wmrltx.cn/article/20250909_86448561.html
          m.cdaph.cn/article/20250909_993993.html
          m.cdaph.cn/article/20250909_86448561.html
          m.tqcna.cn/article/20250909_993993.html
          m.tqcna.cn/article/20250909_86448561.html
          m.ixzdpb.cn/article/20250909_039039.html
          m.ixzdpb.cn/article/20250909_83684648.html
          m.gkhoh.cn/article/20250909_039039.html
          m.gkhoh.cn/article/20250909_83684648.html
          m.wmrltx.cn/article/20250909_039039.html
          m.wmrltx.cn/article/20250909_83684648.html
          m.cdaph.cn/article/20250909_039039.html
          m.cdaph.cn/article/20250909_83684648.html
          m.tqcna.cn/article/20250909_039039.html
          m.tqcna.cn/article/20250909_83684648.html
          m.ixzdpb.cn/article/20250909_496496.html
          m.ixzdpb.cn/article/20250909_43289479.html
          m.gkhoh.cn/article/20250909_496496.html
          m.gkhoh.cn/article/20250909_43289479.html
          m.wmrltx.cn/article/20250909_496496.html
          m.wmrltx.cn/article/20250909_43289479.html
          m.cdaph.cn/article/20250909_496496.html
          m.cdaph.cn/article/20250909_43289479.html
          m.tqcna.cn/article/20250909_496496.html
          m.tqcna.cn/article/20250909_43289479.html
          m.ixzdpb.cn/article/20250909_768768.html
          m.ixzdpb.cn/article/20250909_79867346.html
          m.gkhoh.cn/article/20250909_768768.html
          m.gkhoh.cn/article/20250909_79867346.html
          m.wmrltx.cn/article/20250909_768768.html
          m.wmrltx.cn/article/20250909_79867346.html
          m.cdaph.cn/article/20250909_768768.html
          m.cdaph.cn/article/20250909_79867346.html
          m.tqcna.cn/article/20250909_768768.html
          m.tqcna.cn/article/20250909_79867346.html
          m.ixzdpb.cn/article/20250909_106106.html
          m.ixzdpb.cn/article/20250909_38435744.html
          m.gkhoh.cn/article/20250909_106106.html
          m.gkhoh.cn/article/20250909_38435744.html
          m.wmrltx.cn/article/20250909_106106.html
          m.wmrltx.cn/article/20250909_38435744.html
          m.cdaph.cn/article/20250909_106106.html
          m.cdaph.cn/article/20250909_38435744.html
          m.tqcna.cn/article/20250909_106106.html
          m.tqcna.cn/article/20250909_38435744.html
          m.ixzdpb.cn/article/20250909_580580.html
          m.ixzdpb.cn/article/20250909_55148524.html
          m.gkhoh.cn/article/20250909_580580.html
          m.gkhoh.cn/article/20250909_55148524.html
          m.wmrltx.cn/article/20250909_580580.html
          m.wmrltx.cn/article/20250909_55148524.html
          m.cdaph.cn/article/20250909_580580.html
          m.cdaph.cn/article/20250909_55148524.html
          m.tqcna.cn/article/20250909_580580.html
          m.tqcna.cn/article/20250909_55148524.html
          m.ixzdpb.cn/article/20250909_724724.html
          m.ixzdpb.cn/article/20250909_34382571.html
          m.gkhoh.cn/article/20250909_724724.html
          m.gkhoh.cn/article/20250909_34382571.html
          m.wmrltx.cn/article/20250909_724724.html
          m.wmrltx.cn/article/20250909_34382571.html
          m.cdaph.cn/article/20250909_724724.html
          m.cdaph.cn/article/20250909_34382571.html
          m.tqcna.cn/article/20250909_724724.html
          m.tqcna.cn/article/20250909_34382571.html
          m.ixzdpb.cn/article/20250909_078078.html
          m.ixzdpb.cn/article/20250909_49490430.html
          m.gkhoh.cn/article/20250909_078078.html
          m.gkhoh.cn/article/20250909_49490430.html
          m.wmrltx.cn/article/20250909_078078.html
          m.wmrltx.cn/article/20250909_49490430.html
          m.cdaph.cn/article/20250909_078078.html
          m.cdaph.cn/article/20250909_49490430.html
          m.tqcna.cn/article/20250909_078078.html
          m.tqcna.cn/article/20250909_49490430.html
          m.ixzdpb.cn/article/20250909_531531.html
          m.ixzdpb.cn/article/20250909_43334194.html
          m.gkhoh.cn/article/20250909_531531.html
          m.gkhoh.cn/article/20250909_43334194.html
          m.wmrltx.cn/article/20250909_531531.html
          m.wmrltx.cn/article/20250909_43334194.html
          m.cdaph.cn/article/20250909_531531.html
          m.cdaph.cn/article/20250909_43334194.html
          m.tqcna.cn/article/20250909_531531.html
          m.tqcna.cn/article/20250909_43334194.html
          m.ixzdpb.cn/article/20250909_882882.html
          m.ixzdpb.cn/article/20250909_36893865.html
          m.gkhoh.cn/article/20250909_882882.html
          m.gkhoh.cn/article/20250909_36893865.html
          m.wmrltx.cn/article/20250909_882882.html
          m.wmrltx.cn/article/20250909_36893865.html
          m.cdaph.cn/article/20250909_882882.html
          m.cdaph.cn/article/20250909_36893865.html
          m.tqcna.cn/article/20250909_882882.html
          m.tqcna.cn/article/20250909_36893865.html
          m.ixzdpb.cn/article/20250909_238238.html
          m.ixzdpb.cn/article/20250909_94383362.html
          m.gkhoh.cn/article/20250909_238238.html
          m.gkhoh.cn/article/20250909_94383362.html
          m.wmrltx.cn/article/20250909_238238.html
          m.wmrltx.cn/article/20250909_94383362.html
          m.cdaph.cn/article/20250909_238238.html
          m.cdaph.cn/article/20250909_94383362.html
          m.tqcna.cn/article/20250909_238238.html
          m.tqcna.cn/article/20250909_94383362.html
          m.ixzdpb.cn/article/20250909_353353.html
          m.ixzdpb.cn/article/20250909_29185635.html
          m.gkhoh.cn/article/20250909_353353.html
          m.gkhoh.cn/article/20250909_29185635.html
          m.wmrltx.cn/article/20250909_353353.html
          m.wmrltx.cn/article/20250909_29185635.html
          m.cdaph.cn/article/20250909_353353.html
          m.cdaph.cn/article/20250909_29185635.html
          m.tqcna.cn/article/20250909_353353.html
          m.tqcna.cn/article/20250909_29185635.html
          m.ixzdpb.cn/article/20250909_451451.html
          m.ixzdpb.cn/article/20250909_90059201.html
          m.gkhoh.cn/article/20250909_451451.html
          m.gkhoh.cn/article/20250909_90059201.html
          m.wmrltx.cn/article/20250909_451451.html
          m.wmrltx.cn/article/20250909_90059201.html
          m.cdaph.cn/article/20250909_451451.html
          m.cdaph.cn/article/20250909_90059201.html
          m.tqcna.cn/article/20250909_451451.html
          m.tqcna.cn/article/20250909_90059201.html
          m.ixzdpb.cn/article/20250909_419419.html
          m.ixzdpb.cn/article/20250909_49674330.html
          m.gkhoh.cn/article/20250909_419419.html
          m.gkhoh.cn/article/20250909_49674330.html
          m.wmrltx.cn/article/20250909_419419.html
          m.wmrltx.cn/article/20250909_49674330.html
          m.cdaph.cn/article/20250909_419419.html
          m.cdaph.cn/article/20250909_49674330.html
          m.tqcna.cn/article/20250909_419419.html
          m.tqcna.cn/article/20250909_49674330.html
          m.ixzdpb.cn/article/20250909_845845.html
          m.ixzdpb.cn/article/20250909_23966372.html
          m.gkhoh.cn/article/20250909_845845.html
          m.gkhoh.cn/article/20250909_23966372.html
          m.wmrltx.cn/article/20250909_845845.html
          m.wmrltx.cn/article/20250909_23966372.html
          m.cdaph.cn/article/20250909_845845.html
          m.cdaph.cn/article/20250909_23966372.html
          m.tqcna.cn/article/20250909_845845.html
          m.tqcna.cn/article/20250909_23966372.html
          m.ixzdpb.cn/article/20250909_368368.html
          m.ixzdpb.cn/article/20250909_37657366.html
          m.gkhoh.cn/article/20250909_368368.html
          m.gkhoh.cn/article/20250909_37657366.html
          m.wmrltx.cn/article/20250909_368368.html
          m.wmrltx.cn/article/20250909_37657366.html
          m.cdaph.cn/article/20250909_368368.html
          m.cdaph.cn/article/20250909_37657366.html
          m.tqcna.cn/article/20250909_368368.html
          m.tqcna.cn/article/20250909_37657366.html
          m.ixzdpb.cn/article/20250909_631631.html
          m.ixzdpb.cn/article/20250909_36333382.html
          m.gkhoh.cn/article/20250909_631631.html
          m.gkhoh.cn/article/20250909_36333382.html
          m.wmrltx.cn/article/20250909_631631.html
          m.wmrltx.cn/article/20250909_36333382.html
          m.cdaph.cn/article/20250909_631631.html
          m.cdaph.cn/article/20250909_36333382.html
          m.tqcna.cn/article/20250909_631631.html
          m.tqcna.cn/article/20250909_36333382.html
          m.ixzdpb.cn/article/20250909_501501.html
          m.ixzdpb.cn/article/20250909_33578865.html
          m.gkhoh.cn/article/20250909_501501.html
          m.gkhoh.cn/article/20250909_33578865.html
          m.wmrltx.cn/article/20250909_501501.html
          m.wmrltx.cn/article/20250909_33578865.html
          m.cdaph.cn/article/20250909_501501.html
          m.cdaph.cn/article/20250909_33578865.html
          m.tqcna.cn/article/20250909_501501.html
          m.tqcna.cn/article/20250909_33578865.html
          m.ixzdpb.cn/article/20250909_525525.html
          m.ixzdpb.cn/article/20250909_51208248.html
          m.gkhoh.cn/article/20250909_525525.html
          m.gkhoh.cn/article/20250909_51208248.html
          m.wmrltx.cn/article/20250909_525525.html
          m.wmrltx.cn/article/20250909_51208248.html
          m.cdaph.cn/article/20250909_525525.html
          m.cdaph.cn/article/20250909_51208248.html
          m.tqcna.cn/article/20250909_525525.html
          m.tqcna.cn/article/20250909_51208248.html
          m.ixzdpb.cn/article/20250909_911911.html
          m.ixzdpb.cn/article/20250909_49683784.html
          m.gkhoh.cn/article/20250909_911911.html
          m.gkhoh.cn/article/20250909_49683784.html
          m.wmrltx.cn/article/20250909_911911.html
          m.wmrltx.cn/article/20250909_49683784.html
          m.cdaph.cn/article/20250909_911911.html
          m.cdaph.cn/article/20250909_49683784.html
          m.tqcna.cn/article/20250909_911911.html
          m.tqcna.cn/article/20250909_49683784.html
          m.ixzdpb.cn/article/20250909_814814.html
          m.ixzdpb.cn/article/20250909_32684899.html
          m.gkhoh.cn/article/20250909_814814.html
          m.gkhoh.cn/article/20250909_32684899.html
          m.wmrltx.cn/article/20250909_814814.html
          m.wmrltx.cn/article/20250909_32684899.html
          m.cdaph.cn/article/20250909_814814.html
          m.cdaph.cn/article/20250909_32684899.html
          m.tqcna.cn/article/20250909_814814.html
          m.tqcna.cn/article/20250909_32684899.html
          m.ixzdpb.cn/article/20250909_943943.html
          m.ixzdpb.cn/article/20250909_21997350.html
          m.gkhoh.cn/article/20250909_943943.html
          m.gkhoh.cn/article/20250909_21997350.html
          m.wmrltx.cn/article/20250909_943943.html
          m.wmrltx.cn/article/20250909_21997350.html
          m.cdaph.cn/article/20250909_943943.html
          m.cdaph.cn/article/20250909_21997350.html
          m.tqcna.cn/article/20250909_943943.html
          m.tqcna.cn/article/20250909_21997350.html
          m.ixzdpb.cn/article/20250909_346346.html
          m.ixzdpb.cn/article/20250909_12131619.html
          m.gkhoh.cn/article/20250909_346346.html
          m.gkhoh.cn/article/20250909_12131619.html
          m.wmrltx.cn/article/20250909_346346.html
          m.wmrltx.cn/article/20250909_12131619.html
          m.cdaph.cn/article/20250909_346346.html
          m.cdaph.cn/article/20250909_12131619.html
          m.tqcna.cn/article/20250909_346346.html
          m.tqcna.cn/article/20250909_12131619.html
          m.ixzdpb.cn/article/20250909_946946.html
          m.ixzdpb.cn/article/20250909_88481945.html
          m.gkhoh.cn/article/20250909_946946.html
          m.gkhoh.cn/article/20250909_88481945.html
          m.wmrltx.cn/article/20250909_946946.html
          m.wmrltx.cn/article/20250909_88481945.html
          m.cdaph.cn/article/20250909_946946.html
          m.cdaph.cn/article/20250909_88481945.html
          m.tqcna.cn/article/20250909_946946.html
          m.tqcna.cn/article/20250909_88481945.html
          m.ixzdpb.cn/article/20250909_763763.html
          m.ixzdpb.cn/article/20250909_83116831.html
          m.gkhoh.cn/article/20250909_763763.html
          m.gkhoh.cn/article/20250909_83116831.html
          m.wmrltx.cn/article/20250909_763763.html
          m.wmrltx.cn/article/20250909_83116831.html
          m.cdaph.cn/article/20250909_763763.html
          m.cdaph.cn/article/20250909_83116831.html
          m.tqcna.cn/article/20250909_763763.html
          m.tqcna.cn/article/20250909_83116831.html
          m.ixzdpb.cn/article/20250909_602602.html
          m.ixzdpb.cn/article/20250909_98931468.html
          m.gkhoh.cn/article/20250909_602602.html
          m.gkhoh.cn/article/20250909_98931468.html
          m.wmrltx.cn/article/20250909_602602.html
          m.wmrltx.cn/article/20250909_98931468.html
          m.cdaph.cn/article/20250909_602602.html
          m.cdaph.cn/article/20250909_98931468.html
          m.tqcna.cn/article/20250909_602602.html
          m.tqcna.cn/article/20250909_98931468.html
          m.ixzdpb.cn/article/20250909_912912.html
          m.ixzdpb.cn/article/20250909_23785932.html
          m.gkhoh.cn/article/20250909_912912.html
          m.gkhoh.cn/article/20250909_23785932.html
          m.wmrltx.cn/article/20250909_912912.html
          m.wmrltx.cn/article/20250909_23785932.html
          m.cdaph.cn/article/20250909_912912.html
          m.cdaph.cn/article/20250909_23785932.html
          m.tqcna.cn/article/20250909_912912.html
          m.tqcna.cn/article/20250909_23785932.html
          m.ixzdpb.cn/article/20250909_893893.html
          m.ixzdpb.cn/article/20250909_91632913.html
          m.gkhoh.cn/article/20250909_893893.html
          m.gkhoh.cn/article/20250909_91632913.html
          m.wmrltx.cn/article/20250909_893893.html
          m.wmrltx.cn/article/20250909_91632913.html
          m.cdaph.cn/article/20250909_893893.html
          m.cdaph.cn/article/20250909_91632913.html
          m.tqcna.cn/article/20250909_893893.html
          m.tqcna.cn/article/20250909_91632913.html
          m.ixzdpb.cn/article/20250909_363363.html
          m.ixzdpb.cn/article/20250909_90219884.html
          m.gkhoh.cn/article/20250909_363363.html
          m.gkhoh.cn/article/20250909_90219884.html
          m.wmrltx.cn/article/20250909_363363.html
          m.wmrltx.cn/article/20250909_90219884.html
          m.cdaph.cn/article/20250909_363363.html
          m.cdaph.cn/article/20250909_90219884.html
          m.tqcna.cn/article/20250909_363363.html
          m.tqcna.cn/article/20250909_90219884.html
          m.ixzdpb.cn/article/20250909_083083.html
          m.ixzdpb.cn/article/20250909_50279860.html
          m.gkhoh.cn/article/20250909_083083.html
          m.gkhoh.cn/article/20250909_50279860.html
          m.wmrltx.cn/article/20250909_083083.html
          m.wmrltx.cn/article/20250909_50279860.html
          m.cdaph.cn/article/20250909_083083.html
          m.cdaph.cn/article/20250909_50279860.html
          m.tqcna.cn/article/20250909_083083.html
          m.tqcna.cn/article/20250909_50279860.html
          m.ixzdpb.cn/article/20250909_027027.html
          m.ixzdpb.cn/article/20250909_34835433.html
          m.gkhoh.cn/article/20250909_027027.html
          m.gkhoh.cn/article/20250909_34835433.html
          m.wmrltx.cn/article/20250909_027027.html
          m.wmrltx.cn/article/20250909_34835433.html
          m.cdaph.cn/article/20250909_027027.html
          m.cdaph.cn/article/20250909_34835433.html
          m.tqcna.cn/article/20250909_027027.html
          m.tqcna.cn/article/20250909_34835433.html
          m.ixzdpb.cn/article/20250909_107107.html
          m.ixzdpb.cn/article/20250909_67157796.html
          m.gkhoh.cn/article/20250909_107107.html
          m.gkhoh.cn/article/20250909_67157796.html
          m.wmrltx.cn/article/20250909_107107.html
          m.wmrltx.cn/article/20250909_67157796.html
          m.cdaph.cn/article/20250909_107107.html
          m.cdaph.cn/article/20250909_67157796.html
          m.tqcna.cn/article/20250909_107107.html
          m.tqcna.cn/article/20250909_67157796.html
          m.ixzdpb.cn/article/20250909_886886.html
          m.ixzdpb.cn/article/20250909_26752280.html
          m.gkhoh.cn/article/20250909_886886.html
          m.gkhoh.cn/article/20250909_26752280.html
          m.wmrltx.cn/article/20250909_886886.html
          m.wmrltx.cn/article/20250909_26752280.html
          m.cdaph.cn/article/20250909_886886.html
          m.cdaph.cn/article/20250909_26752280.html
          m.tqcna.cn/article/20250909_886886.html
          m.tqcna.cn/article/20250909_26752280.html
          m.ixzdpb.cn/article/20250909_756756.html
          m.ixzdpb.cn/article/20250909_63975552.html
          m.gkhoh.cn/article/20250909_756756.html
          m.gkhoh.cn/article/20250909_63975552.html
          m.wmrltx.cn/article/20250909_756756.html
          m.wmrltx.cn/article/20250909_63975552.html
          m.cdaph.cn/article/20250909_756756.html
          m.cdaph.cn/article/20250909_63975552.html
          m.tqcna.cn/article/20250909_756756.html
          m.tqcna.cn/article/20250909_63975552.html
          m.ixzdpb.cn/article/20250909_286286.html
          m.ixzdpb.cn/article/20250909_06539078.html
          m.gkhoh.cn/article/20250909_286286.html
          m.gkhoh.cn/article/20250909_06539078.html
          m.wmrltx.cn/article/20250909_286286.html
          m.wmrltx.cn/article/20250909_06539078.html
          m.cdaph.cn/article/20250909_286286.html
          m.cdaph.cn/article/20250909_06539078.html
          m.tqcna.cn/article/20250909_286286.html
          m.tqcna.cn/article/20250909_06539078.html
          m.ixzdpb.cn/article/20250909_070070.html
          m.ixzdpb.cn/article/20250909_68200055.html
          m.gkhoh.cn/article/20250909_070070.html
          m.gkhoh.cn/article/20250909_68200055.html
          m.wmrltx.cn/article/20250909_070070.html
          m.wmrltx.cn/article/20250909_68200055.html
          m.cdaph.cn/article/20250909_070070.html
          m.cdaph.cn/article/20250909_68200055.html
          m.tqcna.cn/article/20250909_070070.html
          m.tqcna.cn/article/20250909_68200055.html
          m.ixzdpb.cn/article/20250909_195195.html
          m.ixzdpb.cn/article/20250909_77921339.html
          m.gkhoh.cn/article/20250909_195195.html
          m.gkhoh.cn/article/20250909_77921339.html
          m.wmrltx.cn/article/20250909_195195.html
          m.wmrltx.cn/article/20250909_77921339.html
          m.cdaph.cn/article/20250909_195195.html
          m.cdaph.cn/article/20250909_77921339.html
          m.tqcna.cn/article/20250909_195195.html
          m.tqcna.cn/article/20250909_77921339.html
          m.ixzdpb.cn/article/20250909_116116.html
          m.ixzdpb.cn/article/20250909_58037424.html
          m.gkhoh.cn/article/20250909_116116.html
          m.gkhoh.cn/article/20250909_58037424.html
          m.wmrltx.cn/article/20250909_116116.html
          m.wmrltx.cn/article/20250909_58037424.html
          m.cdaph.cn/article/20250909_116116.html
          m.cdaph.cn/article/20250909_58037424.html
          m.tqcna.cn/article/20250909_116116.html
          m.tqcna.cn/article/20250909_58037424.html
           

          import torch
          from transformers import BertTokenizer, BertForSequenceClassification
          from transformers import AdamW, get_linear_schedule_with_warmup
          from torch.utils.data import Dataset, DataLoader
          import pandas as pd
          
          # 加载预训练模型和分词器
          model_name = 'bert-base-uncased'
          tokenizer = BertTokenizer.from_pretrained(model_name)
          model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)  # 二分类任务
          
          # 自定义数据集类
          class TextDataset(Dataset):
              def __init__(self, texts, labels, tokenizer, max_len):
                  self.texts = texts
                  self.labels = labels
                  self.tokenizer = tokenizer
                  self.max_len = max_len
              
              def __len__(self):
                  return len(self.texts)
              
              def __getitem__(self, idx):
                  text = str(self.texts[idx])
                  label = self.labels[idx]
                  
                  encoding = self.tokenizer.encode_plus(
                      text,
                      add_special_tokens=True,
                      max_length=self.max_len,
                      return_token_type_ids=False,
                      padding='max_length',
                      truncation=True,
                      return_attention_mask=True,
                      return_tensors='pt'
                  )
                  
                  return {
                      'input_ids': encoding['input_ids'].flatten(),
                      'attention_mask': encoding['attention_mask'].flatten(),
                      'label': torch.tensor(label, dtype=torch.long)
                  }
          
          # 示例训练数据
          train_texts = ["This movie was great!", "Terrible experience."]
          train_labels = [1, 0]  # 1: positive, 0: negative
          
          # 创建数据加载器
          max_length = 128
          batch_size = 16
          train_dataset = TextDataset(train_texts, train_labels, tokenizer, max_length)
          train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
          
          # 训练配置
          epochs = 3
          optimizer = AdamW(model.parameters(), lr=2e-5)
          total_steps = len(train_loader) * epochs
          scheduler = get_linear_schedule_with_warmup(
              optimizer,
              num_warmup_steps=0,
              num_training_steps=total_steps
          )
          
          # 训练循环
          device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
          model = model.to(device)
          
          for epoch in range(epochs):
              model.train()
              for batch in train_loader:
                  input_ids = batch['input_ids'].to(device)
                  attention_mask = batch['attention_mask'].to(device)
                  labels = batch['label'].to(device)
                  
                  outputs = model(
                      input_ids=input_ids,
                      attention_mask=attention_mask,
                      labels=labels
                  )
                  
                  loss = outputs.loss
                  loss.backward()
                  
                  torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
                  optimizer.step()
                  scheduler.step()
                  optimizer.zero_grad()
          
          # 保存微调后的模型
          model.save_pretrained('./fine_tuned_bert')
          tokenizer.save_pretrained('./fine_tuned_bert')
          
          # 预测示例
          def predict_sentiment(text):
              model.eval()
              encoding = tokenizer.encode_plus(
                  text,
                  add_special_tokens=True,
                  max_length=max_length,
                  return_tensors='pt',
                  padding='max_length',
                  truncation=True
              )
              
              input_ids = encoding['input_ids'].to(device)
              attention_mask = encoding['attention_mask'].to(device)
              
              with torch.no_grad():
                  outputs = model(input_ids, attention_mask=attention_mask)
              
              logits = outputs.logits
              pred = torch.argmax(logits, dim=1).item()
              return 'positive' if pred == 1 else 'negative'
          
          # 测试预测
          print(predict_sentiment("I really enjoyed this!"))  # 输出: positive
          

          关键实现要点

        • 模型加载:使用bert-base-uncased预训练模型,通过num_labels参数指定分类类别数
        • 文本处理:BERT分词器自动处理子词切分和特殊标记([CLS]、[SEP])
        • 注意力掩码:区分实际内容与填充部分,提升模型效率
        • 动态填充:通过max_length统一文本长度,配合truncation处理超长文本
        • 学习率调度:采用线性预热调度策略,避免训练初期的不稳定
        • 扩展应用方向

        • 多标签分类:修改num_labels并改用BCEWithLogitsLoss损失函数
        • 领域适应:在特定领域数据(如医疗、法律文本)上继续预训练
        • 多语言任务:切换为bert-base-multilingual-cased等多语言模型
        • 序列标注:改用BertForTokenClassification模型架构
        • 实际应用中,建议使用更大的数据集(如IMDb、SST-2)进行训练,并添加验证集监控模型性能

      • 特征提取方法

        • 将预训练模型作为特征提取器
        • 冻结大部分网络层,仅训练分类器部分
        • 适用场景:医学影像分析等专业领域
    7. 元学习技术

      • 小样本学习框架

        • Model-Agnostic Meta-Learning (MAML)算法
        • 具体实现流程:
          1. 在多个相关任务上训练元模型
          2. 通过少量梯度更新快速适应新任务
          3. 采用双层优化策略(内循环和外循环)
      • 原型网络(Prototypical Networks)

        • 基于度量学习的方法
        • 计算支持集样本的类原型
        • 查询样本通过距离度量进行分类
        • 典型应用:工业缺陷检测中的少样本分类
    8. 组合优化策略

      • 预训练+元学习的混合方法

        • 先用大规模数据预训练基础模型
        • 再使用元学习进行任务适配
        • 优势:结合两者的泛化能力
      • 数据增强技术

        • 在模型微调阶段应用高级增强方法
        • 包括:Mixup、Cutmix等高级增强策略
        • 特别适用于图像分类任务
    9. 实际应用建议

      • 计算资源评估
        • 预训练阶段需要较强的计算能力
        • 微调阶段可降低硬件要求
      • 领域适配考量
        • 选择与目标领域相近的预训练模型
        • 必要时进行领域特定的预训练
      • 评估指标设计
        • 重点关注模型的鲁棒性和泛化性
        • 采用交叉验证确保结果可靠性
    10. 前沿发展方向

      • 自监督预训练
        • 利用无标注数据进行预训练
        • 以下是一个基于PyTorch实现的对比学习(Contrastive Learning)代码示例,包含数据增强、负样本生成和损失计算等核心功能:

          数据增强模块

          import torchvision.transforms as transforms
          from torchvision.transforms import functional as F
          import random
          
          class RandomAugment:
              def __init__(self):
                  self.transform = transforms.Compose([
                      transforms.RandomResizedCrop(size=224),
                      transforms.RandomHorizontalFlip(p=0.5),
                      transforms.RandomApply([
                          transforms.ColorJitter(0.4, 0.4, 0.4, 0.1)
                      ], p=0.8),
                      transforms.RandomGrayscale(p=0.2),
                      transforms.GaussianBlur(kernel_size=23, sigma=(0.1, 2.0)),
                      transforms.ToTensor(),
                      transforms.Normalize(mean=[0.485, 0.456, 0.406], 
                                          std=[0.229, 0.224, 0.225])
                  ])
          
              def __call__(self, x):
                  return self.transform(x), self.transform(x)
          

          模型架构

          import torch.nn as nn
          import torchvision.models as models
          
          class ProjectionHead(nn.Module):
              def __init__(self, input_dim=2048, hidden_dim=512, output_dim=128):
                  super().__init__()
                  self.net = nn.Sequential(
                      nn.Linear(input_dim, hidden_dim),
                      nn.BatchNorm1d(hidden_dim),
                      nn.ReLU(),
                      nn.Linear(hidden_dim, output_dim)
                  )
              
              def forward(self, x):
                  return self.net(x)
          
          class ContrastiveModel(nn.Module):
              def __init__(self, backbone='resnet50'):
                  super().__init__()
                  self.encoder = getattr(models, backbone)(pretrained=False)
                  self.encoder.fc = nn.Identity()
                  self.projector = ProjectionHead()
              
              def forward(self, x):
                  h = self.encoder(x)
                  return nn.functional.normalize(self.projector(h), dim=1)
          

          对比损失计算

          def contrastive_loss(z1, z2, temperature=0.1):
              batch_size = z1.shape[0]
              z = torch.cat([z1, z2], dim=0)
              similarity = torch.matmul(z, z.T) / temperature
              
              # 创建正负样本掩码
              mask = torch.eye(2*batch_size, dtype=torch.bool, device=z.device)
              pos_mask = mask.roll(shifts=batch_size, dims=0)
              neg_mask = ~pos_mask
              
              # 计算损失
              pos = similarity[pos_mask].view(2*batch_size, 1)
              neg = similarity[neg_mask].view(2*batch_size, -1)
              logits = torch.cat([pos, neg], dim=1)
              labels = torch.zeros(2*batch_size, dtype=torch.long, device=z.device)
              return nn.CrossEntropyLoss()(logits, labels)
          

          训练循环

          import torch
          from torch.utils.data import DataLoader
          
          def train(model, dataloader, optimizer, epochs=100):
              model.train()
              for epoch in range(epochs):
                  total_loss = 0
                  for batch in dataloader:
                      x1, x2 = batch
                      x1, x2 = x1.cuda(), x2.cuda()
                      
                      optimizer.zero_grad()
                      z1 = model(x1)
                      z2 = model(x2)
                      loss = contrastive_loss(z1, z2)
                      loss.backward()
                      optimizer.step()
                      
                      total_loss += loss.item()
                  
                  print(f'Epoch {epoch+1}, Loss: {total_loss/len(dataloader):.4f}')
          

          使用示例

          # 初始化
          model = ContrastiveModel().cuda()
          optimizer = torch.optim.Adam(model.parameters(), lr=3e-4)
          
          # 数据集准备
          dataset = YourDataset(transform=RandomAugment())
          dataloader = DataLoader(dataset, batch_size=256, shuffle=True)
          
          # 训练
          train(model, dataloader, optimizer)
          

          该实现包含以下关键组件:

        • 随机数据增强生成正样本对
        • ResNet骨干网络+投影头的模型架构
        • NT-Xent对比损失函数
        • 完整的训练流程
        • 可根据具体需求调整温度参数、投影头维度或骨干网络结构。对于大规模数据集,建议使用分布式训练和内存库来增加负样本数量。

      • 神经架构搜索
        • 自动优化模型结构
        • 提升小样本学习效率
      • 多模态预训练
        • 结合视觉、语言等多种模态
        • 增强模型泛化能力
    • 通过知网(CNKI)、万方等学术平台搜索上述文献标题或作者姓名,可获取全文或摘要。
    • 京东、当当等平台可购买相关书籍的电子版或纸质版。
    • 高校图书馆通常提供期刊论文的免费下载权限。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐