Python实现文本与多模态融合的风险识别模型实战
简介这份源码面向Python开发者、安全方向学生及参加数据挖掘竞赛的选手聚焦文本与多模态数据融合的风险识别任务可用于课程设计、期末大作业或安全AI赛题复现。资源包共11个文件以7个Python脚本为核心覆盖词向量训练、数据合并、K折训练、伪标签等完整流程另附requirements.txt依赖清单、run.sh运行脚本、readme.md说明及docx手册压缩包约88KB结构紧凑便于快速上手。该方案源自字节跳动安全AI挑战赛色情导流用户识别项目已有360人学习。读者可借此掌握文本特征与多模态信息联合建模的工程实现理解K折交叉验证、伪标签半监督策略及评估脚本的编写思路并参考配置与运行脚本完成本地复现适合作为风险识别方向的实战参考与二次开发基础。1. 文本加多模态做风险识别为什么单看文本已经不够用了金融风控、内容审核、电商反欺诈这些场景里纯文本模型早就不是新鲜事。但真正在一线跑过业务的人会发现一个尴尬的现实用户提交的申请材料里文本字段可以编得滴水不漏可上传的截图、证件照、商品图却经常露馅。我见过一个案例某贷款申请人的职业信息、收入描述、单位名称全部自洽文本模型给出 0.12 的违约概率但他上传的工作证明截图里公章边缘有明显的 PS 痕迹字体间距也不对。单模态模型看不到这些。这就是「python实现基于文本和多模态数据的风险识别源码」这个方向要解决的问题把文本特征和图像特征在同一个模型里做融合让风险识别的准确率不再被单一模态的天花板卡住。适合谁看有 Python 基础、做过 sklearn 或 PyTorch 小项目、想把这个方案落到实际风控或审核业务里的工程师。下面从数据管线怎么搭、模型怎么设计、参数怎么调、坑在哪一步步拆开讲。2. 多模态风险识别的数据管线怎么搭从原始文件到模型输入2.1 文本和图像各自怎么清洗、怎么对齐多模态项目翻车最多的环节不是模型是数据对齐。文本和图像必须能通过一个唯一 ID 关联起来否则后面的融合层根本没法训练。常见做法是维护一张样本表每行包含sample_id、text_content、image_path、label四个核心字段。文本侧的处理链路去 HTML 标签、统一编码、截断到固定长度。中文场景下用 jieba 分词还是直接按字切取决于你的预训练模型。如果用 BERT 系列直接按字切更稳如果用 TextCNN 从头训分词后做 embedding 效果更好。图像侧的处理链路统一尺寸、归一化、必要时做数据增强。风险识别场景里图像增强要克制翻转和裁剪可能把关键的风险信号比如公章位置、水印方向破坏掉。我一般只做 resize 和归一化最多加一点亮度扰动。import os import pandas as pd from PIL import Image from torch.utils.data import Dataset, DataLoader from torchvision import transforms import jieba class RiskDataset(Dataset): def __init__(self, csv_path, img_root, tokenizer, max_len128, img_size224): self.df pd.read_csv(csv_path) self.img_root img_root self.tokenizer tokenizer self.max_len max_len # 图像变换只做 resize 和归一化不做翻转 self.img_transform transforms.Compose([ transforms.Resize((img_size, img_size)), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) def __len__(self): return len(self.df) def __getitem__(self, idx): row self.df.iloc[idx] # 文本处理按字切分后转 id text str(row[text_content]).strip() tokens self.tokenizer( text, max_lengthself.max_len, paddingmax_length, truncationTrue, return_tensorspt ) # 图像处理读取并变换 img_path os.path.join(self.img_root, row[image_path]) image Image.open(img_path).convert(RGB) image self.img_transform(image) label int(row[label]) return { input_ids: tokens[input_ids].squeeze(0), attention_mask: tokens[attention_mask].squeeze(0), image: image, label: label }这段代码的关键点在于tokenizer负责把文本转成模型能吃的 id 序列img_transform负责把图像统一到 224x224。max_len128对大多数风控文本够用如果你的文本里有长段描述可以加到 256但要注意显存。img_size224是 ResNet 系列的标准输入换成 ViT 的话通常是 224 或 384。注意图像增强里的随机翻转在风险识别场景要慎用。公章、签名、水印这些关键信号对方向敏感翻转后模型学到的特征可能和真实分布对不上。2.2 用 DataLoader 把两个模态拼成一个 batch单模态的 DataLoader 只返回一个张量多模态要返回一个字典。PyTorch 的默认 collate_fn 对字典的处理没问题但要注意每个字段的维度必须一致。from transformers import BertTokenizer from torch.utils.data import DataLoader tokenizer BertTokenizer.from_pretrained(bert-base-chinese) dataset RiskDataset( csv_pathdata/samples.csv, img_rootdata/images, tokenizertokenizer, max_len128, img_size224 ) loader DataLoader( dataset, batch_size32, shuffleTrue, num_workers4, pin_memoryTrue ) # 验证一个 batch 的维度 batch next(iter(loader)) print(batch[input_ids].shape) # [32, 128] print(batch[image].shape) # [32, 3, 224, 224] print(batch[label].shape) # [32]batch_size32是个保守起点。如果你的显存够比如 24G 以上可以试 64。num_workers4在 Linux 上通常没问题Windows 下如果报错就改成 0。pin_memoryTrue在 GPU 训练时能加快数据传输CPU 训练时反而多余。这里有个容易忽略的点文本和图像的采样必须同步。如果你的数据集里正负样本比例是 1:10而图像模态的缺失率又比较高直接 shuffle 可能导致某个 batch 里全是负样本。稳妥的做法是先做分层采样保证每个 batch 的正负比例大致均衡。3. 模型结构怎么设计文本分支、图像分支和融合层3.1 文本分支用 BERT 还是 TextCNN选型取决于你的数据量和算力。数据量在 1 万条以下TextCNN 从头训可能比 BERT 微调更稳因为 BERT 在小数据上容易过拟合。数据量超过 5 万条BERT 微调的优势就出来了。我一般会先用 TextCNN 跑一个 baseline确认数据管线没问题再换 BERT 看提升幅度。TextCNN 的结构很简单embedding 层 多尺度卷积 最大池化 全连接。import torch import torch.nn as nn class TextBranch(nn.Module): def __init__(self, vocab_size, embed_dim128, num_filters128, filter_sizes(2, 3, 4), dropout0.3): super().__init__() self.embedding nn.Embedding(vocab_size, embed_dim, padding_idx0) self.convs nn.ModuleList([ nn.Conv1d(embed_dim, num_filters, fs) for fs in filter_sizes ]) self.dropout nn.Dropout(dropout) self.fc nn.Linear(num_filters * len(filter_sizes), 256) def forward(self, input_ids, attention_maskNone): # input_ids: [batch, seq_len] x self.embedding(input_ids) # [batch, seq_len, embed_dim] x x.permute(0, 2, 1) # [batch, embed_dim, seq_len] conv_outs [] for conv in self.convs: c torch.relu(conv(x)) # [batch, num_filters, seq_len - fs 1] c torch.max(c, dim2)[0] # [batch, num_filters] conv_outs.append(c) x torch.cat(conv_outs, dim1) # [batch, num_filters * 3] x self.dropout(x) x self.fc(x) # [batch, 256] return xembed_dim128对中文小数据集够用num_filters128配合三个卷积核尺寸输出维度是 384再压到 256。dropout0.3是防止过拟合的常规操作如果你的训练集很小可以加到 0.5。3.2 图像分支用 ResNet 做特征提取图像分支直接用 torchvision 里的预训练 ResNet把最后的全连接层换掉就行。预训练权重能帮你省掉大量标注数据。from torchvision import models class ImageBranch(nn.Module): def __init__(self, output_dim256, freeze_backboneFalse): super().__init__() self.backbone models.resnet18(pretrainedTrue) if freeze_backbone: for param in self.backbone.parameters(): param.requires_grad False in_features self.backbone.fc.in_features self.backbone.fc nn.Sequential( nn.Linear(in_features, 512), nn.ReLU(), nn.Dropout(0.3), nn.Linear(512, output_dim) ) def forward(self, image): return self.backbone(image)freeze_backboneFalse表示微调整个 ResNet。如果你的图像数据少于 5000 张建议设成 True只训最后的全连接层。resnet18是最轻量的选择换成resnet50会慢不少但特征质量更高。3.3 融合层拼接、注意力还是门控最简单的融合是直接拼接两个分支的输出然后过几层全连接。这种方式参数少、训练快但两个模态的贡献是固定的模型没法根据样本动态调整。进阶做法是加一个注意力机制让模型自己学每个模态的权重。我一般用门控融合class GatedFusion(nn.Module): def __init__(self, text_dim256, image_dim256, hidden_dim256): super().__init__() self.gate nn.Sequential( nn.Linear(text_dim image_dim, hidden_dim), nn.Sigmoid() ) self.fc nn.Sequential( nn.Linear(text_dim image_dim, hidden_dim), nn.ReLU(), nn.Dropout(0.3), nn.Linear(hidden_dim, 2) # 二分类输出 ) def forward(self, text_feat, image_feat): concat torch.cat([text_feat, image_feat], dim1) g self.gate(concat) # [batch, hidden_dim] weighted concat * g # 门控加权 out self.fc(weighted) # [batch, 2] return out门控机制的核心是Sigmoid输出的权重向量它决定了每个特征维度在最终判断里占多大比重。训练初期门控值接近 0.5随着训练推进会逐渐分化。如果你的某个模态数据质量很差门控值会自然降低相当于模型自己学会了「不信这个模态」。4. 训练参数怎么调学习率、损失函数和早停策略4.1 分层学习率是必须的文本分支和图像分支的预训练程度不一样用同一个学习率会出问题。BERT 微调通常用 2e-5 到 5e-5ResNet 微调用 1e-4 到 1e-3融合层从头训可以用 1e-3。如果统一用 1e-3BERT 那部分会震荡统一用 2e-5ResNet 又学得太慢。def build_optimizer(model, text_lr2e-5, image_lr1e-4, fusion_lr1e-3): text_params list(model.text_branch.parameters()) image_params list(model.image_branch.parameters()) fusion_params list(model.fusion.parameters()) optimizer torch.optim.AdamW([ {params: text_params, lr: text_lr}, {params: image_params, lr: image_lr}, {params: fusion_params, lr: fusion_lr} ], weight_decay0.01) return optimizerAdamW比Adam多了正确的权重衰减实现在多模态训练里更稳。weight_decay0.01是常规值数据量小可以加到 0.05。4.2 损失函数选交叉熵还是 Focal Loss风险识别场景通常有类别不平衡问题负样本远多于正样本。标准交叉熵在这种情况下会让模型偏向预测多数类。Focal Loss 通过降低易分类样本的权重让模型更关注难样本。import torch.nn.functional as F class FocalLoss(nn.Module): def __init__(self, alpha0.25, gamma2.0): super().__init__() self.alpha alpha self.gamma gamma def forward(self, logits, targets): ce_loss F.cross_entropy(logits, targets, reductionnone) pt torch.exp(-ce_loss) focal_loss self.alpha * (1 - pt) ** self.gamma * ce_loss return focal_loss.mean()alpha0.25和gamma2.0是 Focal Loss 的经典参数。alpha控制正负样本的权重正样本少就设小一点gamma控制难易样本的聚焦程度越大越关注难样本。如果你的数据不平衡比例超过 1:20可以把alpha降到 0.1。4.3 早停看验证集的 F1 还是 AUC风险识别场景里AUC 反映的是排序能力F1 反映的是阈值确定后的分类效果。我一般两个都看但早停用验证集的 F1因为最终业务落地时你需要一个明确的阈值。from sklearn.metrics import f1_score, roc_auc_score def evaluate(model, loader, device): model.eval() all_preds, all_labels, all_probs [], [], [] with torch.no_grad(): for batch in loader: input_ids batch[input_ids].to(device) image batch[image].to(device) labels batch[label].to(device) logits model(input_ids, image) probs F.softmax(logits, dim1)[:, 1] preds (probs 0.5).long() all_preds.extend(preds.cpu().numpy()) all_labels.extend(labels.cpu().numpy()) all_probs.extend(probs.cpu().numpy()) f1 f1_score(all_labels, all_preds) auc roc_auc_score(all_labels, all_probs) return f1, auc早停的 patience 一般设 5 到 10 个 epoch。如果验证集 F1 连续 5 轮不提升就停掉。注意保存最佳模型时用torch.save(model.state_dict(), best_model.pt)不要只存整个模型对象后面加载会方便很多。5. 避坑与排查多模态风险识别里最容易翻车的 5 个地方5.1 文本和图像 ID 对不上训练 loss 不降现象训练几个 epoch 后 loss 一直在 0.69 附近震荡准确率接近随机猜。原因CSV 里的image_path和实际文件名不匹配或者图像读取失败返回了全黑图。DataLoader 不会报错模型学到的是噪声。解决在 Dataset 的__getitem__里加断言图像读取失败时直接抛异常而不是静默返回。另外用df[image_path].apply(lambda x: os.path.exists(os.path.join(img_root, x)))做一次全量检查。5.2 图像增强过度模型学不到风险信号现象训练集准确率很高验证集 F1 只有 0.5 左右。原因用了 RandomHorizontalFlip、RandomRotation 等增强把公章、签名这些关键信号的方向和位置破坏了。模型在训练集上记住了增强后的模式但验证集是原始图。解决风险识别场景只保留 Resize 和 Normalize最多加一点 ColorJitter 的亮度扰动。如果一定要做增强先可视化几张增强后的图确认关键信号还在。5.3 两个模态的学习率没分开BERT 部分梯度爆炸现象训练初期 loss 突然变成 NaN。原因文本分支用了和融合层一样的学习率比如 1e-3BERT 的预训练权重被大幅更新梯度爆炸。解决用分层学习率文本分支 2e-5图像分支 1e-4融合层 1e-3。另外加梯度裁剪torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0)。5.4 验证集和测试集的样本分布不一致现象验证集 F1 0.85上线后实际效果只有 0.6。原因划分数据集时用了随机划分但实际业务里时间是最重要的维度。用未来数据预测过去模型学到了时间泄露的特征。解决按时间划分用前 80% 的数据训练后 20% 验证。如果数据量够做滚动窗口验证。5.5 门控融合的权重全部趋近于 0.5现象训练完后检查门控输出发现所有样本的权重都在 0.5 附近等于没融合。原因门控层的初始化用了默认的 Xavier输出接近 0.5。如果两个模态的特征尺度差异大门控学不到有区分度的权重。解决在门控层前加 BatchNorm把两个模态的特征归一化到相近尺度。另外可以给门控加一个稀疏正则鼓励它输出极端值。6. 进阶技巧用模态 dropout 提升模型鲁棒性训练多模态模型时模型很容易过度依赖某一个模态。比如图像质量普遍较好时文本分支可能被完全忽略。上线后如果图像接口挂了整个模型就废了。模态 dropout 的思路很简单训练时以一定概率把某个模态的输入置零强迫模型学会在只有单模态的情况下也能做出合理判断。class MultimodalRiskModel(nn.Module): def __init__(self, text_branch, image_branch, fusion, modal_dropout0.15): super().__init__() self.text_branch text_branch self.image_branch image_branch self.fusion fusion self.modal_dropout modal_dropout def forward(self, input_ids, image): text_feat self.text_branch(input_ids) image_feat self.image_branch(image) # 训练时随机丢弃一个模态 if self.training: if torch.rand(1).item() self.modal_dropout: text_feat torch.zeros_like(text_feat) elif torch.rand(1).item() self.modal_dropout: image_feat torch.zeros_like(image_feat) return self.fusion(text_feat, image_feat)modal_dropout0.15表示每个模态有 15% 的概率被置零。这个值不能太大否则模型欠拟合也不能太小否则起不到正则作用。我一般从 0.1 开始试观察验证集 F1 的变化。验证模态 dropout 是否生效可以做一个简单的测试加载训练好的模型把图像输入全部置零看文本分支单独输出的 AUC。如果 AUC 掉到 0.5 附近说明模型完全依赖图像如果还能保持在 0.7 以上说明文本分支学到了有效特征。还有一个实用技巧是「模态互补采样」。在构造 batch 时故意让一部分样本只有文本、一部分只有图像、一部分两个都有。这样模型在每个 batch 里都能见到单模态和双模态的情况学到的融合策略更稳健。def collate_with_modality_mask(batch, text_only_ratio0.2, image_only_ratio0.2): input_ids torch.stack([b[input_ids] for b in batch]) images torch.stack([b[image] for b in batch]) labels torch.tensor([b[label] for b in batch]) n len(batch) for i in range(n): r torch.rand(1).item() if r text_only_ratio: images[i] torch.zeros_like(images[i]) elif r text_only_ratio image_only_ratio: input_ids[i] torch.zeros_like(input_ids[i]) return {input_ids: input_ids, image: images, label: labels}这个 collate 函数在 DataLoader 里替换默认的即可。text_only_ratio0.2和image_only_ratio0.2意味着 40% 的样本是单模态60% 是双模态。实际用的时候根据你的业务场景调整如果图像接口不稳定就加大text_only_ratio。最后说一个我自己的习惯每次训完模型我都会把验证集里预测错误的样本单独拉出来看尤其是那些文本和图像信号矛盾的样本。这些样本往往暴露了融合层的缺陷比盯着 loss 曲线有用得多。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C# ATM模拟器:分层架构与状态机设计实战

C# ATM模拟器:分层架构与状态机设计实战

1. 项目概述:一个看似简单却暗藏工程逻辑的ATM模拟器“C#——银行ATM程序DEMO”这个标题,乍看像是大学C#课程期末作业的常见命题,甚至可能被归类为“过时的控制台小练习”。但在我带过的多个实训项目中,恰恰是这类表面朴素的题目&…

2026/10/12 20:44:24 阅读更多 →
压力测试实战:从阶梯加压到瓶颈定位的完整流程与避坑指南

压力测试实战:从阶梯加压到瓶颈定位的完整流程与避坑指南

把压力测试和性能调优做成一套能落地的流程,而不是零散地“压一压、调一调”,这件事本身比想象中的复杂。很多团队其实不缺工具,缺的是一套完整的思维框架:从目标设定、场景设计、指标观测,到瓶颈定位、调优验证、回归…

2026/10/12 20:43:23 阅读更多 →
Python爬虫框架大比拼:从requests到Selenium,TaoToken统一Key打通采集链路

Python爬虫框架大比拼:从requests到Selenium,TaoToken统一Key打通采集链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 20:43:23 阅读更多 →

最新新闻

面向JSON半结构化数据的字段级加密实践:以安当DBG看嵌套脱敏与函数下推优化

面向JSON半结构化数据的字段级加密实践:以安当DBG看嵌套脱敏与函数下推优化

在关系型数据库占据主流的年代,数据脱敏与加密的落点相对清晰:列是确定的,类型是可枚举的,规则可以按表结构静态下发。但当业务进入图库、文档库与宽表混合存储的阶段,数据形态发生了根本变化。一个客户档案可能被存成…

2026/10/12 22:25:51 阅读更多 →
面向HTAP与读写分离场景的透明数据加密一致性工程:安当TDE在列存副本中的落地拆解

面向HTAP与读写分离场景的透明数据加密一致性工程:安当TDE在列存副本中的落地拆解

一、背景:HTAP 与读写分离为什么让加密变难 近些年,混合事务与分析处理(HTAP)架构在金融、电信与政企核心系统中普及。这类架构的核心特征是:同一份业务数据既要支撑高并发联机事务,又要支撑实时列式分析。…

2026/10/12 22:25:44 阅读更多 →
生物化学实验实战手册:蛋白质定量、电泳与酶动力学要点解析

生物化学实验实战手册:蛋白质定量、电泳与酶动力学要点解析

1. 为什么写这篇“生物化学”实验笔记生物化学这四个字,对刚入门的同学来说往往等于一本八百页的砖头教材,一堆又长又难记的代谢通路,还有动不动就“考前背到凌晨三点”的恐惧。但等你真正走进实验室,你会发现它其实是一门典型的“动手学科”——所有的理论最后都要落到离心管、…

2026/10/12 22:25:42 阅读更多 →
B端产品经理方法论:从业务梳理到汽配商城运营的完整指南

B端产品经理方法论:从业务梳理到汽配商城运营的完整指南

简介:面向B端产品经理的系统化方法论文档,适合从事企业级产品设计、业务梳理、产品规划,或从C端转岗B端的产品从业者阅读。正文从B端业务梳理入手,依次展开产品设计、产品管理和运营策略四大部分,具体涵盖行业调研、UM…

2026/10/12 22:25:36 阅读更多 →
酒店评论中文情感分析系统实战:数据清洗、机器学习建模与避坑指南

酒店评论中文情感分析系统实战:数据清洗、机器学习建模与避坑指南

简介:这是一套使用Python开发的酒店评论中文情感分析系统完整项目,面向计算机相关专业学生的毕业设计、课程设计及实战进阶。项目以酒店评论正负语料为基础,覆盖中文分词、去停用词、特征提取与机器学习建模等环节,实现情感倾向自…

2026/10/12 22:25:19 阅读更多 →
多智能体强化学习框架PyMARL:从架构到实战全解析

多智能体强化学习框架PyMARL:从架构到实战全解析

简介:PyMARL是一个基于PyTorch实现的深度多智能体强化学习框架,面向需要处理多智能体协作、竞争与博弈问题的学习者和研究者,内置多种主流算法,并以《星际争霸II》的SMAC作为标准实验场景。这份压缩包共包含52个文件,以…

2026/10/12 22:24:06 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →