環境:
LLaMA-Factory
問題描述:
alpaca 或 sharegpt 格式的數據集?
解決方案:
“Alpaca”和“ShareGPT”格式的數據集,是近年來在開源大語言模型微調和對話數據構建領域比較流行的兩種格式。它們主要用于訓練和微調以生成對話或指令驅動的模型。下面我詳細介紹兩者的特點和示例格式。
1. Alpaca 格式
Alpaca是斯坦福大學發布的一個基于指令微調(instruction tuning)的數據集格式,主要用于訓練模型更好地理解和執行各種自然語言指令。它的特點是簡潔,以“instruction(指令)”、“input(輸入)”、“output(輸出)”為結構,方便模型理解上下文。“Alpaca” 的讀音是 /?l?p?k?/ 。中文可以近似讀作:“艾-帕-卡”。
結構說明
- instruction:給模型的指令或任務描述,告訴模型需要完成什么。
- input:可選,作為指令的額外輸入信息,如果沒有可以為空字符串。
- output:模型需要生成的回答或完成的任務結果。
JSON 格式示例
{"instruction": "翻譯下列英文句子為中文。","input": "The quick brown fox jumps over the lazy dog.","output": "敏捷的棕色狐貍跳過了懶狗。"
}
典型示例(包含多個樣本)
[{"instruction": "請總結下面的文章內容。","input": "人工智能正在改變世界各地的行業。","output": "這篇文章講述了人工智能對各行業的影響。"},{"instruction": "寫一首關于春天的詩。","input": "","output": "春風輕拂柳絲綠,花開滿園鳥兒啼。"}
]
2. ShareGPT 格式
ShareGPT是基于OpenAI ChatGPT對話公開分享的平臺衍生的數據格式,主要表現為多輪對話的序列結構,適合訓練聊天機器人或對話模型。
結構說明
- 以對話輪次的形式,通常包含用戶提問和AI回復。
- 每個樣本通常是一個完整的對話,或者包含多個問答對。
- 適合捕捉多輪上下文聯系。
JSON 格式示例
{"conversations": [{"from": "user","value": "你好,請幫我寫一首關于夜晚的詩。"},{"from": "assistant","value": "夜幕低垂星光閃,微風拂過樹影間。"}]
}
多條對話樣本示例
[{"conversations": [{"from": "user","value": "解釋一下量子計算的基本原理。"},{"from": "assistant","value": "量子計算利用量子比特的疊加和糾纏現象進行計算,能夠解決某些經典計算機難以處理的問題。"}]},{"conversations": [{"from": "user","value": "幫我寫一封求職信。"},{"from": "assistant","value": "尊敬的招聘經理,您好!我對貴公司的職位非常感興趣,..."}]}
]
總結對比
特點 | Alpaca 格式 | ShareGPT 格式 |
---|---|---|
主要用途 | 指令微調,單輪指令-輸入-輸出 | 多輪對話訓練 |
結構 | instruction + input + output | 多輪conversations ,包含user 和assistant |
適用場景 | 指令執行、任務完成、問答、文本生成 | 聊天機器人、多輪對話、上下文理解 |
格式復雜度 | 簡單、固定格式 | 稍復雜,支持多輪對話 |
LLaMA-Factory 等類似工具通常支持以下幾種常見且適合微調和訓練的數據格式:
1. JSON Lines(.jsonl)
- 格式特點:每行是一個獨立的JSON對象,適合大規模數據流式處理。
- 結構示例:類似Alpaca格式,但每條數據單獨一行,便于分批加載和處理。
{"instruction": "寫一篇關于環保的短文。", "input": "", "output": "環保是保護環境,..."}
{"instruction": "翻譯成英文:今天天氣很好。", "input": "", "output": "The weather is nice today."}
- 適用場景:大規模單輪指令微調、數據預處理流水線。
2. Plain Text 對話格式
- 格式特點:用特殊分隔符(如“###”或“——”)分割多輪對話,或者用固定順序標記用戶和助手的內容。
- 結構示例:
User: 你好,幫我寫一首詩。
Assistant: 春風拂面花開時,鳥語盈耳映山溪。
User: 謝謝,還能寫一首關于秋天的嗎?
Assistant: 秋風送爽葉飄零,金黃遍地暖陽明。
- 適用場景:對話模型的微調,簡易數據構建。
3. Hugging Face Datasets 格式
- 格式特點:基于
datasets
庫,數據存儲為Dataset
對象,支持多種格式(CSV、JSON、Parquet等)。 - 結構示例:字段類似 Alpaca 格式,利用庫函數加載和處理。
from datasets import load_datasetdataset = load_dataset("json", data_files="data.jsonl")
for example in dataset["train"]:print(example["instruction"], example["output"])
- 適用場景:便捷數據處理、訓練流水線集成。
4. Instruction Tuning 標準格式(Vicuna、GPT4All等)
- 格式特點:多以 JSON 格式呈現,包含
instruction
、input
、output
,有時多輪對話兼容。 - 結構示例:
{"instruction": "幫我寫一封情書。","input": "","output": "親愛的,我一直喜歡你……"
}
- 適用場景:通用指令微調。
5. Multi-turn Conversation JSON 數組格式
- 格式特點:專門設計多輪會話,每條對話包含多輪
user
和assistant
,類似ShareGPT但格式更靈活。 - 示例:
[{"dialog": [{"role": "user", "content": "介紹一下人工智能。"},{"role": "assistant", "content": "人工智能是指…"},{"role": "user", "content": "有哪些應用?"},{"role": "assistant", "content": "主要包括…"}]}
]
- 適用場景:多輪對話模型訓練。
6. CSV/TSV 格式
- 格式特點:用逗號或制表符分隔字段,字段如 instruction、input、output。
- 示例:
instruction,input,output
"寫一首詩","春天","春風拂面花開時"
"翻譯句子","今天天氣好","The weather is nice today"
- 適用場景:簡單數據管理,適合小規模數據集。
總結
格式類型 | 適用場景 | 優點 | 備注 |
---|---|---|---|
JSON Lines (.jsonl) | 大規模單輪指令微調 | 流式處理,易擴展 | 兼容多數訓練框架 |
Plain Text 對話 | 多輪對話微調 | 簡單直觀 | 需自行設計分隔規則 |
Hugging Face Dataset | 訓練流水線、復用性強 | 方便加載、預處理 | 依賴datasets庫 |
Instruction Tuning | 指令微調 | 標準化,兼容性好 | 多種開源數據集采用該格式 |
Multi-turn JSON | 多輪對話 | 保持上下文完整 | 適合復雜對話建模 |
CSV/TSV | 簡單數據存儲 | 兼容性好,易查看 | 不適合復雜嵌套數據 |
額外提示
- LLaMA-Factory 具體支持哪些格式,建議查看其官方文檔或源碼中的數據加載相關部分。
- 你可以根據任務需求選擇合適格式,或者自行編寫數據轉換腳本實現格式轉換。
- 數據集格式設計時,應確保字段名稱統一、格式規范,方便微調訓練流程自動化。