一、为什么要做虚假新闻检测?
你有没有刷新闻时遇到过这种情况:
-
一条新闻看起来很震撼,但心里总觉得哪里怪怪的; -
想去核实一下,却发现查找证据很麻烦,最后只能不了了之; -
等过几天,才发现原来它是虚假的,甚至是被恶意传播的。
这就是 虚假新闻的危害。
-
它不仅浪费我们的时间和注意力,还可能影响公众舆论,甚至在某些情况下左右政策或市场。 -
人工去逐条核查新闻,几乎不可能。
于是问题来了:能不能让 AI 帮我们做事实核查?
答案是:当然可以!
这就是本文要介绍的项目 —— Fake News Detector(虚假新闻检测器)。
它基于 大语言模型 (LLM) 和 BGE-M3 向量嵌入模型,能够自动提取新闻中的核心声明、搜索证据、比对语义,最终判断新闻是真是假。
更棒的是,它自带 Streamlit 前端界面,一键启动就能用。
二、项目结构:代码到底长什么样?
很多朋友第一次打开项目都会问:
“
“这么一个事实核查系统,背后是怎么组织代码的?”
”
别急,我们先来看看目录结构:
fake-news-detector/
│
├── app.py # 主应用程序入口
├── fact_checker.py # 事实核查核心逻辑
├── auth.py # 用户认证系统
├── db_utils.py # 数据库操作工具
├── pdf_export.py # PDF报告生成
├── requirements.txt # 项目依赖
├── api.py # API接口
├── gunicorn.conf.py # Gunicorn配置
├── start_server.sh # API启动脚本
├── .gitignore # Git忽略文件
├── LICENSE # 开源许可证
├── README.md # 项目说明文档
│
├── test/ # 测试目录
│ ├── api_test_page.html # api测试代码
└── docs/ # 文档目录
├── images/ # 文档中使用的图片
│ └── screenshot.png # 应用截图
├── api_doc.html # API文档
└── usage.md # 详细使用说明
简而言之:
-
app.py
:项目的“大门”,Streamlit 界面从这里启动; -
fact_checker.py
:项目的“心脏”,事实核查的核心逻辑; -
auth.py
:如果你想做成 SaaS 服务,就靠它来做登录注册; -
db_utils.py
:数据库工具,存储用户查询历史; -
pdf_export.py
:一键生成 PDF 报告,非常适合做研究或者新闻追踪; -
api.py
:如果你要对接其他系统,可以通过 API 调用;
是不是很清晰?一眼就能找到自己想动手改的地方。
三、项目核心亮点:它比普通工具强在哪?
这个 Fake News Detector 并不是随便拼凑的几个脚本,而是有一些非常亮眼的功能:
-
🔍 自动提取新闻声明:不用你一句句挑,系统会自动找出“值得核查的点”; -
🌐 实时网络搜索:集成 DuckDuckGo,不用你自己翻网页; -
🤖 语义匹配:用 BGE-M3 大型嵌入模型 计算新闻和证据的相关性; -
📊 分块证据处理:即使证据文章很长,也能自动切片找到关键部分; -
✅ 事实核查结论:给出 “正确 / 错误 / 部分正确” 的判断,还能展示推理过程; -
🔄 流式处理界面:核查进度会实时展示,就像在看 AI 思考过程一样。
换句话说,它不像传统搜索那样只丢一堆链接给你,而是 直接回答问题:这条新闻是真是假?
四、如何快速开始?
很多人一看到 AI 项目就会担心:是不是环境特别复杂?
其实并不难,我来手把手教你。
1. 环境要求
-
Python 3.12 -
Qwen2.5 模型(或兼容 OpenAI API 的其他大模型) -
BGE-M3 嵌入模型(可以本地,也可以远程 API)
2. 安装步骤
# 1. 克隆仓库
git clone https://github.com/yourusername/fake-news-detector.git
cd fake-news-detector
# 2. 安装依赖
pip install -r requirements.txt
3. 配置模型
打开 fact_checker.py
,找到模型路径这行:
self.embedding_model = BGEM3FlagModel('/path/to/your/bge-m3/')
改成你自己的模型路径即可。
4. 启动应用
streamlit run app.py
然后访问:
👉 http://localhost:8501
你会看到一个界面,可以直接输入新闻内容进行核查。
五、如何使用:用户视角的完整流程
整个操作流程非常直观,大概是这样:
-
输入新闻内容
-
直接复制粘贴新闻文本到输入框。
-
-
系统自动执行以下步骤
-
提取新闻声明; -
搜索相关证据; -
分析语义相关性; -
给出事实核查结论。
-
-
输出结果
-
结论会标注“正确/错误/部分正确”; -
相关证据和推理过程会一并展示。
-
💡 举个例子:
假设你输入的新闻是 —— “某地发现外星人基地”。
系统会:
-
提取声明 → “某地发现外星人基地”; -
搜索证据 → 返回科学网站和新闻报道; -
分析相似度 → 判断这些证据是否支持该声明; -
最后输出 → “错误(没有可靠证据支持外星人基地存在)”。
六、系统架构:它是怎么一步步做判断的?
这个项目其实就是一个 管道式架构,每个阶段完成一个任务。
-
提取阶段:用 LLM 从文本中提取可核查的声明。 -
搜索阶段:通过 DuckDuckGo API 找到相关网页。 -
相关性排序:BGE-M3 模型计算语义相似度。 -
证据处理:长文章切片,挑出最相关的部分。 -
判断阶段:结合证据,给出核查结论。
📊 我画个简单流程图,方便理解:
flowchart TD
A[输入新闻文本] --> B[提取声明]
B --> C[网络搜索获取证据]
C --> D[语义相似度计算]
D --> E[证据分块处理]
E --> F[核查判断:真/假/部分正确]
F --> G[展示结论与推理过程]
七、技术栈:背后的秘密武器
模块 | 技术选型 | 说明 |
---|---|---|
前端界面 | Streamlit | 快速构建交互式 Web UI |
大语言模型 | Qwen2.5-14B | 提取声明、推理 |
嵌入模型 | BGE-M3 | 语义相似度计算 |
搜索引擎 | DuckDuckGo API | 获取实时证据 |
辅助工具 | NumPy, OpenAI API 兼容 | 数据处理与兼容接口 |
这一套组合拳,既保证了准确性,又能让系统实时运行。
八、常见问题(FAQ)
Q1: 这个工具支持中文新闻吗?
✅ 支持。Qwen2.5 是中文能力很强的大模型,BGE-M3 也有多语种支持。
Q2: 能在服务器上跑吗?
当然可以。你可以用 gunicorn.conf.py
配合 start_server.sh
部署 API 服务,再通过反向代理暴露出去。
Q3: 数据会保存吗?
默认情况下,查询记录可以存入数据库(db_utils.py
),也可以关掉存储功能。
Q4: 我可以把结果导出吗?
可以。项目内置了 pdf_export.py
,一键导出 PDF 报告,非常适合做研究和存档。
Q5: 和 ChatGPT 直接问“这条新闻真假”有什么区别?
差别在于:Fake News Detector 会给出证据链和推理过程,而不仅仅是一个回答。它更透明、更可验证。
九、如何贡献与拓展?
这个项目是 MIT 开源协议,你可以放心使用和修改。
如果你想贡献代码,可以这样做:
-
Fork 仓库 -
新建分支: git checkout -b feature/xxx
-
提交改动: git commit -m 'Add xxx feature'
-
推送分支: git push origin feature/xxx
-
提交 Pull Request
未来的拓展方向包括:
-
集成更多搜索引擎(如 Bing、Google Custom Search); -
增加多模态核查(图片/视频); -
优化界面交互体验; -
引入知识图谱增强逻辑推理。
十、项目地址与联系信息
-
GitHub: https://github.com/CaptainYifei/fake-news-detector -
Gitee: https://gitee.com/love2eat/fake-news-detector
总结
Fake News Detector 是一个很实用的开源项目,尤其适合:
-
研究新闻真伪的学者; -
想要构建事实核查工具的开发者; -
对 AI 应用感兴趣的学习者。
它的亮点在于:自动化、可解释、可扩展。
不仅能判断新闻真假,还能展示证据和推理链,让整个过程透明可信。
如果你也对抗击虚假信息感兴趣,不妨动手试试这个项目!