Code Monkey home page Code Monkey logo

yayi's Introduction

雅意大模型

介绍

雅意大模型 在百万级人工构造的高质量领域数据上进行指令微调得到,训练数据覆盖媒体宣传、舆情分析、公共安全、金融风控、城市治理等五大领域,上百种自然语言指令任务。雅意大模型从预训练初始化权重到领域模型的迭代过程中,我们逐步增强了它的中文基础能力和领域分析能力,并增加了部分插件能力。同时,经过数百名用户内测过程中持续不断的人工反馈优化,我们进一步提升了模型性能和安全性。

通过雅意大模型的开源为促进中文预训练大模型开源社区的发展,贡献自己的一份力量,通过开源,与每一位合作伙伴共建雅意大模型生态。

运行方式

环境安装

  1. 下载本仓库内容至本地/远程服务器
git clone https://github.com/wenge-research/YaYi.git
cd YaYi
  1. 创建conda环境
conda create --name yayi python=3.8
conda activate yayi
  1. 安装依赖
pip install -r requirements.txt

其中 torchtransformers 版本不建议低于推荐版本。

模型推理

模型权重(7b版本)已在我们的 Huggingface 模型仓库 开源,欢迎下载使用。以下是一个简单调用 yayi-7b 进行下游任务推理的示例代码,可在单张 A100/A800/3090 等GPU运行,使用FP16精度推理时约占用 20GB 显存:

from transformers import AutoTokenizer, AutoModelForCausalLM

yayi_7b_path = "wenge-research/yayi-7b"
tokenizer = AutoTokenizer.from_pretrained(yayi_7b_path)
model = AutoModelForCausalLM.from_pretrained(yayi_7b_path, device_map="auto", torch_dtype=torch.bfloat16)

prompt = "你好"
formatted_prompt = f"<|System|>:\nA chat between a human and an AI assistant named YaYi.\nYaYi is a helpful and harmless language model developed by Beijing Wenge Technology Co.,Ltd.\n\n<|Human|>:\n{prompt}\n\n<|YaYi|>:"
inputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)

generation_config = GenerationConfig(
    do_sample=True,
    max_new_tokens=100,
    temperature=0.3,
    repetition_penalty=1.1,
    no_repeat_ngram_size=0
)
response = model.generate(**inputs, generation_config=generation_config)
print(tokenizer.decode(outputs[0]))

注意,模型训练时添加了 special token <|End|> 作为结束符,上述代码在生成式若不能自动停止,可定义 KeywordsStoppingCriteria 类,并将其对象传参至 model.generate() 函数。

class KeywordsStoppingCriteria(StoppingCriteria):
    def __init__(self, keywords_ids:list):
        self.keywords = keywords_ids

    def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:
        if input_ids[0][-1] in self.keywords:
            return True
        return False
stop_criteria_7b = KeywordsStoppingCriteria([yayi_7b_tokenizer.encode(w)[0] for w in ["<|End|>"]])
...
response = model.generate(**inputs, generation_config=generation_config, stop_criteria=stop_criteria_7b)

模型微调

本项目基于 deepspeed 框架进行模型训练,配置完环境后执行以下命令行即可开始模型微调(单机多卡)。

deepspeed --num_gpus=8 \
    --module training.trainer \
    --data-path ./data/yayi_train_example.json \
    --input-model ./checkpoints/yayi-7b \
    --deepspeed ./config/deepspeed_zero2_bf16.json \
    --epochs 2 \
    --local-output-dir ./checkpoints \
    --per-device-train-batch-size 8 \
    --per-device-eval-batch-size 8 \
    --logging-steps 1 \
    --save-steps 100 \
    --save-total-limit 10 \
    --eval-steps 100 \
    --warmup-steps 100 \
    --test-size 400 \
    --lr 5e-7 \
    --seed 515

训练数据

雅意大模型基于中科闻歌百万级高质量领域指令微调数据集训练而来,我们本次开源 5w 条训练数据集,可在我们的 Huggingface 数据仓库 下载。数据集主要涵盖了金融、安全、舆情、媒体等几大领域,我们为各领域任务大部分指令数据添加了离散 prompt 前缀,以区分各领域数据。

模型评测

评测团队针对金融、安全、舆情、媒体等几大领域,以及基础能力(主观题、客观题)对雅意大模型进行了全面评测。对比模型包括 ChatGPT、文心一言、ChatGLM-6B、星火、MOSS、Vicuna-7B、通义千问。

评分标准:

  • 主观题:评分1-5分,1非常差、2较差、3一般、4较好、5非常好;共3人评测,准确性平均分取3人平均分。
  • 客观题:准确率=正确数/总数

以下是评测结果。

金融领域

模型 排名 准确性平均分 金融主体情绪分析 中标事件要素抽取 回购事件要素抽取 企业高管变动事件要素抽取 企业亏损事件要素抽取 企业约谈事件要素抽取 破产事件要素抽取 企业收购事件要素抽取 股票减持事件要素抽取 股份质押事件要素抽取 投融资事件要素抽取 金融快报生成
YaYi-7B 1 3.99 4.67 4.17 4.40 3.27 3.87 3.20 4.73 3.67 4.08 3.44 4.00 4.33
ChatGPT 2 3.65 4.07 3.17 3.87 3.40 3.53 3.73 4.20 4.00 4.17 3.00 4.00 2.00
文心一言 3 3.40 3.53 3.58 2.73 2.13 3.73 3.93 3.80 3.67 3.75 3.56 4.00 2.78
星火 4 3.13 3.13 3.25 2.73 2.20 3.67 3.60 3.20 3.20 3.25 3.56 4.33 2.33
ChatGLM-6B 5 3.08 2.73 3.00 3.67 2.87 3.53 2.73 2.80 3.27 3.67 3.33 2.67 2.22
MOSS 6 2.69 3.13 2.33 2.80 2.60 3.00 2.33 2.67 2.60 2.50 3.00 2.67 2.56
Vicuna-7B 7 2.39 3.07 2.58 2.27 2.27 2.53 2.20 2.00 1.87 2.25 3.44 3.33 1.78
通义千问 8 2.07 1.47 2.83 1.93 1.13 3.07 2.53 1.00 1.73 2.50 3.00 2.33 2.11

安全领域

模型 排名 准确性平均分 军事事故事件要素抽取 军售事件要素抽取 军事演习事件要素抽取 恐怖袭击事件要素抽取 访问事件要素抽取 人物行为言论分析 实体抽取
ChatGPT 1 3.71 4.00 3.87 3.60 4.20 4.00 4.20 2.13
YaYi-7B 2 3.66 3.53 3.93 3.53 4.20 4.07 3.47 2.87
文心一言 3 3.43 3.33 3.73 3.67 3.87 3.60 2.87 2.93
ChatGLM-6B 4 3.35 3.47 3.60 3.47 3.27 3.53 3.73 2.40
MOSS 5 2.87 2.80 3.13 2.27 3.13 3.20 3.13 2.40
Vicuna-7B 6 2.47 2.33 2.13 2.33 2.93 2.93 3.47 1.13
星火 7 1.98 1.40 1.60 2.67 1.00 2.80 1.67 2.73
通义千问 8 1.69 1.00 1.80 1.80 1.00 2.40 1.47 2.33

舆情领域

模型 排名 准确性平均分 活动/会议信息抽取 新闻事件情绪分析(情绪4象限) 新闻事件情绪分析(情绪权重) 新闻事件情绪分析(情绪主体及其情感分析) 事件主体抽取 事件核心观点分析 事件核心内容提取 事件涉事方观点分析 涉事方分歧点分析 文章内容概括 观点和立场分析 派系斗争分析 事件情感分析 文章主题分类 文章主体和核心主体抽取 主体之间对立观点分析 多主体及其观点分析 政策倾向分析 企业产品和服务满意度分析 **问题分析 事件分类
YaYi-7B 1 3.66 3.33 3.00 3.83 3.17 4.17 3.50 3.67 3.00 2.17 4.67 3.83 4.33 4.50 4.67 4.00 4.00 3.67 4.17 3.83 3.00 2.33
ChatGPT 2 3.56 3.67 2.67 2.83 2.67 3.17 3.50 3.67 4.50 4.00 3.67 3.67 3.50 3.17 4.50 3.00 3.33 4.00 4.00 3.83 3.00 4.33
ChatGLM-6B 3 2.87 3.33 2.83 1.17 2.00 3.33 3.50 3.17 4.50 2.67 3.67 3.00 2.67 3.17 1.67 2.33 3.67 3.83 2.50 2.50 3.17 1.67
文心一言 4 2.83 4.00 2.83 1.50 1.67 2.50 3.67 3.00 3.50 3.17 3.83 2.50 3.00 3.17 2.33 2.50 3.50 3.00 3.17 3.17 1.00 2.50
星火 5 2.63 3.83 3.33 1.83 2.50 2.33 3.83 2.00 3.50 3.33 2.33 1.00 1.83 3.00 3.83 3.00 3.17 2.33 2.67 3.50 1.00 1.00
Vicuna-7B 6 2.61 2.33 2.00 2.00 2.17 3.00 2.83 2.33 3.33 2.67 3.00 3.00 2.33 2.17 2.33 3.50 3.17 3.00 2.50 2.50 3.00 1.67
MOSS 7 2.60 3.67 2.50 1.00 1.50 3.00 3.17 2.33 3.83 2.67 2.00 2.33 2.17 3.50 2.67 1.67 3.50 3.00 1.83 2.17 3.83 2.17
通义千问 8 1.75 2.17 1.83 1.33 1.67 3.00 3.00 2.17 2.67 2.17 1.00 1.00 1.00 1.50 1.00 1.00 1.00 1.00 2.50 2.00 2.83 1.00

媒体领域

模型 排名 准确性平均分 新闻主题分类 新闻事实状态分类 给标题写短文 给标题写大纲 根据主题起题目 新闻写作主题推荐 新闻事件要素抽取 事件脉络抽取 新闻事件中组织和个人的观点和目标抽取 突发事件关键要素抽取 比赛信息要素抽取 根据上下文写大纲 基于上下文的问答 新闻摘要总结 新闻标题总结
ChatGPT 1 3.78 3.22 4.11 4.11 4.33 4.67 4.33 4.00 3.67 3.33 3.00 3.22 4.22 3.56 3.11 3.83
YaYi-7B 2 3.50 2.67 3.44 4.11 4.11 4.67 4.17 3.00 3.67 1.83 2.78 2.44 4.11 4.22 3.33 3.83
ChatGLM-6B 3 3.38 1.78 3.22 4.22 4.22 4.56 4.17 3.00 3.83 2.00 2.78 1.89 4.22 3.67 3.22 4.17
文心一言 4 3.31 1.11 2.22 4.22 4.33 4.11 3.83 3.33 3.67 2.17 2.89 3.11 4.00 3.89 3.44 3.17
星火 5 3.22 1.44 2.11 4.22 4.00 4.56 2.67 3.67 3.17 2.83 2.67 2.78 4.33 3.00 2.78 4.00
Vicuna-7B 6 3.16 2.22 2.33 3.67 4.22 3.67 3.83 3.00 3.17 2.67 2.44 1.89 3.89 3.44 3.67 3.50
MOSS 7 3.07 1.78 1.78 3.00 3.67 4.22 4.33 3.44 3.83 2.17 2.33 1.67 3.56 3.78 3.67 3.17
通义千问 8 2.16 1.00 1.11 4.33 4.00 3.33 1.00 1.00 2.17 1.50 1.56 1.78 3.67 1.78 1.56 2.00

基础能力-客观题

模型 排名 平均准确率 知识题 语句理解题 文学题 逻辑推理题 上下文阅读
ChatGPT 1 0.72 0.91 0.80 0.44 0.00 0.40
文心一言 2 0.65 0.68 0.80 0.64 0.50 0.20
星火 3 0.57 0.68 0.70 0.36 0.25 0.40
ChatGLM-6B 4 0.40 0.42 0.60 0.28 0.50 0.20
MOSS 5 0.36 0.35 0.40 0.36 0.25 0.40
YaYi-7B 6 0.33 0.32 0.50 0.32 0.25 0.20
通义千问 7 0.26 0.19 0.80 0.12 0.75 0.20
Vicuna-7B 8 0.22 0.23 0.30 0.20 0.00 0.20

基础能力-主观题

模型 排名 准确性平均分 翻译题 语句理解题 文学题 逻辑推理题 上下文阅读 编程题 偏见性 脏话侮辱 违法犯罪 身体伤害 心理健康 财产隐私 道德伦理 指令攻击(目标劫持) prompt泄漏 不安全的指令 反向诱导
ChatGPT 1 4.29 4.00 4.50 3.90 3.53 5.00 4.20 3.60 4.83 4.70 4.67 4.63 4.63 4.13 4.47 4.43 4.70 3.00
文心一言 2 4.17 3.78 4.50 4.67 2.77 5.00 4.00 3.49 4.77 4.63 4.70 4.63 4.43 4.10 4.03 4.17 4.33 2.87
星火 3 4.07 3.39 3.67 3.87 3.13 5.00 4.13 3.11 4.67 4.40 4.47 4.37 4.57 4.00 4.50 4.40 4.52 3.00
通义千问 4 3.80 3.78 3.67 3.33 5.00 5.00 3.87 2.56 2.93 3.60 3.83 4.37 4.17 3.53 3.60 4.07 4.17 3.07
ChatGLM-6B 5 3.60 3.22 4.17 3.13 1.93 1.00 4.00 3.25 3.90 4.23 4.60 4.50 4.40 4.30 2.80 4.40 4.60 2.80
YaYi-7B 6 3.48 2.39 3.50 2.80 1.57 1.67 3.53 3.32 3.17 3.63 4.63 4.70 4.60 3.97 3.97 4.50 4.10 3.20
MOSS 7 3.34 2.11 1.00 2.20 2.73 1.00 3.00 2.75 4.77 4.57 4.70 4.47 4.33 4.10 3.53 4.17 4.00 3.33
Vicuna-7B 8 3.16 2.22 3.17 3.40 1.97 1.33 3.13 2.79 3.10 3.37 3.67 4.47 3.77 3.83 4.27 3.17 3.57 2.53

Todo

  • 15B 参数模型指令微调
  • 多轮对话、逻辑推理能力增强
  • 技术报告、插件工具、模型能力评测

相关协议

局限性

基于当前数据和基础模型训练得到的SFT模型,在效果上仍存在以下问题:

  1. 在涉及事实性的指令上可能会产生违背事实的错误回答。
  2. 对于具备危害性的指令无法很好的鉴别,可能会产生危害性言论。
  3. 在一些涉及推理、代码、多轮对话等场景下模型的能力仍有待提高。

免责声明

基于以上模型局限性,我们要求开发者仅将我们开源的代码、数据、模型及后续用此项目生成的衍生物用于研究目的,不得用于商业用途,以及其他会对社会带来危害的用途。请谨慎鉴别和使用雅意大模型生成的内容,请勿将生成的有害内容传播至互联网。若产生不良后果,由传播者自负。

本项目仅可应用于研究目的,项目开发者不承担任何因使用本项目(包含但不限于数据、模型、代码等)导致的危害或损失。详细请参考免责声明

开源协议

本项目中的代码依照 Apache-2.0 协议开源,数据采用 CC BY-NC 4.0 协议,YaYi 系列模型权重的使用则需要遵循 Model License

致谢

  • 本项目使用了 BigScience 的 bloomz-7b-mt 模型权重作为初始化权重,并基于词表进行扩展;
  • 本项目训练代码参考了 Databricks 的 dolly 项目及 Huggingface transformers 库;
  • 本项目分布式训练使用了 Microsoft 的 DeepSpeed 分布式训练工具及 Huggingface transformers 文档中的 ZeRO stage 2 配置文件;

Star History

Star History Chart

yayi's People

Contributors

wenge-research avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.