diff --git a/.gitignore b/.gitignore index f71198f..a76c632 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,8 @@ Thumbs.db # 日志 *.log logs/ + +# LCCC 训练数据(不纳入版本控制,仅本地使用) +corpus/lccc/lccc_base_train.jsonl +corpus/lccc/lccc_base_train.jsonl.gz +corpus/lccc/lccc_dialogues.txt diff --git a/corpus/README.md b/corpus/README.md new file mode 100644 index 0000000..b7960b3 --- /dev/null +++ b/corpus/README.md @@ -0,0 +1,18 @@ +# Corpus 语料库总说明 + +本目录 `corpus/` 汇集用于模型训练的多来源中文语料。 + +## 1. LCCC 中文对话语料(HuggingFace 下载) +- 位置:`corpus/lccc/` +- 详见 `lccc/README.md`。 +- 概要:从 HuggingFace 下载的大规模中文对话数据集。其中 `lccc_base_train.jsonl`(约 872MB)、`lccc_base_train.jsonl.gz`(约 353MB)因单个体积超过 100MB,已从 git 跟踪中移除并加入 `.gitignore` 忽略,仅保留本地文件。 + +## 2. 模型编写的教材(Kimi / GLM / Hy3) +- 位置:`教材/`、`义务教育教材/` +- 由 **Kimi(K2.7 Code)、GLM(5.2)、Hy3** 三个模型共同编写,覆盖**幼儿园、小学、初中、高中**各学段教材内容(含语文、数学、英语、物理、化学、生物、历史、地理、政治等学科,以及幼儿成长日志等大量 `.md` 文本)。 +- 各模型分别承担不同学段 / 学科的编写工作。 + +## 版本控制约定 +- 大体积训练语料(如 LCCC 的 jsonl / gz,>100MB)不纳入 git 提交,已忽略。 +- 教材类 `.md` 文本体积小,正常纳入版本控制。 +- 各语料具体说明见对应子目录文档(如 `lccc/README.md`)。 diff --git a/corpus/lccc/README.md b/corpus/lccc/README.md new file mode 100644 index 0000000..0c0026b --- /dev/null +++ b/corpus/lccc/README.md @@ -0,0 +1,34 @@ +# LCCC 训练数据说明 + +本目录 `corpus/lccc/` 存放 LCCC 中文对话语料相关的**训练数据**: + +> **数据来源**:本目录语料为从 HuggingFace 下载的中文对话语料(LCCC,大规模中文对话数据集),仅作本地训练使用。 + +- `lccc_base_train.jsonl` / `lccc_base_train.jsonl.gz`:基础训练语料(对话数据) +- `lccc_dialogues.txt`:对话文本导出 + +数据处理脚本 `scripts/prepare_lccc.py` 位于仓库 `scripts/` 目录,属于代码,**正常纳入版本控制**。 + +## 版本控制说明 + +LCCC 训练数据为生成式语料、体积较大,**不纳入 git 提交 / 跟踪**。 + +已通过 `git rm --cached` 取消跟踪(仅保留本地文件,不删除磁盘数据),并在仓库根 `.gitignore` 中追加了忽略条目。请勿将其提交到远程仓库。 + +### 已从 git 移除的语料(体积大于 100MB) + +以下语料因单个文件体积超过 100MB,已从 git 跟踪中移除,仅保留在本地磁盘,不进入版本库 / 远程仓库: + +| 文件 | 体积 | 内容说明 | +| --- | --- | --- | +| `lccc_base_train.jsonl` | 约 872 MB | LCCC 基础训练语料(原始 JSONL 对话数据,未压缩) | +| `lccc_base_train.jsonl.gz` | 约 353 MB | 上述语料的 gzip 压缩版本 | + +这两个文件已执行 `git rm --cached` 取消跟踪,并在仓库根 `.gitignore` 中显式忽略;全仓库扫描确认已无大于 100MB 的被跟踪文件。 + +### 仍纳入版本控制的文件 + +- `scripts/prepare_lccc.py`:数据处理脚本(位于仓库 `scripts/` 目录),正常跟踪。 +- 本说明文档 `README.md`。 + +如需在本地使用训练语料,直接读取本目录下的 `lccc_base_train.jsonl` / `lccc_base_train.jsonl.gz` 文件即可。 diff --git a/corpus/教材/幼儿园/小班/小班成长日志/11月1日.md b/corpus/教材/幼儿园/小班/小班成长日志/11月1日.md new file mode 100644 index 0000000..de7fe51 --- /dev/null +++ b/corpus/教材/幼儿园/小班/小班成长日志/11月1日.md @@ -0,0 +1,57 @@ +# 11 月 1 日 星期六 周末 + +**早上看到的**:妈妈给我穿了一件橘色卫衣。我看见窗外风把叶子吹得满地都是。爸爸在吃早饭。 + +**听到的**:妈妈说:“今天周末,爸爸带你去公园捡叶子。”爸爸说:“多捡几种颜色。” + +**自己说的**:“我要捡红色的叶子。” + +**脑子里想的**:上周我捡了黄叶子做了小鱼。今天要捡红色的,做一只小鸟。 + +**对话**: +- 妈妈:“穿好鞋子。” +- 我:“好。” +- 爸爸:“走,去公园。” +- 我:“耶!” +- 爸爸:“今天捡什么颜色?” +- 我:“红色和绿色。” +- 爸爸:“好,做小鸟。” + +**在公园**: +- 我捡了一片红叶子。 +- 我:“爸爸,这片红红的像小手掌。” +- 爸爸:“对,像枫叶。” +- 我捡了一片绿叶子。 +- 我:“这片绿绿的。” +- 爸爸:“放在袋子里。” +- 我还捡了黄色的。 +- 我:“我有红、绿、黄三种。” +- 爸爸:“真多。” + +**中午**:在公园吃面包。 +- 我:“面包软软的。” +- 爸爸:“吃了有力气。” +- 我:“我吃了,去玩沙子。” +- 爸爸:“小心眼睛。” + +**下午**:在家做叶子贴画。 +- 我用红叶子做小鸟的身体。 +- 我用绿叶子做翅膀。 +- 我:“爸爸,小鸟做好了。” +- 爸爸:“真好看,像在飞。” +- 我:“它要去南方。” +- 爸爸:“对,秋天小鸟往南飞。” + +**晚上家里**: +- 妈妈:“今天捡到几种叶子?” +- 我:“三种,红、绿、黄。” +- 妈妈:“做了什么?” +- 我:“一只小鸟。” +- 爸爸:“小鸟往南飞。” +- 我:“对,秋天到了。” +- 妈妈:“乐乐手真巧。” +- 爸爸:“早点睡。” + +**脑子里想的**:叶子有好多颜色,能做不同的画。小鸟秋天往南飞,真神奇。 + +**今天学到的**:1. 叶子有红、绿、黄等颜色。2. 秋天小鸟往南飞。3. 用叶子能做贴画。 diff --git a/train_chat.py b/train_chat.py index f58d09a..f961e05 100644 --- a/train_chat.py +++ b/train_chat.py @@ -43,7 +43,7 @@ def clean_corpus() -> str: cc_s2t = OpenCC('s2t') # 简转繁 cc_t2s = OpenCC('t2s') # 繁转简 - corpus_dir = Path(__file__).parent.parent / 'corpus' + corpus_dir = Path(__file__).parent / 'corpus' raw_paragraphs = [] # 1. 内嵌唐诗宋词论语 @@ -52,7 +52,16 @@ def clean_corpus() -> str: if para: raw_paragraphs.append(para) - # 2. 递归读取 corpus/ 下所有文件 + # 2. LCCC 对话语料(最高优先级,真实对话) + lccc_file = corpus_dir / 'lccc_dialogues.txt' + if lccc_file.exists(): + lccc_text = lccc_file.read_text(encoding='utf-8') + for para in lccc_text.split('\n\n'): + para = para.strip() + if para: + raw_paragraphs.append(para) + + # 3. 递归读取 corpus/ 下其他所有文件(教材+百科) if corpus_dir.exists(): for filepath in sorted(corpus_dir.rglob('*')): if not filepath.is_file():