Hugging Face入门 (AutoClass)

Transformers 提供了 AutoTokenizer 和 AutoModel 这两个类来方便加载预训练模型及其对应的分词器。

AutoTokenizer

AutoTokenizer 是一个用于文本预处理的分词器,它负责将输入文本转换为数字数组,以便输入模型进行处理。分词器会按照一定的规则进行分词,包括如何切分单词以及以何种级别进行切分。您可以根据模型的名称来实例化一个特定的分词器。为了确保分词的一致性,我们建议使用与模型预训练时相同的分词器。

更多关于分词的详细知识,请参考 autoclass

AutoModel

与 AutoTokenizer 类似,AutoModel 提供了一种简单而统一的方式来加载预训练模型。您可以像加载 AutoTokenizer 一样加载 AutoModel。唯一的区别在于选择适用于您任务的正确 AutoModel。您可以在官方文档中找到所需模型的名称。

更多关于 AutoModel 的信息,请参考 automodel

ChatGLM-6B 模型

ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型。您可以在 chatglm-6b 找到关于 ChatGLM-6B 的更多信息。

使用AutoClass加载ChatGLM-6B,实现中文问答

为了实现中文问答,首先需要安装 transformers 和 sentencepiece 库。

1
2
# 安装 transformers 和 sentencepiece 库
!pip install git+https://github.com/huggingface/transformers sentencepiece --quiet

AutoTokenizer生成tokenizer,以便输入模型进行文本处理

使用 AutoTokenizer.from_pretrained 方法加载 ChatGLM-6B 模型。
用tokenizer将中文输入,转换为数字数组。

1
2
3
4
5
6
7
8
9
10
11
from transformers import AutoTokenizer
model_id = "THUDM/chatglm-6b"

# 使用 AutoTokenizer 加载模型
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)

# 用 tokenizer 将中文输入转换为数字数组
encoding = tokenizer("你今天吃了吗?")
encoding

{'input_ids': [5, 98172, 66826, 63964, 31, 130001, 130004]}

AutoModel加载模型,使用tokenizer进行本文分析并输出

使模型在推理阶段获得更佳的性能,达到以较快的速度,得到更准确的输出:

  • .cuda(): 可以将模型加载到 GPU 上,利用GPU进行加速。
  • .half(): 将模型的数据类型从float32改为float16,来减小模型大小并加速计算。
  • model.eval(): 将模型设置为eval模式,下会关闭dropout等随机操作,可以改善推理效果。
1
2
3
4
5
6
7
8
9
10
from transformers import AutoModel

model_id = "THUDM/chatglm-6b"
# 使用 AutoModel 加载模型
model = AutoModel.from_pretrained(model_id, trust_remote_code=True).half().cuda()

print(model.__class__)

# 将模型设置为 eval 模式
model = model.eval()
1
2
3
4
5
6
prompt = "什么是量子化?"
# tokenizer来自于AutoTokenizer
response, history = model.chat(tokenizer, prompt, history=[])
response

量子化是一种数学方法,用于描述量子系统的性质和行为。在量子力学中,量子系统是由一系列微观粒子(称为“粒子”)组成的,这些粒子之间存在着特定的相互作用,使得量子系统具有一些与传统物理量不同的性质,例如量子叠加态和量子纠缠等。\n\n量子化方法可以用于描述量子系统的性质和行为,例如计算量子系统的态和相互作用,研究量子现象的机制,以及开发量子计算机等。在量子化学、量子信息学和量子物理学等领域,量子化方法都扮演着非常重要的角色。

通过以上步骤,您可以使用 ChatGLM-6B 模型实现中文问答,并获得更快速和准确的输出。

总结

Transformers AutoClass 提供了一种为自然语言处理任务加载分词器和模型的便捷方法。

使用AutoTokenizer和AutoModel,可以轻松地预处理文本并加载相应的模型以执行各种任务。

ChatGLM-6B,作为一个强大的语言模型的例子,支持双语问答,可以使用AutoClass加载。

按照给定的步骤,您可以有效地使用ChatGLM-6B实现中文问答。