图书分类实战:从TF-IDF到BERT的文本分类全流程
1. 图书分类任务到底在解决什么问题图书分类这个事乍一听像是图书馆管理员才关心的冷门需求但如果你做过内容平台、电商后台、知识管理系统就会发现它其实是一个特别典型的多分类文本任务。我最早接触这个方向是因为帮一个做数字阅读的朋友处理一批乱七八糟的电子书元数据——几万本书标签体系混乱有的只有书名有的连简介都残缺不全人工归类根本干不过来。当时第一反应是“这不就是个文本分类吗”但真正动手之后才发现从特征工程到模型选型每一步都有坑。这个任务的核心目标很明确给定一本书的文本信息书名、简介、目录、关键词等预测它属于哪个类别。类别体系可能是中图法分类也可能是平台自己定义的标签体系比如“计算机”“文学”“历史”“少儿”“经管”这种。听起来简单但实际场景里一本书可能同时属于“计算机”和“经管”比如《数据驱动的商业决策》也可能因为简介写得极其抽象而难以判断。所以它本质上是一个带噪声的多分类问题而且类别不平衡非常严重——文学类可能占一半小众类别只有几十本。适合谁来参考这篇内容如果你正在做文本分类入门实战想一次性把特征工程、传统机器学习、深度学习三条路线都跑通那这个任务非常合适。它不像图像分类那样需要GPU集群也不像推荐系统那样依赖海量行为数据一台普通笔记本就能跑完全流程。更重要的是图书分类的文本长度适中书名短、简介中等、目录长能让你清楚地看到不同模型在不同文本粒度上的表现差异。我下面会按照特征工程 → GBDT/传统机器学习 → 深度学习这条线把每个环节的选型逻辑、参数计算、实操细节和踩坑经验都摊开讲。你不需要有NLP背景但最好会一点Python和sklearn这样跟着做一遍就能复现。2. 数据准备与特征工程别急着上模型先把文本洗干净2.1 图书数据的典型结构与清洗策略图书分类任务的数据来源通常有三种结构化元数据出版社、出版年份、页数、半结构化文本书名、副标题、目录、非结构化文本简介、读者评论。我拿到的第一版数据大概长这样字段示例是否可用书名深入理解计算机系统强信号副标题原书第3版弱信号需过滤简介本书从程序员视角讲解计算机系统底层原理……强信号目录第1章 计算机系统漫游……中等信号出版社机械工业出版社弱信号但可作为辅助特征页数780弱信号清洗的第一步是去掉版本噪声。像“第3版”“修订版”“套装上下册”这种词对分类几乎没有帮助反而会干扰词频统计。我一般用正则把第\d版、[上下]册、\d年这类模式直接删掉。第二步是处理缺失值简介缺失的书用目录拼接书名来补目录也缺失的直接丢弃或者标记为“未知”不要强行填充否则会引入噪声。注意不要用均值或众数填充文本字段文本的缺失和数值缺失完全是两回事。一本书没有简介不代表它的简介“平均”是什么样。2.2 文本特征工程TF-IDF、Word2Vec还是BERT特征工程是传统机器学习和深度学习的分水岭。我试过三种方案各有适用场景方案一TF-IDF 词级/字符级n-gram。这是最稳的baseline。TF-IDF的核心思想是一个词在當前文档中出现越多、在整个语料中出现越少它就越能代表这篇文档。公式是tf-idf(t,d) tf(t,d) * idf(t)其中idf(t) log(N / (df(t) 1)) 1。我一般用TfidfVectorizer参数设置max_features50000、ngram_range(1,2)、min_df3、max_df0.9。min_df3是为了过滤只出现一两次的稀有词max_df0.9是去掉“的”“了”这种几乎每篇都有的停用词。方案二Word2Vec词向量平均。用gensim训练一个100维的Word2Vec然后把每本书简介里所有词的向量取平均。这个方案的好处是能捕捉语义相似度比如“机器学习”和“深度学习”在向量空间里距离近。但缺点也很明显平均操作会丢失词序信息而且对于长文本平均后的向量会趋于“平滑”区分度下降。方案三预训练语言模型微调。比如用BERT或RoBERTa把书名简介拼接后输入取[CLS]向量接一个分类层。这个方案效果最好但需要GPU而且推理速度慢。我实测下来在图书分类这种类别体系相对固定的任务上TF-IDF线性模型已经能到85%左右的准确率BERT能到92%左右但训练时间是前者的几十倍。我的建议是先用TF-IDF跑通全流程确认数据质量和类别体系没问题再上深度学习。否则你调了半天BERT最后发现是标签本身标错了那就白干了。2.3 类别不平衡的处理过采样、欠采样还是代价敏感图书分类的类别分布通常长尾很严重。我统计过一批数据前5个类别占了70%的样本后20个类别加起来不到5%。这种情况下模型会倾向于预测头部类别尾部类别的召回率极低。处理方式有三种过采样对尾部类别复制样本或者用SMOTE生成合成样本。但SMOTE在文本高维稀疏特征上效果一般因为文本的欧氏距离意义不大。欠采样对头部类别随机丢弃样本。简单粗暴但会丢失信息。代价敏感学习在模型里设置class_weightbalanced让模型对尾部类别的错误惩罚更大。这是我最推荐的方式因为不改动数据分布只是调整损失函数的权重。在sklearn里LogisticRegression、LinearSVC、RandomForest都支持class_weight参数。我一般先用balanced跑一版看混淆矩阵如果尾部类别还是差再考虑对尾部类别做适度过采样。3. 传统机器学习模型实战从Logistic Regression到GBDT3.1 为什么先跑Logistic Regression和LinearSVC很多人一上来就上XGBoost或LightGBM觉得树模型一定比线性模型强。但在高维稀疏文本特征上线性模型往往表现更好原因有两个第一文本特征维度通常几万到几十万树模型在这么高的维度上分裂效率很低而且容易过拟合第二TF-IDF特征是稀疏的线性模型能很好地处理这种稀疏性而树模型对稀疏特征的切分点选择不够敏感。我一般先跑两个baselinefrom sklearn.linear_model import LogisticRegression from sklearn.svm import LinearSVC from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import Pipeline # Logistic Regression pipe_lr Pipeline([ (tfidf, TfidfVectorizer(max_features50000, ngram_range(1,2), min_df3, max_df0.9)), (clf, LogisticRegression(class_weightbalanced, max_iter1000, C1.0)) ]) # LinearSVC pipe_svc Pipeline([ (tfidf, TfidfVectorizer(max_features50000, ngram_range(1,2), min_df3, max_df0.9)), (clf, LinearSVC(class_weightbalanced, C0.5)) ])C是正则化强度的倒数C越小正则化越强。文本分类里我一般从C1.0开始试如果过拟合就降到0.1或0.5。LinearSVC通常比LogisticRegression快而且在小样本上表现更稳但它不输出概率如果需要概率得用CalibratedClassifierCV包一层。3.2 GBDT在文本特征上的正确打开方式GBDTGradient Boosting Decision Tree包括XGBoost、LightGBM、CatBoost这些。它们在数值特征和类别特征上非常强但在高维稀疏文本特征上直接使用效果往往不如线性模型。那为什么标题里还提GBDT因为图书分类任务里除了文本还有结构化特征——出版社、出版年份、页数、价格区间等。把这些结构和文本特征拼接起来GBDT就能发挥优势。我的做法是用TF-IDF做文本特征用One-Hot或Target Encoding做类别特征用分桶做数值特征然后拼接成一个大的稀疏矩阵喂给LightGBM。LightGBM支持稀疏输入而且有feature_fraction和bagging_fraction来防止过拟合。import lightgbm as lgb from scipy.sparse import hstack from sklearn.preprocessing import OneHotEncoder, KBinsDiscretizer # 文本特征 tfidf TfidfVectorizer(max_features30000, ngram_range(1,2), min_df3) X_text tfidf.fit_transform(df[text]) # 类别特征出版社 ohe OneHotEncoder(handle_unknownignore, max_categories50) X_pub ohe.fit_transform(df[[publisher]]) # 数值特征页数分桶 kb KBinsDiscretizer(n_bins10, encodeonehot-dense, strategyquantile) X_pages kb.fit_transform(df[[pages]].fillna(0)) # 拼接 X_all hstack([X_text, X_pub, X_pages]).tocsr() # LightGBM clf lgb.LGBMClassifier( n_estimators500, learning_rate0.05, num_leaves31, max_depth6, feature_fraction0.8, bagging_fraction0.8, bagging_freq5, class_weightbalanced, verbose-1 )这里有几个关键参数需要解释num_leaves31是LightGBM的默认值控制树的复杂度max_depth6是为了防止在稀疏特征上长得太深feature_fraction0.8表示每次迭代随机选80%的特征这能显著降低过拟合风险bagging_fraction0.8和bagging_freq5是行采样进一步增加随机性。我实测下来在纯文本特征上LightGBM比LinearSVC低2-3个百分点但加入出版社和页数特征后LightGBM反超1-2个百分点。所以GBDT的价值在于多模态特征融合而不是替代线性模型做纯文本分类。3.3 模型评估与调参别只看准确率图书分类的评估不能只看准确率因为类别不平衡。我一般看三个指标宏平均F1macro-F1、加权平均F1weighted-F1、每个类别的召回率。宏平均F1对尾部类别更敏感加权平均F1更接近整体表现。调参方面我习惯用Optuna做贝叶斯优化搜索空间如下参数搜索范围说明C (LR/SVC)0.01 ~ 10对数均匀max_features10000 ~ 100000整数ngram_range(1,1) ~ (1,3)类别min_df1 ~ 10整数num_leaves15 ~ 127整数learning_rate0.01 ~ 0.3对数均匀我跑过一轮Optuna大概100次试验在验证集上宏平均F1从0.72提升到0.79。但要注意调参的收益远不如特征工程和标签清洗。我见过太多人花几天调参最后发现把标签错误修正后F1直接涨了5个点。实操心得每次调参前先随机抽100个样本人工检查标签如果错误率超过5%先修标签别调参。4. 深度学习模型实战从TextCNN到BERT微调4.1 TextCNN轻量级深度模型的性价比之选TextCNN是我最推荐的深度学习入门模型结构简单训练快在图书分类这种中等长度文本上效果不错。它的核心思想是用不同尺寸的卷积核捕捉n-gram特征然后做最大池化。import torch import torch.nn as nn class TextCNN(nn.Module): def __init__(self, vocab_size, embed_dim128, num_classes20, filter_sizes[2,3,4], num_filters128): super().__init__() self.embedding nn.Embedding(vocab_size, embed_dim, padding_idx0) self.convs nn.ModuleList([ nn.Conv2d(1, num_filters, (fs, embed_dim)) for fs in filter_sizes ]) self.dropout nn.Dropout(0.5) self.fc nn.Linear(num_filters * len(filter_sizes), num_classes) def forward(self, x): x self.embedding(x) # (B, L, D) x x.unsqueeze(1) # (B, 1, L, D) x [torch.relu(conv(x)).squeeze(3) for conv in self.convs] x [torch.max_pool1d(f, f.size(2)).squeeze(2) for f in x] x torch.cat(x, dim1) x self.dropout(x) return self.fc(x)filter_sizes[2,3,4]表示用2-gram、3-gram、4-gram的卷积核num_filters128是每种尺寸的卷积核数量。dropout0.5是必须的否则很容易过拟合。我实测下来TextCNN在图书分类上比TF-IDFLinearSVC高1-2个百分点训练时间在GPU上大概几分钟。4.2 BERT微调效果最好但成本最高BERT微调是当前文本分类的SOTA方案。我一般用bert-base-chinese或hfl/chinese-roberta-wwm-ext把书名和简介拼接后截断到256个token接一个分类层。from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments tokenizer BertTokenizer.from_pretrained(bert-base-chinese) model BertForSequenceClassification.from_pretrained(bert-base-chinese, num_labels20) def tokenize(examples): return tokenizer(examples[text], paddingmax_length, truncationTrue, max_length256) train_enc train_df.map(tokenize, batchedTrue)训练参数方面我一般用learning_rate2e-5、batch_size16、epochs3、warmup_ratio0.1。学习率不能太大否则会破坏预训练权重epochs不能太多否则会过拟合。我试过learning_rate5e-5结果验证集loss震荡很厉害降到2e-5就稳了。BERT的缺点是推理慢。在CPU上单条推理大概200ms如果每天要分类几万本书那就得用GPU或者蒸馏到小模型。我一般会用DistilBERT或者把BERT的输出作为特征再训练一个LightGBM这样推理速度能提升10倍以上。4.3 深度学习模型的常见坑与调优技巧坑一序列长度设置不当。图书简介有的很短几十个字有的很长上千字。如果统一截断到128长文本的信息会丢失如果设到512短文本会填充大量无意义的padding浪费计算。我的做法是统计文本长度分布取95分位数作为max_length。我统计过一批数据95分位数是220所以设256比较合适。坑二学习率太大导致灾难性遗忘。BERT微调的学习率通常在1e-5到5e-5之间我见过有人用1e-3结果模型完全学不到东西。如果你不确定先用2e-5跑一个epoch看验证集loss是否下降。坑三类别不平衡在深度模型里更严重。深度模型默认的交叉熵损失不考虑类别权重尾部类别几乎被忽略。我一般会在损失函数里加weight参数权重设为1 / class_freq然后归一化。class_weights 1.0 / torch.bincount(torch.tensor(train_labels)) class_weights class_weights / class_weights.sum() criterion nn.CrossEntropyLoss(weightclass_weights)坑四没有做对抗验证。图书分类的标签体系可能随时间变化比如新书可能属于新类别。我一般会留一个时间上的验证集——用旧数据训练用新数据验证看模型是否还能保持效果。如果下降明显说明标签体系漂移了需要重新标注。5. 常见问题与排查技巧实录5.1 模型效果差怎么定位问题我一般按这个顺序排查看标签质量随机抽100个样本人工检查标签是否正确。如果错误率超过5%先修标签。看混淆矩阵找出哪些类别之间容易混淆。比如“计算机”和“科技”经常混“历史”和“传记”经常混。如果混淆严重考虑合并类别或增加区分特征。看特征重要性如果是线性模型看系数最大的词如果是树模型看feature importance。如果最重要的特征都是“的”“了”这种停用词说明停用词没去掉。看学习曲线如果训练集效果好但验证集差是过拟合如果两者都差是欠拟合。过拟合就加正则化、减特征、增数据欠拟合就加特征、换模型、调参。5.2 常见问题速查表问题可能原因解决方法准确率高但宏F1低类别不平衡设置class_weight对尾部过采样训练集准确率远高于验证集过拟合加dropout减max_features增正则化验证集loss震荡学习率太大降低学习率加warmup某些类别召回率为0样本太少或特征不明显合并类别或人工构造特征推理速度慢模型太大蒸馏到小模型或用TF-IDF线性模型新书分类效果差标签体系漂移重新标注或做增量学习5.3 独家避坑技巧技巧一用书名做数据增强。图书分类里书名是最强的信号。我一般会把书名重复3遍拼在简介前面这样TF-IDF和BERT都能更关注书名。实测下来宏F1能提升1-2个点。技巧二用目录做层次分类。图书分类天然有层次结构比如“计算机 人工智能 机器学习”。我一般会先训一个粗粒度分类器预测“计算机”再训一个细粒度分类器预测“人工智能”或“机器学习”。这样每个分类器的类别数少准确率更高。技巧三用置信度做人工复核。模型预测概率低于0.6的样本自动推给人工复核。我统计过这部分样本大概占10%但人工复核后能修正其中一半的错误整体准确率能提升3-5个点。技巧四定期重新训练。图书分类的标签体系会随新书出版而变化我一般每季度重新训练一次用最新的数据。如果新类别出现先人工标注几百个样本再做增量学习。6. 从特征工程到深度学习的选型决策树跑完这一整套流程我最大的体会是没有最好的模型只有最合适的场景。如果你只是做一个内部工具每天分类几百本书TF-IDFLinearSVC就够了部署简单推理快效果也不差。如果你要做线上服务每天分类几万本而且对准确率要求高那就上BERT但要做好GPU资源和推理优化的准备。GBDT适合有结构化特征的场景比如出版社、页数、价格这些信息比较全的时候。我一般会按这个决策树来选数据量 1000本类别数 10TF-IDF LinearSVC数据量 1000 ~ 10000本有结构化特征TF-IDF LightGBM数据量 10000本准确率要求高BERT微调需要实时推理TF-IDF 线性模型或蒸馏后的小模型最后再分享一个小技巧永远保留一个规则baseline。比如“书名包含‘计算机’就归为计算机类”这个规则虽然简单但在某些类别上准确率可能比模型还高。我一般会把规则和模型做融合规则命中时用规则规则不命中时用模型这样整体效果更稳。

相关新闻

Git多人协作实战:从版本控制原理到团队流程落地

Git多人协作实战:从版本控制原理到团队流程落地

1. 版本控制与多人协作的底层逻辑拆解1.1 为什么选 Git 而不是其他方案刚入行那会儿,团队里用的还是集中式版本控制工具,每次提交都得联网,一旦中央仓库出问题,所有人都得干等着。后来切换到 Git,最大的感受就是“踏实…

2026/10/15 20:20:53 阅读更多 →
Python抖音视频数据分析与可视化系统(附核心代码)

Python抖音视频数据分析与可视化系统(附核心代码)

上个月,一个做内容运营的朋友发来几千行抖音视频数据表格,让我帮她做一份可视化分析。表格里的字段很全,播放量、点赞、评论、分享、收藏全都有,但问题恰恰出在“太全”上——几千行原始数据堆在一起,根本看不出哪个视…

2026/10/15 20:20:53 阅读更多 →
Docker入门实战指南:从核心原理到容器化部署避坑经验

Docker入门实战指南:从核心原理到容器化部署避坑经验

Docker技术这几年几乎是后端岗位的标配,但很多新人在接触时容易被各种概念劝退:镜像、容器、仓库、编排、数据卷、网络模式……每个词单看都懂,合在一起就懵。我刚开始用Docker时也经历过一段"照着文档敲命令能跑,一换环境就…

2026/10/15 20:20:53 阅读更多 →

最新新闻

4行提示词生成3D电影级画面:AI视频生成新范式与实战方法

4行提示词生成3D电影级画面:AI视频生成新范式与实战方法

群里从昨晚就没消停过。先是一张对话截图在各个创作者群里流转,说是某个前沿对话模型的新版本 Claude Next 疑似“偷跑”上线,紧接着有人贴出视频:仅仅用了 4 行提示词,就直接生成了一段带有完整运镜、光影变化和三维空间感的画面…

2026/10/15 21:09:14 阅读更多 →
百万年薪背后:大模型行业薪资真相与避坑指南

百万年薪背后:大模型行业薪资真相与避坑指南

“百万年薪”这词这几年被说烂了,尤其一沾上大模型三个字,好像随便一个做模型的人都是年薪百万起步,上不封顶。但我自己在猎头圈和行业里看到的真实情况,跟热搜上的观感完全不是一回事。大模型行业确实有一批人百万年薪&#xff0…

2026/10/15 21:09:14 阅读更多 →
QwenGyre框架解析:超长程智能体在线强化学习实践指南

QwenGyre框架解析:超长程智能体在线强化学习实践指南

千问团队放出 QwenGyre 的时候,我第一反应是:超长程智能体任务的在线强化学习,终于有人认真做成框架了。做智能体的都清楚那种痛苦——模型在单步指令上表现不错,让它连续执行几十步复杂任务就开始飘,动作越走越偏&…

2026/10/15 21:09:14 阅读更多 →
告别margin和padding做间距:用gap与Flex、Grid实现精准CSS布局

告别margin和padding做间距:用gap与Flex、Grid实现精准CSS布局

很多人可能都遇到过这种情况:写一个按钮组,给每个按钮加margin-right,最后一个还得单独去掉;做一个卡片列表,要么用margin-bottom一个一个调,要么用"父元素设负 margin、子元素设 padding"那种祖…

2026/10/15 21:09:14 阅读更多 →
H5前端如何实现AMR音频全平台兼容播放

H5前端如何实现AMR音频全平台兼容播放

1. 为什么AMR在H5移动端是个“隐形雷区”你有没有遇到过这样的场景:一个语音留言功能,在安卓手机上点一下就响,但在iPhone上却只显示一个灰色的播放按钮,点下去毫无反应?或者更糟——页面直接报错,控制台里…

2026/10/15 21:09:14 阅读更多 →
WeChatBot_WXAUTO_SE 角色扮演 Prompt 完全指南:以 prompts/角色2.md 为模板构建微信 AI 角色

WeChatBot_WXAUTO_SE 角色扮演 Prompt 完全指南:以 prompts/角色2.md 为模板构建微信 AI 角色

AI 应用人工智能大模型即时通讯 【免费下载链接】WeChatBot_WXAUTO_SE 【停止维护】LLM API 聚合对话工具。原项目仓库:https://github.com/KouriChat/KouriChat 本项目由iwyxdxl在原项目基础上修改创建。仅供学习,请遵守规定使用,请勿接入公…

2026/10/15 21:08:13 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →