# Novel2Chat **Repository Path**: goldmorningsmart/Novel2Chat ## Basic Information - **Project Name**: Novel2Chat - **Description**: This project fine-tunes the Qwen1.5-Chat model using LoRA (Low-Rank Adaptation) on the text of a novel. The fine-tuned model can emulate the protagonist's language style, vocabulary, and expression, enabling dialogue that closely mirrors the original character. - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-25 - **Last Updated**: 2025-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Novel2Chat --- [![AGPLv3 License](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) **许可证声明** 本项目采用 **GNU Affero General Public License v3.0 (AGPLv3)**。 - ✅ 允许:自由使用、修改、分发 - 🔄 要求:衍生作品必须开源并保持相同许可证 - 🌐 网络服务:若提供基于本项目的在线服务,必须公开修改后的源代码 **网络服务特别说明** 若你将本项目用于提供在线服务(如 Web API、SaaS 平台),必须: - 向所有用户公开修改后的源代码 - 在服务显著位置提供源码获取方式(如页面底部链接) --- # 项目简介 本项目基于 **Qwen1.5-Chat** 模型,采用 **LoRA(Low-Rank Adaptation)微调技术**,以某部小说的文本为训练语料。通过微调,模型能够更好地学习并模仿小说主人公的语言风格、用词习惯和表达方式,从而在对话场景中呈现出贴近原著人物的说话风格。 项目目标是探索 **大语言模型个性化定制** 的可行性,展示如何利用 LoRA 高效地对大模型进行小规模训练,使其具备特定人物的语言特征,同时保持 Qwen1.5 原有的对话理解与生成能力。 应用场景包括: * 小说角色对话模拟 * 互动式文学创作 * 个性化聊天机器人 * 文学 IP 的衍生应用 --- 本项目是以学习探索大语言模型为目的创建的,你可以通过本项目学习,如何预处理数据集,如何建立标准的jsonl格式数据集,如何使用lora微调,如何合并模型,如何转换模型为gguf格式,如何量化模型,如何使用ollama运行微调后的模型 可以这样写一个更完整、条理清晰的 **项目目的**: --- ## 项目目的 本项目以学习和探索 **大语言模型(LLM)微调与部署流程** 为主要目标。通过对 Qwen1.5-Chat 模型进行 LoRA 微调,可以在实践中学习以下内容: 1. **数据预处理** * 学习如何清洗和整理原始文本语料。 * 构建标准化的 **JSONL 格式数据集**,并适配对话任务需求。 2. **模型微调** * 理解并应用 **LoRA(Low-Rank Adaptation)技术**,在有限算力下高效完成大模型的个性化微调。 * 掌握训练参数设置与优化方法。 3. **模型合并与转换** * 学习如何将 LoRA 权重合并回基座模型,生成可独立使用的微调模型。 * 将模型格式转换为 **GGUF**,以便在轻量化推理框架中运行。 4. **模型量化** * 理解不同量化策略(如 4-bit、8-bit)的原理和取舍。 * 实践模型量化,显著降低显存占用并提升推理效率。 5. **模型部署与应用** * 使用 **Ollama** 等工具运行微调后的模型。 * 探索大语言模型在 **角色模拟、个性化对话** 等方向的应用。 --- ## 运行流程 **推荐配置**: * **RAM**:32GB * **GPU 显存**:12GB(显存不足请使用更小模型) --- ### 数据集处理流程 1. **分割** * 将原始小说按 **1000 字**切分为多个片段。 * 尽管大模型支持 8K+ token 输入,实测每次处理约 1K 效果更佳。 2. **对话提取** * 小说总字数约 **300 万**,直接使用在线 API 成本高(约 200 万 tokens,费用 15–30 元)。 * 使用 **Ollama 离线量化版 Qwen-14B-4bit**(12GB 显存;显存不足可选 7B 版本)处理每个片段。 * 输出 JSON 文件,每 **30 个片段**保存为一个 JSON 文件。 3. **清洗与标准化** * 由于离线 Qwen-14B 输出格式不完全规范,使用 Python 或在线 API 对 JSON 进行清洗。 * 修复格式问题,保证 JSON 可解析。 4. **合并为 JSONL** * 将多个 JSON 文件合并为单行 JSONL 文件,确保可被 `datasets` 库加载。 5. **数据扩展(可选)** * 如对话样本较少,可调用在线 API 进行适度扩展。 * ⚠️ 注意:可能引入噪声,影响数据集质量。 --- ### 模型微调 * 基座模型:**Qwen-7B-Chat**(需下载未量化版本,首次运行会自动从 Hugging Face Hub 下载)。 * 使用 **LoRA 技术**进行微调,并采用 **4bit 量化加载**。 * 显存需求约 **11.2GB**,不足时可选择更小模型。 * 微调后获得具有 **特定角色语言风格**的模型。 --- ### 模型合并与部署 1. **合并模型** * 将基础模型与 LoRA 权重合并,生成独立可用的微调模型。 * ⚠️ 合并时 **不能量化加载**,否则后续转换会报错。 * 若 GPU 显存不足,可使用 **CPU + FP16 精度**,约占用 **20GB 内存**。 2. **安装llama.cpp** ```bash git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp make ``` 2. **格式转换** * 使用 **llama.cpp** 的 `convert_hf_to_gguf.py` 脚本,将模型转换为 **GGUF 格式**。 * 转换后模型可在 Ollama 或其他支持 GGUF 的推理框架中直接运行。 --- ### 模型量化(可选) * 使用 **llama-quantize** 将 GGUF 模型进一步量化,降低显存占用: ```bash ./llama-quantize \ /path/to/input-model.gguf \ /path/to/output-model-Q4_0.gguf \ Q4_1 ``` * ⚠️ **版本注意事项**: * 量化工具随 **llama.cpp master 分支** 更新而变化,有些版本可能不支持 **Q4\_0 / Q4\_1** 4bit 量化。 * 确保使用稳定版本,并先将模型转换为 GGUF 格式。 * 量化后显存占用显著降低,但可能略微影响模型精度。