擊敗ChatGPT?OpenChat霸榜斯坦福AlpacaEval開源榜首,性能高達(dá)105.7%
一夜之間,全新開源模型「OpenLLM」擊敗ChatGPT的消息,在網(wǎng)上引起軒然大波。
根據(jù)官方的介紹,OpenLLM:
- 在斯坦福AlpacaEval上,以80.9%的勝率位列開源模型第一
- 在Vicuna GPT-4評(píng)測(cè)中,性能則達(dá)到了ChatGPT的105.7%
圖片
最重要的是,如此卓越的性能,只需要6K的GPT-4對(duì)話數(shù)據(jù)進(jìn)行微調(diào)訓(xùn)練。
圖片
項(xiàng)目地址:https://github.com/imoneoi/openchat
不過Chatbot Arena的「榜單主」提醒稱,由于舊的Vicu?a eval基準(zhǔn)存在一些bias,因此提倡大家遷移到新提出的MT-bench上——從而更好地測(cè)評(píng)LLM更多方面的能力。
圖片
OpenLLM:只需6K GPT-4對(duì)話微調(diào)
OpenLLM是一個(gè)在多樣化且高質(zhì)量的多輪對(duì)話數(shù)據(jù)集上進(jìn)行微調(diào)的開源語言模型系列。
具體來講,研究人員從約90K的ShareGPT對(duì)話中,過濾出來約6K的GPT-4對(duì)話。
經(jīng)過6k數(shù)據(jù)微調(diào)后,令人驚訝的是,OpenLLM已經(jīng)被證明可以在有限的數(shù)據(jù)下實(shí)現(xiàn)高性能。
OpenLLM有兩個(gè)通用模型,它們是OpenChat和OpenChat-8192。
圖片
OpenChat:基于LLaMA-13B微調(diào),上下文長(zhǎng)度為2048
- 在Vicuna GPT-4評(píng)估中達(dá)到ChatGPT分?jǐn)?shù)的105.7%
- 在AlpacaEval上取得了驚人的80.9%的勝率
OpenChat-8192:基于LLaMA-13B微調(diào),上下文長(zhǎng)度為8192
- 在Vicuna GPT-4評(píng)估中達(dá)到ChatGPT分?jǐn)?shù)的106.6%
- 在AlpacaEval上取得的79.5%勝率
圖片
此外,OpenLLM還有代碼模型,其性能如下:
OpenCoderPlus:基于StarCoderPlus,原始上下文長(zhǎng)度為8192
- 在Vicuna GPT-4評(píng)估中達(dá)到ChatGPT分?jǐn)?shù)的102.5%
- 在AlpacaEval上獲得78.7%的勝率
模型評(píng)估
研究人員使用Vicuna GPT-4和AlpacaEval基準(zhǔn)評(píng)估了最新模型,結(jié)果如下圖所示:
圖片
Vicuna GPT-4評(píng)估(v.s. gpt-3.5-turbo)
圖片
Vicuna GPT-3.5-Turbo評(píng)估(v.s. gpt-3.5-turbo)
另外,值得注意的是,研究者采用的評(píng)估模式與Vicuna的略有不同,還使用了證據(jù)校準(zhǔn)(EC)+平衡位置校準(zhǔn)(BPC)來減少潛在的偏差。
圖片
安裝和權(quán)重
要使用OpenLLM,需要安裝CUDA和PyTorch。用戶可以克隆這個(gè)資源庫,并通過pip安裝這些依賴:
git clone git@github.com:imoneoi/OChat.git
pip install -r requirements.txt
目前,研究人員已經(jīng)提供了所有模型的完整權(quán)重作為huggingface存儲(chǔ)庫。
用戶可以使用以下命令在本地啟動(dòng)一個(gè)API服務(wù)器,地址為http://localhost:18888。
圖片
其中,服務(wù)器與openai包,以及ChatCompletions協(xié)議兼容(請(qǐng)注意,某些功能可能不完全支持)。
用戶可以通過設(shè)置以下方式指定openai包的服務(wù)器:
openai.api_base = "http://localhost:18888/v1"
當(dāng)前支持的ChatCompletions參數(shù)有:
圖片
建議:使用至少40GB(1x A100)顯存的GPU來運(yùn)行服務(wù)器。
數(shù)據(jù)集
轉(zhuǎn)換后的數(shù)據(jù)集可在openchat_sharegpt4_dataset上獲取。
項(xiàng)目中所使用的數(shù)據(jù)集,是對(duì)ShareGPT清洗和篩選后的版本。
其中,原始的ShareGPT數(shù)據(jù)集包含大約90,000個(gè)對(duì)話,而僅有6,000個(gè)經(jīng)過清理的GPT-4對(duì)話被保留用于微調(diào)。
清洗后的GPT-4對(duì)話與對(duì)話模板和回合結(jié)束時(shí)的token相結(jié)合,然后根據(jù)模型的上下文限制進(jìn)行截?cái)啵ǔ鱿拗频膬?nèi)容將被丟棄)。
要運(yùn)行數(shù)據(jù)處理流程,請(qǐng)執(zhí)行以下命令:
./ochat/data/run_data_pipeline.sh INPUT_FOLDER OUTPUT_FOLDER
輸入文件夾應(yīng)包含一個(gè)ShareGPT文件夾,其中包含每個(gè)ShareGPT對(duì)話頁面的.html文件。
數(shù)據(jù)處理流程包括三個(gè)步驟:
- 清洗:對(duì)HTML進(jìn)行清理并轉(zhuǎn)換為Markdown格式,刪除格式錯(cuò)誤的對(duì)話,刪除包含被屏蔽詞匯的對(duì)話,并進(jìn)行基于哈希的精確去重處理
- 篩選:僅保留token為Model: GPT-4的對(duì)話
- 轉(zhuǎn)換:為了模型的微調(diào),針對(duì)所有的對(duì)話進(jìn)行轉(zhuǎn)換和分詞處理
最終轉(zhuǎn)換后的數(shù)據(jù)集遵循以下格式:
MODEL_TYPE.train.json / .eval.json
[
[token_id_list, supervise_mask_list],
[token_id_list, supervise_mask_list],
...
]
MODEL_TYPE.train.text.json / .eval.text.json從token_id_list解碼的純文本
除此之外,研究人員還提供了一個(gè)用于可視化對(duì)話嵌入的工具。
只需用瀏覽器打開ochat/visualization/ui/visualizer.html,并將MODEL_TYPE.visualizer.json拖放到網(wǎng)頁中。點(diǎn)擊3D圖中的點(diǎn),就可以顯示相應(yīng)的對(duì)話。
其中,嵌入是使用openai_embeddings.py創(chuàng)建的,然后使用dim_reduction.ipynb進(jìn)行UMAP降維和K-Means著色。
圖片
模型修改
研究人員為每個(gè)基礎(chǔ)模型添加了一個(gè)EOT(對(duì)話結(jié)束)token。
對(duì)于LLaMA模型,EOT的嵌入初始化為所有現(xiàn)有token嵌入的平均值。對(duì)于StarCoder模型,EOT的嵌入以0.02標(biāo)準(zhǔn)差進(jìn)行隨機(jī)初始化。
對(duì)于具有8192上下文的LLaMA-based模型,max_position_embeddings被設(shè)置為8192,并且進(jìn)行了RoPE(相對(duì)位置編碼)代碼的外推。
訓(xùn)練
訓(xùn)練模型時(shí)使用的超參數(shù)在所有模型中都是相同的:
圖片
使用8xA100 80GB進(jìn)行訓(xùn)練:
NUM_GPUS=8
deepspeed --num_gpus=$NUM_GPUS --module ochat.training_deepspeed.train \
--model_type MODEL_TYPE \
--model_path BASE_MODEL_PATH \
--save_path TARGET_FOLDER \
--length_grouping \
--epochs 5 \
--data_path DATASET_PATH \
--deepspeed \
--deepspeed_config ochat/training_deepspeed/deepspeed_config.json
評(píng)估
要運(yùn)行Vicuna GPT-4評(píng)估,請(qǐng)執(zhí)行以下步驟:
1. 生成模型答案
python -m ochat.evaluation.get_model_answer --model_type MODEL_TYPE --models_path PATH_CONTAINING_ALL_MODELS_SAME_TYPE --data_path ./ochat/evaluation/vicuna --output_path ./eval_results
2. 生成基線(GPT-3.5)答案
OPENAI_API_KEY=sk-XXX python -m ochat.evaluation.get_openai_answer --data_path ./ochat/evaluation/vicuna --output_path ./eval_baselines --model_types gpt-3.5-turbo
3. 運(yùn)行GPT-4評(píng)估
OPENAI_API_KEY=sk-XXX python -m ochat.evaluation.openai_eval --data_path ./ochat/evaluation/vicuna --baseline_path ./eval_baselines/vicuna_gpt-3.5-turbo.jsonl --input_path ./eval_results
4. 可視化和細(xì)節(jié)
要獲得可視化和繪制評(píng)估結(jié)果,請(qǐng)使用瀏覽器打開ochat/visualization/eval_result_ui/eval_result_visualizer.html,并選擇./eval_results/eval_result_YYYYMMDD文件夾中的所有文件以顯示結(jié)果。
局限性
基礎(chǔ)模型限制
盡管能夠?qū)崿F(xiàn)優(yōu)秀的性能,但OpenLLM仍然受到其基礎(chǔ)模型固有限制的限制。這些限制可能會(huì)影響模型在以下領(lǐng)域的性能:
- 復(fù)雜推理
- 數(shù)學(xué)和算術(shù)任務(wù)
- 編程和編碼挑戰(zhàn)
不存在信息的幻覺
OpenLLM有時(shí)可能會(huì)產(chǎn)生不存在或不準(zhǔn)確的信息,也稱為「幻覺」。用戶應(yīng)該意識(shí)到這種可能性,并驗(yàn)證從模型中獲得的任何關(guān)鍵信息。
參考資料:
https://github.com/imoneoi/openchat
https://tatsu-lab.github.io/alpaca_eval/