• 开源教育对话大模型 EduChat


    🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


    一、🚀 前言

    教育是一项对人类身心发展产生影响的社会实践活动,旨在从内在激发人们固有或潜在的素质。因此,我们必须坚持以人为本的教育理念,重点关注个性化、引导式和身心全面发展。

    在这里插入图片描述

    EduChat 是华东师范大学计算机科学与技术学院的 EduNLP 团队开发的开源教育对话大模型。该项目主要研究以预训练大模型为基底的教育对话大模型相关技术,融合多样化的教育垂直领域数据,辅以指令微调、价值观对齐等方法,提供教育场景下自动出题、作业批改、情感支持、课程辅导、高考咨询等丰富功能,服务于广大老师、学生和家长群体,助力实现因材施教、公平公正、富有温度的智能教育。

    用户可以通过本地部署或使用网页 Demo 和 API Demo 与 EduChat 进行交互。未来,团队计划进一步增强模型的逻辑推理能力、个性化辅导能力和工具调用能力。该项目的代码采用 Apache 2.0 协议,数据采用 CC BY-NC 4.0 协议。

    在这里插入图片描述

    Github 项目地址:https://github.com/icalk-nlp/EduChat


    二、🤖 本地部署

    下载 Github 仓库内容至本地 / {/} /远程服务器:

    git clone https://github.com/icalk-nlp/EduChat.git
    cd EduChat
    
    • 1
    • 2

    创建 conda 环境并激活进入:

    conda create --name educhat python=3.8
    conda activate educhat
    
    • 1
    • 2

    安装依赖库(主要是 pytorch 和 transformers):

    # 首先装好 pytorch,安装方法请自行搜索。Linux 服务器安装 pytorch 很简单,使用 conda。示例如下:
    conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch
    
    # 然后安装最新版本的 transformers
    pip install transformers
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、👨‍💻 使用示例

    输入格式:使用 EduChat 时的输入格式为 system_prompt + query。根据所需功能不同从以下的 system_prompt 中选择。base 模型直接使用 query,无需使用 system_prompt。

    开放问答

    system_prompt = \
    "<|system|>"'''你是一个人工智能助手,名字叫EduChat。
    - EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
    - Web search: Disable.
    - Calculators: Disable.
    EduChat的能力
    - Inner Thought: Disable.
    对话主题
    - General: Enable.
    - Psychology: Disable.
    - Socrates: Disable.'''""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    启发式教学

    system_prompt = \
    "<|system|>"'''你是一个人工智能助手,名字叫EduChat。
    - EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
    - Web search: Disable.
    - Calculators: Disable.
    EduChat的能力
    - Inner Thought: Disable.
    对话主题
    - General: Disable.
    - Psychology: Disable.
    - Socrates: Enable.'''""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    情感支持

    system_prompt = \
    "<|system|>"'''你是一个人工智能助手,名字叫EduChat。
    - EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
    - Web search: Disable.
    - Calculators: Disable.
    EduChat的能力
    - Inner Thought: Disable.
    对话主题
    - General: Disable.
    - Psychology: Enable.
    - Socrates: Disable.'''""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    情感支持 (with InnerThought)

    system_prompt = \
    "<|system|>"'''你是一个人工智能助手,名字叫EduChat。
    - EduChat是一个由华东师范大学开发的对话式语言模型。
    EduChat的工具
    - Web search: Disable.
    - Calculators: Disable.
    EduChat的能力
    - Inner Thought: Enable.
    对话主题
    - General: Disable.
    - Psychology: Enable.
    - Socrates: Disable.'''""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    单卡部署。以下是一个简单的调用 educhat-sft-002-7b 生成对话的示例代码,可在单张 A100/A800 或 CPU 运行,使用 FP16 精度时约占用 15GB 显存:

    from transformers import LlamaForCausalLM, LlamaTokenizer
    
    
    tokenizer = LlamaTokenizer.from_pretrained("ecnu-icalk/educhat-sft-002-7b")
    model = LlamaForCausalLM.from_pretrained("ecnu-icalk/educhat-sft-002-7b",torch_dtype=torch.float16,).half().cuda()
    model = model.eval()
    
    query = system_prompt + "<|prompter|>你好<|assistant|>"
    inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
    outputs = model.generate(**inputs, do_sample=True, temperature=0.7,
                             top_p=0.8, repetition_penalty=1.02, max_new_tokens=256
                            )
    response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
    print(response)
    你好!我是EduChat,有什么我可以帮助你的吗? 
    
    query = query + response + "<|prompter|>:给我推荐几本心理相关的书籍<|assistant|>:"
    inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
    outputs = model.generate(**inputs, do_sample=True, temperature=0.7,
                             top_p=0.8, repetition_penalty=1.02, max_new_tokens=256
                            )
    response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
    print(response)
    
    当然,以下是一些关于心理学的经典书籍:
    1.《人性的弱点》(Dale Carnegie):这本书是一本经典的人际关系指南,它介绍了如何与人相处、如何影响他人以及如何建立良好的人际关系。
    
    2.《心理学与生活》(Richard J. Gerrig):这本书是一本介绍心理学的入门读物,它涵盖了各种主题,包括认知、情感、人格和社会心理学。
    
    3.《情绪智商》(Daniel Goleman):这本书介绍了情绪智商的概念,并探讨了情绪智商如何影响我们的生活和工作。
    
    4.《人性的弱点2》(Dale Carnegie):这本书是《人性的弱点》的续集,它提供了更多的技巧和策略,帮助读者更好地与人相处。
    
    5.《心理学导论》(David G. Myers):这本书是一本广泛使用的心理学教材,它涵盖了各种主题,包括感知、记忆、思维、情感和人格。
    希望这些书籍能够帮助你更深入地了解心理学。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    网页 Demo,使用了 Gradio。你可以运行 Github 仓库中的 demo/educhat_gradio.py:

    python educhat_gradio.py --model_path /path/to/educhat_model \
    --top_k 50 \
    --do_sample True \
    --max_new_tokens 512
    
    • 1
    • 2
    • 3
    • 4

    启动 demo 后,你可以将链接分享给朋友,通过网页与 EduChat 交互。


    四、🔎 总结

    从 EduChat-001 到 EduChat-002 的迭代过程中,开发者逐步增强了它的中文能力、忠实度、安全度和有帮助性方面的表现。然而, EduChat-002 仍然是一个早期模型,旅程也才刚刚开始。在未来,开发者们将持续投入对基础模型的研究,并持续推出更为强大的 EduChat 版本,以丰富全球教育大模型生态,加速全球教育信息化进程。

    • 逻辑推理:逻辑推理能力是衡量大模型性能的重要指标,作者计划通过增大语言模型基座、增强特定训练数据等手段强化 EduChat 的逻辑推理能力;
    • 个性化辅导:作者期望的 EduChat 应当是千人千面的,未来希望能够给每个人提供一个独一无二的 EduChat,它将在与你的交互中持续学习,伴随你的成长而成长,成为你的专属助手。
    • 工具调用:语言模型本身具有明显的局限性,例如符号运算能力弱,计划在后续升级 EduChat,使其具备调用外部工具能力,帮助其更好地进行生成。

    尽管开发者对 EduChat 已经做了许多优化,但仍存在以下问题,需要进一步改进

    • 当涉及到事实性指令时,可能会产生错误的回答,与实际事实相悖。
    • 模型回复可能存在偏见,有可能生成危险性言论。
    • 在某些场景中,比如推理、代码、多轮对话等方面,模型的能力仍有待提高。

    鉴于上述模型的局限性,我们要求开发者仅将开源的代码、数据、模型以及由该项目生成的衍生物仅用于研究目的,禁止用于商业用途,以及其他可能对社会带来危害的用途。


    📚️ 参考链接:

  • 相关阅读:
    new Object()到底占用几个字节
    STL - string
    C#:实现动态规划动态硬币兑换算法(附完整源码)
    InsCode Stable Diffusion 美图活动一期——即刻体验!来自 CSDN 的 SD 模型
    Java 并发之 AQS 详解(下)
    DevOps --- Pipeline和Yaml文件
    每日一文(第一天)
    Revel框架快速入门教程
    Vue3项目开发:配置文字两行显示,超出部分用省略号
    【C#】复杂Json的反序列
  • 原文地址:https://blog.csdn.net/fyfugoyfa/article/details/131626724