MindNLP ChatGLM-6B StreamChat
MindNLP ChatGLM-6B StreamChat是基于MindNLP框架和ChatGLM-6B模型实现的聊天应用,利用自然语言处理技术,实现与用户的自然语言交流。这样的应用可以广泛应用于智能客服、在线助理和社交聊天等场景。
在当前技术环境下,AI大模型的应用不仅需要研究者具备深厚的数学基础和编程能力,还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法,AI大模型的应用能够不断提升模型的准确性和效率,为人类生活和工作带来更多便利。使用MindNLP框架和ChatGLM-6B模型构建一个聊天机器人应用,正是这种技术进步的具体体现。
MindNLP
MindNLP是一个功能强大的开源自然语言处理(NLP)库,基于MindSpore框架开发。作为当前技术生态中的一部分,MindNLP继承并发扬了MindSpore的多种优势,如对多种硬件平台和操作系统的支持,以及在模型训练和推理方面的速度优势。以下是MindNLP相关介绍:
- 框架与支持模型
- 基于MindSpore:MindNLP是基于MindSpore开发的,这是一个为深度学习而生的框架,能够支持多种硬件平台和操作系统。
- 大型语言模型:MindNLP支持包括Llama、GLM、RWKV等在内的业界领先的大语言模型,涵盖了预训练、微调及推理等功能。
- 模型兼容性:MindNLP兼容Hugging Face的transformers-like API,使得60多个模型如BERT、Roberta、GPT2、T5等易于使用。
- 数据处理与工具集
- 数据集加载:默认使用datasets lib作为数据集加载器,支持多种有用的数据集。
- NLP任务覆盖:提供语言模型、机器翻译、问答系统、情感分析、序列标注、文摘生成等NLP任务。
- 模型训练:支持灵活的模型训练,包括分布式训练和多卡并行训练,以及提供多种优化算法和正则化手段。
- 安装与版本
- 安装方式:用户可以通过Pypi或Git直接安装MindNLP,支持从源代码进行安装。
- 版本兼容性:MindNLP有多个版本,不同的版本间支持的MindSpore版本和Python版本不同。
- 应用场景与实际意义
- 广泛应用:适用于智能客服、智能助手、智能推荐等多个领域,助力企业快速搭建NLP应用。
- 社区支持:在Gitee和GitHub上拥有活跃的社区,提供丰富的资源和帮助,以及分享经验和技巧。
此外,MindNLP不仅提供了一个平台来解决自然语言处理任务,还包含了许多NLP任务中常用的方法。考虑到用户的背景和需求,MindNLP的设计兼顾了易用性和灵活性。一方面,初学者可以通过简单的脚本和示例快速开始NLP任务;另一方面,经验丰富的研究者和工程师可以根据自己的需要调整模型结构和算法,以解决更复杂的问题。
总的来说,MindNLP是一款基于MindSpore的开源NLP库,它提供了全面的数据处理、友好的模型工具集和灵活的模型训练,支持多种NLP任务和大型语言模型。凭借良好的社区支持和丰富的应用场景,它为开发者和企业提供了强大而便捷的自然语言处理能力。无论是想要构建一个聊天机器人,还是分析客户反馈,MindNLP都是一个值得考虑的选择。
ChatGLM-6B
ChatGLM-6B是一款支持中英双语的对话语言模型,拥有62亿参数,可在消费级显卡上部署。它基于General Language Model (GLM)架构,为用户提供强大的自然语言处理能力。以下将详细介绍ChatGLM-6B的各个方面:
1. 模型架构与推理流程
- 架构基础:ChatGLM-6B基于清华大学提出的GLM架构,这是一种结合自编码和自回归预训练方式的模型。
- 模型规模:该模型拥有62亿参数,在各种复杂任务中表现出色。
- 推理流程:ChatGLM-6B的推理过程包括输入分词、嵌入Embedding、通过多个GLMBlock进行计算,最终生成下一个token。
2. 优势与特点
- 中英双语支持:ChatGLM-6B不仅支持中文,还支持英文,适用于跨语言的研究和应用。
- 高效部署:量化技术使得该模型可以在消费级显卡上运行,降低了硬件需求。
- 易于使用:官方提供了详细的安装和使用指南,方便用户上手。
3. 应用场景与价值
- 聊天机器人:适用于构建娱乐、教育、客服等类型的聊天机器人,提供自然、有趣的对话体验。
- 对话生成与分析:用于生成各种风格的对话文本,并可进行对话分析,提升对话质量和效果。
- 多领域应用:除了对话应用,还可以用于语言学习、信息检索、问答系统等多种场景。
4. 性能与优化
- 上下文长度:ChatGLM-6B支持较长的上下文长度,能进行更多轮次的对话。
- 量化与推理速度:通过Multi-Query Attention技术和INT4量化,降低显存占用并提高推理速度。
- 开源与社区支持:作为开源项目,ChatGLM-6B享有广泛的社区支持,方便用户交流经验。
5. 训练数据与获取
- 数据集来源:ChatGLM-6B的训练使用了庞大且丰富的中英文数据集,这些数据来自多种来源,如网站、书籍和公共数据库。
- 版权与获取:数据集的版权通常归属原作者或机构,部分数据集可以公开获取,但需要遵守相应的使用协议。
总的来说,ChatGLM-6B是一个功能强大且易于使用的中英双语对话语言模型。其庞大的参数规模和高效的部署方式使其在各种自然语言处理任务中表现出色。在实际应用中,根据需求合理选择硬件配置,以获得更好的性能和体验。
StreamChat
StreamChat是一个高效、实时的聊天服务应用。以下是关于StreamChat的介绍:
- 实时交互性
- 快速响应:StreamChat设计用于支持实时交互,能够快速响应用户的输入,提供及时的反馈和回答。
- 无缝对话体验:通过优化算法,StreamChat能够流畅地处理多轮对话,使用户感觉像是在与真人交谈。
- 用户体验优化
- 上下文理解:StreamChat能够理解对话的上下文,提供更加准确和相关的回复。
- 个性化设置:用户可以根据自己的需求定制聊天体验,包括语言风格、回答长度等。
- 技术实现
- 模型集成:StreamChat可能集成了诸如ChatGLM-6B这样的大型语言模型,以提供强大的自然语言处理能力。
- 持续学习:StreamChat可以通过不断的用户交互来学习和改进,从而提升其智能水平和服务质量。
- 应用场景
- 客户服务:StreamChat可以作为智能客服,帮助处理用户咨询,减轻人工客服的负担。
- 教育辅助:在教育领域,StreamChat可以辅助教学,提供即时的问题解答和学习资源。
- 未来发展
- 功能扩展:随着技术的发展,StreamChat有望引入更多功能,如语音识别、情感分析等。
- 平台融合:StreamChat可以与其他平台和系统集成,如社交媒体、电子商务等,拓宽其应用范围。
总的来说,StreamChat是一个基于强大自然语言处理技术的实时聊天应用,它不仅能够提供流畅的对话体验,还能够根据用户的个性化需求进行定制。随着技术的不断进步,StreamChat有潜力在多个领域发挥重要作用,成为人机交互的重要工具。
实践案例
实践环境
python : Python 3.9.19
安装环境
pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14
pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindnlp mdtex2html
完整依赖环境
pip list
Package Version
------------------------------ --------------
absl-py 2.1.0
addict 2.4.0
aiofiles 22.1.0
aiohttp 3.9.5
aiosignal 1.3.1
aiosqlite 0.20.0
altair 5.3.0
annotated-types 0.7.0
anyio 4.4.0
argon2-cffi 23.1.0
argon2-cffi-bindings 21.2.0
arrow 1.3.0
astroid 3.2.2
asttokens 2.0.5
astunparse 1.6.3
async-timeout 4.0.3
attrs 23.2.0
auto-tune 0.1.0
autopep8 1.5.5
Babel 2.15.0
backcall 0.2.0
beautifulsoup4 4.12.3
black 24.4.2
bleach 6.1.0
certifi 2024.6.2
cffi 1.16.0
charset-normalizer 3.3.2
click 8.1.7
cloudpickle 3.0.0
colorama 0.4.6
comm 0.2.1
contextlib2 21.6.0
contourpy 1.2.1
cycler 0.12.1
dataflow 0.0.1
datasets 2.20.0
debugpy 1.6.7
decorator 5.1.1
defusedxml 0.7.1
dill 0.3.8
dnspython 2.6.1
download 0.3.5
easydict 1.13
email_validator 2.2.0
entrypoints 0.4
evaluate 0.4.2
exceptiongroup 1.2.0
executing 0.8.3
fastapi 0.111.0
fastapi-cli 0.0.4
fastjsonschema 2.20.0
ffmpy 0.3.2
filelock 3.15.3
flake8 3.8.4
fonttools 4.53.0
fqdn 1.5.1
frozenlist 1.4.1
fsspec 2024.5.0
gitdb 4.0.11
GitPython 3.1.43
gradio 4.26.0
gradio_client 0.15.1
h11 0.14.0
hccl 0.1.0
hccl-parser 0.1
httpcore 1.0.5
httptools 0.6.1
httpx 0.27.0
huggingface-hub 0.23.4
hypothesis 6.105.1
idna 3.7
importlib-metadata 7.0.1
importlib_resources 6.4.0
iniconfig 2.0.0
ipykernel 6.28.0
ipympl 0.9.4
ipython 8.15.0
ipython-genutils 0.2.0
ipywidgets 8.1.3
isoduration 20.11.0
isort 5.13.2
jedi 0.17.2
jieba 0.42.1
Jinja2 3.1.4
joblib 1.4.2
json5 0.9.25
jsonpointer 3.0.0
jsonschema 4.22.0
jsonschema-specifications 2023.12.1
jupyter_client 7.4.9
jupyter_core 5.7.2
jupyter-events 0.10.0
jupyter-lsp 2.2.5
jupyter-resource-usage 0.7.2
jupyter_server 2.14.1
jupyter_server_fileid 0.9.2
jupyter-server-mathjax 0.2.6
jupyter_server_terminals 0.5.3
jupyter_server_ydoc 0.8.0
jupyter-ydoc 0.2.5
jupyterlab 3.6.7
jupyterlab_code_formatter 2.2.1
jupyterlab_git 0.50.1
jupyterlab-language-pack-zh-CN 4.2.post1
jupyterlab-lsp 4.3.0
jupyterlab_pygments 0.3.0
jupyterlab_server 2.27.2
jupyterlab-system-monitor 0.8.0
jupyterlab-topbar 0.6.1
jupyterlab_widgets 3.0.11
kiwisolver 1.4.5
latex2mathml 3.77.0
Markdown 3.6
markdown-it-py 3.0.0
MarkupSafe 2.1.5
matplotlib 3.9.0
matplotlib-inline 0.1.6
mccabe 0.6.1
mdtex2html 1.3.0
mdurl 0.1.2
mindnlp 0.3.1
mindspore 2.2.14
mindvision 0.1.0
mistune 3.0.2
ml_collections 0.1.1
ml-dtypes 0.4.0
mpmath 1.3.0
msadvisor 1.0.0
multidict 6.0.5
multiprocess 0.70.16
mypy-extensions 1.0.0
nbclassic 1.1.0
nbclient 0.10.0
nbconvert 7.16.4
nbdime 4.0.1
nbformat 5.10.4
nest-asyncio 1.6.0
notebook 6.5.7
notebook_shim 0.2.4
numpy 1.26.4
op-compile-tool 0.1.0
op-gen 0.1
op-test-frame 0.1
opc-tool 0.1.0
opencv-contrib-python-headless 4.10.0.84
opencv-python 4.10.0.84
opencv-python-headless 4.10.0.84
orjson 3.10.5
overrides 7.7.0
packaging 23.2
pandas 2.2.2
pandocfilters 1.5.1
parso 0.7.1
pathlib2 2.3.7.post1
pathspec 0.12.1
pexpect 4.8.0
pickleshare 0.7.5
pillow 10.3.0
pip 24.1
platformdirs 4.2.2
pluggy 1.5.0
prometheus_client 0.20.0
prompt-toolkit 3.0.43
protobuf 5.27.1
psutil 5.9.0
ptyprocess 0.7.0
pure-eval 0.2.2
pyarrow 16.1.0
pyarrow-hotfix 0.6
pycodestyle 2.6.0
pycparser 2.22
pyctcdecode 0.5.0
pydantic 2.7.4
pydantic_core 2.18.4
pydocstyle 6.3.0
pydub 0.25.1
pyflakes 2.2.0
Pygments 2.15.1
pygtrie 2.5.0
pylint 3.2.3
pyparsing 3.1.2
pytest 7.2.0
python-dateutil 2.9.0.post0
python-dotenv 1.0.1
python-json-logger 2.0.7
python-jsonrpc-server 0.4.0
python-language-server 0.36.2
python-multipart 0.0.9
pytoolconfig 1.3.1
pytz 2024.1
PyYAML 6.0.1
pyzmq 25.1.2
referencing 0.35.1
regex 2024.5.15
requests 2.32.3
rfc3339-validator 0.1.4
rfc3986-validator 0.1.1
rich 13.7.1
rope 1.13.0
rpds-py 0.18.1
ruff 0.4.10
safetensors 0.4.3
schedule-search 0.0.1
scikit-learn 1.5.0
scipy 1.13.1
semantic-version 2.10.0
Send2Trash 1.8.3
sentencepiece 0.2.0
setuptools 69.5.1
shellingham 1.5.4
six 1.16.0
smmap 5.0.1
sniffio 1.3.1
snowballstemmer 2.2.0
sortedcontainers 2.4.0
soupsieve 2.5
stack-data 0.2.0
starlette 0.37.2
sympy 1.12.1
synr 0.5.0
te 0.4.0
terminado 0.18.1
threadpoolctl 3.5.0
tinycss2 1.3.0
tokenizers 0.19.1
toml 0.10.2
tomli 2.0.1
tomlkit 0.12.0
toolz 0.12.1
tornado 6.4.1
tqdm 4.66.4
traitlets 5.14.3
typer 0.12.3
types-python-dateutil 2.9.0.20240316
typing_extensions 4.11.0
tzdata 2024.1
ujson 5.10.0
uri-template 1.3.0
urllib3 2.2.2
uvicorn 0.30.1
uvloop 0.19.0
watchfiles 0.22.0
wcwidth 0.2.5
webcolors 24.6.0
webencodings 0.5.1
websocket-client 1.8.0
websockets 11.0.3
wheel 0.43.0
widgetsnbextension 4.0.11
xxhash 3.4.1
y-py 0.6.2
yapf 0.40.2
yarl 1.9.4
ypy-websocket 0.8.4
zipp 3.17.0
实践代码
# 配置网络线路
export HF_ENDPOINT=https://hf-mirror.com
# 下载权重大约需要10分钟
from mindnlp.transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import gradio as gr
import mdtex2html
model = AutoModelForSeq2SeqLM.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope").half()
model.set_train(False)
tokenizer = AutoTokenizer.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope")
下载预训练模型文件比较耗时,注意网络别断
prompt = '你好'
history = []
response, _ = model.chat(tokenizer, prompt, history=history, max_length=20)
print(response)