Awesome
TechGPT 2.0: Technology-Oriented Generative Pretrained Transformer 2.0
Demo: TechGPT-neukg <br> HuggingFace🤗: neukg/TechGPT-7B
<div align="center"> </div>引言
随着大模型时代的到来,大模型与知识图谱融合的工作日益成为当前研究的热点。为了对这项工作提供研究基础,东北大学知识图谱研究组于2023年6月发布了 TechGPT-1.0 大模型。
在 TechGPT-1.0 基础上,经过几个月的努力,东北大学知识图谱研究组发布功能更全、性能更好的 TechGPT-2.0 大模型。TechGPT-2.0 延续了 TechGPT-1.0 以“知识图谱构建”与“智能问答”为核心的构建目标,在继承 TechGPT-1.0 全部功能的基础上,对其多项功能进行了增强,并扩充了一些新功能。
更新!!!
- 2024/8/22 TechGPT-2.0更新TechGPT-2.0-Qwen1.5-7b 大模型,初步测试较Alpaca与Atom模型表现良好,且ALpaca与Atom模型参数已更新。
- 2024/8/22 TechGPT-2.0新加Alpaca与Atom模型的WebGUI界面,用户可通过调整Web界面中的参数测试模型问答能力。
内容导引
章节 | 描述 |
---|---|
💁🏻♂️模型简介 | 简要介绍本项目 TechGPT 2.0 模型的技术特点 |
📝模型亮点 | 介绍了 TechGPT 2.0 大模型的独特之处 |
⏬模型下载与体验 | TechGPT 2.0 大模型下载地址与Demo体验 |
💻环境部署 | 介绍了如何使用个人环境部署并体验大模型 |
💯系统效果 | 展示了模型在部分任务上的效果 |
模型简介
TechGPT-2.0 为 TechGPT-1.0 基础上的改进版本,其采用华为昇腾服务器(4机*8卡-32G 910A)、华为MindSpore框架、采用全量微调方式训练完成。此次共发布两个7B版本的 TechGPT-2.0 模型,分别为TechGPT2-Alpaca、TechGPT2-Atom。
TechGPT-2.0 较 TechGPT-1.0 新加了许多领域知识。除了 TechGPT-1.0 所具备的计算机科学、材料、机械、冶金、金融和航空航天等十余种垂直专业领域能力,TechGPT-2.0 还在医学、法律领域展现出优秀的能力,并扩充了地理地区、运输、组织、作品、生物、自然科学、天文对象、建筑等领域文本的处理能力。TechGPT-2.0 还对幻觉、不可回答、长文本处理等问题进行了能力增强。
同时,TechGPT-2.0 对部署的硬件要求更低,使用 NVIDIA 4090 单机单卡、或昇腾910A单机单卡就可完成 TechGPT-2.0 模型部署。
模型亮点
TechGPT-2.0 在继承了 TechGPT-1.0 的能力上进行了重要的改进,具有以下几项新增亮点功能:
- 首先,TechGPT-2.0 在医学领域文本的处理能力取得了显著提升。TechGPT-2.0 在处理医学文本时能够更全面地理解上下文信息,能够对疾病、药物、专业术语等实体的进行更准确识别,还能够理解医学文本中的复杂关系、疾病诊断、治疗方案等内容。这种全面的医学分析能力使得模型可以用于协助医生阅读医学文献、提供患者诊断建议等应用场景,从而提高医学领域的信息处理效率和准确性。
- 其次,TechGPT-2.0 能够理解和解释法律文本,包括法规、合同和案例法等。TechGPT-2.0 通过学习法律用语和结构,能够更准确地捕捉文本中的法律关系和条款,为用户提供更有深度和专业性的法律分析。这使得 TechGPT-2.0 模型在法律领域中的应用前景更为广泛,可以用于解决自动化合同审查、法规遵循检查等任务。
- 再次,TechGPT-2.0 增强了对嵌套实体。的抽取能力。即 TechGPT-2.0 可以更灵活地处理实体之间的复杂关系,深入挖掘文本中的层次结构,提高了对复杂文本的理解和生成能力。例如,在医学文献中,可能存在嵌套的实体关系,如疾病的亚型、药物的剂量信息等,TechGPT-2.0 能够更好地捕捉这些信息,并在生成回应时更准确地反映上下文的语境。
- 另外,TechGPT-2.0 在幻觉、不可回答问题、长文本处理、以及与人类价值观对齐方面进行了强化。TechGPT-2.0通过对话和理解上下文,能够更好地理解人类的感受和价值观,并在回应中考虑这些因素。此外,TechGPT-2.0 能够支持最大长度12K的文本输入,这使得模型能够更好地与人类用户进行交互,更好地满足用户的需求和期望,进一步提升了人机交互的质量和用户体验。
- 最后,TechGPT-2.0 使用华为昇腾910A服务器、华为Mindspore框架以及Mindformer套件进行开发,采用分布式训练方案,使用服务器数量为4机*8卡(32G),具有更低的部署硬件要求。目前 TechGPT-2.0 的部署在使用NVIDIA的显卡并使用float16的情况下显存仅需15G,INT8量化下显存占用8G,INT4量化下显存仅需5G;NVIDIA 4090单机单卡、或昇腾910A单机单卡就可以部署 TechGPT-2.0 模型。
总体而言,TechGPT-2.0 在继承了 TechGPT-1.0 的全部特性的同时,通过增加多领域、多任务的数据,展现出了嵌套实体的抽取、幻觉回答、回答不可回答问题和回答长文本问题的能力。这些改进使得模型更适用于广泛的应用场景,为用户提供了更准确、更深入的信息处理和生成能力。
模型下载与体验
下载地址
模型名称 | 训练方式 | 大小 | HuggingFace 下载 | wisemodel 下载 | ModelScope 下载 |
---|---|---|---|---|---|
TechGPT-1.0 | 全量微调 | 13 GB | [🤗HF] | [wisemodel社区] | [<img src="https://g.alicdn.com/sail-web/maas/1.10.1/static/modelscopeIcon.cd89353f.svg" height="12">] |
TechGPT-2.0-Alpaca 🆕 | 全量微调 | 13 GB | [🤗HF] | [wisemodel社区] | [<img src="https://g.alicdn.com/sail-web/maas/1.10.1/static/modelscopeIcon.cd89353f.svg" height="12">] |
TechGPT-2.0-Atom 🆕 | 全量微调 | 13 GB | [🤗HF] | [wisemodel社区] | [<img src="https://g.alicdn.com/sail-web/maas/1.10.1/static/modelscopeIcon.cd89353f.svg" height="12">] |
TechGPT-2.0-QLora 🆕 | Lora微调 | 3 GB | [🤗HF] | [wisemodel社区] | [<img src="https://g.alicdn.com/sail-web/maas/1.10.1/static/modelscopeIcon.cd89353f.svg" height="12">] |
TechGPT-2.0-Qwen1.5 🆕 | 全量微调 | 14 GB | [🤗HF] | [wisemodel社区] | [<img src="https://g.alicdn.com/sail-web/maas/1.10.1/static/modelscopeIcon.cd89353f.svg" height="12">] |
模型说明
TechGPT2 在不同规模且经过扩充后的TechKG大规模的中文学术语料支持下训练完成。
- TechGPT2-Alpaca 使用HFL发布的Chinese-Alpaca-2-7B模型,Chinese-Alpaca-2-7B模型是在Chinese-LLaMA-2-7B的基础上进一步通过指令精调获得。Chinese-LLaMA-2-7B为基座模型,是在LLaMA-2的基础上进行中文增量训练获得。
- TechGPT2-Atom 使用Llama中文社区联合AtomEcho(原子回声)共同发布的Atom-7B-chat,并在此基础上进行全量微调后获得。
- 此外,我们使用QLora线性插值法微调的长文本模型的Lora权重也已经发布在huggingface上,请自行下载合并。
我们TechGPT-2的两个7B版本的模型、以及使用QLora线性插值法微调的长文本模型都已经在Hugging Face和GitHub上开源,后续在这些模型基础上的改进,也将开源到相同账号,欢迎大家使用并提出宝贵的意见。
模型体验
我们目前对外提供 TechGPT-1.0 与 TechGPT2-Atom 版本的在线服务:http://techgpt.neukg.com/
作为一个学术组织,我们无法长期提供模型的在线服务功能,当前的体验系统存在着随时下线的可能。因此建议大家后续通过开源权重自行体验,共同创建更好的中文大模型开源环境。
环境部署
在华为昇腾 910 NPU 服务器上的环境要求
- 硬件:Ascend 910A/910B
- Python:3.9
- MindSpore:2.1.1
- CANN: 6.3.0 RC2
- MindFormers版本:dev
- 7b 推理可在单机单卡上完成部署
- 在mindformers环境下执行推理部署时,需要使用ckpt权重;如果没有ckpt权重,则在mindformers目录下需要运行如下转换脚本,将huggingface权重转为ckpt权重,才能使用NPU进行推理:
python mindformers/models/llama/convert_weight.py \
--torch_ckpt_dir TORCH_CKPT_DIR \
--mindspore_ckpt_path {path}/MS_CKPT_NAME
- 初次在mindformers环境下执行推理时,会在
mindspore_inference.py
的同级目录下生成checkpoint_download
文件夹,其中包含了推理所需的yaml
配置文件和tokenizer.model
词表等,需要将词表换成该项目huggingface上的对应词表,并将配置文件替换为mindspore_inference
目录下的yaml
文件。
在 GPU 服务器上的环境要求
请注意TechGPT2-Alpaca和TechGPT2-Atom模型在训练和推理阶段所使用的prompt格式是不同。 TechGPT2-Alpaca 使用的prompt格式为:
<s> A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: [INST] <<SYS>>\nYou are a helpful assistant. 你是一个乐于助人的助手。请你提供专业、有逻辑、内容真实、有价值的详细回复。\n<</SYS>>\n\n{instruction} [/INST] ASSISTANT:
TechGPT2-Atom 使用的prompt格式为:
<s>Human: {instruction} \n</s><s>Assistant:
请在使用TechGPT之前保证你已经安装好transfomrers
和torch
:
pip install transformers
pip install torch
- 注意,必须保证安装的
transformers
的版本中已经有LlamaForCausalLM
。<br> - Note that you must ensure that the installed version of
transformers
already hasLlamaForCausalLM
.
from transformers import LlamaTokenizer, AutoModelForCausalLM, AutoConfig, GenerationConfig
import torch
DEFAULT_SYSTEM_PROMPT = """You are a helpful assistant. 你是一个乐于助人的助手。请你提供专业、有逻辑、内容真实、有价值的详细回复。"""
TEMPLATE = (
"<s> A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. USER: [INST] <<SYS>>\n"
"{system_prompt}\n"
"<</SYS>>\n\n"
"{instruction} [/INST] ASSISTANT: "
)
def generate_prompt(instruction):
return TEMPLATE.format_map({'instruction': instruction, 'system_prompt': DEFAULT_SYSTEM_PROMPT})
ckpt_path = './LLM/TechGPT2-Alpaca-hf/'
load_type = torch.float16
device = torch.device(1)
tokenizer = LlamaTokenizer.from_pretrained(ckpt_path)
tokenizer.pad_token_id = 0
tokenizer.bos_token_id = 1
tokenizer.eos_token_id = 2
tokenizer.padding_side = "left"
model_config = AutoConfig.from_pretrained(ckpt_path)
model = AutoModelForCausalLM.from_pretrained(ckpt_path, torch_dtype=load_type, config=model_config)
model.to(device)
model.eval()
generation_config = GenerationConfig(
temperature=0.1,
top_p=0.75,
top_k=40,
num_beams=1,
bos_token_id=1,
eos_token_id=2,
pad_token_id=0,
max_new_tokens=128,
min_new_tokens=10,
do_sample=True,
)
example = '请把下列标题扩写成摘要, 不少于100字: 基于视觉语言多模态的实体关系联合抽取的研究。'
instruction = generate_prompt(instruction=example)
instruction = tokenizer(instruction, return_tensors="pt")
input_ids = instruction["input_ids"].to(device)
with torch.no_grad():
generation_output = model.generate(
input_ids=input_ids,
generation_config=generation_config,
return_dict_in_generate=True,
output_scores=True,
repetition_penalty=1.2,
)
output = generation_output.sequences[0]
output = tokenizer.decode(output, skip_special_tokens=True)
print(output)
from transformers import LlamaTokenizer, AutoModelForCausalLM, AutoConfig, GenerationConfig
import torch
TEMPLATE = (
"<s>Human: "
"{instruction} \n</s><s>Assistant: "
)
def generate_prompt(instruction):
return TEMPLATE.format_map({'instruction': instruction})
ckpt_path = './LLM/TechGPT2-Atom-hf/'
load_type = torch.float16
device = torch.device(1)
tokenizer = LlamaTokenizer.from_pretrained(ckpt_path)
tokenizer.pad_token_id = 2
tokenizer.bos_token_id = 1
tokenizer.eos_token_id = 2
tokenizer.padding_side = "left"
model_config = AutoConfig.from_pretrained(ckpt_path)
model = AutoModelForCausalLM.from_pretrained(ckpt_path, torch_dtype=load_type, config=model_config)
model.to(device)
model.eval()
generation_config = GenerationConfig(
temperature=0.1,
top_p=0.75,
top_k=40,
num_beams=1,
bos_token_id=1,
eos_token_id=2,
pad_token_id=2,
max_new_tokens=128,
min_new_tokens=20,
do_sample=True,
)
example = '抽取出下面文本的实体和实体类型:《女人树》,国产电视剧,由导演田迪执导,根据作家子页的原著改编,故事从1947年开始,跨越了解放战争和建国初期两大历史时期,展现了战斗在隐形战线上的人民英雄是如何不惧怕任何危险,不计较个人牺牲,甚至不顾人民内部的误解和生死裁决,都不暴露个人真实身份,至死不渝,与敌人周旋到底的英雄故事。'
instruction = generate_prompt(instruction=example)
instruction = tokenizer(instruction, return_tensors="pt")
input_ids = instruction["input_ids"].to(device)
with torch.no_grad():
generation_output = model.generate(
input_ids=input_ids,
generation_config=generation_config,
return_dict_in_generate=True,
output_scores=True,
repetition_penalty=1.2,
)
output = generation_output.sequences[0]
output = tokenizer.decode(output, skip_special_tokens=True)
print(output)
系统效果
TechGPT-2.0 在保留了 TechGPT-1.0 模型的通用能力、实体识别能力以及三元组抽取能力的基础上,能够完成更为复杂的嵌套实体识别,并在医学、法律领域展现出优秀的能力,此外对幻觉、不可回答问题以及长文本问题有着较好的解决能力。
下面展示了TechGPT-2.0 的几个新增能力的样例。
- 医学NER
- 嵌套NER
- 泛化NER(根据背景知识泛化的NER)
- 法律案件梳理
- 法律咨询
- 医学咨询
- 幻觉问题
- 三元组抽取
- 不可回答问题
- 通用能力
- 生成标题
- 生成摘要
- 其他
经过我们的微调,目前 TechGPT-2.0 对其不知道的问题会直接进行不可回答的回复,对与人类价值观相悖的问题会进行否定回答并给出合理建议。
另外,还需注意,上述结果并非设置为相同的输出长度。在默认输出长度设置下,模型输出的结果偏保守,即很多正确的结果在强制大模型输出更长结果的条件下可以得到,但在默认输出长度设置条件下,这些正确的结果并没有被模型输出;有时也可能因为强制模型输出的长度过长,导致模型过分填充一些无用字符。
总结
和 TechGPT-1.0 相比,TechGPT-2.0 在许多方面进行了改进,新模型具有更强的知识图谱构建能力、以及智能问答能力。尤其是在嵌套NER以及医学、法律领域能力的提升,并且模型对幻觉等边界问题以及长文本问题的回答也得到了改善。
目前,我们对TechGPT的研究也在持续进行中,如外挂知识库、大模型与知识图谱融合、长文本问题优化等方向。
主要贡献者
排名不分先后
<table> <tr> <td align='center'> <img src="https://avatars.githubusercontent.com/u/86044648?v=4" alt="Contributor 1" height="150"> <br> <b>wangjiaqi @ Northeastern University</b> <br> <a href='https://github.com/wangjiaqi886'>TechGPT-2.0 项目的核心开发成员</a> </td> <td align='center'> <img src="https://avatars.githubusercontent.com/u/109963333?v=4" alt="Contributor 2" height="150"> <br> <b>Chang Yuying @ Northeastern University</b> <br> <a href='https://github.com/changyuying'>TechGPT-2.0 项目的核心开发成员</a> </td> <td align='center'> <img src="https://avatars.githubusercontent.com/u/49021250?v=4" alt="Contributor 3" height="150"> <br> <b>SIGMOID @ Northeastern University</b> <br> <a href='https://github.com/lizhongv'>TechGPT-2.0 项目的核心开发成员</a> </td> </tr> </table>免责声明
该项目仅供学习交流使用,禁止用于商业用途。在使用过程中,使用者需认真阅读并遵守以下声明:
- 本项目仅为大模型测试功能而生,使用者需自行承担风险和责任,如因使用不当而导致的任何损失或伤害,本项目概不负责。
- 本项目中出现的第三方链接或库仅为提供便利而存在,其内容和观点与本项目无关。使用者在使用时需自行辨别,本项目不承担任何连带责任;
- 使用者在测试和使用模型时,应遵守相关法律法规,如因使用不当而造成损失的,本项目不承担责任,使用者应自行承担;若项目出现任何错误,请向我方反馈,以助于我们及时修复;
- 本模型中出现的任何违反法律法规或公序良俗的回答,均不代表本项目观点和立场,我们将不断完善模型回答以使其更符合社会伦理和道德规范。
使用本项目即表示您已经仔细阅读、理解并同意遵守以上免责声明。本项目保留在不预先通知任何人的情况下修改本声明的权利。
引用
如果使用本项目的代码、数据或模型,请引用本项目。
@misc{TechGPT,
author = {Feiliang Ren and Jiaqi Wang and Yuying Chang and Zhong Li},
title = {TechGPT 2.0: Technology-Oriented Generative Pretrained Transformer 2.0},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/neukg/TechGPT-2.0}},
}
致谢
我们对 Chinese-Alpaca-2 和 Atom 的相关项目和研究开发人员表示衷心的感谢!
@article{Chinese-LLaMA-Alpaca,
title={Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca},
author={Cui, Yiming and Yang, Ziqing and Yao, Xin},
journal={arXiv preprint arXiv:2304.08177},
url={https://arxiv.org/abs/2304.08177},
year={2023}
}