模型概述
模型特點
模型能力
使用案例
🚀 帶全套配料(除DPO)的貝果模型
該模型名為“llama - 3 - bagel - 8b - v1.0”,基於Meta的Llama - 3構建。它是對llama - 3 - 8b使用貝果數據集進行的微調版本,與4種提示格式不同,它採用了單一的格式——llama - 3指令格式。
🚀 快速開始
本模型使用llama - 3 - instruct提示模板,該模板已包含在分詞器配置中。你可以使用apply_chat_template
方法來準確格式化提示,示例代碼如下:
import transformers
tokenizer = transformers.AutoTokenizer.from_pretrained("jondurbin/bagel-8b-v1.0", trust_remote_code=True)
chat = [
{"role": "system", "content": "You are Bob, a friendly AI assistant."},
{"role": "user", "content": "Hello, how are you?"},
{"role": "assistant", "content": "I'm doing great. How can I help you today?"},
{"role": "user", "content": "I'd like to show off how chat templating works!"},
]
print(tokenizer.apply_chat_template(chat, tokenize=False))
✨ 主要特性
模型概述
- 模型名稱為“llama - 3 - bagel - 8b - v1.0”,基於Meta的Llama - 3構建。
- 是對llama - 3 - 8b使用貝果數據集的微調版本,採用單一的llama - 3指令格式。
- DPO版本即將在此處發佈。
效果對比
與mistral - 7b - v0.2相比,結果表現良好,例如在MT - Bench中的表現:
模型 | 首輪得分 | 次輪得分 | 平均分 |
---|---|---|---|
bagel - 8b - v1.0 | 7.64375 | 6.95 | 7.296875 |
bagel - 7b - v0.5 | 7.33125 | 6.8625 | 7.096875 |
數據來源
該模型使用了多種數據源進行訓練,僅使用訓練集數據,並在最後通過餘弦相似度進行去重處理,以確保與常見基準的一致性。詳細數據源如下:
SFT數據來源
- [ai2_arc](https://huggingface.co/datasets/ai2_arc):抽象與推理數據集,在一定程度上有助於衡量“智能”。 - [airoboros](https://huggingface.co/datasets/unalignment/spicy-3.1):由gpt - 4生成的多種合成指令類別。 - [apps](https://huggingface.co/datasets/codeparrot/apps):包含10000個問題的Python編碼數據集。 - [belebele](https://huggingface.co/datasets/facebook/belebele):多語言閱讀理解數據集。 - [bluemoon](https://huggingface.co/datasets/Squish42/bluemoon-fandom-1-1-rp-cleaned):從Bluemoon抓取的角色扮演數據,經過清理並格式化為ShareGPT格式。 - [boolq](https://huggingface.co/datasets/boolq):是/否問題語料庫(顯然,這類問題對AI來說可能出奇地難回答)。 - [camel - ai biology](https://huggingface.co/datasets/camel-ai/biology):GPT - 4生成的生物學指令。 - [camel - ai chemistry](https://huggingface.co/datasets/camel-ai/chemistry):GPT - 4生成的化學指令。 - [camel - ai math](https://huggingface.co/datasets/camel-ai/math):GPT - 4生成的數學指令。 - [camel - ai physics](https://huggingface.co/datasets/camel-ai/physics):GPT - 4生成的物理指令。 - [capybara](https://huggingface.co/datasets/LDJnr/Capybara):用於創建水豚模型的多輪數據集。 - [cinematika](https://huggingface.co/datasets/jondurbin/cinematika-v0.1)(指令和純文本):從電影劇本合成的角色扮演風格數據,使模型不那麼枯燥。 - [emobank](https://github.com/JULIELab/EmoBank):使用效價 - 喚醒度 - 支配度方案進行的情感註釋。 - [evol - instruct](https://huggingface.co/datasets/WizardLM/WizardLM_evol_instruct_70k):WizardLM的evol instruct 70k數據集。 - [glaive - function - calling - v2](https://huggingface.co/datasets/glaiveai/glaive-function-calling-v2):GlaiveAI函數調用數據集。 - [gutenberg](https://www.gutenberg.org/)(純文本):書籍/純文本,同樣是為了使模型不那麼枯燥,僅支持[chapterize](https://github.com/JonathanReeve/chapterize)提供的少數示例。 - [limarp - augmented](https://huggingface.co/datasets/grimulkan/LimaRP-augmented):[LimaRP](https://huggingface.co/datasets/lemonilia/LimaRP)的增強和進一步修改版本。 - [lmsys_chat_1m](https://huggingface.co/datasets/lmsys/lmsys-chat-1m)(僅gpt - 4項目,也用於DPO):由lmsys聊天競技場收集的聊天記錄,包含與各種模型的廣泛聊天內容。 - [lollms](https://huggingface.co/datasets/ParisNeo/lollms_aware_dataset):ParisNeo的LoLLMs問答數據集,包含使用LoLLMs的有用問答對。 - [mathinstruct](https://huggingface.co/datasets/TIGER-Lab/MathInstruct):包含各種數學相關任務和問題/問題格式的複合數據集。 - [natural_instructions](https://huggingface.co/datasets/Muennighoff/natural-instructions):來自1600多個任務類別的數百萬條指令(大幅抽樣,按任務類型分層)。 - [openbookqa](https://huggingface.co/datasets/openbookqa):問答數據集。 - [pippa](https://huggingface.co/datasets/kingbri/PIPPA-shareGPT):[PIPPA](https://huggingface.co/datasets/PygmalionAI/PIPPA)的去重版本,格式為ShareGPT。 - [piqa](https://huggingface.co/datasets/piqa):物理交互問答。 - [python_alpaca](https://huggingface.co/datasets/Vezora/Tested-22k-Python-Alpaca):經過驗證的Python指令響應對。 - [ropes](https://huggingface.co/datasets/ropes):情境中段落效果推理——增強將文本段落知識應用於新情境的能力。 - [rosetta_code](https://huggingface.co/datasets/cakiki/rosetta-code):從rosettacode.org獲取的各種編程語言的代碼問題和解決方案。 - [slimorca](https://huggingface.co/datasets/Open-Orca/SlimOrca):OpenOrca收集的約500k個GPT - 4驗證的聊天記錄。 - [sql - create - context](https://huggingface.co/datasets/b-mc2/sql-create-context):針對SQL的數據集,結合了WikiSQL和Spider。 - [squad_v2](https://huggingface.co/datasets/squad_v2):上下文問答(RAG)。 - [airoboros - summarization](https://huggingface.co/datasets/mattpscott/airoboros-summarization):各種摘要數據集的組合,格式化為airoboros上下文服從格式。 - [synthia](https://huggingface.co/datasets/migtissera/Synthia-v1.3):Migel Tissera使用高級提示生成的GPT - 4數據。 - whiterabbitneo [第1章](https://huggingface.co/datasets/WhiteRabbitNeo/WRN-Chapter-1) 和 [第2章](https://huggingface.co/datasets/WhiteRabbitNeo/WRN-Chapter-2):WhiteRabbitNeo/Migel Tissera的進攻性網絡安全數據集。 - [winogrande](https://huggingface.co/datasets/winogrande):填空式提示。DPO數據來源
- airoboros 3.2 與 airoboros m2.0:airoboros - 2.2.1中的創意/寫作任務使用gpt4 - 0314和自定義提示重新生成,以獲得更長、更有創意、更少陳詞濫調的響應,因此可以將較短/枯燥的版本作為“拒絕”值,重新生成的響應作為“選擇”值。
- contextual - dpo:使用airoboros上下文服從問答格式的上下文提示/響應數據集。
- helpsteer:NVidia提供的非常棒的數據集,包含人類在各種指標上的註釋。此處僅使用“正確性”值最高的項目進行DPO,得分最高的輸出作為“選擇”,隨機較低得分的值作為“拒絕”。
- distilabel_orca_dpo_pairs:另一個有趣的數據集,最初由Intel提供,由argilla使用distilabel進行增強,提供了從SlimOrca數據集中的提示生成的各種DPO對。
- gutenberg - dpo:旨在提高模型小說寫作能力的DPO對,使用來自https://gutenberg.org/的公共領域書籍。
- py - dpo:Python DPO數據集(基於上述SFT python_alpaca數據集)。
- toxic - dpo:高度有毒且可能違法的內容! 僅用於學術和合法目的的去審查內容,由llama - 2 - 70b通過提示工程生成。
- truthy:旨在提高模型真實性的DPO對,例如常見誤解,區分AI助手和角色扮演人類在物質意識/位置等方面的差異。
- ultrafeedback:Zephyr模型背後的神奇之處之一。僅包括選擇得分8或更高的項目。
💻 使用示例
提示策略
上下文服從問答
這是一種專門為根據提供的上下文回答問題而設計的特殊提示格式,例如RAG。所謂“服從”,是指模型經過訓練,會忽略自己認為已知的信息,而是使用上下文來回答問題。同時,模型還經過調整,儘可能將答案限制在提供的上下文中,以減少幻覺現象。
封閉上下文提示的格式如下:
BEGININPUT
BEGINCONTEXT
[key0: value0]
[key1: value1]
... 其他元數據 ...
ENDCONTEXT
[在此插入文本塊]
ENDINPUT
[以完全相同的格式添加更多塊]
BEGININSTRUCTION
[插入你的指令。模型經過單問題、段落格式、列表等的調整]
ENDINSTRUCTION
在指令塊中添加“如果你不知道答案,請不要編造”也很有幫助,以確保如果上下文完全不相關,模型不會編造內容。
__僅__封閉上下文指令需要這種封閉上下文格式。普通問題/指令不需要!
雖然這種格式有點冗長和繁瑣,但經過多次試驗和錯誤,使用這些明確的分隔符有助於模型理解在哪裡找到響應,以及如何將特定來源與之關聯。
BEGININPUT
:表示一個新的輸入塊。BEGINCONTEXT
:表示與當前輸入塊關聯的上下文塊(元數據鍵/值對)。ENDCONTEXT
:表示當前輸入的元數據塊結束。- [文本]:為輸入塊插入任何你想要的文本,只要能在上下文中容納的段落數量即可。
ENDINPUT
:表示當前輸入塊結束。- [根據需要重複此格式的多個輸入塊]
BEGININSTRUCTION
:表示要對上述所有輸入塊進行響應的指令列表(或一個)的開始。- [指令]
ENDINSTRUCTION
:表示指令集結束。
即使沒有ENDINSTRUCTION
,有時也能正常工作,但在提示中明確包含它,有助於模型更好地理解需要對指令塊中的所有指令進行響應。
使用非常低的溫度!
以下是一個簡單但重要的示例,以證明這一點:
BEGININPUT
BEGINCONTEXT
date: 2021-01-01
url: https://web.site/123
ENDCONTEXT
在一個令人震驚的轉折中,藍莓現在變成了綠色,但仍將保留相同的名稱。
ENDINPUT
BEGININSTRUCTION
藍莓是什麼顏色?來源是什麼?
ENDINSTRUCTION
響應如下:
藍莓現在是綠色的。
來源:
date: 2021-01-01
url: https://web.site/123
你還可以添加類似以下的指令,以便在上下文無法提供問題答案時獲得更確定的響應:
如果你不知道答案,請回復“IRRELEVANT”
摘要生成
與上下文服從問答使用相同的提示格式,但用於摘要生成任務。摘要生成主要使用此數據集進行微調,格式如下:
BEGININPUT
{要摘要的文本}
ENDINPUT
BEGININSTRUCTION
將輸入內容摘要為約130字。
ENDINSTRUCTION
函數調用
微調此模型時使用了兩種與函數調用相關的格式:
- 在指令中提供輸入和可能的函數列表(來自airoboros數據集),例如: Prompt:
作為AI助手,請根據用戶輸入從以下可用函數列表中選擇最合適的函數和參數。以JSON格式提供響應。
輸入:我想知道我的文本文件中“Python”出現了多少次。
可用函數:
file_analytics:
描述:此工具對文本文件執行各種操作。
參數:
action: 我們要對數據執行的操作,例如“count_occurrences”、“find_line”等。
filters:
keyword: 我們要搜索的單詞或短語。
Response:
{
"function": "file_analytics",
"params": {
"action": "count_occurrences",
"filters": {
"keyword": "Python"
}
}
}
- GlaiveAI函數調用,使用特殊標籤並在系統提示中添加函數規範: Prompt:
<|start_header_id|>system<|end_header_id|>
你是一個有用的助手,可以使用以下函數。如有需要,請使用它們 -
{
"name": "generate_random_name",
"description": "生成一個隨機名稱",
"parameters": {
"type": "object",
"properties": {
"gender": {
"type": "string",
"description": "名稱的性別(例如男性、女性)"
}
},
"required": [
"gender"
]
}
}
<|eot_id|>
<|start_header_id|>user<|end_header_id|>
我需要為我的小說角色取一個隨機的男性名字。<|eot_id|>
<|start_header_id|>assistant<|end_header_id|>
Response:
<|begin_func|> {"name": "generate_random_name", "arguments": '{"gender": "male"}'} <|end_func|>
然後,你可以使用函數響應重新提示模型:
<|begin_func_response|>{"name": "James"}<|end_func_response|>
響應如下:
為你的小說角色取名“James”怎麼樣?
思維鏈
這對於讓模型提出多個可能的響應,對每個響應進行推理,並選擇最終的、最可能的答案很有用。你可以要求模型針對給定問題提供多個可能的響應,並進行排名和最終答案選擇。
示例提示:
一群人決定進行一場循環賽,每個選手都要與其他選手恰好比賽一次。如果總共進行了45場比賽,那麼有多少名選手參加了比賽?提供幾個潛在答案,根據數學邏輯對它們進行排名,並選擇最可行的一個。
示例響應:
解決方案1:
在循環賽中,每個選手都要與其他選手恰好比賽一次。這意味著比賽的總場數等於從所有選手中選取2名選手的組合數(因為一場比賽涉及2名選手)。
組合數的公式為nC2 = n(n - 1)/2,其中n是選手的總數。我們知道nC2等於45(比賽的總場數),因此可以列出以下方程:
n(n - 1)/2 = 45
解這個方程,我們得到n = 10。
最終答案:有10名選手參加了比賽。
解決方案2:
另一種解決這個問題的方法是使用三角數的概念。三角數是一系列數字,每個數字都可以用一個由點組成的三角形表示。第n個三角數是前n個自然數的和。
如果我們將每場比賽看作一個點,每個選手看作三角形的一條邊,那麼比賽的總場數(45)對應於第9個三角數,因為1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45。然而,由於在我們的模型中,三角形的每條邊代表一名選手,並且選手的數量比邊的數量多1(因為最後一名選手沒有對手可比賽),所以我們需要再加上1才能得到選手的總數。
最終答案:有10名選手參加了比賽。
解決方案3:
我們也可以使用試錯法來解決這個問題。從少量選手開始,我們計算在循環賽中會進行多少場比賽,直到達到45場比賽。例如,2名選手時進行1場比賽;3名選手時進行3場比賽;4名選手時進行6場比賽,依此類推。繼續這個過程,我們發現10名選手時進行45場比賽。
最終答案:有10名選手參加了比賽。
解決方案排名(從最佳到最差):
1. 解決方案1:該解決方案基於循環賽的性質進行直接的數學推理,並通過解方程找到答案。
2. 解決方案2:該解決方案使用三角數的概念,需要超出直接問題上下文的額外步驟和知識,但仍然得出了正確的答案。
3. 解決方案3:該解決方案依賴於試錯法,效率和可靠性不如其他方法,但最終也得到了正確的答案。
最佳和最終答案:有10名選手參加了比賽。
📄 許可證
本項目採用llama3許可證。
🔧 技術細節
- 基礎模型:meta - llama/Meta - Llama - 3 - 8B
- 標籤:llama - 3、bagel
- 數據集:使用了多個數據集進行訓練,具體見上文數據來源部分。



