# SelfAI **Repository Path**: jian__wei/self-ai ## Basic Information - **Project Name**: SelfAI - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-15 - **Last Updated**: 2025-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信聊天数据处理与模型微调工具 这个工具用于处理微信聊天数据,将其转换为适合模型训练的ShareGPT格式,并支持使用LLaMA Factory进行LoRA微调。 ## 主要功能 - 支持处理微信导出的JSON格式聊天记录 - 自动过滤敏感信息(手机号、身份证号、邮箱、网址等) - 支持自定义屏蔽词过滤 - 合并连续发送的消息 - 处理引用回复,自动提取问答对 - 支持配置历史消息对数量 - 使用本地大模型评估对话质量,自动筛选高质量对话 - 输出符合ShareGPT格式的数据,方便用于模型训练 - 支持使用LLaMA Factory进行LoRA微调 - 所有功能通过统一的配置文件进行驱动 ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 使用方法 ### 配置文件 所有操作都通过`config.yaml`配置文件进行驱动: ```yaml # 微信聊天数据处理与模型微调配置文件 # 数据处理配置 data: # 输入配置 input_dir: "data" # 输入目录路径,处理该目录下所有JSON文件 # 输出配置 output_dir: "output" # 处理后的文件输出目录 sft_data_path: "output/sft_data.json" # 合并后用于微调的数据文件路径 # 处理选项 processing: history_count: 2 # 历史消息对数量,0表示不包含历史消息 block_words: [] # 屏蔽词列表 system_prompt: "请你扮演一名人类,不要说自己是人工智能" # 系统提示词 # 数据评估选项 evaluation: use_model_evaluation: true # 是否使用模型评估对话质量 threshold: 5.0 # 评分阈值 save_evaluation_details: true # 是否保存评估详情 # 模型配置 model: # 评估模型配置 evaluation_model: model_path: "models/Qwen2.5-7B-Chat" # 模型路径,支持Hugging Face模型ID或本地路径 device: "cuda" # 推理设备: cuda或cpu load_in_8bit: false # 是否使用8位精度加载 load_in_4bit: true # 是否使用4位精度加载 # 微调模型配置 fine_tuning: base_model: "Qwen/Qwen2.5-7B-Chat" # 基础模型名称 model_path: "models/Qwen2.5-7B-Chat" # 本地模型路径 output_dir: "fine_tuned_models" # 微调后模型保存路径 bnb_4bit_quant: true # 是否使用4位量化 bnb_4bit_compute_dtype: "float16" # 计算数据类型 lora_r: 64 # LoRA秩 lora_alpha: 16 # LoRA alpha lora_dropout: 0.1 # LoRA dropout # 训练配置 training: dataset_path: "output/sft_data.json" # 数据集路径,与data.sft_data_path保持一致 per_device_train_batch_size: 2 # 训练批次大小 gradient_accumulation_steps: 4 # 梯度累积步数 num_train_epochs: 3 # 训练轮数 learning_rate: 2e-4 # 学习率 lr_scheduler_type: "cosine" # 学习率调度器类型 warmup_ratio: 0.03 # 预热比例 weight_decay: 0.001 # 权重衰减 logging_steps: 10 # 日志步数 eval_steps: 100 # 评估步数 save_steps: 100 # 保存步数 max_grad_norm: 0.3 # 最大梯度范数 max_seq_length: 2048 # 最大序列长度 val_size: 0.1 # 验证集比例 ``` ### 数据处理 使用以下命令运行数据处理: ```bash python run.py --config config.yaml --mode data_process ``` 这将处理`input_dir`目录下的所有JSON文件,并将合并后的结果保存到`sft_data_path`指定的路径。 ### 模型微调 在使用微调功能前,需要先安装LLaMA Factory: ```bash # 克隆LLaMA Factory仓库 git clone https://github.com/hiyouga/LLaMA-Factory.git # 安装依赖 cd LLaMA-Factory pip install -e . ``` 然后使用以下命令运行模型微调: ```bash python llama_factory/train.py --config config.yaml ``` 如果只想查看完整的训练命令而不执行,可以使用`--full_train_cmd`参数: ```bash python llama_factory/train.py --config config.yaml --full_train_cmd ``` ## 模型评估 本工具使用本地模型进行对话质量评估,需要提前下载模型权重: ```yaml model: evaluation_model: model_path: "models/Qwen2.5-7B-Chat" # 本地模型路径 device: "cuda" # 推理设备 load_in_8bit: false # 是否使用8位精度加载 load_in_4bit: true # 是否使用4位精度加载 ``` ### 评估标准 评估使用以下标准: 1. 上下文一致性:对话的上下文是否连贯,前后文是否有明显矛盾。 2. 主题相关性:对话是否围绕同一主题,是否有明显的话题跳跃。 3. 语义清晰度:对话内容是否清晰易懂,即使有少量错别字也不影响理解。 4. 信息价值:对话是否包含有用的信息或知识,是否具有教育意义。 5. 对话完整性:对话是否包含完整的问答,是否有明显的缺失部分。 ## 支持的数据格式 ### 输入格式 微信聊天记录JSON格式: ```json { "id": 3167, "MsgSvrID": "8981788616848095152", "type_name": "文本", "is_sender": 0, "talker": "wxid_igznz0sulfen22", "room_name": "wxid_igznz0sulfen22", "msg": "是啊", "src": "", "extra": {}, "CreateTime": "2025-02-21 10:24:40" } ``` 引用回复示例: ```json { "id": 3176, "MsgSvrID": "5920063453421370557", "type_name": "引用回复", "is_sender": 1, "talker": "wxid_urjfkbxk13fk22", "room_name": "wxid_igznz0sulfen22", "msg": "你们不去吗\n\n[引用](2025-02-21 10:23:57):去瞻仰先辈遗迹", "src": "", "extra": {}, "CreateTime": "2025-02-21 10:34:14" } ``` ### 输出格式 ShareGPT格式: ```json { "conversations": [ { "role": "system", "content": "请你扮演一名人类,不要说自己是人工智能" }, { "role": "user", "content": "去瞻仰先辈遗迹" }, { "role": "assistant", "content": "你们不去吗" } ], "evaluation": { "context_consistency": 8, "topic_relevance": 9, "semantic_clarity": 10, "information_value": 5, "conversation_completeness": 7, "overall_score": 7.8, "evaluation_reason": "对话简短但上下文连贯,主题相关性高,表达清晰。", "recommended": true } } ``` ## 项目结构 ``` . ├── config.yaml # 配置文件 ├── run.py # 主程序入口 ├── requirements.txt # 依赖库 ├── README.md # 说明文档 ├── data/ # 数据目录 ├── output/ # 输出目录 ├── llama_factory/ # LLaMA Factory微调模块 │ ├── train.py # 训练脚本 │ ├── datasets/ # 数据集配置 │ └── README.md # 微调说明文档 ├── examples/ # 示例代码 ├── tests/ # 测试代码 └── src/ # 源代码 ├── models/ # 数据模型 ├── processors/ # 处理器 ├── evaluators/ # 评估器 │ ├── local_model.py # 本地模型评估器 │ └── evaluator_factory.py # 评估器工厂 └── utils/ # 工具类 ├── data_processor.py # 数据处理工具 └── config_manager.py # 配置管理器 ``` ## 许可协议 MIT