许可证:llama3
语言:
- 英语
标签:
- 金融
数据集:
- Open-Orca/OpenOrca
- GAIR/lima
- WizardLM/WizardLM_evol_instruct_V2_196k
指令预训练:语言模型即监督式多任务学习者(EMNLP 2024)
本仓库包含我们论文《指令预训练:语言模型即监督式多任务学习者》中基于Llama3-8B开发的金融领域模型。
我们通过提出指令预训练框架探索监督式多任务预训练,该框架可扩展地利用指令-响应对增强海量原始语料库以预训练语言模型。指令-响应对由基于开源模型构建的高效指令合成器生成。指令预训练在通用从头预训练和领域自适应持续预训练中均优于传统预训练**。在从头预训练中,指令预训练不仅提升了预训练基础模型,还能从后续指令微调中获益更多。在持续预训练中,指令预训练使Llama3-8B达到甚至超越Llama3-70B的性能。
**************************** 更新日志 ****************************
- 2024/11/30:发布指令合成器的多模态版本:视觉指令合成器
- 2024/9/20:论文被EMNLP 2024主会议收录🎉
- 2024/9/11:更新Llama3持续预训练FAQ
- 2024/8/29:更新评估指南,支持评估任意🤗Huggingface模型在领域特定任务上的表现
- 2024/7/31:在指令合成器的
高级用法
章节更新预训练建议
- 2024/7/15:将预训练token规模从100B扩展至250B,合成指令-响应对达5亿组。预训练全流程下游任务性能趋势:
* 2024/6/21:发布[论文](https://huggingface.co/papers/2406.14491)、[代码](https://github.com/microsoft/LMOps)及[资源](https://huggingface.co/instruction-pretrain)
资源
🤗 我们共享了数据和模型的使用示例,欢迎在此页面发起讨论!🤗
领域自适应持续预训练
遵循AdaptLLM,我们使用基于上下文的指令合成器生成的指令-响应对增强领域特定原始语料库。
1. 与finance-Llama3-8B模型对话
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("instruction-pretrain/finance-Llama3-8B")
tokenizer = AutoTokenizer.from_pretrained("instruction-pretrain/finance-Llama3-8B")
user_input = '''根据以下信息回答问题:
各类股票交易代码 注册交易所名称
普通股,面值每股0.01美元 MMM 纽约证券交易所
MMM 芝加哥证券交易所
2026年到期1.500%票据 MMM26 纽约证券交易所
2030年到期1.750%票据 MMM30 纽约证券交易所
2031年到期1.500%票据 MMM31 纽约证券交易所
截至2023年第二季度,3M公司名下有哪些债务证券在国家证券交易所注册交易?'''
inputs = tokenizer(user_input, return_tensors="pt", add_special_tokens=True).input_ids.to(model.device)
outputs = model.generate(input_ids=inputs, max_new_tokens=400)[0]
answer_start = int(inputs.shape[-1])
pred = tokenizer.decode(outputs[answer_start:], skip_special_tokens=True)
print(pred)
2. 评估任意Huggingface语言模型在领域任务上的表现(💡新增!)
可通过以下脚本复现我们的结果,或评估其他Huggingface模型在领域任务上的表现。注意:该脚本不适用于需要特定提示模板的模型(如Llama2-chat、Llama3-Instruct)。
1). 安装依赖
git clone https://github.com/microsoft/LMOps
cd LMOps/adaptllm
pip install -r requirements.txt
2). 评估模型
DOMAIN='finance'
MODEL='instruction-pretrain/finance-Llama3-8B'
MODEL_PARALLEL=False
N_GPU=1
add_bos_token=True
bash scripts/inference.sh ${DOMAIN} ${MODEL} ${add_bos_token} ${MODEL_PARALLEL} ${N_GPU}
Llama3持续预训练FAQ
Q1: 预训练是否使用官方Llama3指令提示?
否,官方Llama3指令提示专为指令微调模型设计,而我们的持续预训练基于预训练基础模型,仅需BOS(<|begin_of_text|>
)和EOS(<|end_of_text|>
)标记。
Q2: 对于OpenOrca的通用指令,是否用'\n'连接问题与输出?
否,如预训练建议所述,我们对OpenOrca的通用指令数据仅用空格连接问题与响应。因OpenOrca数据已包含多样化自然语言模板(如含\n
的模板),空格即可满足格式要求。
注意:使用我们模板化的指令增强文本时,无需额外添加连接符。
Q3: 如何处理OpenOrca中的系统提示?
我们直接忽略系统提示。
完整文本在tokenization前的格式如下:
general_instruction_response_text = "<|begin_of_text|>{问题} {响应}<|end_of_text|>"
instruction_augmented_text = "<|begin_of_text|>{指令增强文本}<|end_of_text|>"
tokenization时无需添加BOS和EOS标记ID,代码如下:
text_ids = tokenizer(text, add_special_tokens=False, **kwargs).input_ids
引用
若我们的工作对您有帮助,请引用:
指令预训练(EMNLP 2024)
@article{cheng2024instruction,
title={指令预训练:语言模型即监督式多任务学习者},
author={程岱烜 and 顾宇贤 and 黄少晗 and 毕钧宇 and 黄民烈 and 韦福如},
journal={arXiv预印本 arXiv:2406.14491},
year={2024}
}
领域自适应大语言模型(ICLR 2024)
@inproceedings{
cheng2024adapting,
title={通过阅读理解适配大语言模型},
author={程岱烜 and 黄少晗 and 韦福如},
booktitle={第十二届国际学习表征会议},
year={2024},
url={https://openreview.net/forum?id=y886UXPEZ0}
}