# 🌟 启创·InnoSpark 🌟 [![Official Website](https://img.shields.io/badge/🌐-Official%20Website-blue?style=for-the-badge)](https://innospark.aiecnu.cn/innospark/) [![Hugging Face](https://img.shields.io/badge/🤗-Hugging%20Face-yellow?style=for-the-badge)](https://huggingface.co/sii-research) [![GitHub](https://img.shields.io/badge/💻-GitHub-black?style=for-the-badge)](https://github.com/Inno-Spark/elmes)

🚀 先进教育大语言模型

**Language / 语言**: [English](README.md) | 中文
--- ## 📖 项目简介 **启创·InnoSpark** 是由上海创智学院和华东师范大学自主研发的先进教育大模型,旨在探索人工智能技术在教育领域中的深度应用。该模型基于国产 Qwen 大语言模型进行二次预训练,并结合子域微调和教育场景的强化学习,推出了 InnoSpark-1.0 版本。 ## 🔗 相关资源 ### 📱 主要产品 - **主页**: [InnoSpark Official](https://innospark.aiecnu.cn/innospark/) - **RM模型**: [InnoSpark-HPC-RM-32B](https://huggingface.co/sii-research/InnoSpark-HPC-RM-32B) - **教育评测系统**: [ELMES](https://github.com/Inno-Spark/elmes) ### 🤖 模型系列 | 模型版本 | 参数规模 | 链接 | |---------|---------|------| | **InnoSpark-min** | 0.5B | [🔗 下载](https://huggingface.co/sii-research/InnoSpark-0.5B-0717) | | **InnoSpark-turbo** | 7B | [🔗 下载](https://huggingface.co/sii-research/InnoSpark-7B-0715) | | **InnoSpark-plus** | 72B | [🔗 标准版](https://huggingface.co/sii-research/InnoSpark-72B-0710) / [🔗 推理版](https://huggingface.co/sii-research/InnoSpark-R-72B-0701) | ### 📊 数据集 - **模型打分数据集**: [HPC-LLM-8k](https://huggingface.co/datasets/ECNU-InnoSpark/HPC-LLM-8k) - **人工打分数据集**: [HPC-Human-8k](https://huggingface.co/datasets/ECNU-InnoSpark/HPC-Human-8k) ## 🚀 快速开始 这里提供了一个使用 `apply_chat_template` 的代码示例,展示如何加载分词器和模型以及如何生成内容。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer device = "cuda" # 加载模型的设备 Q = "" A = "" prompt = f'''用户问了一个问题如下: {Q} 下面是模型给的回复如下: {A} 请你进行仔细的思考从意义深度,创造力,个性化3个角度分别进行考虑,对模型给出的回答进行打分,评分范围为0,1,2。分数越高表示模型在该方面的能力表现越好。 具体的评分要求如下: 意义深度方面: 1.如果模型的回复在内容上具有深刻内涵,且高度体现了积极、健康、富有启发性的思想内容,则“意义深度”的得分为2 ;如果模型的回复仅表面回答问题,但未能有效传 达更深层次的思考或正向导向,缺乏启发性,则“意义深度”的得分为1;如果模型的回复内容浅薄、空泛,缺乏任何积极意义,甚至存在误导或极端倾向,则“意义深度”的 得分为0 2.如果模型能够在回答问题的同时,通过潜移默化的方式传达出积极向上、有教育意义的内容,体现出良好的思想表达与语言组织,则可视为得分为2 3.如果模型本有机会通过更高质量的内容传递有意义的信息,但最终未能展现出来,得分为1 4.如果回答内容缺乏任何内涵,甚至引起误解或产生负面情绪影响,则得分为0 创造力方面: 1.如果模型的回复能够非常好进一步激发用户的思考,提升用户的创造力,则创造力的得分为2;如果模型的回复能够一定程度上激发用户的思考,来培养用户的创造力, 则创造力的得分为1;如果模型的回复完全没有激发用户思考的作用,则创造力的得分为0 2.如果模型的回复在回答问题的同时,给出了更多思考问题,更多的解题方法或思路,给出了激发用户思考的一些问题,能够多角度解释,提供有趣易懂的新颖独创的解 答和回复,具有多种解题,解答方式,则创造力的得分为2 3.如果模型的回复在回答问题的同时,一定程度上给出了更多思考问题,更多的解题方法或思路,但仍然有改进空间,则创造力的得分为1 4.如果模型的回复只是简单的回答问题,没有任何激发用户思考的回复内容,则创造力的得分为0 个性化方面: 1.如果用户的问题中不存在任何用户的个性化信息(个人信息或个人画像,性格,年龄身份等),则个性化的得分为2 2.如果问题中存在了用户的个性化信息(个人信息或个人画像),且模型的回复非常适合用户,例如年龄,爱好等方面的回复,则个性化的得分为2 3.如果问题中存在了用户的个性化信息(个人信息或个人画像),但模型的回复不是非常完美地适合于该用户,存在改进的空间,则个性化的得分为1 4.如果问题中存在了用户的个性化信息(个人信息或个人画像),但模型的回复是非常通用的,完全没有考虑到用户的信息来给出更好的回复,则个性化的得分为0''' messages = [ {"role": "system", "content": "You are InnoSpark(启创), created by Shanghai Innovation Institute (上海创智学院) and East China Normal University(华东师范大学). You are a helpful assistant."}, {"role": "user", "content": prompt} ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt").to(device) generated_ids = model.generate( model_inputs.input_ids, max_new_tokens=512 ) generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] ``` ### VLLM 部署 我们推荐使用 4 块 A100 GPU 部署我们的模型。您可以在终端中使用以下代码运行 vllm 服务端: ```python python -m vllm.entrypoints.openai.api_server --served-model-name InnoSpark --model path/to/InnoSpark --gpu-memory-utilization 0.98 --tensor-parallel-size 4 --port 6000 ``` 然后,您可以使用以下代码部署客户端: ```python import requests import json def Innospark_stream(inputs,history): url = 'http://loaclhost:6000/v1/chat/completions' history+=[{"role": "user", "content": inputs},] headers = {"User-Agent": "vLLM Client"} pload = { "model": "InnoSpark", "stream": True, "messages": history } response = requests.post(url, headers=headers, json=pload, stream=True) for chunk in response.iter_lines(chunk_size=1, decode_unicode=False, delimiter=b"\n"): if chunk: string_data = chunk.decode("utf-8") try: json_data = json.loads(string_data[6:]) delta_content = json_data["choices"][0]["delta"]["content"] assistant_reply+=delta_content yield delta_content except KeyError as e: delta_content = json_data["choices"][0]["delta"]["role"] except json.JSONDecodeError as e: history+=[{ "role": "assistant", "content": assistant_reply, "tool_calls": [] },] delta_content='[DONE]' assert '[DONE]'==chunk.decode("utf-8")[6:] inputs='hi' history=[] for response_text in Innospark_stream(inputs,history): print(response_text,end='') ``` ## 🌟 核心特性 ### 🎯 开源产品矩阵
**1. 📚 InnoSpark模型系列** - 包含6个不同参数规模的模型:min(0.5B)、turbo(7B)、plus(72B)及其对应的推理模型R版本 **2. 🔍 ELMES评估系统** - Education Language Model Evaluation System - 面向教育任务的自动化评估系统 - 助力教学场景下的大模型能力持续优化 **3. 🛠️ COCLP数据清洗管线** - Corpus Cleansing Pipeline - 基于ComfyUI的可视化节点式框架 - 支持OCR、音视频转录、格式转换、PII去除、文本过滤等功能 **4. ⭐ HPC-RM奖励模型** - Helpful, Personalization, and Creativity Reward Model - 提供有用性、个性化、创造力3个教育维度的打分 - 配套模型打分和人工打分数据集
## 📈 性能表现 我们在4个关键教育场景中均取得了最优表现: ### 🏆 评测结果 | 场景 | 表现 | |------|------| | 📝 知识点讲解 | ![知识点讲解](score/demo1.png) | | 🧭 引导式讲题 | ![引导式讲题](score/demo2.png) | | 📚 跨学科教案 | ![跨学科教案](score/demo3.png) | | 🎭 情景化出题 | ![情景化出题](score/demo4.png) | ### 📊 详细评估表格 | 场景 | 评估表格 | |------|----------| | 📝 知识点讲解 | ![知识点讲解表格](table/table1.png) | | 🧭 引导式讲题 | ![引导式讲题表格](table/table2.png) | | 📚 跨学科教案 | ![跨学科教案表格](table/table3.png) | | 🎭 情景化出题 | ![情景化出题表格](table/table4.png) | ### 🎨 应用示例 | 场景 | 演示 | |------|------| | 📖 知识点讲解 | ![知识点讲解示例](demo/demo1.png) | | 🎯 引导式讲题 | ![引导式讲题示例](demo/demo2.png) | | 🌟 跨学科教案 | ![跨学科教案示例](demo/demo3.png) | | 🎪 情景化出题 | ![情景化出题示例](demo/demo4.png) | ## 🏛️ 技术支持 本项目由华东师范大学智能教育学院和上海创智学院(Shanghai Innovation Institute)联合开发,奖励模型使用了上海创智学院提供的SiiRL训练框架进行训练。 ## 📄 许可证 请查看相关模型页面了解具体的许可证信息。 ---
## 🤝 联系与合作 **华东师范大学** [![Website](https://img.shields.io/badge/🌐-访问官网-brightgreen)](https://innospark.aiecnu.cn/innospark/) [![Email](https://img.shields.io/badge/📧-联系我们-red)](mailto:contact@example.com) --- 🚀 用AI赋能教育