Minimind/preprocessing/README_trex_processor.md

154 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TREx 数据集处理工具使用说明
这个工具支持两步骤处理 TREx 数据集:
1. **句子提取**:从 TREx 数据集提取三元组并转换为自然语言句子
2. **LLM 处理**:使用 ollama qwen3:4b 模型进行句子修正和重要性评分
## 🆕 防卡死机制
为了解决LLM处理时可能出现的卡死问题新增了以下功能
### 超时和重试机制
- **超时时间**每个LLM请求60秒超时
- **重试机制**失败后最多重试2次采用指数退避策略
- **并发控制**降低并发数至4个减少服务器压力
### 心跳监控系统
- **实时监控**每30秒检查一次LLM响应状态
- **异常警告**超过30秒无成功响应时发出警告
- **服务检测**自动检查ollama服务状态
- **详细统计**:实时显示成功率、超时率等统计信息
### 日志系统
- **详细日志**:所有操作都记录在 `logs/` 目录下
- **双重输出**:同时输出到日志文件和控制台
- **时间戳标记**:日志文件包含启动时间戳
### 改进的错误处理
- **异常恢复**LLM处理失败时使用原句子和默认评分
- **状态监控**处理前检查ollama服务状态
- **批次间休息**批次之间休息5秒避免过度压力
## 安装依赖
```bash
pip install agno asyncio pydantic requests
```
确保已安装并启动 ollama并下载 qwen3:4b 模型:
```bash
ollama pull qwen3:4b
```
## 使用方法
### 1. 完整流程(两步骤连续执行)
```bash
python trex_to_sentences_simple.py --step all --input_dir dataset/TREx --max_files 2
```
### 2. 分步骤执行
#### 步骤1仅提取句子
```bash
python trex_to_sentences_simple.py --step extract --input_dir dataset/TREx --sentences_json my_sentences.json --max_files 2
```
#### 步骤2仅LLM处理
```bash
python trex_to_sentences_simple.py --step llm --sentences_json my_sentences.json --output_file final_output.txt
```
## 主要参数说明
- `--step`: 运行步骤
- `extract`: 仅提取句子
- `llm`: 仅LLM处理
- `all`: 完整流程(默认)
- `--input_dir`: TREx数据集目录默认`dataset/TREx`
- `--sentences_json`: 提取的句子JSON文件默认`extracted_sentences.json`
- `--output_file`: 最终输出文件(默认:`trex_sentences_enhanced.txt`
- `--max_files`: 最大处理文件数(用于测试)
- `--no_llm`: 禁用LLM处理
## 输出文件
**注意:所有输出文件都会自动保存在相应目录中**
### 句子提取输出
- `output/extracted_sentences.json`: 提取的原始句子,包含元数据
### LLM处理输出
- `output/{output_file}.txt`: 修正后的句子文本文件
- `output/{output_file}.json`: 完整的处理结果(包含原句、修正句、评分)
- `output/{output_file}_sorted_by_importance.txt`: 按重要性评分排序的句子
### 检查点文件
- `output/{output_file}_checkpoint_{数量}.json`: 每1000条句子自动保存的检查点
### 日志文件
- `logs/trex_processor_{时间戳}.log`: 详细的处理日志
## 🆕 故障诊断
### 如果遇到卡死问题:
1. **检查日志文件**:查看 `logs/` 目录下的最新日志
2. **观察心跳监控**:注意控制台的心跳警告信息
3. **检查ollama服务**
```bash
ps aux | grep ollama
curl http://localhost:11434/api/tags
```
4. **重启ollama服务**(如果需要):
```bash
pkill ollama
ollama serve &
```
### 常见警告信息:
- `⚠️ 心跳检测`: 30秒无成功响应正常情况下会自动恢复
- `❌ 严重警告`: 90秒无成功响应可能需要检查服务
- `💀 Ollama服务异常`: ollama服务可能已停止
- `💀 致命错误`: 连续多次警告(建议重启程序)
## 检查点恢复机制
- 步骤2会自动检测已有的检查点文件在 `output/` 目录中)
- 只处理尚未处理的句子,避免重复工作
- 如果所有句子都已处理,会直接生成最终输出文件
- 中断后重新运行会自动从最新检查点继续
## 示例工作流
```bash
# 1. 先提取句子(可以快速完成)
python trex_to_sentences_simple.py --step extract --max_files 5
# 2. 后续进行LLM处理耗时较长支持断点续传
python trex_to_sentences_simple.py --step llm
# 如果中途中断再次运行步骤2会自动从检查点恢复
python trex_to_sentences_simple.py --step llm
```
## 性能特点
- **保守的并发**: 最大4个并发LLM请求降低卡死风险
- **检查点保存**: 每1000条句子自动保存支持断点续传
- **智能监控**: 详细的处理进度和时间预估
- **健壮的错误处理**: LLM请求失败时使用原句子和默认评分
- **服务监控**: 自动检测ollama服务状态
## 注意事项
1. 首次运行步骤2前必须先完成步骤1
2. 检查点文件会占用额外磁盘空间(每个都包含所有已处理数据)
3. LLM处理速度取决于模型性能和网络状况
4. 建议先用`--max_files`参数测试小批量数据
5. **新增**:如果遇到卡死,查看日志文件和心跳监控信息
6. **新增**程序会自动检测并报告ollama服务状态
7. **新增**:所有处理过程都有详细日志记录,便于问题诊断