CaptainYifei/fake-news-detector
基于LLM和证据检索的虚假新闻自动检测系统
📚 プロジェクト概要
AI フェイクニュース検出器 – StreamlitベースのWebアプリで、ユーザーがニュース記事の真実性を検証できます。大規模言語モデル(LLM)とセマンティック埋め込みモデルを連鎖させて、(1) テキストから中心的な主張を抽出し、(2) それらの主張を検索クエリに書き換え、(3) ウェブ証拠を取得し、(4) 各主張を段階的に分解して評価します。このシステムは中国語、英語、日本語、韓国語で動作し、ローカルのOllamaモデルからOpenAIのGPTまで、OpenAI互換の任意のモデルサービスで実行できます。
✨ 主な機能
| 機能 | 説明 |
|---|---|
| 多言語サポート | 入力言語(zh、en、ja、ko)を自動検出し、それらの言語のいずれかで出力できます。UIはバイリンガルです。 |
| プラグ可能なモデルプロバイダー | Ollama(デフォルトQwen2.5 3B + BGE-M3埋め込み)、LM Studio、OpenAI、またはOpenAIスキーマに従う任意のカスタムAPIで動作します。 |
| 3ノードのファクトチェックパイプライン | 1️⃣ 主張抽出 – LLMが記事から検証可能な中心的なステートメントを抽出します。2️⃣ クエリ書き換えと証拠取得 – LLMが複数の検索クエリを作成し、DuckDuckGo(またはSearXNG/Parallel)がウェブスニペットを返し、BGE-M3埋め込みがそれらをランク付けし、類似性とエンティティゲートフィルターを適用します。3️⃣ 多段階の主張検証 – LLMが複雑な主張を原子的なステートメントに分解し、フィルタリングされた証拠と照合し、最終的な判定を生成します。 |
| 証拠ゲーティング | 設定可能なtop_k、類似性しきい値、エンティティヒット要件により、高品質のウェブスニペットのみが検証ステップに到達することを保証します。 |
| 履歴とPDFレポート | すべてのチェックはユーザーごとに保存され、結果は整形式のPDFレポートとしてエクスポートできます。 |
| ユーザーシステム | 複数のユーザーがログインし、個別の履歴を保持できます。 |
| REST API | 同じパイプラインが軽量なFastAPIスタイルのエンドポイント(/check)で公開されています。 |
🛠️ はじめに
前提条件
- Python 3.12+
- Ollama(推奨)またはOpenAI互換APIを公開する任意のサービス
- DuckDuckGo(デフォルト)を使用するためのインターネットアクセス – オプションのローカルSearXNGまたはParallel検索バックエンド
インストール手順
# 1. リポジトリをクローン
git clone https://github.com/CaptainYifei/fake-news-detector.git
cd fake-news-detector
# 2. Python依存関係をインストール
pip install -r requirements.txt
# 3. (オプション)Ollamaをインストールし、デフォルトモデルをプル
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5:3b
ollama pull bge-m3:latest
Web UIを実行
streamlit run app.py
ブラウザでhttp://localhost:8501を開きます。
APIサーバーを実行
python api.py # デフォルトでポート8080でサーバーを起動
その後、http://localhost:8080/checkにJSONをPOSTできます(正確なペイロードはREADMEを参照)。
⚙️ 設定
すべての調整可能なパラメータは**model_config.json**にあります:
- プロバイダー – 各サービス(例:Ollama、OpenAI)のベースURLとモデルリストを定義します。
- デフォルト – デフォルトのLLM、埋め込みモデル、検索エンジン、出力言語、および証拠フィルターパラメータ(
evidence_top_k、evidence_min_similarity、evidence_entity_gate、evidence_ranker_multiplier)を選択します。 - 検索プロバイダー – コード変更なしで
duckduckgo、searxng、またはparallelを切り替えます。
📂 プロジェクト構造
fake-news-detector/
├─ app.py # Streamlitエントリポイント(UI)
├─ api.py # FastAPIスタイルのRESTエンドポイント
├─ fact_checker.py # 3ノードパイプラインをオーケストレーション
├─ fact_checking/ # 各ノードの実装
├─ model_manager.py # `model_config.json`をロードし、クライアントオブジェクトを作成
├─ auth.py # シンプルなユーザー認証
├─ db_utils.py # SQLite(または類似)による履歴の永続化
├─ pdf_export.py # 結果からPDFレポートを生成
├─ model_config.json # 中央設定ファイル
├─ requirements*.txt # コア+オプションのParallel検索依存関係
└─ docs/ … # 使用ガイド、APIドキュメント、スクリーンショット
🚀 仕組み(高レベルフロー)
- 主張抽出 – 選択されたLLMが記事を読み、簡潔で検証可能なステートメントと主要エンティティのリストを出力します。
- クエリ書き換えと取得 – 各主張に対してLLMが複数の検索クエリを作成します。クエリは選択された検索バックエンドに送信され、返されたスニペットはBGE-M3で埋め込まれ、類似性(デフォルト≥0.45)と主張のエンティティに言及しているかどうかでランク付けおよびフィルタリングされ、上位K(デフォルト8)が保持されます。
- 多段階検証 – LLMが各主張を原子的なサブ主張に分解し、証拠スニペットに回答を求め、回答を集約し、最終的に元の主張をTRUE、FALSE、またはUNVERIFIABLEとしてラベル付けします。
📖 ドキュメントとヘルプ
- 使用ガイド –
docs/usage.md(ステップバイステップのUIウォークスルー)。 - APIリファレンス –
docs/api_doc.html。 - 問題トラッカー – https://github.com/CaptainYifei/fake-news-detector/issues バグや機能リクエスト用。
📜 ライセンス
MIT – 自由に使用、変更、配布できます。
⭐ クイックまとめ
AIフェイクニュース検出器は、最新のLLMと埋め込みモデルを活用して、複数言語での主張抽出、証拠収集、検証を自動化する、すぐに実行可能なローカルホスト型のファクトチェックシステムです。独自のクラウドサービスに依存せずにエンドツーエンドのパイプラインを求める開発者や研究者にとって特に有用です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト