Files
Crawl-Qwen2.5-3B-coder/README.md
ModelHub XC f52362a48a 初始化项目,由ModelHub XC社区提供模型
Model: rqwfwef/Crawl-Qwen2.5-3B-coder
Source: Original Platform
2026-06-18 12:14:13 +08:00

199 lines
8.0 KiB
Markdown
Raw Permalink 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.

---
license: Apache License 2.0
#model-type:
##如 gpt、phi、llama、chatglm、baichuan 等
#- gpt
#domain:
##如 nlp、cv、audio、multi-modal
#- nlp
#language:
##语言代码列表 https://help.aliyun.com/document_detail/215387.html?spm=a2c4g.11186623.0.0.9f8d7467kni6Aa
#- cn
#metrics:
##如 CIDEr、Blue、ROUGE 等
#- CIDEr
#tags:
##各种自定义,包括 pretrained、fine-tuned、instruction-tuned、RL-tuned 等训练方法和其他
#- pretrained
#tools:
##如 vllm、fastchat、llamacpp、AdaSeq 等
#- vllm
tasks:
- chatbot
frameworks: PyTorch
language:
- zh
- en
base_model_relation: finetune
datasets:
- rqwfwef/Crawl-5k
---
# CrawlLLM
## 1. 项目简介
本项目基于 **Qwen2.5-3B-coder-Instruct**,通过 **全参数 SFT 微调**,打造了一个专注于爬虫领域的 **指令生成****代码补全** 的小参数 LLM。
### 🌟 主要特点:
-**高质量爬虫代码生成**:能够编写高效、可靠的爬虫代码
-**精准理解与应用相关库**:适配主流爬虫库,智能调用 API
-**强大的泛化能力** 微调后的模型在humaneval上极大超越base模型并超越Qwen2.5-7B-coder-Instruct
### 📦 开源数据集:
我们制作并开源了 [Crawl-5K](https://modelscope.cn/datasets/rqwfwef/Crawl-5k) 及其数据获取流程。
**Crawl-5K** 是首个专注于 **爬虫库相关知识和内容** 的高质量数据集,为 LLM 在爬虫任务上的优化提供了强大支撑。
---
## 2. 方法
### 2.1 数据管道
为了提升数据质量,我们设计了一套高效的数据处理流程,主要包括 **官方文档处理****代码结构化处理** 两部分。
![数据管道流程图](data-pipeline.png)
---
### 📖 2.1.1 官方文档处理
- **📥 数据采集**
使用 `playwright``html2text` 自动化抓取各大官方文档Docs网站的 HTML 内容,采用 **广度优先搜索BFS**,最大爬取深度设定为 **3** 层。
- **🔄 格式转换**
抓取的 HTML 内容自动转换为 **Markdown**,确保文本清晰、易读。
- **🔍 关键信息提取**
基于 **DeepSeek-R1** 挖掘文档重点内容,生成高质量的 **instruction-output** 数据对,为模型训练提供支持。
---
### 🧑‍💻 2.1.2 代码结构化处理
- **🗂 代码解析**
使用 **ASTAbstract Syntax Tree抽象语法树** 解析官方代码库,使代码更具结构化,提高数据质量。
- **📌 任务拆解**
- **✍️ FIMFill-in-the-Middle任务50%**
- 参考 **DeepSeek-Code** 的相关研究,格式如下:
```plaintext
<|fim_start|>代码前段<|fim_hole|>代码后段<|fim_end|>缺失代码<|eos_token|>
```
- 基于该思想,我们设计出更适合**微调任务**的方法,示例:
```json
{
"instruction": "请根据上下文补充代码中缺失的部分:",
"input": "前文代码<缺失代码>后文代码",
"output": "填充代码"
}
```
- **🔗 代码续写任务50%**
- 另一半代码用于 **代码补全** 任务,将结构化代码拆分,输入 **前半部分**,预测 **后半部分**。
- 训练数据同时提供 **代码续写** 指引,帮助模型更好完成续写任务
---
## 2.2 模型微调策略 🚀
本项目采用 **全参数 SFTSupervised Fine-Tuning, 监督微调)**
使用**训练框架**`ms-swfit`**base模型**`Qwen2.5-3B-coder-Instruct`
---
### 📌 训练配置
| 参数 | 值 | 说明 |
|----------------|--------------------------|----|
| **基础模型** | `Qwen2.5-3B-coder-Instruct` | 预训练代码模型 |
| **训练方式** | `全参数 SFT` | 监督微调 |
| **数据集** | `Crawl-5K` | 爬虫领域指令数据 |
| **训练数据比例** | `99% 训练集, 1% 验证集` | `split_dataset_ratio=0.01` |
| **最大序列长度** | `512` | `max_length=512` |
| **截断策略** | `delete` | 过长文本直接裁剪 |
---
### 🔧 训练超参数
| 参数 | 值 | 说明 |
|--------------------------------|---------------|----|
| **学习率** | `1e-5` | `learning_rate=1e-5` |
| **权重衰减** | `0.1` | `weight_decay=0.1` |
| **批量大小** | `5` | `per_device_train_batch_size=5` |
| **梯度累积步数** | `16` | `gradient_accumulation_steps=16` |
| **优化器** | `AdamW` | `optim=adamw_torch` |
| **β1, β2 (Adam)** | `0.9, 0.999` | `adam_beta1=0.9`, `adam_beta2=0.999` |
| **梯度裁剪** | `1.0` | `max_grad_norm=1.0` |
| **训练轮数** | `2` | `num_train_epochs=2.0` |
| **学习率调度器** | `cosine` | `lr_scheduler_type=cosine` |
| **学习率预热比例** | `5%` | `warmup_ratio=0.05` |
| **自动混合精度** | `bfloat16` | `bf16=True` |
| **梯度检查点** | `启用` | `gradient_checkpointing=True` |
---
### 💾 训练 & 评估策略
| 参数 | 值 | 说明 |
|------------------------|-----------------|----|
| **评估方式** | `steps` | `eval_strategy=steps` |
| **评估步长** | `50` | `eval_steps=50` |
| **日志记录步长** | `5` | `logging_steps=5` |
| **保存策略** | `steps` | `save_strategy=steps` |
| **模型保存步长** | `5000` | `save_steps=5000` |
| **最大保存模型数量** | `5` | `save_total_limit=5` |
| **数据加载进程数** | `8` | `dataloader_num_workers=8` |
---
✨ 🔗 **相关训练过程** 已在 [Swanlab](https://swanlab.cn/@ryne/Crawl-Qwen2.5-Coder-3B-Instruct-en/charts) 公开,欢迎查看详细训练曲线与指标分析。
---
## 3. 实验结果 🚀
### 3.1 效果展示 🔮
在本节中,我们展示了 Scrapy 爬虫的代码示例,其中包含 `parse`、`parse_page2` 和 `errback_page2` 方法。该示例演示了构造 `scrapy.Request` ,并使用我们的模型进行自动补全。
#### 📌 示例:
![代码补全示例](fim.png)
我们使用 `ollama` 结合 `Twinny` 在`vscode`进行代码补全时的界面效果。
### 3.2 评测数据 📊
**Humaneval** 基准测试上,我们的模型取得了优秀的表现:
| **Model** | **Dataset** | **Metric** | **Subset** | **Num** | **Score** |
|------------------------------------|-------------|-----------|----------------------|--------|-----------|
| Qwen2.5-Coder-3B-Instruct | humaneval | Pass@1 | openai_humaneval | 164 | 0.4329 |
| Qwen2.5-Coder-7B-Instruct | humaneval | Pass@1 | openai_humaneval | 164 | 0.4817 |
| 🏆 **Crawl-Qwen2.5-Coder-3B-Instruct** | humaneval | Pass@1 | openai_humaneval | 164 | **0.5000** |
**关键发现:**
- 微调后的 **3B** 模型在爬虫相关任务上的表现 **优于原始 3B 版本** 📈
-**表现甚至优于 7B 版本** 🎯
---
## 4. 总结
本次项目通过全参数 SFT 微调 Qwen2.5-3B-coder-Instruct并结合高质量数据管道官方文档爬取 + 代码 AST 解析),成功构建了一个专注于爬虫任务的 LLM。实验结果表明模型在代码生成、库调用和任务理解方面都有明显提升。
未来我们希望将运用CoT技术进一步提升LLM能力并且运用更多蒸馏、剪枝方法轻量化模型并开发一套code模型的强化学习技术。
---
## 5. 相关链接
- **训练日志**[SwanLab 日志链接](https://swanlab.cn/@ryne/Crawl-Qwen2.5-Coder-3B-Instruct-en/charts)
- **模型权重**[魔搭社区模型权重链接](https://modelscope.cn/models/rqwfwef/Crawl-Qwen2.5-3B-coder)
- **Demo体验**[魔搭社区 Demo 链接](https://www.modelscope.cn/studios/rqwfwef/crawllm)
---