saurabhchaudhary05/NLP-Log-Classifier

GitHub: saurabhchaudhary05/NLP-Log-Classifier

一个基于级联 NLP 与机器学习的可解释日志分类系统,旨在以低延迟、低成本处理大规模日志并输出可信分类结果。

Stars: 0 | Forks: 0

# 🔬 基于NLP的日志分类系统 **一个智能、可解释的日志分诊系统,将每条日志依次通过正则 → BERT+ML → LLM 处理,在无需 LLM 成本的情况下解决 90%+ 的日志,且不遗漏任何日志。** ![Python](https://img.shields.io/badge/Python-3.10+-blue?logo=python) ![BERT](https://img.shields.io/badge/BERT-sentence--transformers-green) ![Scikit-learn](https://img.shields.io/badge/Scikit--learn-ML-orange?logo=scikit-learn) ![OpenAI](https://img.shields.io/badge/OpenAI-GPT--4o-orange?logo=openai) ![Streamlit](https://img.shields.io/badge/Streamlit-UI-red?logo=streamlit) ![License](https://img.shields.io/badge/License-MIT-yellow)

Dashboard Overview

## 📋 目录 - [问题陈述](#-problem-statement) - [方法](#-approach--pipeline-architecture) - [关键特性](#-key-features) - [截图](#-screenshots) - [技术栈](#-tech-stack) - [项目结构](#-project-structure) - [快速开始](#-quick-start) - [各层级如何工作](#-how-each-tier-works) - [数据集](#-dataset) - [结果](#-results) - [未来范围](#-future-scope) - [许可证](#-license) ## 🎯 问题陈述 现代生产系统每天生成 **数百万条日志** — 错误、安全警报、性能警告、认证事件和常规通知。手动对这些日志进行分诊是: - **缓慢** — 工程师花费数小时浏览非结构化文本 - **容易出错** — 关键安全警报被淹没在噪声中 - **不可扩展** — 基于规则的系统在遇到未见过的日志格式时会失效 **本项目通过一个三阶段 AI 管道解决此问题**,能够自动将任意日志消息分类为可操作的类别,并提供可解释的可信度分数。 ## 🧠 方法与管道架构 核心创新是一个 **级联混合架构**,其中每个层级作为前一层的备用,优化 **速度** 与 **准确度**: ``` ┌──────────────────┐ │ Raw Log Input │ └────────┬─────────┘ │ ┌─────────────▼──────────────┐ │ TIER 1: REGEX ENGINE │ │ 27+ compiled patterns │ │ ⚡ <1ms per log │ │ Confidence: 0.70 – 0.99 │ └─────────────┬──────────────┘ │ No match or below threshold? ┌─────────────▼──────────────┐ │ TIER 2: BERT + ML │ │ all-MiniLM-L6-v2 encoder │ │ Logistic Regression head │ │ 🧠 ~50ms per log │ └─────────────┬──────────────┘ │ Confidence < ML threshold? ┌─────────────▼──────────────┐ │ TIER 3: LLM FALLBACK │ │ GPT-4o-mini reasoning │ │ Structured JSON output │ │ 💬 ~500ms per log │ └─────────────┬──────────────┘ │ ┌─────────────▼──────────────┐ │ CLASSIFICATION RESULT │ │ ✅ Category │ │ 📊 Confidence Score │ │ 📝 Explanation (why) │ │ 🏷️ Tier Used │ │ ⏱️ Latency (ms) │ │ 🔍 Metadata (severity, IP) │ └────────────────────────────┘ ``` **为什么要级联?** - **第一层(正则)**:即时处理约 20% 的日志,延迟几乎为零 - **第二层(BERT+ML)**:处理约 70% 的日志,利用训练数据中的模式 - **第三层(LLM)**:处理剩余约 10% 的模糊或新型日志,借助推理能力 - 结果:**90%+ 的日志在不产生 LLM 成本的情况下得到解决**,且没有日志未被分类 ## ✨ 关键特性 | 特性 | 描述 | |------|------| | 🔗 **3 级级联管道** | 正则 → BERT+ML → LLM — 仅在前一层无法以置信度分类时才升级 | | 🧩 **完全可解释性** | 每个分类都展示 **为什么** — 匹配的 regex 模式、ML 概率分布,或 LLM 推理 | | 📊 **动态类别** | 类别从训练数据中自动学习 — 无硬编码限制 | | 🎯 **可调节阈值** | 通过侧边栏滑块分别设置正则与 ML 层级的置信度阈值 | | 📁 **批量 CSV 处理** | 上传任意 CSV,选择文本列,一次性分类数千条日志 | | 🔍 **层级对比视图** | 在同一条日志上同时运行 3 个层级并并排比较结果 | | 🎬 **日志流模拟器** | 生成合成日志(正常、攻击、中断、降速、认证风暴)以演示管道 | | 🚨 **异常检测** | 实时统计异常检测 — 错误爆发、严重性升级、频率峰值 | | 📈 **分析仪表板** | 分类方法占比(各层级)、类别分布、置信度直方图 | | 🏗️ **自定义正则规则** | 通过 UI 添加/移除正则规则,持久化到 JSON,启动时加载 | | 📥 **多格式导出** | 可下载结果为 CSV、JSON、样式化 HTML 报告或文本摘要 | | 🧠 **应用内 ML 训练** | 上传带标签的 CSV → 自动检测列 → 验证数据 → 训练 BERT+ML → 查看准确度 | ## 📸 截图 ### 仪表盘与实时分类 包含管道可视化、侧边栏配置和实时分类输入的完整仪表盘。

Dashboard

### 侧边栏 — 管道配置、训练与自定义规则 配置阈值、上传训练数据、添加自定义正则规则,并监控管道状态。

Sidebar

### ML 模型训练 上传带标签的 CSV,选择文本/标签列,查看标签分布预览,并一键训练。 | 上传与配置 | 训练结果(5 折交叉验证准确率 81.7%) | |:---:|:---:| | 训练上传 | 训练结果 | ### 批量 CSV 分类 上传包含日志消息的 CSV,选择文本列,并一键分类所有行。

Batch Results

### 批量分析 — 图表与分布

Batch Charts

### 层级对比 在相同日志上运行正则、BERT+ML 和 LLM,查看各层级如何分类。

Compare Tiers

### 日志流模拟器 生成 5 种场景下的真实合成日志以测试和演示管道。

Simulator

### 异常检测仪表盘 实时异常检测,包含错误爆发告警、严重性分布警告和分布图表。 | 异常概览 | 活动告警与严重性分布 | |:---:|:---:| | 异常检测器 | 异常告警 | ### 分析 — 分类方法占比 查看各层级(正则 vs BERT+ML vs LLM)解决了多少百分比的日志。

Analytics Breakdown

### 分析 — 分布图表

Analytics Charts

### 导出结果与预览报告 下载结果为 CSV、JSON、文本或 HTML。在线预览完整文本报告。

Export Results

## 🛠️ 技术栈 | 层级 | 技术 | 用途 | |------|------|------| | **嵌入** | `sentence-transformers` (all-MiniLM-L6-v2) | 384 维 BERT 嵌入,用于语义日志表示 | | **ML 分类器** | `scikit-learn` (Logistic Regression) | 平衡的多类别分类,带概率输出 | | **模式匹配** | Python `re` (编译正则) | 27+ 内置规则 + 用户自定义规则 | | **LLM 备用** | `openai` (GPT-4o-mini) | 结构化 JSON 输出,用于模糊日志推理 | | **NLP** | `nltk` | 文本预处理与分词 | | **数据处理** | `pandas`, `numpy` | CSV 处理、批量操作、分析 | | **前端** | `streamlit` | 带有 6 个标签页的交互式 Web 仪表盘 | | **配置** | `python-dotenv` | 基于环境变量的 API 密钥管理 | | **序列化** | `joblib` | 模型与编码器持久化 | ## 📁 项目结构 ``` NLP-Log-Classifier/ │ ├── app.py # Streamlit UI — 6 tabs, sidebar, custom CSS │ ├── src/ │ ├── __init__.py │ ├── config.py # Settings, thresholds, dynamic categories │ ├── regex_classifier.py # Tier 1 — 27+ regex rules + custom rules (JSON) │ ├── bert_classifier.py # Tier 2 — BERT embeddings + Logistic Regression │ ├── llm_classifier.py # Tier 3 — OpenAI GPT structured classification │ ├── pipeline.py # Orchestrator — cascading logic, metrics, anomaly ingestion │ ├── log_parser.py # Metadata extraction (severity, IPs, timestamps, HTTP codes) │ ├── anomaly_detector.py # Statistical anomaly detection (Z-score, bursts, trends) │ ├── log_simulator.py # Synthetic log generation (5 scenarios, 50+ templates) │ └── export_report.py # Multi-format export (CSV, JSON, HTML, text summary) │ ├── data/ │ ├── training_logs.csv # 75 labeled samples (5 categories × 15 each) │ ├── training_extended.csv # 60 labeled samples for extended training │ └── batch_test_50.csv # 50 unlabeled test logs for batch classification │ ├── models/ # Auto-generated (trained model + label encoder + custom rules) │ ├── log_classifier.joblib │ ├── label_encoder.joblib │ └── custom_regex_rules.json │ ├── image/ # Screenshots for documentation ├── requirements.txt ├── .env.example # Template for OpenAI API key └── README.md ``` ## 🚀 快速开始 ### 1. 克隆并安装 ``` git clone https://github.com/YOUR_USERNAME/NLP-Log-Classifier.git cd NLP-Log-Classifier pip install -r requirements.txt ``` ### 2. (可选) 为第三层设置 OpenAI API 密钥 ``` # 创建 .env 文件 echo OPENAI_API_KEY=sk-your-key-here > .env ``` 或直接在运行时侧边输入。**第三层是可选的** — 仅使用正则 + BERT+ML 也能工作。 ### 3. 启动 ``` streamlit run app.py ``` ### 4. 训练 ML 模型 **选项 A — 通过 UI:** 在侧边栏点击“📂 使用示例数据训练”或上传你自己的带标签 CSV。 **选项 B — 通过 CLI:** ``` python -c "from src.pipeline import LogClassifierPipeline; p = LogClassifierPipeline(); print(p.train_ml())" ``` ### 5. 分类日志 - **实时:** 在“实时分类”标签页中粘贴日志消息并点击分类 - **批量:** 在“批量 CSV”标签页上传 CSV,选择文本列并点击“分类所有行” - **模拟:** 使用“模拟器”标签页生成合成日志并测试管道 ## 🔧 各层级如何工作 ### 第一层 — 正则引擎(确定性) - **27+ 编译模式** 覆盖:暴力破解、SQL 注入、XSS、防火墙拦截、空指针异常、超时错误、OOM、部署通知、定时任务、登录失败等 - **动态置信度评分** 基于模式匹配覆盖率(0.70–0.99) - **可调节阈值** — 置信度低于正则阈值的日志会升级到第二层 - **自定义规则** — 可通过侧边栏 UI 添加自己的模式,并持久化到 JSON ### 第二层 — BERT + 逻辑回归(学习型) - **编码器:** `all-MiniLM-L6-v2` 句子变换器 → 384 维归一化嵌入 - **分类器:** 带类别平衡权重和 L-BFGS 求解器的逻辑回归 - **训练:** 上传带标签 CSV → 自动拆分 → 分层交叉验证 → 保存模型 - **输出:** 所有类别的完整概率分布 + 可信度分数 - **升级:** 若可信度 < ML 阈值(默认 0.70)→ 升级到第三层 ### 第三层 — LLM 备用(推理) - **模型:** OpenAI GPT-4o-mini,结构化 JSON 输出 - **提示词:** 类别列表 + 日志消息 → 返回 `{类别, 可信度, 推理}` - **用途:** 模糊、遗留或从未见过的日志格式 - **可选:** 系统可在没有它的情况下工作 — 低可信度的 ML 结果会附带清晰说明返回 ## 📊 数据集 ### 包含的训练数据 | 文件 | 行数 | 标签数 | 用途 | |------|------|--------|------| | `data/training_logs.csv` | 75 | 5 类别 × 15 | 默认训练集 | | `data/training_extended.csv` | 60 | 5 类别 × 12 | 扩展训练集 | | `data/batch_test_50.csv` | 50 | 未标注 | 批量测试 | ### 日志类别 | 类别 | 示例 | |------|------| | **安全警报** | `SQL injection attempt detected in query parameter user_id` | | **工作流错误** | `NullPointerException in PaymentService.processTransaction() at line 247` | | **系统通知** | `Deployment completed successfully for service auth-api v3.1.0` | | **性能警告** | `CPU usage above 94% on node worker-12. Auto-scaling triggered` | | **认证事件** | `User admin authenticated via SSO from 192.168.1.10` | ## 📈 结果 | 指标 | 值 | |------|------| | **训练准确度** | 100%(在训练集上) | | **交叉验证准确度** | 81.7%(5 折分层交叉验证) | | **正则覆盖** | 约 20% 的日志即时解决 | | **BERT+ML 覆盖** | 约 70% 的剩余日志 | | **平均延迟** | 约 50ms 每条日志(第一层+第二层),约 500ms(第三层) | | **支持的类别** | 动态(从数据中自动学习) | ## 🔮 未来范围 - **微调 BERT** — 替换冻结编码器,进行任务特定微调以提高准确度 - **多标签分类** — 支持同时属于多个类别的日志 - **实时流处理** — 与 Kafka/Fluentd 集成,实现实时日志流分类 - **主动学习** — 标记低可信度预测供人工审查并迭代再训练 - **自定义 LLM** — 用自托管模型(Llama、Mistral)替代 OpenAI,适用于隔离环境 - **告警集成** — 将异常告警推送到 Slack、PagerDuty 或邮件 - **基于角色的访问** — 多用户支持与身份验证 ## 📜 许可证 MIT 许可证 — 适用于个人和商业用途。
标签:AI分级, Apex, BERT, Kubernetes, LLM, NLP日志分析, OpenAI GPT-4o, Python, Scikit-learn, sentence-transformers, Streamlit仪表盘, Unmanaged PE, 可解释性, 实时分析, 异常检测, 性能监控, 无后门, 无日志未分类, 日志分流, 日志分类, 日志告警, 日志解析, 机器学习, 流处理, 混合级联管道, 生产级, 系统日志, 自动化分类, 证书伪造, 逆向工具, 降本增效, 高置信度路由