许可证: cc-by-nc-4.0
语言:
水母-7B模型
其他规模的水母模型请访问:
水母-8B
水母-13B
模型详情
水母-7B是一个拥有70亿参数的大规模语言模型。
我们在mistralai/Mistral-7B-Instruct-v0.2模型基础上,使用Jellyfish-Instruct数据集的子集进行了微调。
在可解释性方面,水母-7B对抗GPT-3.5-turbo的胜率(由GPT-4评估)达到56.36%。
更多模型细节请参阅水母论文。
引用
若您认为我们的工作有价值,请通过以下方式引用:
@article{zhang2023jellyfish,
title={水母:用于数据预处理的大语言模型},
author={张浩晨 and 董宇阳 and 肖川 and 小山田雅文},
journal={arXiv预印本 arXiv:2312.01678},
year={2023}
}
已知任务表现
任务类型 |
分类 |
数据集 |
非LLM最优1 |
GPT-3.52 |
GPT-42 |
GPT-4o |
Table-GPT |
水母-7B |
水母-8B |
水母-13B |
错误检测 |
已知 |
Adult |
99.10 |
99.10 |
92.01 |
83.58 |
-- |
77.40 |
73.74 |
99.33 |
错误检测 |
已知 |
Hospital |
94.40 |
97.80 |
90.74 |
44.76 |
-- |
94.51 |
93.40 |
95.59 |
...(后续表格内容保持相同格式翻译)... |
|
|
|
|
|
|
|
|
|
|
对于GPT-3.5和GPT-4,我们在所有数据集上采用few-shot方法。水母模型在已知数据集禁用few-shot,在未知数据集启用few-shot。
数据补全任务采用准确率指标,其他任务采用F1分数。
HoloDetect用于已知错误检测数据集
RAHA用于未知错误检测数据集
...(其余参考文献说明保持相同格式)...
2.
作为数据预处理的大语言模型
未知任务表现
列类型标注
数据集 |
RoBERTa (159样本)1 |
GPT-3.51 |
GPT-4 |
GPT-4o |
水母-7B |
水母-8B |
水母-13B |
SOTAB |
79.20 |
89.47 |
91.55 |
65.05 |
83 |
76.33 |
82 |
水母模型禁用few-shot模式
- 数据来自使用ChatGPT进行列类型标注
属性值提取
数据集 |
Stable Beluga 2 70B1 |
SOLAR 70B1 |
GPT-3.51 |
GPT-41 |
GPT-4o |
水母-7B |
水母-8B |
水母-13B |
AE-110k |
52.10 |
49.20 |
61.30 |
55.50 |
55.77 |
56.09 |
59.55 |
58.12 |
OA-Mine |
50.80 |
55.20 |
62.70 |
68.90 |
60.20 |
51.98 |
59.22 |
55.96 |
水母模型禁用few-shot模式
- 数据来自使用大语言模型进行产品属性值提取
提示模板
{系统消息}
[指令]:
{提示内容}(无需包含{})
[/指令]
训练细节
训练方法
我们采用LoRA技术加速训练过程,针对q_proj、k_proj、v_proj和o_proj模块进行优化。
使用建议
为加速推理,强烈建议使用vLLM运行水母模型。
Python示例代码
使用Transformers和Torch模块
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
import torch
if torch.cuda.is_available():
device = "cuda"
else:
device = "cpu"
model = AutoModelForCausalLM.from_pretrained(
"NECOUDBFM/Jellyfish",
torch_dtype=torch.float16,
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("NECOUDBFM/Jellyfish")
system_message = "你是一个高度遵循指令的AI助手,请尽可能提供帮助。"
user_message = "你好,世界。"
prompt = f"{system_message}\n\n[指令]:\n\n{user_message}\n\n[/指令]"
inputs = tokenizer(prompt, return_tensors="pt")
input_ids = inputs["input_ids"].to(device)
generation_config = GenerationConfig(
do_samples=True,
temperature=0.35,
top_p=0.9,
)
with torch.no_grad():
generation_output = model.generate(
input_ids=input_ids,
generation_config=generation_config,
return_dict_in_generate=True,
output_scores=True,
max_new_tokens=1024,
pad_token_id=tokenizer.eos_token_id,
repetition_penalty=1.15,
)
output = generation_output[0]
response = tokenizer.decode(
output[:, input_ids.shape[-1] :][0], skip_special_tokens=True
).strip()
print(response)
使用vLLM
from vllm import LLM, SamplingParams
path_to_model = "/workspace/models/Jellyfish"
model = LLM(model=path_to_model)
sampling_params = SamplingParams(
temperature=0.35,
top_p=0.9,
max_tokens=1024,
stop=["[指令]"],
)
system_message = "你是一个高度遵循指令的AI助手,请尽可能提供帮助。"
user_message = "你好,世界。"
prompt = f"{system_message}\n\n[指令]:\n\n{user_message}\n\n[/指令]"
outputs = model.generate(prompt, sampling_params)
response = outputs[0].outputs[0].text.strip()
print(response)
提示设计
我们提供用于微调和推理的提示模板。
系统消息
你是一个高度遵循指令的AI助手。用户将提出问题,请尽可能准确地回答。
错误检测提示
(两种形式提示模板翻译,保持原有技术细节)
数据补全提示
当前{关键词}记录缺少{属性X}的值,请根据记录中的其他字段进行推断。
可用字段包括:{属性1}、{属性2}...
记录内容:[{属性1}: {值1}, {属性2}: {值2}, ...]
请推断缺失属性{属性X}的值,只需返回该属性值。
(其余任务提示模板按相同方式处理,保持技术术语准确性)