AI 编程 Trae,国内版本和国际版本,一篇讲透
迁移学习:解锁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民主化中的角色。
- 呼吁关注伦理与公平性问题。
通过合理运用这些技术,即使在数据稀缺场景下,也能显著提升深度学习模型的泛化性能。关键在于根据具体任务需求,选择适当的预训练模型和元学习方法,并进行针对性的优化调整。
-
《迁移学习》
作者:杨强
出版社:机械工业出版社
该书系统介绍了迁移学习的理论基础、方法与应用,涵盖领域适应、多任务学习等关键技术,适合初学者和研究者。 -
《迁移学习:理论与实践》
作者:王晋东等
出版社:电子工业出版社
结合具体案例讲解迁移学习的算法实现,包括深度迁移学习、对抗迁移学习等前沿方向。 -
《基于深度学习的迁移学习技术研究进展》
期刊:自动化学报
该论文综述了深度学习与迁移学习的结合方法,重点分析模型微调、特征映射等技术的应用场景与局限性。 -
《跨领域迁移学习研究综述》
期刊:计算机研究与发展
详细探讨了不同领域间知识迁移的挑战与解决方案,涉及文本、图像等多模态数据。 -
《小样本学习中的迁移学习方法》
期刊:人工智能针对数据稀缺场景,如何通过预训练模型和元学习提升模型泛化能力
-
预训练模型的应用
-
迁移学习策略
- 采用领域自适应(Domain Adaptation)技术
- 具体实施步骤:
- 在大规模通用数据集(如ImageNet)上预训练基础模型
- 对模型进行微调(Fine-tuning),通常只调整最后几层
- 使用目标领域的小样本数据进行二次微调
-
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)进行训练,并添加验证集监控模型性能
-
特征提取方法
- 将预训练模型作为特征提取器
- 冻结大部分网络层,仅训练分类器部分
- 适用场景:医学影像分析等专业领域
-
-
元学习技术
-
小样本学习框架
- Model-Agnostic Meta-Learning (MAML)算法
- 具体实现流程:
- 在多个相关任务上训练元模型
- 通过少量梯度更新快速适应新任务
- 采用双层优化策略(内循环和外循环)
-
原型网络(Prototypical Networks)
- 基于度量学习的方法
- 计算支持集样本的类原型
- 查询样本通过距离度量进行分类
- 典型应用:工业缺陷检测中的少样本分类
-
-
组合优化策略
-
预训练+元学习的混合方法
- 先用大规模数据预训练基础模型
- 再使用元学习进行任务适配
- 优势:结合两者的泛化能力
-
数据增强技术
- 在模型微调阶段应用高级增强方法
- 包括:Mixup、Cutmix等高级增强策略
- 特别适用于图像分类任务
-
-
实际应用建议
- 计算资源评估
- 预训练阶段需要较强的计算能力
- 微调阶段可降低硬件要求
- 领域适配考量
- 选择与目标领域相近的预训练模型
- 必要时进行领域特定的预训练
- 评估指标设计
- 重点关注模型的鲁棒性和泛化性
- 采用交叉验证确保结果可靠性
- 计算资源评估
-
前沿发展方向
- 自监督预训练
- 利用无标注数据进行预训练
-
以下是一个基于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)、万方等学术平台搜索上述文献标题或作者姓名,可获取全文或摘要。
- 京东、当当等平台可购买相关书籍的电子版或纸质版。
- 高校图书馆通常提供期刊论文的免费下载权限。
更多推荐
所有评论(0)