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

8.0 KiB
Raw Permalink Blame History

license, tasks, frameworks, language, base_model_relation, datasets
license tasks frameworks language base_model_relation datasets
Apache License 2.0
chatbot
PyTorch
zh
en
finetune
rqwfwef/Crawl-5k

CrawlLLM

1. 项目简介

本项目基于 Qwen2.5-3B-coder-Instruct,通过 全参数 SFT 微调,打造了一个专注于爬虫领域的 指令生成代码补全 的小参数 LLM。

🌟 主要特点:

  • 高质量爬虫代码生成:能够编写高效、可靠的爬虫代码
  • 精准理解与应用相关库:适配主流爬虫库,智能调用 API
  • 强大的泛化能力 微调后的模型在humaneval上极大超越base模型并超越Qwen2.5-7B-coder-Instruct

📦 开源数据集:

我们制作并开源了 Crawl-5K 及其数据获取流程。
Crawl-5K 是首个专注于 爬虫库相关知识和内容 的高质量数据集,为 LLM 在爬虫任务上的优化提供了强大支撑。


2. 方法

2.1 数据管道

为了提升数据质量,我们设计了一套高效的数据处理流程,主要包括 官方文档处理代码结构化处理 两部分。

数据管道流程图


📖 2.1.1 官方文档处理

  • 📥 数据采集
    使用 playwrighthtml2text 自动化抓取各大官方文档Docs网站的 HTML 内容,采用 广度优先搜索BFS,最大爬取深度设定为 3 层。

  • 🔄 格式转换
    抓取的 HTML 内容自动转换为 Markdown,确保文本清晰、易读。

  • 🔍 关键信息提取
    基于 DeepSeek-R1 挖掘文档重点内容,生成高质量的 instruction-output 数据对,为模型训练提供支持。


🧑‍💻 2.1.2 代码结构化处理

  • 🗂 代码解析
    使用 ASTAbstract Syntax Tree抽象语法树 解析官方代码库,使代码更具结构化,提高数据质量。

  • 📌 任务拆解

    • ✍️ FIMFill-in-the-Middle任务50%

      • 参考 DeepSeek-Code 的相关研究,格式如下:
        <|fim_start|>代码前段<|fim_hole|>代码后段<|fim_end|>缺失代码<|eos_token|>
        
      • 基于该思想,我们设计出更适合微调任务的方法,示例:
        {
          "instruction": "请根据上下文补充代码中缺失的部分:",
          "input": "前文代码<缺失代码>后文代码",
          "output": "填充代码"
        }
        
    • 🔗 代码续写任务50%

      • 另一半代码用于 代码补全 任务,将结构化代码拆分,输入 前半部分,预测 后半部分
      • 训练数据同时提供 代码续写 指引,帮助模型更好完成续写任务

2.2 模型微调策略 🚀

本项目采用 全参数 SFTSupervised Fine-Tuning, 监督微调) 使用训练框架ms-swfitbase模型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 公开,欢迎查看详细训练曲线与指标分析。


3. 实验结果 🚀

3.1 效果展示 🔮

在本节中,我们展示了 Scrapy 爬虫的代码示例,其中包含 parseparse_page2errback_page2 方法。该示例演示了构造 scrapy.Request ,并使用我们的模型进行自动补全。

📌 示例:

代码补全示例

我们使用 ollama 结合 Twinnyvscode进行代码补全时的界面效果。

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. 相关链接