/EduChat

An open-source educational chat model from ICALK, East China Normal University. 开源中英教育对话大模型。(通用基座模型,GPU部署,数据清理) 致敬: LLaMA, MOSS, BELLE, Ziya

Primary LanguagePython

EduChat

EduChat

Code License Data License Generic badge Generic badge

目录


🗒️ 开源清单

模型

  • educhat-search-002-7b(近期开源):在educhat-sft-002-7b基础上加入搜索功能
  • educhat-sft-002-7b:在educhat-base-002-7b基础上,使用我们构建的教育领域多技能数据微调后得到
  • educhat-base-002-7b:使用educhat-sft-002-data-osm数据训练得到
  • educhat-sft-002-13b(近期开源):训练方法与educhat-sft-002-7b相同,模型大小升级为13B
  • educhat-base-002-13b:训练方法与educhat-base-002-7b相同,模型大小升级为13B

数据

代码

数据质量对于模型性能至关重要,为此,我们开源了数据清洗工具CleanTool(可选使用GPU Turbo Speed Up),包括数据去重,低质量数据删除等功能,未来将继续不断完善。

🖋️ 介绍

教育是影响人的身心发展的社会实践活动,旨在把人所固有的或潜在的素质自内而外激发出来。因此,必须贯彻“以人为本”的教育理念,重点关注人的个性化、引导式、身心全面发展。为了更好地助力”以人为本“的教育,华东师范大学计算机科学与技术学院的EduNLP团队探索了针对教育垂直领域的对话大模型EduChat相关项目研发。该项目主要研究以预训练大模型为基底的教育对话大模型相关技术,融合多样化的教育垂直领域数据,辅以指令微调、价值观对齐等方法,提供教育场景下自动出题、作业批改、情感支持、课程辅导、高考咨询等丰富功能,服务于广大老师、学生和家长群体,助力实现因材施教、公平公正、富有温度的智能教育。

基础能力

image

开放问答

image

情感支持

image

作文批改

image

启发式教学

image

🤖 本地部署

下载安装

  1. 下载本仓库内容至本地/远程服务器
git clone https://github.com/icalk-nlp/EduChat.git
cd EduChat
  1. 创建conda环境
conda create --name educhat python=3.8
conda activate educhat
  1. 安装依赖
# 首先安装pytorch,安装方法请自行百度。
# 然后安装最新版本的transformers
pip install transformers

使用示例

输入格式

使用EduChat时,sft模型的输入格式为system_prompt + query。根据所需功能不同从以下的system_prompt中选择。base模型在使用时不需要添加system_prompt。

开放问答

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Enable.
- Psychology: Disable.
- Socrates: Disable.'''"</s>"

启发式教学

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Disable.
- Psychology: Disable.
- Socrates: Enable.'''"</s>"

情感支持

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Disable.
- Psychology: Enable.
- Socrates: Disable.'''"</s>"

情感支持(with InnerThought)

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Enable.
对话主题
- General: Disable.
- Psychology: Enable.
- Socrates: Disable.'''"</s>"

单卡部署

以下是一个简单的调用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|>你好</s><|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 + "</s><|prompter|>:给我推荐几本心理相关的书籍</s><|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):这本书是一本广泛使用的心理学教材它涵盖了各种主题包括感知记忆思维情感和人格希望这些书籍能够帮助你更深入地了解心理学

网页Demo

Gradio

你可以运行本仓库中的demo/educhat_gradio.py

python educhat_gradio.py --model_path /path/to/educhat_model \
--top_k 50 \
--do_sample True \
--max_new_tokens 512

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

Api Demo

你可以运行仓库中的demo/educhat_api.py来对外提供一个简单的api服务

python educhat_api.py

启动api服务后,你可以通过网络调用来与EduChat交互

## curl EduChat
curl -X POST "http://localhost:19324" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你是谁?"}'

首次调用,你会得到一个api服务返回的uid

{"response":"\n<|Worm|>: 你好,有什么我可以帮助你的吗?","history":[["你好","\n<|Worm|>: 你好,有什么我可以帮助你的吗?"]],"status":200,"time":"2023-04-28 09:43:41","uid":"10973cfc-85d4-4b7b-a56a-238f98689d47"}

你可以在后续的对话中填入该uid来和EduChat进行多轮对话

## curl EduChat multi-round
curl -X POST "http://localhost:19324" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你是谁?", "uid":"10973cfc-85d4-4b7b-a56a-238f98689d47"}'

🚧 未来计划

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

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

📃 开源协议、模型局限、使用限制与免责声明

本项目所含代码采用Apache 2.0协议,数据采用CC BY-NC 4.0协议。

尽管我们对EduChat进行了优化,但仍存在以下问题,需要进行改进:

  • 当涉及到事实性指令时,可能会产生错误的回答,与实际事实相悖。

  • 模型回复可能存在偏见,有可能生成危险性言论。

  • 在某些场景中,比如推理、代码、多轮对话等方面,模型的能力仍有待提高。

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

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

❤️ 致谢