不用大模型也能做虚假新闻检测:MLP加TF-IDF全流程实战
简介基于Python和MLP实现的互联网虚假新闻检测器是一个涵盖数据预处理、模型训练、参数调优与预测输出的完整机器学习项目主要面向自然语言处理初学者、计算机专业学生及需快速搭建文本分类模型的开发者适用于课程设计、毕业设计或项目实战。资源内置项目报告、原始训练/测试集、预处理后的pkl文件、停用词表以及训练、优化、预测等多个功能模块基于Python 3.8与scikit-learn、pandas、jieba等主流库构建可直接在PyCharm中复现运行。压缩包共21个文件以Python源码、model模型文件、csv/pkl数据集、txt文本和docx项目报告为主整体大小91.14MB目录结构清晰数据、代码与模型分区存放便于定位和学习。目前已有134人学习浏览。借助该资源读者可学习中文分词、停用词过滤、特征提取等手段并深入理解多层感知机在文本分类中的实际应用同时还可借助自带模型与预测脚本查看真实输出或替换数据集开展扩展实验是一份实践性很强的参考资料。1. 互联网虚假新闻检测不用上大模型这份 MLP 源码就能跑通全流程说实话看到“互联网虚假新闻检测”这个题目第一反应是这不得直接上 BERT但真正拿到这份基于 Python 和 MLP 实现的项目源码后我发现它走的是另一条完全可行的路线——jieba分词 TF-IDF 向量化 多层感知机MLP做二分类。整个项目是标准的课程设计级工程核心代码只有 preprocess.py、fit.py、optimize.py、predict.py 四个脚本却能跑完从原始 CSV 到预测结果 txt 的全流程还附带一份能直接当模板改写的项目报告 docx。适合两类人一是正在做机器学习课设/毕设、需要一份能讲清原理又能跑通全流程的参考实现二是刚入门的从业者想搞明白不用大模型怎么做真假新闻判别。下面我按目录、预处理、训练调参、预测验证的顺序拆开讲顺便标出复现时最容易踩的坑。2. 先把项目拆开看再跑目录结构、数据集形态与预处理流水线拿到压缩包先别急着跑 fit.py我习惯先把目录完整过一遍搞清楚每个文件在流水线里的位置。这个项目的结构不算复杂但有几个文件之间的依赖关系很容易被忽略比如 dataset 里同时放着 csv 和 pklmodel 文件夹一开始是空的mlp_pred.txt 是 predict.py 生成的产物而不是项目自带的。把这层关系理清楚后面跑起来才不会一头雾水。2.1 目录逐项拆解源码、报告、数据集各司其职解压之后根目录下有一个项目报告 docx 和 ML 项目文件夹。ML 文件夹里面才是真正的代码、数据和模型输出。下面这张表基本可以当作 README 的浓缩版来看路径类型在流水线里的作用ML/dataset/train.csv原始数据训练集原始文本与标签ML/dataset/test.csv原始数据测试集原始文本无标签或待预测标签ML/dataset/train.pkl中间产物preprocess.py 输出的预处理后训练集ML/dataset/test.pkl中间产物preprocess.py 输出的预处理后测试集ML/dataset/cn_stopwords.txt词表中文停用词表预处理阶段用来过滤无意义词ML/preprocess.py脚本文本清洗、分词、去停用词落盘 pklML/fit.py脚本训练主入口产出模型与向量器ML/optimize.py脚本网格搜索挑最优超参数辅助 fit.pyML/predict.py脚本加载模型对测试集预测输出 mlp_pred.txtML/model/目录存放 joblib 序列化的模型和 TF-IDF 向量器ML/mlp_pred.txt输出predict.py 生成的逐条预测结果项目报告.docx文档完整课程报告可直接当范文/模板改注意 train.pkl 和 test.pkl 是 preprocess.py 跑完之后才生成的压缩包自带的这份是作者已经处理好的版本。也就是说你拿到手可以直接跳过预处理阶段从 fit.py 开始跑。但如果想自己换数据集就必须把 preprocess.py 重新跑一遍生成自己的 pkl否则 fit.py 读到的还是旧数据。2.2 train.csv 和 test.csv 里到底装了什么一列文本、一列标签从项目正文看数据集是中文互联网新闻文本二分类问题label 只有两个取值真实新闻和虚假新闻。csv 是典型的结构化数据形态两列一列是新闻文本一列是标签。课程设计项目的数据集一般不会太大通常在几千到几万条的量级这个规模用 MLP 训练非常合适——既不会像深度学习那样依赖 GPU也不会像线性模型那样欠拟合。这里有个容易忽略的点test.csv 的标签是否给全直接决定 predict.py 怎么评估。常见做法是 test.csv 只保留文本列预测结果由模型生成后单独写在 mlp_pred.txt 里之后再做人工比对或者提交评测。你需要先用head或者 pandas 快速看一眼两个 csv 的列名和行数cd ML/dataset python -c import pandas as pd; print(pd.read_csv(train.csv, encodingutf-8).shape); print(pd.read_csv(train.csv, encodingutf-8).head())这段命令用 pandas 读入训练集并打印形状和前五行。encodingutf-8是中文文本分类最常用的编码方式如果文件是记事本另存的 UTF-8 带 BOM 格式这里会报utf-8 codec cant decode后面避坑章节会专门说。返回值会显示类似(5000, 2)的形状说明有 5000 条样本、2 列text 和 label同时能看到文本是完整句子还是短标题——这直接影响 TF-IDF 的 ngram_range 设置。2.3 预处理为什么是 jieba 停用词 TF-IDF中文文本分类的基准方案很多人第一次做中文文本分类会纠结要不要上 Word2Vec、BERT 这类嵌入表示。这份源码给出的答案是在课程设计这个规模下TF-IDF MLP 已经是一个很强的基线。原因很直接TF-IDF 能把“词在文档中的重要程度”数值化MLP 又能学习特征之间的非线性组合两者配合不需要 GPU 就能在几分钟内训练完。分词是中文预处理绕不开的一步。英文天然按空格切词中文必须靠分词工具jieba是国内最常用的开源方案。拿到原始文本后预处理流程通常是读 csv → jieba 分词 → 过滤停用词 → 过滤单字和空串 → 用空格重新拼成句子 → 存成 pkl。停用词表 cn_stopwords.txt 里装的是“的、了、是、在”这类高频无意义词也包括一些标点符号过滤掉它们能明显降低特征维度。网上经常有人问 MLP 和 BP-ANN 是什么关系这里顺带说清楚MLP 是网络结构反向传播BP是它的训练算法sklearn 里的 MLPClassifier 默认就走 BP所以这俩说的是同一套东西。TF-IDF 得到的稀疏矩阵喂给 MLP 时隐藏层会先把每个特征做加权求和再经过非线性激活函数。相比朴素贝叶斯和逻辑回归MLP 能捕捉词与词之间的交互比如“辟谣”和“官方”同时出现时判真的概率会被显著拉高。3. fit.py / optimize.py / predict.py 逐个拆从 TF-IDF 到 MLP 分类器这一章进入核心代码拆解。先交代执行顺序preprocess.py 最先跑产出 pkl然后 fit.py 读 pkl 训练模型如果效果不理想用 optimize.py 做网格搜索找更好的超参数最后 predict.py 加载模型对测试集预测把结果写入 mlp_pred.txt。整个链路是单方向的前一个脚本的输出是后一个脚本的输入。3.1 preprocess.py把原始 CSV 洗成 pkl 的关键步骤preprocess.py 的逻辑不复杂但有三个细节决定了后续训练的上限分词模式、停用词过滤、缺失值处理。我一般会写成下面这样import pandas as pd import jieba import pickle STOPWORDS_PATH dataset/cn_stopwords.txt def load_stopwords(path): with open(path, r, encodingutf-8) as f: return set(line.strip() for line in f if line.strip()) def clean_text(text, stopwords): # jieba.lcut 返回词列表比 cut 更适合逐词过滤 words jieba.lcut(str(text)) words [w.strip() for w in words if w.strip() and w not in stopwords] # 过滤掉纯数字和单个字符降低噪声特征 words [w for w in words if not (w.isdigit() or len(w) 1)] return .join(words) def preprocess(csv_path, pkl_path, stopwords): df pd.read_csv(csv_path, encodingutf-8) # 防止 csv 某一行文本为空导致下游崩溃 df[text] df[text].fillna() df[text_clean] df[text].apply(lambda x: clean_text(x, stopwords)) with open(pkl_path, wb) as f: pickle.dump(df, f) print(f[OK] {csv_path} - {pkl_path}, shape{df.shape}) if __name__ __main__: stopwords load_stopwords(STOPWORDS_PATH) preprocess(dataset/train.csv, dataset/train.pkl, stopwords) preprocess(dataset/test.csv, dataset/test.pkl, stopwords)逻辑说明load_stopwords把停用词表读成 set用 set 做in判断的时间复杂度是 O(1)比 list 高效得多。clean_text里先分词再去停用词然后额外过滤了纯数字和长度为 1 的字符这是课程设计里常见但容易漏掉的一步——像“1”“2”这种数字在新闻文本里作为单独特征没有判别力反而增加 TF-IDF 矩阵的稀疏度。参数说明jieba.lcut默认是精确模式适合文本分类不会像搜索引擎模式那样把长词再切碎。fillna()是对缺失值的兜底真实数据里偶尔会有空行不处理的话分词阶段会直接抛异常。pkl 序列化时注意 pickle 的协议版本Python 3.8 默认协议 4跨版本读写一般没问题但如果你用 Python 3.12 读旧 pkl偶尔会遇到 numpy 版本不兼容的问题这个在避坑章细说。3.2 fit.py训练主脚本和两个真正影响精度的参数fit.py 是项目的主心骨负责加载 pkl、做 TF-IDF 向量化、切分训练验证集、训练 MLP、保存模型。这里的模型保存非常关键不光要存 MLP 模型本身还要存训练好的 TF-IDF 向量器。很多新手只 dump 模型不 dump 向量器导致预测阶段根本无法把文本转成和训练集一致的特征空间。import pandas as pd import pickle import joblib from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.neural_network import MLPClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report with open(dataset/train.pkl, rb) as f: df pickle.load(f) # max_features 限制特征维度防止维度爆炸 vectorizer TfidfVectorizer(max_features5000, ngram_range(1, 2), sublinear_tfTrue) X vectorizer.fit_transform(df[text_clean]) # 如果文本很短建议用二元词串提升表达力 y df[label].values # stratify 保证切分后正负样本比例一致 X_train, X_val, y_train, y_val train_test_split( X, y, test_size0.2, random_state42, stratifyy ) # 单隐层 100 神经元BP 训练early stopping 防过拟合 model MLPClassifier( hidden_layer_sizes(100,), max_iter500, random_state42, early_stoppingTrue, n_iter_no_change10, validation_fraction0.1, ) model.fit(X_train, y_train) val_pred model.predict(X_val) print(fval accuracy: {accuracy_score(y_val, val_pred):.4f}) print(classification_report(y_val, val_pred, target_names[real, fake])) joblib.dump(model, model/mlp.joblib) joblib.dump(vectorizer, model/vectorizer.joblib)逻辑说明TfidfVectorizer把预处理后的文本转成 TF-IDF 稀疏矩阵max_features5000意味着只保留语料中出现频率最高的 5000 个词作为特征这是控制维度、防止过拟合的关键。ngram_range(1, 2)同时保留单词和相邻两词组合对新闻真假判别很有用——像“官方辟谣”“紧急通知”这种二元短语比单个词更有判别力。参数说明hidden_layer_sizes(100,)表示单隐藏层 100 个神经元这是 sklearn MLP 最常见的配置之一。如果你在 optimize.py 里试过(50, 50)或者(100, 50)会发现对于几千条样本的文本分类单隐层往往就够了加深隐层反而更容易过拟合。early_stoppingTrue会在验证集损失连续n_iter_no_change10轮没有下降时提前停止训练节省时间的同时也避免把训练集背下来。validation_fraction0.1表示从训练集再切 10% 作为内部验证集和前面的 train_test_split 是两层验证前者给 early stopping 用后者给最终评估用两者互不干扰。3.3 optimize.py网格搜索找最优超参数别靠玄学调参fit.py 里的参数是作者拍脑袋定的还是调出来的从 optimize.py 就能看出来。网格搜索在这里的意义是在 small 数据集上穷举一组超参数组合用交叉验证分数选出最优配置再把最优配置回填到 fit.py 里。这个脚本不是一次性的换数据集时值得反复跑。import pandas as pd import pickle from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.neural_network import MLPClassifier from sklearn.model_selection import GridSearchCV with open(dataset/train.pkl, rb) as f: df pickle.load(f) vectorizer TfidfVectorizer(max_features5000, ngram_range(1, 2), sublinear_tfTrue) X vectorizer.fit_transform(df[text_clean]) y df[label].values param_grid { hidden_layer_sizes: [(50,), (100,), (50, 50)], alpha: [1e-4, 1e-3, 1e-2], learning_rate_init: [1e-3, 1e-2], } model MLPClassifier(max_iter300, early_stoppingTrue, random_state42) grid GridSearchCV(model, param_grid, cv3, scoringf1_macro, n_jobs-1, verbose1) grid.fit(X, y) print(fbest params: {grid.best_params_}) print(fbest score: {grid.best_score_:.4f})逻辑说明GridSearchCV内部会对每一组参数组合做 3 折交叉验证scoringf1_macro表示用 F1 的宏平均作为评估指标这个选择很重要——如果数据里真实新闻比虚假新闻多很多准确率会有虚高嫌疑F1 能更诚实地反映模型在两个类别上的平均表现。n_jobs-1让所有 CPU 核心并行跑课程设计机器一般 4 到 8 核这能让网格搜索从一小时缩短到十几分钟。参数说明alpha是 L2 正则化系数值越大模型权重越被压缩越不容易过拟合。对文本分类来说alpha1e-3通常是稳妥起点。learning_rate_init是 SGD 的初始学习率太大容易发散太小收敛慢1e-2搭配max_iter300在这个数据规模下能稳定收敛。注意hidden_layer_sizes里的(50, 50)表示两层各 50 个神经元如果网格搜索结果它是第一名说明数据里确实存在复杂的特征交互此时把 fit.py 的模型结构同步改掉即可。3.4 predict.py加载模型输出 mlp_pred.txt注意词表一致性predict.py 的技术含量不在预测本身而在“加载”这一步。训练时 fit.py 已经把模型和向量器分别存成了 joblib 文件预测时必须同时加载两者并且对测试集文本只做transform、绝不能再做一次fit_transform。这是文本分类流水线里最容易翻车的点没有之一。import pandas as pd import pickle import joblib import jieba STOPWORDS_PATH dataset/cn_stopwords.txt def load_stopwords(path): with open(path, r, encodingutf-8) as f: return set(line.strip() for line in f if line.strip()) def clean_text(text, stopwords): words jieba.lcut(str(text)) return .join(w for w in words if w.strip() and w not in stopwords) def main(): stopwords load_stopwords(STOPWORDS_PATH) model joblib.load(model/mlp.joblib) vectorizer joblib.load(model/vectorizer.joblib) with open(dataset/test.pkl, rb) as f: df pickle.load(f) df[text_clean] df[text].apply(lambda x: clean_text(x, stopwords)) # 这里必须用已有的向量器 transform不能重新 fit X_test vectorizer.transform(df[text_clean]) preds model.predict(X_test) with open(mlp_pred.txt, w, encodingutf-8) as f: for text, label in zip(df[text], preds): f.write(f{label}\t{text}\n) print(f[OK] 共预测 {len(preds)} 条结果已写入 mlp_pred.txt) if __name__ __main__: main()逻辑说明vectorizer.transform复用了训练时学到的词表测试集里出现但在训练集中没出现过的词会被自动忽略特征维度严格对齐训练时的 5000 维。mlp_pred.txt每行是“标签 制表符 原文”这样做的好处是后续人工校验时可以直接看原文判断模型预测得对不对而不是面对一堆数字。参数说明如果你读的是 test.pkl 而不是 test.csv说明预处理已经做过了理论上可以直接从 pkl 里取text_clean列跳过 clean_text。但需要注意test.pkl 的text_clean是作者当时生成的如果你修改过停用词表这列数据就不会更新所以我习惯在 predict.py 里再做一次清洗虽然慢几秒但保证链路上每个环节用的停用词版本一致。4. 复现路上最常见的五个坑版本、编码、词表与数据泄漏这个项目我在 Python 3.8 和 3.11 两种环境里都跑过踩坑记录比较有代表性。下面的问题按出现频率排序每一条都是“现象 → 原因 → 解决”的完整链路建议在你开始复现前先看一遍。4.1 joblib.load 报错模块版本不匹配现象运行 predict.py 加载 model/mlp.joblib 时抛异常提示ValueError: sklearn.externals.joblib is deprecated或者ModuleNotFoundError: No module named sklearn.externals.joblib。原因作者用的是 scikit-learn 1.0.1这个版本里 joblib 已经从 sklearn.externals 迁移到了独立 joblib 包。如果你环境里的 sklearn 是 0.24 以下的老版本加载新格式的模型文件就会报错反过来如果用新版 sklearn 去加载老版本训练的模型也可能因为内部数据结构变化报兼容错误。解决严格按 README 要求的版本来Python 3.8.0 scikit-learn 1.0.1 joblib 1.1.0。用 requirements 固定版本pip install scikit-learn1.0.1 numpy1.21.2 pandas1.3.4 joblib1.1.0 jieba0.42.14.2 predict 阶段报词汇表维度不匹配现象predict.py 跑起来后报错ValueError: X has 200 features, but TfidfVectorizer is expecting 5000 features。原因预测时对测试集重新执行了fit_transform。一旦重新 fit向量器会基于测试集重新学习词表特征数只剩 200 个与模型训练时用的 5000 维特征空间完全对不上。解决只要加载训练时保存的 vectorizer并对测试集调用transform不要调用fit_transform。这是 sklearn 流水线的黄金法则训练集上fit_transform验证集和测试集上只transform。4.3 pandas 读 csv 报 UnicodeDecodeError现象pd.read_csv(dataset/train.csv)抛异常提示UnicodeDecodeError: utf-8 codec cant decode byte 0xc4。原因Windows 下用 Excel 或者记事本另存的 CSV 可能是 GBK/GB2312 编码或者 UTF-8 带 BOM。直接用默认的 utf-8 解码自然会失败。解决先确认编码再读取。我一般先用file命令或者 Python 的 chardet 检测然后选择对应编码import chardet with open(dataset/train.csv, rb) as f: enc chardet.detect(f.read(10000))[encoding] print(enc) # 如果是 gbk用 encodinggbk如果是 utf-8-sig用 encodingutf-8-sig df pd.read_csv(dataset/train.csv, encodingenc)4.4 训练 loss 不降或准确率始终徘徊在 50%现象fit.py 跑完后验证集准确率只有 0.5 左右明显等于随机猜测且 loss 曲线几乎不下降。原因最常见的是预处理阶段没去停用词或者文本是英文而分词器用错了。中文文本如果不分词直接做 TF-IDF每个连续字符串是一个特征词表全是长句碎片模型学不到任何泛化模式。还有一种可能是 label 列反了真假标签被翻转。解决确认预处理链路完整执行查看 train.pkl 里text_clean列是否已经是空格分隔的词序列。如果是一整段没有空格的长文本说明 clean_text 没跑。另外打印 label 分布df[label].value_counts()看是不是某一个类别占了 90% 以上如果是准确率虚高才是正常现象此时要去查数据源而不是模型。4.5 train_test_split 数据泄漏shuffle 和 stratify 缺一不可现象训练时验证集 F1 很高但 predict.py 跑测试集时分数暴跌差距在 15 个百分点以上。原因原始 CSV 里数据可能是按类别排好序的——前半全是真实新闻后半全是虚假新闻。如果train_test_split没有加shuffleTrue默认还是会有顺序切分的问题导致训练集和验证集类别分布不一致。更隐蔽的是random_state不固定每次跑出的结果都不一样无法复现实验。解决切分时同时加上shuffleTrue和stratifyy并固定随机种子X_train, X_val, y_train, y_val train_test_split( X, y, test_size0.2, random_state42, shuffleTrue, stratifyy )stratifyy保证训练集和验证集里真假新闻的比例与原始数据一致random_state42保证每次跑出的切分完全一致。这里踩过坑之后我所有分类项目都无脑加这两个参数。5. 拿自己手头的文本试一把单条预测脚本与阈值调校项目自带的 predict.py 是批量预测但对日常验证来说最实用的是一个能交互式输入单条新闻、实时给出真假概率的脚本。这个脚本不复杂但有两个值得打磨的点一是用predict_proba而不是predict拿到真实概率二是把默认阈值从 0.5 改成可调的因为虚假新闻通常措辞更极端模型给的概率往往集中在 0.8 以上。import joblib import jieba STOPWORDS_PATH dataset/cn_stopwords.txt with open(STOPWORDS_PATH, r, encodingutf-8) as f: stopwords set(line.strip() for line in f if line.strip()) model joblib.load(model/mlp.joblib) vectorizer joblib.load(model/vectorizer.joblib) def predict_one(text, threshold0.5): words jieba.lcut(str(text)) words [w.strip() for w in words if w.strip() and w not in stopwords] vec vectorizer.transform([ .join(words)]) prob_fake model.predict_proba(vec)[0][1] label 虚假新闻 if prob_fake threshold else 真实新闻 return prob_fake, label if __name__ __main__: sample input(输入一条新闻文本\n) prob, label predict_one(sample, threshold0.5) print(f虚假概率{prob:.4f}判定{label})逻辑说明predict_proba返回的是一个二维数组[0][1]表示第一条样本属于标签 1虚假新闻的概率。threshold 参数决定了判定边界0.5 是 sklearn 默认的predict行为但实际使用中我建议调高到 0.6 或 0.7。原因很直接模型对真实新闻的判断往往集中在 0.1 到 0.3 之间而对虚假新闻的判断集中在 0.7 到 0.9 之间中间地带本身就是不确定区域。把阈值调高到 0.6可以让“无法确定”的样本更倾向于被判为真实牺牲少量召回率、换更低的误报率。验证方法也很朴素从测试集里随机抽 50 条已经被模型预测过的样本人眼判断一遍和 mlp_pred.txt 里的标签做对比。我第一次跑完这个项目直接拿验证集准确率当交付结果后来把预测错误的样本逐条翻出来才发现问题基本都集中在“长度极短”和“语气强烈但内容空泛”的标题上——这类文本特征太稀疏TF-IDF 根本抓不到足够的判别词。从那以后我每次跑完文本分类项目都会强制把预测错误的样本按置信度排序先看模型最自信的错判再回来调阈值或者补训练数据而不是急着改网络结构。希望这个习惯也能帮到你。本文还有配套的精品资源点击获取

相关新闻

AI Native 团队开发落地手册:从意图契约到多 Agent 协作

AI Native 团队开发落地手册:从意图契约到多 Agent 协作

1. 从“人写代码”到“人管意图”:AI Native 团队到底在改什么先说一个我观察到的现象。很多团队嘴上喊着“我们要做 AI Native”,实际干的事只是给每个人发了个 AI 编程助手的账号,然后继续用原来的方式拆需求、写文档、排期、Code Review。…

2026/10/5 4:46:38 阅读更多 →
1.5%与5%不良率之间:六西格玛控制回路与培训体系差距解析

1.5%与5%不良率之间:六西格玛控制回路与培训体系差距解析

去年我在一家精密零部件工厂做质量体系诊断,会议室里挂着两块看板。左边是波音供应链车间的数据,关键工序不良率常年压在0.3%到1.5%之间,偶尔冒出一个千分之一的波动,当天就拉响警报,全员复盘到深夜。右边是本厂的数据…

2026/10/5 4:46:38 阅读更多 →
Aliro与UWB落地,智能门锁2026年迎来生态与体验双重变局

Aliro与UWB落地,智能门锁2026年迎来生态与体验双重变局

1. 智能门锁的最大痛点,不在锁芯而在协议1.1 买一把好锁不难,难的是让全家的手机都认它做智能门锁方案这几年,我听过最多的一句话不是“锁坏了”,而是“这个锁跟我手机不匹配”。家里人用iPhone,自己用安卓&#xff0c…

2026/10/5 4:45:38 阅读更多 →

最新新闻

Caffe实战HED边缘检测:原理、环境搭建与踩坑指南

Caffe实战HED边缘检测:原理、环境搭建与踩坑指南

简介:面向深度学习与计算机视觉开发者,HED_edgeDetect 是围绕 HED(整体嵌套边缘检测)算法的轻量级部署资源包,专注解决图像边缘检测任务,尤其适合希望基于 Caffe 框架快速搭建 HED 模型、进行效果验证或二次…

2026/10/5 5:22:52 阅读更多 →
MiMo-V2.6 技术拆解:强化学习规模化与自我改进的工程实践

MiMo-V2.6 技术拆解:强化学习规模化与自我改进的工程实践

1. 从"能对话"到"会进化":MiMo-V2.6 到底在解决什么真问题大模型这两年卷得厉害,但如果你真在一线做训练或调优,会发现一个尴尬的现实:绝大多数开源模型的迭代路径,本质上还是"堆数据、堆算力…

2026/10/5 5:22:52 阅读更多 →
STM32软件模拟IIC驱动AHT21B温湿度传感器完整指南

STM32软件模拟IIC驱动AHT21B温湿度传感器完整指南

上个月做一个小项目,需要在一个STM32F103C8T6上同时挂三颗AHT21B温湿度传感器做多点采集。板子上一路硬件I2C被另一个外设占了,剩下两路传感器得另想办法。我本可以直接切换到复用引脚或者换一颗带更多I2C外设的芯片,但当时手头器件就这么定死…

2026/10/5 5:22:52 阅读更多 →
KLayout形状编辑详解:Box、Polygon、Path与布尔运算实践

KLayout形状编辑详解:Box、Polygon、Path与布尔运算实践

KLayout这个开源版图工具,我在上一篇教程里带大家把主界面、图层面板和单元导航的基本操作过了一遍。这一篇是系列教程的第二篇,专门把“编辑不同的形状”这件事讲透。你要在KLayout里画版图,无论是画一条金属连线、抠一个焊盘开窗&#xff0…

2026/10/5 5:22:52 阅读更多 →
用Claude设计LLM评估系统:从迭代到分数提升的实战指南

用Claude设计LLM评估系统:从迭代到分数提升的实战指南

1. 为什么我要用 Claude 来设计 eval第一次认真做 eval 是两年前,当时手头有个分类任务,模型离线指标看着挺漂亮,上线之后用户投诉却一堆。回头一查,发现我那个测试集是从训练数据里随手切出来的,分布跟真实流量差了十…

2026/10/5 5:22:52 阅读更多 →
Ace Data Cloud 接入 GLM 实战:OpenAI 兼容 API 迁移指南

Ace Data Cloud 接入 GLM 实战:OpenAI 兼容 API 迁移指南

1. 为什么我会盯上 Ace Data Cloud 接 GLM 这条路线国内做大模型应用开发的人,绕不开一个很现实的问题:模型选型是一回事,接入方式又是另一回事。你手上可能已经有一套跑通的 OpenAI 格式代码,聊天、流式输出、函数调用、Embeddin…

2026/10/5 5:21:52 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →