kainatarshad123/legal-contract-analyzer

GitHub: kainatarshad123/legal-contract-analyzer

基于机器学习与规则混合分类的法律合同 PDF 分析系统,提供条款识别、风险预测及 Gemini 驱动的法律问答功能。

Stars: 0 | Forks: 0

# 法律合同分析器 ## 项目概述 **法律合同分析器** 是一个基于 ML 的法律文档分析系统,旨在帮助用户更高效地审查合同。 该应用程序接受 PDF 格式的法律合同,提取其文本,识别各个条款,对条款类型进行分类,预测条款风险等级,突出显示潜在的问题表述,并允许用户就上传的合同提出问题。 该系统结合了机器学习、基于规则的验证、OCR、文档处理和生成式 AI,以提供结构化的合同审查体验。 ## 主要功能 * 上传并分析 PDF 格式的法律合同 * 从可搜索的 PDF 中提取文本 * 对扫描或基于图像的 PDF 执行 OCR * 清理和预处理提取的合同文本 * 将合同划分为单独的条款 * 预测条款风险等级 * 对法律条款类型进行分类 * 应用基于规则的验证以改进预测 * 生成合同摘要 * 识别重要且具有潜在风险的条款 * 提出与合同相关的问题 * 将分析过的合同和结果存储在 SQLite 中 * 查看以前分析过的合同 * 使用包含 330 个条款的固定的外部测试集评估 ML 模型 * 生成 22 类的混淆矩阵以及每类的 precision、recall、F1-score 和 support * 运行 Phase-5 标签消融研究 * 使用 `mypy` 对活跃的后端进行静态类型检查 * 通过 React 前端展示模型预测 ## 系统架构 该系统采用客户端-服务器架构。 ``` React + Vite Frontend | v FastAPI Backend API | v PDF Text Extraction / OCR | v Text Cleaning and Clause Segmentation | v Risk Classification Model | v Hybrid Clause-Type Classifier | v Rule-Based Validation | +----------------------+ | | v v SQLite Database Gemini API | | +----------+-----------+ | v Results Returned to Frontend ``` ## 技术栈 ### 前端 * React * Vite * JavaScript * HTML * CSS * Fetch API ### 后端 * Python 3.13 * FastAPI * Uvicorn * Pydantic * SQLite * Python 类型提示 * `mypy` 静态分析 ### 机器学习 * Scikit-learn * TF-IDF 向量化 * 有监督文本分类 * 混合 ML 和基于规则的分类 * 使用 Joblib 进行模型持久化 ### 文档处理 * PyMuPDF * 正则表达式 * 文本预处理 * 条款分割 * 针对扫描文档的 OCR 处理 ### AI 集成 * Google Gemini API ### 数据库 * SQLite ### 数据分析与评估 * Pandas * NumPy * Scikit-learn 评估指标 * 混淆矩阵 * 分类报告 * 准确率得分 * Precision * Recall * Macro F1 分数 * Weighted F1 分数 ## 应用程序工作流 ## 机器学习组件 ### 风险分类模型 风险模型预测某项法律条款是否代表特定等级的合同风险。 系统使用的风险类别可能包括: * 低风险 * 中风险 * 高风险 该模型使用 TF-IDF 特征和有监督机器学习分类器处理条款文本。 ### 条款类型分类模型 条款类型分类器将条款归类为法律组别,例如: * 转让和转租 * 保密性 * 争议解决 * 适用法律 * 保险 * 维护和修理 * 付款义务 * 续期 * 租金 * 押金 * 终止 * 公用事业 * 一般义务 * 其他支持的条款类别 ### 混合分类 最终的条款分类器结合了: * 机器学习预测 * 预测置信度 * 关键词模式 * 基于规则的法律验证 * 后备分类逻辑 当 ML 模型的置信度较低时,这种混合方法有助于提高系统的可靠性。 ## 数据集 该项目使用由多个来源创建的合并后的法律条款数据集。 ### LEDGAR 数据集 LEDGAR 数据集提供了来自商业合同的带标签法律条款,用于训练条款类型分类模型。 ### 租赁和租赁协议数据集 精选的租赁数据集用于改进对租赁和财产相关条款的分类。 租赁数据集包含以下示例: * 住宅租赁协议 * 商业租赁协议 * 租赁协议 * 手动整理的条款示例 ### 合并数据集 最终的训练数据集结合了 LEDGAR 条款和特定的租赁条款。 数据集准备包括: * 类别映射 * 文本清理 * 重复项处理 * 训练集、验证集和测试集划分 * 来源文档跟踪 * 外部测试集分离 * 标签归一化 ## 模型评估 条款类型模型在 **包含 330 个经过人工审查的条款的固定的外部评估集** 上进行了评估。此数据集被排除在训练之外,并且在实验过程中保持不变。 ### 最终汇总结果 | 方法 | Accuracy | Macro F1 | Weighted F1 | |---|---:|---:|---:| | 原始外部基线 | 41.21% | 36.49% | 44.89% | | 字符 TF-IDF 模型 | 50.00% | 44.67% | 49.74% | | 最终混合 ML + 规则 | **53.33%** | **46.86%** | **53.13%** | 最终的混合系统使用了: * **288 条 ML 预测** * **42 条基于规则的修正** ### 详细的 22 类评估 总体准确率并不被视为分类器质量的充分证据。因此,最终评估还生成了: * 22 × 22 混淆矩阵 * 每类的 precision * 每类的 recall * 每类的 F1-score * 每类的 support * Macro 和 weighted 平均值 * 详细的预测文件 生成的文件包括: ``` backend/evaluation/ ├── character_model_classification_report.csv ├── character_model_confusion_matrix.csv ├── character_model_confusion_matrix.png ├── final_hybrid_classification_report.csv ├── final_hybrid_confusion_matrix.csv ├── final_hybrid_confusion_matrix.png ├── detailed_evaluation_predictions.csv ├── detailed_evaluation_summary.csv └── detailed_evaluation_summary.txt ``` ### Phase-5 标签消融研究 为了衡量 Phase-5 的 188 个临时自动标记的租赁条款的影响,训练了两个在其他方面完全相同的字符 TF-IDF 分类器: 1. 不带 Phase-5 临时标签 2. 带 Phase-5 临时标签 这两个模型使用了相同的特征配置、分类器设置、随机种子、预处理、类顺序和固定的评估集。 | 训练配置 | Accuracy | Macro F1 | Weighted F1 | |---|---:|---:|---:| | 不带 Phase-5 标签 | 46.97% | 42.37% | 47.54% | | 带 Phase-5 标签 | **50.00%** | **44.67%** | **49.74%** | | 差异 | **+3.03 个百分点** | **+2.30 个百分点** | **+2.20 个百分点** | 消融实验表明,Phase-5 租赁条款提供了有用的领域适应。然而,由于这些标签是自动生成的且未经过全面的人工审核,它们仍然是临时的,在生产环境部署之前应进行法律审查。 生成的消融文件包括: ``` backend/evaluation/ ├── ablation_without_phase5_classification_report.csv ├── ablation_with_phase5_classification_report.csv ├── phase5_ablation_summary.csv ├── phase5_ablation_per_class.csv └── phase5_ablation_summary.txt ``` ### 后端类型安全 在活跃的后端中一致地添加了类型提示,包括: * 数据库函数 * 合同存储 * PDF 和 OCR 处理 * 文本清理和条款分割 * 风险分析 * 条款类型分类 * 结构化回答构建器 * API endpoint * 评估脚本 静态分析的运行使用了: ``` python -m mypy main.py evaluate_external_test.py validate_hybrid_clause_model.py evaluation_strengthening ``` 最终结果: ``` Success: no issues found in 5 source files ``` 活跃的文件也使用以下命令进行了语法检查: ``` python -m py_compile main.py validate_hybrid_clause_model.py ``` ### 可搜索的 PDF 使用 PyMuPDF 直接提取文本。 ### 扫描的 PDF 当检测到文本不足时,应用程序使用 OCR 从渲染的 PDF 页面中提取文本。 提取方法可能记录为: * 文本 * OCR * 混合 这使得系统能够处理更广泛的法律文档。 ## Gemini API 集成 Google Gemini 用于自然语言合同辅助。 Gemini 可以帮助系统: * 生成易读的合同摘要 * 解释晦涩的法律语言 * 回答关于上传合同的问题 * 提供有关已识别条款的一般性指导 * 描述潜在的隐患 * 根据提取的合同内容生成用户友好的回复 Gemini 并不用来替代训练好的 ML 模型。ML 模型执行结构化分类,而 Gemini 提供自然语言解释和问答。 ## 数据库 SQLite 用于在本地存储应用程序数据。 存储的信息可能包括: * 合同 ID * 原始文件名 * 提取的文本 * 上传日期 * 合同元数据 * 条款分析结果 * 风险预测 * 条款类型预测 * 合同历史记录 ## 项目结构 具体结构可能因项目的最终版本而异。 ``` Legal-contract/ │ ├── backend/ │ ├── main.py │ ├── database files │ ├── document extraction modules │ ├── OCR modules │ ├── clause processing modules │ ├── Gemini integration │ │ │ ├── ml_model/ │ │ ├── training scripts │ │ ├── trained models │ │ ├── vectorizers │ │ ├── datasets │ │ └── evaluation files │ │ │ ├── evaluation/ │ │ ├── classification reports │ │ ├── confusion matrix CSV files │ │ ├── confusion matrix PNG files │ │ ├── ablation reports │ │ └── detailed prediction files │ │ │ ├── evaluation_strengthening/ │ │ ├── generate_detailed_evaluation.py │ │ └── run_phase5_ablation.py │ │ │ ├── mypy.ini │ └── requirements.txt │ ├── frontend/ │ ├── src/ │ │ ├── components/ │ │ ├── assets/ │ │ ├── App.jsx │ │ ├── App.css │ │ └── main.jsx │ │ │ ├── public/ │ ├── package.json │ └── vite.config.js │ ├── development_archive/ │ ├── phase summaries │ ├── evaluation records │ ├── development notes │ └── previous implementation files │ ├── README.md └── .gitignore ``` 调整此结构,使其与项目中实际的文件夹和文件名相匹配。 ## 安装说明 ## 1. 克隆或打开项目 ``` git clone YOUR_REPOSITORY_URL cd Legal-contract ``` 在不使用 Git 在本地运行项目时,请在 Visual Studio Code 中打开主项目文件夹。 ## 2. 后端设置 打开命令提示符并导航至 backend 文件夹: ``` cd "C:\Users\YourName\Documents\Legal-contract\backend" ``` 创建虚拟环境: ``` python -m venv venv ``` 激活虚拟环境: ``` venv\Scripts\activate ``` 安装后端依赖项: ``` pip install -r requirements.txt ``` ## 3. 环境变量 在 backend 文件夹内创建一个 `.env` 文件。 示例: ``` GEMINI_API_KEY=your_gemini_api_key_here ``` 请勿上传 `.env` 文件或在源代码中暴露 API 密钥。 ## 4. 启动后端 在 backend 目录下运行: ``` python -m uvicorn main:app ``` 后端应该可以通过以下地址访问: ``` http://127.0.0.1:8000 ``` FastAPI 文档应该可以通过以下地址访问: ``` http://127.0.0.1:8000/docs ``` ## 5. 前端设置 打开第二个命令提示符窗口并导航至 frontend 文件夹: ``` cd "C:\Users\YourName\Documents\Legal-contract\frontend" ``` 安装前端依赖项: ``` npm install ``` 启动前端: ``` npm run dev ``` Vite 将显示本地前端 URL,通常为: ``` http://localhost:5173 ``` 在 Web 浏览器中打开此地址。 ## API Endpoint 最终的后端暴露了以下主要 endpoint: | 方法 | Endpoint | 用途 | | -------- | -------------------------- | -------------------------------- | | `GET` | `/` | 检查后端状态 | | `POST` | `/upload-contract` | 上传并处理合同 | | `POST` | `/ask-contract` | 提出关于合同的问题 | | `GET` | `/contracts` | 返回已存储的合同历史记录 | | `GET` | `/contracts/{contract_id}` | 返回一份已存储的合同 | | `DELETE` | `/contracts/{contract_id}` | 删除一份已存储的合同 | ## 推荐截图 将以下屏幕截图添加到最终文档或 README 中: 1. 应用程序落地页 2. 合同上传界面 3. 已上传合同信息 4. 合同摘要 5. 风险概览 6. 条款分析结果 7. 高风险条款显示 8. 条款类型分类 9. 合同问答功能 10. 合同历史记录页面 11. 搜索功能 12. 扫描 PDF 或 OCR 结果 13. FastAPI Swagger 文档 14. 运行时的后端终端 15. 运行时的前端终端 16. 模型评估输出 17. 混淆矩阵 18. 外部预测结果 创建一个 `images` 或 `screenshots` 文件夹,并使用 Markdown 添加图像: ``` ![Contract Upload Screen](https://raw.githubusercontent.com/kainatarshad123/legal-contract-analyzer/main/screenshots/contract-upload.png) ``` ## 测试 在最终提交之前,运行以下技术检查: ``` python -m mypy main.py evaluate_external_test.py validate_hybrid_clause_model.py evaluation_strengthening python -m py_compile main.py validate_hybrid_clause_model.py python evaluation_strengthening\generate_detailed_evaluation.py python evaluation_strengthening\run_phase5_ablation.py python -m uvicorn main:app ``` 然后使用以下内容测试系统: * 可搜索的 PDF * 扫描的 PDF * 短合同 * 长合同 * 包含高风险条款的合同 * 包含缺失信息的文档 * 不受支持或无效的文件 * 与合同相关的问题 * 与合同无关的问题 * 合同历史记录加载 * 重启后端后的数据库持久性 ## 安全性考虑 * API 密钥必须存储在环境变量中。 * `.env` 文件绝对不能提交到 Git。 * 应验证上传的文件。 * 应执行文件大小限制。 * 应拒绝不受支持的文件格式。 * 在处理之前应验证用户输入。 * 生成的法律回复应明确显示免责声明。 ## 局限性 * 该系统不能替代合格的律师。 * 预测结果取决于训练数据集的质量和覆盖范围。 * 对于模糊或低分辨率的文档,OCR 的准确率可能会降低。 * 一些不常见的条款可能会被错误分类。 * Gemini 的回复可能偶尔包含不完整或不准确的信息。 * 该系统可能不支持每个法律司法管辖区。 * 外部评估数据集可能包含示例数量有限的类别。 * 低频条款类别的分类性能可能较低。 ## 未来改进 可能的未来改进包括: * 添加用户身份验证 * 添加基于角色的访问控制 * 添加云数据库支持 * 部署前端和后端 * 支持 DOCX 和 TXT 合同 * 添加多语言合同分析 * 改进 OCR 预处理 * 训练基于 Transformer 的法律语言模型 * 扩充法律条款数据集 * 添加特定司法管辖区的法律规则 * 添加合同比较 * 添加条款功能 * 将分析结果导出为 PDF * 添加管理员分析 * 添加订阅和支付功能 * 添加安全的云文档存储 ## 法律免责声明 法律合同分析器是一个教育和辅助性的软件项目。 它不提供专业的法律建议,不应被视为可替代持有执照的律师的咨询。模型预测和 AI 生成的解释可能包含错误,或者可能并不适用于每个法律司法管辖区。 用户在根据合同或本系统产生的结果做出决定之前,应咨询合格的法律专业人士。 ## 作者 **项目:** 法律合同分析器 **开发者:** Kainat Arshad **机构:** 添加你所在的大学或机构 **专业:** 添加你的学位或课程 **提交日期:** 2026 年 7 月 ## 许可证 本项目出于教育和学术目的而开发。 仅在您的机构要求或公开发布项目时,才添加正式的开源许可证。
标签:AV绕过, FastAPI, OCR, React, Syscalls, 合同审查, 文档分析, 法律科技, 逆向工具