🚀 中文長文本Llama模型
該模型基於特定訓練技術,在長文本處理上表現出色,可完成多文檔檢索等任務,但在複雜任務輸出質量和指令微調數據集多樣性上有待提升。
🚀 快速開始
本模型為中文長文本Llama模型,V2版本已推出,相比V1版本有明顯提升,回答質量更高。模型使用LongLora訓練技術,通過對llama2 - chat進行位置插值後,再使用少量長文本數據進行指令微調,展現出優秀的長文本對話能力。
✨ 主要特性
- 長文本處理能力強:可完成上萬字的多文檔檢索、論文總結等任務,短對話能力幾乎沒有下降。
- 支持streaming - LLM:與英文版LongAlpaca一樣,支持該技術,從而可以生成更長的文本。
- 訓練數據有特色:使用的中文數據集與LongAlpaca較為類似,但增加了多文檔問答的數據。
📦 安裝指南
文檔未提及安裝步驟,此部分暫略。
💻 使用示例
基礎用法
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
model_path="yuyijiong/LongAlpaca-7b-32k-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", load_in_8bit=True).eval()
question="中國的首都是什麼?"
input_text = "<s>Human: " + question + "\n</s><s>Assistant: "
input_ids = tokenizer(input_text, return_tensors='pt').input_ids.to(model.device)
with torch.no_grad():
with torch.autocast('cuda'):
output = model.generate(input_ids=input_ids,
max_new_tokens=max_new_tokens,
do_sample=True,
temperature=0.85,
top_k=None,
top_p=0.9,
use_cache=True,
**kwargs)
reply = tokenizer.decode(output[0], skip_special_tokens=False)
reply_return=reply.split('Assistant:')[-1].replace('</s>', '')
print('模型回答:', reply_return)
📚 詳細文檔
訓練方法
- LongAlpaca訓練:使用LongLora訓練技術,對llama2 - chat進行位置插值後,用少量長文本數據進行指令微調。
- 本模型訓練:由[Atom - 7b - chat](https://huggingface.co/FlagAlpha/Atom - 7B - Chat),通過線性位置插值,將文本長度從4k擴展到32k,然後經過lora微調得到。
- 存在問題:由於指令微調數據的任務類型不多,在面對複雜任務時,輸出結果質量不能保證;目前[中文指令微調數據集](https://huggingface.co/datasets/yuyijiong/Long - Instruction - Chinese)多樣性不夠,模型有過擬合問題,將在未來版本改善。
評估和推理
- 支持streaming - LLM:與英文版LongAlpaca一樣,支持該技術,可生成更長文本,[示例代碼](https://github.com/dvlab - research/LongLoRA/blob/main/run_streaming_llama_longalpaca.py)。
- 指令敏感度:模型對長文本尾部的指令更加敏感,儘量把問題放在參考文檔後面。
- 評測結果:在LongBench中文任務評測中,模型在問答、總結等自由回答任務上表現較好,在分類、多項選擇等固定選項任務上表現不好,可能是因為微調數據集不包含分類任務。具體得分如下:
| 數據集 | 任務類型 | 評測指標 | 得分 |
| ---- | ---- |---- |---- |
| dureader | 多文檔QA |rouge - L |0.18369 |
| multifield_qa | 單文檔QA |rouge - L |0.40816 |
| vcsum | 總結 |rouge - L |0.15166 |
| lsht | 文本分類 |Accuracy |0.19680 |
| passage_retrieval | 文本檢索 |Accuracy |0.06000 |
問答實例
多文檔QA
用戶輸入(34726字),問題為“秦銀科是哪個單位的領導人?”,模型輸出“綜上所述,秦銀科是湖北省潛江市熊口農場黨委委員,並曾任熊口農場主要領導職務。”
圖書、論文總結
用戶輸入7748字的圖書節選,要求概括內容,模型輸出“燕青、戴宗為了救宋江等人,代替宋江等人去了東京,在東京見到了高太尉,打算他許奏朝廷招安,以保眾人安全。但燕青也為偷偷帶入城送消息,高太尉懷疑他們有奸計。燕青遇見高師師的女兒李師師,遇上了好友李行首,說宋江等人招安的事,李師師愉悅不已。後來燕青又遇上了李行首的好友鄭大官,要燕青送給自己的舅舅,燕青知道對方動機,計讓李行首與鄭大官拿著禮物,去對管著梁山泊的人。最終,李師師在李行首的幫忙下,祝燕青與戴宗順利回到梁山泊。”
📄 許可證
本模型使用的許可證為cc - by - nc - 4.0。