LLaMA Factory 完全支自定义词库(包括自定义微调数据集、自定义领域词汇/词表)

你想确认 LLaMA Factory 是否支持自定义词库(包括自定义微调数据集、自定义领域词汇/词表),答案是完全支持,而且它对自定义词库的适配非常友好,不管是自定义微调用的数据集(最常用的"词库"),还是扩展模型的词汇表(新增专属token),都有简洁的实现方式。下面我会分场景详细说明具体操作方法,你可以直接照着做。

一、核心场景1:自定义微调数据集(最常用的"词库")

这是你大概率会用到的"自定义词库"场景------把自己的专属数据(比如领域指令、行业问答、私有知识库)做成数据集,用于LLaMA Factory的微调。

1. 支持的数据集格式

LLaMA Factory支持JSON/JSONL/CSV/TXT等多种格式,推荐用JSONL(每行一个样本),格式简单且兼容性最好,示例如下:

jsonl 复制代码
// 自定义数据集文件:my_custom_dataset.jsonl
{"instruction": "解释什么是大模型微调", "input": "", "output": "大模型微调是指在预训练大模型基础上,使用小批量专属数据继续训练,让模型适配特定领域/任务的过程。"}
{"instruction": "LLaMA Factory的核心优势", "input": "", "output": "低代码、多模型适配、支持全微调范式(SFT/DPO)、新手友好。"}
{"instruction": "如何降低微调显存占用", "input": "", "output": "使用QLoRA量化、Unsloth加速、梯度累积、混合精度训练等方法。"}
  • instruction:指令(必填)
  • input:输入上下文(可选,无则留空)
  • output:期望输出(必填)

2. 配置自定义数据集

LLaMA Factory通过dataset_info.json文件识别自定义数据集,步骤如下:

步骤1:创建数据集配置文件

在LLaMA Factory的data/dataset_info.json中添加你的数据集配置(也可新建自定义dataset_info.json):

json 复制代码
{
  "my_custom_dataset": {
    "file_name": "my_custom_dataset.jsonl",  // 你的数据集文件名
    "columns": {
      "prompt": "instruction",  // 对应JSONL中的instruction字段
      "query": "input",         // 对应input字段
      "response": "output"      // 对应output字段
    }
  }
}
步骤2:启动微调(指定自定义数据集)

直接在微调命令中指定--dataset my_custom_dataset即可,完整示例:

bash 复制代码
# 用自定义数据集微调Llama-3-8B(LoRA,单RTX4090)
llamafactory-cli train \
  --model_name_or_path unsloth/llama-3-8b-bnb-4bit \
  --stage sft \
  --do_train \
  --finetuning_type lora \
  --dataset my_custom_dataset \  # 指定你的自定义数据集
  --dataset_dir ./data \  # 数据集所在目录(放my_custom_dataset.jsonl的文件夹)
  --template llama3 \
  --per_device_train_batch_size 4 \
  --gradient_accumulation_steps 4 \
  --learning_rate 2e-4 \
  --num_train_epochs 3 \
  --output_dir ./llama3-8b-custom-lora \
  --fp16 True

二、核心场景2:自定义词汇表(新增专属token)

如果你的领域有大量模型词表中没有的专属词汇(比如生物医药的"SMILES"、金融的"北向资金"),可以扩展tokenizer的词表,LLaMA Factory也完全支持。

1. 步骤:扩展词表并微调

步骤1:准备自定义词汇文件

新建custom_vocab.txt,每行一个专属词汇:

txt 复制代码
// custom_vocab.txt
SMILES
北向资金
大模型微调
QLoRA
Unsloth
步骤2:扩展tokenizer并保存

运行以下代码扩展模型的tokenizer(以Llama-3为例):

python 复制代码
from transformers import AutoTokenizer

# 加载原始tokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B")

# 添加自定义词汇
custom_vocab = [line.strip() for line in open("custom_vocab.txt", "r", encoding="utf-8")]
tokenizer.add_tokens(custom_vocab)

# 保存扩展后的tokenizer
tokenizer.save_pretrained("./llama3-8b-custom-tokenizer")
步骤3:在LLaMA Factory中使用自定义tokenizer

启动微调时指定--tokenizer_name_or_path为扩展后的tokenizer路径:

bash 复制代码
llamafactory-cli train \
  --model_name_or_path unsloth/llama-3-8b-bnb-4bit \
  --tokenizer_name_or_path ./llama3-8b-custom-tokenizer \  # 自定义tokenizer路径
  --stage sft \
  --do_train \
  --finetuning_type lora \
  --dataset my_custom_dataset \
  --template llama3 \
  --per_device_train_batch_size 4 \
  --gradient_accumulation_steps 4 \
  --learning_rate 2e-4 \
  --num_train_epochs 3 \
  --output_dir ./llama3-8b-custom-vocab-lora \
  --fp16 True

三、关键补充:自定义词库的注意事项

  1. 数据集格式:优先用JSONL,字段名可通过dataset_info.json灵活映射,无需修改原始数据;
  2. 词汇扩展:扩展tokenizer后,模型的embedding层会自动适配新token,但建议微调时少量epochs(1-2轮)专门适配新词汇;
  3. 中文适配:LLaMA Factory对中文自定义词库完全友好,无需额外配置,只需确保数据集编码为UTF-8。

总结

  1. LLaMA Factory完全支持自定义词库,核心分两种场景:自定义微调数据集(适配专属数据)、自定义词汇表(扩展token);
  2. 自定义数据集只需准备JSONL文件+配置dataset_info.json,微调时指定数据集名称即可;
  3. 自定义词汇表需先扩展tokenizer,再在微调命令中指定新tokenizer路径,适配领域专属词汇。

如果你的"自定义词库"是其他场景(比如自定义停用词、自定义prompt模板),可以告诉我,我会补充对应的实现方法。

相关推荐
SEO_juper5 分钟前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
小易老师AI实战10 分钟前
RLHF深度详解(超通俗+原理+工程+对比):大模型对齐的核心基石
人工智能·大模型·sft·rlhf·ppo·人类反馈强化学习·llm 对齐
资深电气设计11 分钟前
高压直流母线系统测试是什么?宜迈思液冷直流负载方案技术说明
人工智能
数智工坊12 分钟前
视觉SLAM第12讲|地图构建:单目稠密重建、RGB-D点云与八叉树地图全解析
人工智能·深度学习·矩阵·机器人
回眸&啤酒鸭23 分钟前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
博图光电32 分钟前
Libra 27105相关技术参数
人工智能·数码相机
IT_陈寒1 小时前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端
yumgpkpm1 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
阡陌数智1 小时前
Llama 4 MoE 架构深度拆解:交替稀疏专家设计与生产环境推理落地实战
架构·llama
程序员cxuan1 小时前
腾讯又来一王炸,开源版 WorkBuddy 太夯了!
人工智能·后端·程序员