大整理: 仓库重组 + 新词表 + 新README
- 清理仓库: 删除所有废弃的generate_*脚本和旧版数据文件 - 目录重组: - data/ → 训练数据 - scripts/ → 数据生成脚本 - templates/ → Web UI - 重命名: - train_v2.py → train.py - vocab_v3.json → vocab.json (BPE, 6.8k tokens) - 更新 train.py 指向新词表路径 - 重写 README.md 完整文档 - 更新 .gitignore
This commit is contained in:
1 parent
6e0ced4772
commit
231af72de9
26 files changed
+124
-126
No files matched your search
@@ -1,29 +1,95 @@
|
||||
# xiaoli-llm-chat
|
||||
# 小狸 AI — Xiaoli Chat
|
||||
|
||||
#### 介绍
|
||||
小狸AI - 旨在最小设备上运行的闲聊心理治疗模型
|
||||
> 一个从零训练的 **13M 参数闲聊心理治疗模型**。纯 CPU 实时推理,无需 GPU。
|
||||
|
||||
从零训练的特化 Transformer,不依赖任何预训练模型,无需微调对齐,训练完可直接对话。
|
||||
小狸是一个 8 岁小女孩的角色化对话 AI,基于 Causal Decoder-Only Transformer 架构,支持日常闲聊、情感陪伴、角色扮演等场景。
|
||||
|
||||
#### 模型特点
|
||||
- **超轻量**: 仅 13M 参数,约 20MB 占用
|
||||
- **从零训练**: 不基于 LLaMA/GPT 等任何基座,权重完全随机初始化
|
||||
- **开箱即用**: 无需 SFT / RLHF,训练完即可对话
|
||||
- **安全可控**: 数据内嵌对齐,天然不输出违规内容
|
||||
- **闲聊陪伴**: 专注情感价值,不追求通用能力
|
||||
## 快速开始
|
||||
|
||||
#### 技术栈
|
||||
- 架构: Causal Decoder-Only Transformer (RoPE + RMSNorm + SwiGLU)
|
||||
- 分词: 字符级词表(3236 tokens)
|
||||
- 训练: 自建问答数据 + Astron API 蒸馏
|
||||
```bash
|
||||
# 1. 推理(对话)
|
||||
python3 -c "
|
||||
import json, torch
|
||||
from llm_chat_improved import LLMModel, LLMChat, tokenizer_instance
|
||||
|
||||
#### 使用场景
|
||||
- 儿童情感陪伴
|
||||
- 轻量级心理倾诉
|
||||
- IoT / 嵌入式设备离线对话
|
||||
- 隐私安全的本地聊天
|
||||
vocab = json.load(open('vocab.json'))
|
||||
ckpt = torch.load('llm_model_v2_resume_epoch_7.pth', map_location='cpu')
|
||||
cfg = ckpt['model_config']
|
||||
|
||||
#### 性能
|
||||
- 内存占用: ~20MB
|
||||
- 推理速度: CPU 实时(无需 GPU)
|
||||
- 可运行平台: 树莓派、手机、手表、低端PC
|
||||
model = LLMModel(vocab_size=len(vocab), d_model=cfg['d_model'], n_heads=cfg['n_heads'],
|
||||
n_layers=cfg['n_layers'], d_ff=cfg['d_ff'], max_len=cfg['max_len'], dropout=0.1)
|
||||
model.load_state_dict(ckpt['model_state_dict'])
|
||||
model.eval()
|
||||
|
||||
chat = LLMChat(model, vocab, device='cpu')
|
||||
tokenizer_instance.char_to_id = vocab.copy()
|
||||
tokenizer_instance.id_to_char = {v:k for k,v in vocab.items()}
|
||||
|
||||
print(chat.generate_response('小狸你好呀'))
|
||||
"
|
||||
|
||||
# 2. 训练
|
||||
python3 train.py
|
||||
```
|
||||
|
||||
## 模型架构
|
||||
|
||||
| 参数 | 值 |
|
||||
|------|-----|
|
||||
| 架构 | Causal Decoder-Only Transformer |
|
||||
| 参数量 | 13M |
|
||||
| 隐藏层 (d_model) | 320 |
|
||||
| 层数 (n_layers) | 6 |
|
||||
| 注意力头 (n_heads) | 8 |
|
||||
| FFN 宽度 (d_ff) | 1280 |
|
||||
| 最大序列长度 | 512 |
|
||||
| 位置编码 | RoPE (Rotary Position Embedding) |
|
||||
| 激活函数 | SwiGLU |
|
||||
| 归一化 | RMSNorm |
|
||||
| 词表 | BPE, 6,812 tokens |
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
xiaoli-llm-chat/
|
||||
├── llm_chat_improved.py # 模型架构 + 推理代码(核心)
|
||||
├── train.py # 训练脚本
|
||||
├── vocab.json # BPE 词表(6.8k tokens)
|
||||
├── web_server.py # Web 聊天服务
|
||||
├── chat_server.py # Flask 聊天服务
|
||||
├── templates/
|
||||
│ └── chat.html # 聊天网页 UI
|
||||
├── data/
|
||||
│ ├── xiaoli_data_v1_part_1of2.json # 训练数据(33万条)
|
||||
│ └── xiaoli_data_v1_part_2of2.json # 训练数据(33万条)
|
||||
└── scripts/ # 数据生成脚本
|
||||
├── generate_fresh_qa.py
|
||||
├── generate_multiturn.py
|
||||
├── regenerate_all_high_temp.py
|
||||
├── daily_data_gen.py
|
||||
└── api_correction.py
|
||||
```
|
||||
|
||||
## 训练数据
|
||||
|
||||
- **总计 666,379 条** 去重 QA 对
|
||||
- 来源:Astron 30B API 蒸馏生成(高温采样 + 多轮对话 + 新问答)
|
||||
- 场景覆盖:日常闲聊、情感陪伴、儿童对话、角色扮演
|
||||
- 纯人工蒸馏,零网页爬取,数据安全可控
|
||||
|
||||
## 模型权重
|
||||
|
||||
当前发布版本:**Epoch 7**(v0.1)
|
||||
|
||||
模型权重文件 `llm_model_v2_resume_epoch_7.pth`(154MB)因超出 Gitee 单文件限制,需单独下载。
|
||||
|
||||
## 系统要求
|
||||
|
||||
- Python 3.8+
|
||||
- PyTorch(CPU 即可,无需 GPU)
|
||||
- 内存:~200MB
|
||||
- 磁盘:~500MB(含训练数据和权重)
|
||||
|
||||
## 许可
|
||||
|
||||
MIT License
|
||||
Reference in new issue
Block a user