虚假新闻检测系统
本项目是基于ConceptNN (概念神经网络)文章算法实现的虚假新闻检测后端服务。它支持文本与图片的双模态特征提取,并保留了文章核心的增量学习 (Incremental Learning)能力,能够对接 Java 后端系统进行实时预测与模型更新。
1. 项目目录结构
fake_news_detector/ ├── main.py # FastAPI 服务主入口 ├── train_from_csv.py # 【新增】从 CSV 文件进行初始训练的工具脚本 ├── test_api.py # API 快速测试工具 ├── config.py # 全局参数与类别映射配置 ├── requirements.txt # 项目依赖包清单 ├── full_train_data.csv # 示例/初始训练数据集 (含全维度特征) ├── 项目说明.md # 本文档 ├── models/ # 【自动创建】存放训练好的模型文件 (.h5) │ └── concept_nn_model.h5 # 持久化模型文件 ├── data/ # 【自动创建】存放运行产生的 CSV 结果 │ ├── predictions_1.csv # 批次预测明细 │ ├── full_train_data.csv # 总体准确率累计表 │ └── metrics_by_category.csv # 按类别的详细指标 ├── core/ # 算法核心代码 │ ├── __init__.py │ ├── concept_nn.py # 概念神经网络核心类 (含增量学逻辑) │ ├── concept_space.py # 文章核心:概念空间构建逻辑 │ └── cosine_similarity.py # 余弦相似度计算工具 ├── preprocessing/ # 数据预处理 (向量化) │ ├── __init__.py │ ├── text_vectorizer.py # 文本特征提取 (sentence-transformer) │ ├── image_vectorizer.py # 图像特征提取 (ResNet18) │ └── feature_merger.py # 特征合并与元数据标准化 └── api/ # 接口层 ├── __init__.py ├── router.py # API 路由实现 (/predict, /train) ├── schemas.py # Pydantic 数据格式校验模型 └── metrics.py # 评估指标 (Precision, Recall, F1)2. 文件功能说明
其他
models/: 用于存放持久化保存的 TensorFlow 模型文件 (.h5)。data/: 用于存放运行产生的predictions_n.csv、full_train_data.csv等结果文件。
2. 项目启动与环境参数
环境要求
- Python 版本: 推荐
Python 3.9(本项目实测通过版本)。 - 系统平台: 支持 Windows / macOS / Linux。
启动步骤
- 安装依赖:
pipinstall-rrequirements.txt - 运行服务:
服务默认启动在:python main.pyhttp://127.0.0.1:8000
核心参数调节 (config.py)
N_EPOCHS: 初始训练的轮数。UPDATE_EPOCHS: 增量学习时每一批数据的更新轮数。SIMILARITY_THRESHOLDS: 概念空间构建时的相似度阈值搜索范围。
3. 接口调用示例
预测接口 (POST /predict)
向后端发送新闻数据,返回虚假概率。系统会自动在data/目录下生成 CSV 记录。
请求示例:
{"items":[{"info_id":"unique_id_001","info_content":"这里是新闻的正文内容...","content_type":"社会","image_base64":"","publish_time":"2024-07-11","user_gender":"女","user_age":23,"user_occupation":"农民","user_location":"湖南","user_register_time":"2003-06-10","user_fans_count":22,"like_count":44,"comment_count":33,"report_count":11,"share_count":6}]}3. 初始化训练 (必须步骤)
在首次使用预测功能前,必须让模型学习“什么是虚假新闻”。项目提供了train_from_csv.py脚本来完成此任务。
训练数据格式
项目根目录下的full_train_data.csv应符合以下格式:
title: 新闻标题desc: 新闻描述/正文label: 标签 (0 = 真实, 1 = 虚假)
执行训练
# 确保 full_train_data.csv 已就绪python train_from_csv.py说明:
- 脚本会调用
sentence-transformers提取文本特征。 - 训练完成后,会在
models/目录下生成concept_nn_model.h5权重文件。 - 只要有了该文件,之后的预测接口才能给出有意义的概率值。
💡 训练数据质量保证 (去重逻辑)
为了确保模型的稳健性,训练脚本执行了严格的去重操作:
- 重复现象: 在原始收集中(如 51,055 行),常因多个学生采集重叠或“汇总表”包含“分表”而产生大量重复数据。
- 去重逻辑: 脚本通过
drop_duplicates(subset=['info_content'])仅保留唯一的正文内容(约 20,000+ 条)。 - 必要性:
- 防止过拟合: 避免模型对高频出现的重复新闻产生“死记硬背”,确保其学习的是普遍规律。
- 公平评估: 纯净且独立的样本集能让准确率反映真实的泛化能力。
4. 测试方式
系统提供了多种方式进行功能验证:
方法 A:交互式文档 (推荐)
服务启动后,在浏览器访问:
http://127.0.0.1:8000/docs
- 你可以看到所有可用接口。
- 点击“Try it out”-> 修改 JSON -> 点击“Execute”,即可直接在页面上查看返回结果。
方法 B:命令行 Curl
打开终端,执行以下命令:
curl-XPOST http://127.0.0.1:8000/predict\-H"Content-Type: application/json"\-d'{"items": [{"info_id": "t1", "info_content": "测试文本", "content_type": "社会", "image_base64": "", "publish_time": "2024-07-11", "user_gender": "男", "user_age": 20, "user_occupation": "学生", "user_location": "北京", "user_register_time": "2020-01-01", "user_fans_count": 0, "like_count": 0, "comment_count": 0, "report_count": 0, "share_count": 0}]}'方法 C:Python 测试脚本
项目根目录下提供了test_api.py,运行即可验证:
python test_api.py5. 增量学习机制说明
本项目保留了文章的Dynamic Learning (动态学习)特性:
- 反馈学习: 当你有了一批真实标签(即知道哪些新闻确实是虚假,哪些是真实时),可以调用
/train接口。 - 模型自进化: 系统会调用
incremental_update方法,在不破坏原有知识的基础上,针对新数据微调网络权重。 - 性能监控: 每次预测的结果和概率分布都会记录在 CSV 中,方便后续进行离线分析和效果评估。
5. 常见问题 (FAQ)
为什么第一次运行很慢?
首次运行会自动下载预训练的文本和图像模型(约 400MB),之后运行将直接从本地缓存加载,速度很快。如何查看 API 文档?
启动服务后,访问http://127.0.0.1:8000/docs即可查看可视化交互文档(Swagger UI)。运行报错
ModuleNotFoundError: No module named 'tf_keras'?
由于transformers库目前对 Keras 3 有兼容性问题,必须安装备份包:pip install tf-keras。支持哪个 Python 版本?
所有代码与依赖库均在Python 3.9环境下调试通过。虽然 3.10 理论上也支持,但为了减少依赖冲突,强烈建议使用 Python 3.9。本项目详情:https://www.aiyuanma.vip/posts/fake_news_detector_project-3.fake_news_detector