Github上有一个基于LLaMA模型的医疗微调模型:ChatDoctor『对应的论文为:ChatDoctor: A Medical Chat Model Fine-tuned on LLaMA Model using Medical Domain Knowledge』,该模型有2个主要亮点:
实际微调时包括以下4个步骤
{
"instruction": "If you are a doctor, please answer the medical questions based on the patient's description.",
"input": "Doctor, I have been experiencing sudden and frequent panic attacks. I don't know what to do.",
"output": "Well, based on what you're telling me, it sounds like you may be suffering from panic disorder. The best course of action is to start with psychotherapy and mental health counseling. Additionally, we should conduct an electrocardiogram to make sure that there are no physical issues causing your panic attacks. We will also need to perform a depression screen and a toxicology screen to rule out any other underlying causes. Finally, I would recommend a comprehensive psychological and psychiatric evaluation and therapy to help manage your symptoms."
}
当然,也有业内研究者基于BART-base,且利用他们自己公司的数据,微调出他们版本的ChatDoctor (截取自邓老师朋友圈)
华驼模型仓库,是经过中文医学指令精调/指令微调(Instruct-tuning) 的LLaMA-7B模型(Llama-7B tuned with Chinese medical knowledge),这是其GitHub地址
在数据集的构建上,
公开数据集
的形式对外进行发布。训练样本的示例如下: 最后,我司杜老师写了一份微调部署的教程,见:基于ChatGLM-Med与HuaTuo的微调部署_dzysunshine的博客-CSDN博客
上海交大用480万篇生物医学论文微调LLaMA模型(论文地址、代码地址),在QA上取得了很好的效果
其训练数据采用S2ORC数据集,从S2ORC[Lo et al., 2020]数据集的8110万篇英文学术论文开始 (S2ORC数据集地址:https://github.com/allenai/s2orc),用PubMed Central (PMC)-id进行过滤。结果,剩下大约490万篇论文,这些论文与医学知识高度相关,总计超过750亿token。
样例如下
{"paper_id": "77490025", "title": "State of external ocular muscles in strabismus of different duration", "authors": [{"first": "Pen'kov", "middle": [], "last": "Ma", "suffix": ""}, {"first": "Konstantinovskaia", "middle": [], "last": "Ke", "suffix": ""}, {"first": "Zhukova", "middle": [], "last": "Sv", "suffix": ""}], "abstract": null, "year": 1975, "arxiv_id": null, "acl_id": null, "pmc_id": null, "pubmed_id": null, "doi": null, "venue": null, "journal": "Oftalmologicheskii\u0306 zhurnal", "mag_id": "2426173123", "mag_field_of_study": ["Medicine"], "outbound_citations": [], "inbound_citations": [], "has_outbound_citations": false, "has_inbound_citations": false, "has_pdf_parse": false, "s2_url": "https://api.semanticscholar.org/CorpusID:77490025"}
{"paper_id": "77490084", "title": "Management of uterine fibromyoma", "authors": [{"first": "Landau", "middle": [], "last": "IaM", "suffix": ""}, {"first": "Karpushin", "middle": [], "last": "Vp", "suffix": ""}], "abstract": null, "year": 1972, "arxiv_id": null, "acl_id": null, "pmc_id": null, "pubmed_id": null, "doi": null, "venue": null, "journal": null, "mag_id": "2425602342", "mag_field_of_study": ["Medicine"], "outbound_citations": [], "inbound_citations": [], "has_outbound_citations": false, "has_inbound_citations": false, "has_pdf_parse": false, "s2_url": "https://api.semanticscholar.org/CorpusID:77490084"}
以下是该项目的几点结论
各项准备:数据集、环境、项目和模型文件
项目地址:GitHub - SCIR-HI/Med-ChatGLM: Repo for Chinese Medical ChatGLM 基于中文医学知识的ChatGLM指令微调
git clone https://github.com/SCIR-HI/Med-ChatGLM.git
模型文件下载:import torch
from transformers import AutoTokenizer, AutoModel
from modeling_chatglm import ChatGLMForConditionalGeneration
tokenizer = AutoTokenizer.from_pretrained(
"/data/sim_chatgpt/ChatGLM-Med/", trust_remote_code=True)
model = ChatGLMForConditionalGeneration.from_pretrained(
"/data/sim_chatgpt/ChatGLM-Med").half().cuda()
while True:
a = input("请输入您的问题:(输入q以退出)")
if a.strip() == 'q':
exit()
response, history = model.chat(tokenizer, "问题:" + a.strip() + '\n答案:', max_length=256, history=[])
print("回答:", response)
推理过程
python infer.py
如果运行出错
修改 modeling_chatglm.py 文件的831行,975行,如下:
MASK, gMASK = 150000, 150001
修改后即可成功运行
微调过程
安装evaluate包
pip install evaluate
pip install wandb
修改要运行文件中的model_name_or_path,修改为 /data/sim_chatgpt/chatglm-6b,如下:
vi scripts/sft_medchat.sh
wandb online
exp_tag="chatglm_tuning"
python run_clm.py \
--model_name_or_path /data/sim_chatgpt/chatglm-6b \
--per_device_train_batch_size 8 \
--per_device_eval_batch_size 8 \
--train_file ./data/train.txt \
--max_seq_length 256 \
--output_dir ./output/ \
--do_train \
--logging_steps 30 \
--log_file ./log/$exp_tag \
--gradient_accumulation_steps 2 \
--learning_rate 5e-5 \
--group_by_length False \
--num_train_epochs 3 \
--lr_scheduler_type linear \
--warmup_ratio 0.1 \
--logging_dir ./log \
--logging_steps 10 \
--save_strategy epoch \
--seed 2023 \
--remove_unused_columns False \
--torch_dtype auto \
--adam_epsilon 1e-3 \
--report_to wandb \
--run_name $exp_tag
执行命令
sh scripts/sft_medchat.sh
尝试调小batch_size,将per_device_train_batch_size改为1试下,仍然cuda of memory,后面再想下别的办法
官方是在一张A100-SXM-80GB显卡上进行了微调训练,根据经验,训练显存建议选择32G及以上
项目地址:https://github.com/xionghonglin/DoctorGLM
1、训练数据
训练数据使用CMD、MedDialog、ChatDoctor、以及HearlthcareMagic
Dataset | Department | Language | Q&A | Chat | Number | Syn. | Size | Weight |
---|---|---|---|---|---|---|---|---|
CMD | Surgical | CN | ✔ | × | 116K | × | 52MB | |
Obstetrics and Gynecology | CN | ✔ | × | 229K | × | 78MB | ||
Pediatrics | CN | ✔ | × | 117K | × | 47MB | ||
Internal Medicine | CN | ✔ | × | 307K | × | 102MB | ||
Andriatria | CN | ✔ | × | 113K | × | 44MB | ||
Merged | CN | ✔ | × | 1.9M | × | Doctor_GLM/ckpt | ||
MedDialog | Multiple | CN&EN | ✔ | ✔ | 3.4M | × | 1.5GB | ptuning_weight |
ChatDoctor | Multiple | EN | ✔ | × | 5.4K | ✔ | 2.9MB | Coming soon |
HearlthcareMagic | Multiple | EN | ✔ | × | 200K | × | 216MB | Coming soon |
其中,Chinese medical dialogue data 中文医疗对话数据集:https://github.com/Toyhom/Chinese-medical-dialogue-data
数据包括:
总计 792099个问答对
2、模型效果
1)chatglm效果
"0": {
"question": "近一个多月来,本人两肋、前胸包括胸口及两旁、后背两边、脊椎骨上段、包括扇子骨等处,就是上半身,发生不适隐痛,上半身很纠结,好像里面有手揪住一样,不舒展爽朗,十分难受,一会儿前胸和两肋不适难受,一会儿后背两边不适难受,同时发生隐痛。扭动身体,做做伸展活动,或者用拳头抵住揉搓不适隐痛处,身体就会舒展一些好受一些。总的来说就是上半身有肋骨的地方和上半段脊椎骨范围内发生不适和隐痛,一般同时两三个隐痛点,就是肋骨最下段的骨梢也发生不适隐痛。没有肋骨地方不痛,如肚子处就不隐痛。本人于2011年11月做了胆囊摘除和胆总管结石手术。不是腹腔镜,是开了一条约18公分的大口子和两个导流小洞。此种不适难受隐痛情况2012年春天发生过一次,时间不长自动好了。但这次严重时间又长,不适和隐痛感觉有时呈块状,有时呈条状,一般同时有两三处不适隐痛,让人很难受,还有越来越重的感觉。",
"response": "所述症状可能是由多种原因引起的,包括身体、心理和情绪等方面。根据所述症状,建议进行以下检查和测试:\n\n1. 医生体检:进行全面的身体检查,包括心肺听诊、血压测试、视力、听力、皮肤测试等,以确定任何潜在的健康问题。\n\n2. 心电图(EKG):测试心脏健康,评估是否有潜在的心脏问题。\n\n3. 核磁共振(MRI):测试骨骼和肌肉系统的健康,以及评估是否有潜在的神经问题。\n\n4. 血液检查:测试贫血、感染、肿瘤等问题。\n\n5. 心理健康测试:测试情绪和心理健康,例如压力测试、焦虑测试等。\n\n如果症状持续存在或变得更加严重,请尽快咨询医生以获取专业建议和治疗。"
},
"1": {
"question": "有糖尿病需要节制性生活吗",
"response": "有糖尿病的人需要节制性生活,因为糖尿病是一种代谢性疾病,会影响身体对葡萄糖的吸收和利用。如果性生活过于频繁或过于剧烈,可能会加重身体的糖分负担,导致血糖升高,甚至可能对心脏、肾脏等重要器官造成伤害。\n\n所以有糖尿病的人需要适度地控制自己的性生活。建议每周的性生活次数在1-2次之间,并且尽量选择在空腹或血糖控制较好的状态下进行。此外,糖尿病患者还应该注意保护自己的生殖健康,避免使用药物或酒精等因素对血糖的影响,并定期进行生殖系统的体检和清洁。\n\n如果有糖尿病,需要根据医生的建议来节制性生活,并遵循医生的建议来管理自己的血糖水平。"
},
"2": {
"question": "我爷爷高血压可以喝咖啡吗",
"response": "高血压和喝咖啡之间关系不确定。高血压可能是由多种因素引起的,包括遗传、生活方式、饮食、药物等。喝咖啡本身也可能对血压产生影响,但具体情况取决于个体。\n\n建议咨询医生或心血管专家,了解爷爷的高血压是否与喝咖啡有关,并听从专业建议。同时,可以尝试控制高血压的生活方式,如减少钠的摄入、保持足够的运动和睡眠、避免吸烟和饮酒等。"
},
2)DoctorGLM效果
"0": {
"question": "近一个多月来,本人两肋、前胸包括胸口及两旁、后背两边、脊椎骨上段、包括扇子骨等处,就是上半身,发生不适隐痛,上半身很纠结,好像里面有手揪住一样,不舒展爽朗,十分难受,一会儿前胸和两肋不适难受,一会儿后背两边不适难受,同时发生隐痛。扭动身体,做做伸展活动,或者用拳头抵住揉搓不适隐痛处,身体就会舒展一些好受一些。总的来说就是上半身有肋骨的地方和上半段脊椎骨范围内发生不适和隐痛,一般同时两三个隐痛点,就是肋骨最下段的骨梢也发生不适隐痛。没有肋骨地方不痛,如肚子处就不隐痛。本人于2011年11月做了胆囊摘除和胆总管结石手术。不是腹腔镜,是开了一条约18公分的大口子和两个导流小洞。此种不适难受隐痛情况2012年春天发生过一次,时间不长自动好了。但这次严重时间又长,不适和隐痛感觉有时呈块状,有时呈条状,一般同时有两三处不适隐痛,让人很难受,还有越来越重的感觉。",
"response": "病情分析:您好,这种情况考虑是肋间神经炎引起的疼痛\n指导意见:建议口服消炎药,止痛药,维生素B族,按疗程治疗,疼痛缓解后,练习抬胸运动,可缓解疼痛,除了正规治疗胆石症外,患者需要多咨询专家建议,和医生保持沟通,患者还需要重视护理方面,例如合理饮食,保持心情愉快与此同时患者还要注意选择一家专业医院诊治,这样才能得到良好的治疗效果"
},
"1": {
"question": "有糖尿病需要节制性生活吗",
"response": "糖尿病对性生活没有影响的,但是需要控制饮食和注意运动,饮食要均衡,可以多吃蔬菜,水果,低糖水果如香蕉,葡萄,西瓜等,戒烟酒,生活规律,注意休息,避免劳累和熬夜,避免剧烈运动,定期复查血糖,如果有血糖控制不好的情况建议去医院查查血糖。"
},
"2": {
"question": "我爷爷高血压可以喝咖啡吗",
"response": "高血压可以喝咖啡,但不宜喝太多,最好每天不超过3杯\n高血压是常见的心血管疾病,如果高血压长期得不到控制,会诱发其他并发症,如心脏衰竭,脑水肿,脑血管疾病等\n建议平时保持合理的饮食习惯,适当锻炼身体,避免过度劳累,保持心态平和,定期监测血压,如果血压控制不好,可以服用药物治疗"
},
本项目开源了基于ChatGLM-6B LoRA 16-bit指令微调的中文医疗通用模型 (本项目训练代码采用模型并行算法,可以在最少4张3090显卡上完成)。基于共计28科室的中文医疗共识与临床指南文本,我们生成医疗知识覆盖面更全,回答内容更加精准的高质量指令数据集,以此提高模型在医疗领域的知识与对话能力
本项目数据主要分为两个部分:情景对话与知识问答
数据类型 | 描述 | 数量 | 占比(%) |
---|---|---|---|
情景对话 | 在具体场景下的医患诊疗对话 | 52k | 28.57 |
知识问答 | 医学知识问题的解释性回答 | 130k | 71.43 |
总计 | - | 182k | 100 |
情景对话
主要参考BELLE的指令数据集生成方式,我们将医学指令按照诊疗情景的不同主要分为16种大类,通过100条情景对话种子任务生成的52k条情景对话数据
,以下是两个数据示例
{
"instruction": "治疗方案",
"input": "右肺中叶中央型肺癌并肺不张,右侧胸膜,右肺门及纵隔淋巴结肿瘤多发转移,身体体差,不能接受化疗",
"output": "尊敬的患者,非常抱歉,您现在的情况不能接受化疗治疗。然而,仍可以尽可能提高您的生活质量,积极抗击病症,使您更好地面对疾病。建议您可以根据您自身情况进行中医治疗,了解自身病情,制定中医治疗和保健方案,调养机能、增强自身抵抗力,减少药物的依赖性,尽可能地延长、稳定患者的生活质量。同时,正确地食补疗法和有氧运动也很重要。此外,您还可以进行综合护理,及时应对必要的辅助治疗,以及定期的体检和体液调养,在病情控制中发挥作用,从而延长患者的生活质量。"
},
{
"instruction": "病因分析",
"input": "公公肺癌晚期今天鼻子出了好多血怎么回事?",
"output": "您好,您公公流鼻血可能是由于肺癌侵犯裂而引起的,为了确保您公公的安全,请积极接受治疗,且考虑到患者年纪的问题,建议选择保守的治疗,温和的生物治疗可能更符合实际情况。在肿瘤得到控制的情况下,希望您公公注意补充营养,均衡饮食,多吃含有高营养的清淡食物,减少摄取烧烤和油腻的食物,千万不要太快下手动手手术。如果确定要进行手术治疗,术后一定要重视自身的护理工作,加强抗病营养,以能补充您公公的体力为主。"
},
./data/dialogue_generation.py
,其中的核心也在于基于种子的问题生成,对应的prompt为:
prompt = f"你被要求提供7个多样化的任务指令。这些任务指令将被提供给GPT模型,我们将评估GPT模型完成指令的能力。\n \
以下是你提供指令需要满足的要求:\n \
1.指令用中文书写,指令应该是一个医疗任务。\n \
2.指令类型应该是多样化的,包括各种类型的任务,类别种类例如:病情诊断,病因分析,病理诊断,治疗方案,就医建议,指标解读,药物剂量,用药建议,医疗建议,医学知识,疾病描述,后果表述,注意事项,功效作用,医疗费用,预防措施,预后评估,其他\n \
3.你应该给指令生成适当的输入,输入字段应包含为指令提供的具体示例,它应该是一个医疗问题,含有有用的医学信息,例如病灶描述,体检指标数值,药物剂量等,不应包含简单的占位符。输入应提供充实的内容,使指令具有挑战性。\n \
4.输出应该是针对指令和输入的恰当回答,如果输入的信息不足以进行判断需要进一步询问。\n \
5.输入输出相关的疾病应该是多样化的,包含各种类型的疾病和药品信息。\
下面是7个任务指令的列表: \n"
最终生成的52k情景对话数据医学指令类型及其分布如下图所示
知识问答
医学知识来源于作者团队自建的医学数据库,通过提供具体的医疗共识与临床指南文本,先让ChatGPT生成与该段医学知识内容与逻辑关系相关的若干问题,再通过“文本段-问题”对的方式让ChatGPT回答问题,从而使ChatGPT能够生成含有医学指南信息的回答,保证回答的准确性
from transformers import AutoTokenizer, AutoModel
from langchain.text_splitter import RecursiveCharacterTextSplitter, TextSplitter
from langchain.document_loaders import TextLoader
import os
import json
# loader = TextLoader("内科学.txt", encoding='utf-8')
# doc = loader.load()[0]
# QA_generation(doc.page_content)
model_path = '6b/'
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
model = model.eval()
idx = 0
data_path = 'zh_sentence/'
qa_dict = {}
for file_name in os.listdir(data_path):
file_path = data_path + file_name
print(file_name)
loader = TextLoader(file_path, encoding='utf-8')
doc = loader.load()[0]
inputs = {"text": doc.page_content}
text_splitter = TextSplitter
docs = text_splitter.create_documents(RecursiveCharacterTextSplitter(chunk_size = 2000, chunk_overlap=200), [inputs["text"]])
# print([{"text": d.page_content} for d in docs])
for d in docs:
idx += 1
text = d.page_content
templ = f"""你是一个聪明的助理。
给你一段医学相关的文本,你必须依据文本想出一个问题和一个对应的答案。
你想出的问题可以被用来测试医生的专业能力。
你想出的问题和答案必须和所给文本相关。
当你想出问题和答案后,你必须用以下格式回复:
```
[
"问题": "$你想出的问题放在这",
"答案": "$你想出的答案放在这"
]
```
所有在 ``` 中间的内容就是你要回答的格式。
请想出一个问题与一个答案,用以上指定的列表回复,对于以下文本:
----------------
{text}"""
response, history = model.chat(tokenizer, templ, history=[],max_length=2048)
while_count = 0
if_good = True
while ('以下哪' in response) or ('语言模型' in response) or ('文本' in response) or ('以下是' in response):
response, history = model.chat(tokenizer, templ, history=[],max_length=2048)
while_count += 1
if while_count > 10:
if_good = False
break
print(response)
try:
if if_good:
question = response.split('答案:')[0][3:]
answer = response.split('答案:')[1]
qa = {}
qa['问题'] = question
qa['答案'] = answer
qa_dict[idx] = qa
else:
pass
except:
pass
json.dump(qa_dict, open('qa_dict.json', 'w', encoding='utf-8'), indent=4, ensure_ascii=False)
其中,医疗共识与临床指南中文本段涵盖28个科室共计32k个文本段。各科室及其分布如下
医联MedGPT基于transformer架构(参数规模为100B),并在模型微调训练阶段采⽤⼤量真实医⽣参与的RLHF(Reinforcement Learning from Human Feedback) 监督微调
此外,据说其预训练阶段使⽤了超过20亿的医学文本数据,微调训练阶段使⽤了800万条的高质量结构化临床诊疗数据,并投⼊超过100名医⽣参与⼈⼯反馈监督微调训练
更多解读参见:医疗版ChatGPT直播评测!治疗方案与真人医生96%一致
BloombergGPT是一个有500亿参数、基于BLOOM模型的LLM,过程中采用了一种兼具通用能力和特定领域的方法。
作者首先构建了FinPile——一个包含了新闻、档案、网络爬取的新闻稿件、英文财经文档等英文金融文档的金融领域数据集,同时也采用了通用的数据集。
金融领域数据集
共包含了3630亿个token,占总数据集token量的54.2%,具体由以下几个部分构成:
金融领域相关网页,2980亿token,占比42.01%
金融领域知名新闻源,380亿token,占比5.31%
公司财报,140亿token,占比2.04%
金融相关公司的出版物,90亿token,占比1.21%
bloomberg,50亿token,占比0.7%
因为包含一部分收费和私有数据,所以这份数据集不会被公开,但是文章中公开了模型训练方法
通用数据集
共包含了3450亿个token,占总数据集token量的48.73%,具体分为如下几个部分:
The Pile数据集,1840亿token,占比25.9%
C4数据集,1380亿token,占比19.48%
Wikipedia数据集,240亿token,占比3.35%
数据集使用Unigram tokenizer对原始文本进行tokenize。具体处理时,作者这了两点改进(具体内容可参考原论文《2.3Tokenization》):
模型基于BLOOM模型的自回归结构,具体包含了70层transformer decoder。
另外一些细节如下(详见原论文的《3.1 Architecture》):
这一部分,作者先有了算力预算(40G内存A100共130万GPU小时),并且给中间checkpoint存储留出了约25%的时间预算
根据Chinchilla scaling laws,计算出模型的参数和需要的数据量大小——模型参数为500亿,token数据量为11000+亿
考虑到金融领域token数量要占总token数量的50%以上,而且目前的数据暂时无法再进行扩充,最终模型参数量选择为500亿,token数据量为7000+亿。
另一方面,隐藏层维度D也可以根据decoder的层数计算出来,这里经过计算隐藏层维度为7680,多头的头数为40。下图为BloombergGPT各超参数的设置
这一部分原始论文写的比较详细,具体见《3.3 Training Configuration》,这里简单摘要如下:
这一部分中,作者描述了具体优化时采用的方法:ZeRO优化、MiCS、Activation Checkpointing、混合精度训练(Mixed Precision Training)、内核融合(fused kernels)。
具体见《3.4 Large-scale Optimization》
经过上述优化,上述硬件的平均算力水平达到了102TFLOPs,训练一步需要32.5秒。
损失函数随训练步数变化曲线如下图所示:
另,文章中记录模型共训练了139,200步,进行了约0.8个epoch,训练了53天。至于一个epoch都没有训练完的原因是这时验证集上的损失函数已经不再继续下降了。
其具体训练过程如下:
这里推荐阅读原论文3.3节与3.4节中关于训练方法的描述,对于大模型训练有一定的参考意义
继Bloomberg提出了500亿参数的BloombergGPT (下节之后会介绍),GPT在金融领域的应用受到了广泛关注,但BloombergGPT是一个非开源的模型,而且用到了Bloomberg自身独有的数据储备,并不利于金融大模型的广泛普及。
FinGPT: Open-Source Financial Large Language Models(论文地址、GitHub地址),是由哥伦比亚大学和纽约大学(上海)的研究人员开发的金融大型语言模型(FinLLMs)的端到端开源框架
FinGPT运用了各种各样的金融训练数据,包括金融新闻、公司公告、社交媒体、金融专业网站、学术资料等,多种多样的数据保证了FinGPT可以理解金融市场和做出金融决策
值得注意的是,FInGPT提供了一套完善的机制应对实时数据,做出实时决策;使用者也可以很轻松地对下游任务进行微调
还可以微调FinGPT来预测股价,由于股价预测任务微调时可以简单利用股价变动作为反馈,因此微调成本相对其它需要人类反馈的任务低得多
熵简FinBERT在网络结构上采用与 Google 发布的原生BERT 相同的架构 (代码地址:GitHub - valuesimplex/FinBERT),其包含了两个不同规模的版本,一个是FinBERT-Base, 采用了 12 层 Transformer 结构,一个是FinBERT-Large,采用了 24 层 Transformer 结构
相对于Google发布的原生中文BERT、哈工大讯飞实验室开源的BERT-wwm 以及 RoBERTa-wwm-ext 等模型,本次开源的 FinBERT 1.0 预训练模型在多个金融领域的下游任务中,比如
获得了显著的性能提升,在不加任何额外调整的情况下,F1-score 直接提升至少 2~5.7 个百分点
FinBERT 1.0 所采用的预训练语料主要包含三大类金融领域的语料,分别如下:
对于上述三类语料,在金融业务专家的指导下,对各类语料的重要部分进行筛选、预处理之后得到最终用于模型训练的语料,共包含 30亿 Tokens,这一数量超过了原生中文BERT的训练规模
FinBERT 采用了两大类预训练任务,分别是字词级别的预训练和任务级别的预训练
整体而言,为使 FinBERT 1.0 模型可以更充分学习到金融领域内的语义知识,我们在原生 BERT 模型预训练基础上做了如下改进:
ChatLaw法律大模型(其GitHub地址)目前开源的仅供学术参考的版本底座为姜子牙-13B「关于该模型的介绍,可参见此文最后:《类ChatGPT模型LLaMA的解读与其微调:Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙》」、Anima-33B,我们使用大量法律新闻、法律论坛、法条、司法解释、法律咨询、法考题、判决文书等原始文本来构造对话数据
至于数据则主要由论坛、新闻、法条、司法解释、法律咨询、法考题、判决文书组成,随后经过清洗、数据增强等来构造对话数据
收集了十余年的国家司法考试题目,整理出了一个包含2000个问题及其标准答案的测试数据集,用以衡量模型处理法律选择题的能力: 评测数据demo
然而,我们发现各个模型的准确率普遍偏低。在这种情况下,仅对准确率进行比较并无多大意义。因此,我们借鉴英雄联盟的ELO匹配机制,做了一个模型对抗的ELO机制,以便更有效地评估各模型处理法律选择题的能力。以下分别是ELO分数和胜率图
有以下结论:(1)引入法律相关的问答和法规条文的数据,能在一定程度上提升模型在选择题上的表现;(2)加入特定类型任务的数据进行训练,模型在该类任务上的表现会明显提升。例如,ChatLaw模型之所以能胜过GPT-4,是因为我们使用了大量选择题作为训练数据;(3)法律选择题需要进行复杂的逻辑推理,因此,参数量更大的模型通常表现更优
本项目开源的中文法律通用模型由ChatGLM-6B LoRA 16-bit指令微调得到。数据集包括现有的法律问答数据集和基于法条和真实案例指导的self-Instruct构建的高质量法律文本问答,提高了通用语言大模型在法律领域的表现,提高了模型回答的可靠性和专业程度。
本项目数据主要分为两个部分:1.律师和用户之间的情景对话 2.对特定法律知识的问答
数据类型 | 描述 | 数量 | 占比(%) |
---|---|---|---|
情景对话 | 真实的律师用户问答 | 200k | 100 |
知识问答 | 法律知识问题的解释性回答 | coming soon | 0 |
总计 | - | 200k | 100 |
情景对话
真实的中文律师用户问答数据,来自CrimeKgAssitant收集的200k条情景对话数据。
利用ChatGPT清洗CrimeKgAssitant数据集得到52k单轮问答
下载(提取码:MYTT)
利用ChatGPT根据CrimeKgAssitant的问答重新生成,使得生成的回答比原回答更详细,语言组织更规范。
带有法律依据的情景问答92k
下载(提取码:MYTT)
我们根据中华人民共和国法律手册上最核心的9k法律条文,利用ChatGPT联想生成具体的情景问答,从而使得生成的数据集有具体的法律依据。数据格式如下
"question": "在某家公司中,一名员工对女同事实施了性骚扰行为,女同事向公司进行举报,但公司却没有采取必要的措施来制止这种行为。\n\n公司未采取必要措施预防和制止性骚扰,导致女同事的权益受到侵害,该公司是否需要承担责任?" "answer": "根据《社会法-妇女权益保障法》第八十条规定,“学校、用人单位违反本法规定,未采取必要措施预防和制止性骚扰,造成妇女权益受到侵害或者社会影响恶劣的,由上级机关或者主管部门责令改正;拒不改正或者情节严重的,依法对直接负责的主管人员和其他直接责任人员给予处分。”因此,该公司因为未采取必要措施预防和制止性骚扰行为,应该承担责任,并依法接受相关的处分。女同事可以向上级机关或主管部门进行申诉,要求该公司被责令改正,并对相关负责人员给予处分。" "reference": [ "社会法-妇女权益保障法2022-10-30: \"第七十九条 违反本法第二十二条第二款规定,未履行报告义务的,依法对直接负责的主管人员和其他直接责任人员给予处分。\",\n", "社会法-妇女权益保障法2022-10-30: \"第八十条 违反本法规定,对妇女实施性骚扰的,由公安机关给予批评教育或者出具告诫书,并由所在单位依法给予处分。\",\n", "社会法-妇女权益保障法2022-10-30: \"学校、用人单位违反本法规定,未采取必要措施预防和制止性骚扰,造成妇女权益受到侵害或者社会影响恶劣的,由上级机关或者主管部门责令改正;拒不改正或者情节严重的,依法对直接负责的主管人员和其他直接责任人员给予处分。\",\n", "社会法-妇女权益保障法2022-10-30: \"第八十一条 违反本法第二十六条规定,未履行报告等义务的,依法给予警告、责令停业整顿或者吊销营业执照、吊销相关许可证,并处一万元以上五万元以下罚款。\",\n" ]
作者团队计划收集法律领域的教科书,经典案例等数据,自建一个法律专业知识数据库。
针对Self-Instruct的可靠性和安全性漏洞,他们使用了基于特定知识的Reliable-Self-Instruction:通过提供具体的法律知识文本,先让ChatGPT生成与该段法律知识内容与逻辑关系相关的若干问题,再通过“文本段-问题”对的方式让ChatGPT回答问题,从而使ChatGPT能够生成含有法律信息的回答,保证回答的准确性
其中,计划法律知识数据包含民法商法、行政法、经济法、社会法、刑法等各个细分法律的条例,分析和题库
有的朋友可能已经注意到了,我们已经部署/微调了不少模型,包括且不限于LLaMA、以及基于LLaMA做各种微调的Alpaca、Vicuna、BELLE、Chinese-LLaMA/Chinese-Alpaca,以及LLaMA的RLHF版:ChatLLaMA(英文版)、ColossalChat,甚至包括国内的ChatGLM等模型
但感到遗憾的是,目前这些模型 都不能商用,当然 对于其中有些模型不允许商用也能理解,比如Alpaca扩展数据集的方式毕竟是通过self-instruct技术提示OpenAI的API生成数据,如果去商用,则和OpenAI本身产生不可避免的直接商业冲突
很多模型不允许商用还只是一方面,另一方面,数据集也是很大的一个问题,既然通过self-instruct技术提示OpenAI的API生成数据没法商用,那什么样的数据集允许商用呢,本部分便为大家探讨可以商用的数据集和可以商用的模型
2023年4 月 12 日,Databricks 发布了Dolly 2.0 ,表示这是业内第一个开源、遵循指令的 LLM,它在透明且免费提供的数据集上进行了微调,该数据集也是开源的,可用于商业目的。这意味着 Dolly 2.0 可用于构建商业应用程序,无需支付 API 访问费用或与第三方共享数据。
项目链接:https://huggingface.co/databricks/dolly-v2-12b
数据集:https://github.com/databrickslabs/dolly/tree/master/data
以下是它的一些特点
2023年4月17日,RedPajama开源1.2万亿token数据集,帮助开发者训练类ChatGPT大语言模型。这也是目前类ChatGPT领域,全球最大的开源训练数据集(地址:https://huggingface.co/datasets/togethercomputer/RedPajama-Data-1T)
RedPajama完美复制了LLaMA模型上的1.2万亿训练数据集,由维基百科、GitHub、普通抓取、C4、图书、ArXiv(知名论文网站)、Stack Exchange七部分组成。完整数据集容量约5T,根据数据使用条例已经允许商业化
https://hub.baai.ac.cn/view/25750
2023年4月17日,北京智源人工智能研究院第一期总共发布了 5 个子数据集,包括翻译指令、考试指令、人类价值观对齐指令、反事实修正多轮聊天、Leetcode指令,总计 191k 数据,聚焦中文语料、数据类型多样、经过了人工质检与修正、数据质量可靠,而且可以商用。
2023年4月19日,Stability AI发布了一款名为StableLM的开源语言模型,旨在让基础AI技术更加透明、易于访问和支持。该模型可以生成文本和代码,并将支持一系列下游应用。它们展示了如何通过适当的训练,小型且高效的模型可以实现高性能
github链接:https://github.com/Stability-AI/StableLM
huggingface链接:https://huggingface.co/stabilityai/stablelm-base-alpha-7b
部分可商用模型的汇总链接