上一篇文章末尾使用了在线大模型压缩文本生成摘要,但该方式会消耗Token,不便初学者长期使用,更好的办法是采用离线大模型来生成文本摘要。
一、离线大模型的种类
国内常用的离线大模型有阿里Qwen、智谱GLM、深度求索DeepSeek、百度文心等等,以千问的文本大模型为例,又有Qwen1.5-1.8B-Chat和Qwen1.5-0.5B-Chat两种。
Qwen1.5是一系列不同大小的解码器语言模型,包括基础语言模型及其对齐的聊天模型。它基于Transformer架构,使用SwiGLU激活函数、注意力QKV偏置、组查询注意力、滑动窗口注意力与全注意力混合等技术。此外,Qwen1.5还提供了改进后适应多种自然语言和代码的分词器。
其中Qwen1.5-1.8B-Chat的模型页面为 https://modelscope.cn/models/Qwen/Qwen1.5-1.8B-Chat ,名称中的1.8B指的是18亿参数(1.8 Billion),模型文件大小为3.69GB。
Qwen1.5-0.5B-Chat的模型页面为 https://modelscope.cn/models/Qwen/Qwen1.5-0.5B-Chat ,名称中的0.5B指的是5亿参数(0.5 Billion),模型文件大小为1.25GB。
对于大模型来说,参数的数量就是模型的“脑子大小”,越多越好。
参数越大(比如1.8B),大模型越聪明、懂得多、逻辑好、写文章 / 推理更强;缺点是占内存 / 硬盘更大、对电脑配置要求更高、跑得慢。
参数越小(比如0.5B),大模型越傻瓜,复杂推理、写长文不行,只能日常聊天、简单问答;优点是占用空间小、手机 / 低配电脑都能离线跑、速度飞快。
本教程涉及到的代码使用场合,推荐使用Qwen1.5-1.8B-Chat,因为0.5B的大模型往往给不出令人满意的回答。
二、下载离线大模型
在下载离线大模型前,要先在命令行执行下面的pip安装命令:
pip install modelscope接着命令行通过cd命令进入Python工程的所在目录,再执行下面的模型下载命令:
modelscope download --model Qwen/Qwen1.5-1.8B-Chat --local_dir qwen1.5-1.8b-chat上面下载命令的“--model”参数表示离线大模型为“Qwen/Qwen1.5-1.8B-Chat”,而“--local_dir”参数表示离线大模型的本地保存目录。
注意Qwen1.5-1.8B-Chat的总大小为3.69GB,下载过程较耗时,请耐心等待。下载完毕,即可在Python工程的目录下方找到qwen1.5-1.8b-chat文件夹,里面保存的便是Qwen1.5-1.8B-Chat的具体模型文件。
三、使用离线大模型输出摘要
接下来演示如何使用Qwen1.5-1.8B-Chat对一段文本生成摘要。在编写Python代码前,要先在命令行执行下面的pip安装命令:
pip install transformers然后编写下面的Python摘要测试代码:
from transformers import AutoTokenizer, AutoModelForCausalLM
model_path = "./qwen1.5-1.8b-chat" # 离线大模型的本地保存目录
def local_model_summary(text: str, max_new_tokens=256) -> str:
"""
加载本地离线模型 Qwen1.5-1.8B-Chat 做摘要
【无需联网、无需下载、纯本地运行】
"""
# 加载本地分词器 + 本地模型(完全离线)
tokenizer = AutoTokenizer.from_pretrained(
model_path,
trust_remote_code=True # Qwen 必须加这个
)
model = AutoModelForCausalLM.from_pretrained(
model_path,
trust_remote_code=True, # Qwen 必须加这个
dtype="auto",
device_map="auto"
).eval()
# 构造 Qwen1.5 官方对话格式
messages = [
{"role": "system", "content": "请对用户输入的内容做精简摘要,摘要文字压缩在50字以内"},
{"role": "user", "content": text}
]
# 官方模板构造
text_input = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = tokenizer(
[text_input],
return_tensors="pt",
truncation=True
).to(model.device)
# 离线生成摘要
outputs = model.generate(
**inputs,
max_new_tokens=max_new_tokens, # 返回文本最多占用多少Token
temperature=0.3,
top_p=0.7,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
# 提取摘要结果
response = outputs[0][len(inputs["input_ids"][0]):]
summary = tokenizer.decode(response, skip_special_tokens=True)
return summary.strip()
if __name__ == "__main__":
content = """
火山方舟是火山引擎推出的大模型平台,提供模型训练、推理、评测、精调等全方位功能与服务。
平台支持多种主流大模型接入,具有稳定可靠、安全互信的特点。
企业可以通过火山方舟快速构建自己的AI应用,降低开发成本与技术门槛。
"""
print("正在使用【本地离线模型】生成摘要...\n")
result = local_model_summary(content, max_new_tokens=28)
print("【离线摘要结果】")
print("-", result)运行上面的Python代码,输出日志结果如下:
【离线摘要结果】
- 火山引擎推出火神引擎平台,集模型训练、推理、评测、精调于一体,为企业构建AI应用节省开发成本和技术可见离线大模型Qwen1.5-1.8B-Chat输出了原始文本经过压缩后的摘要文字,还支持设置返回内容的Token长度(max_new_tokens),并且不消耗Token,适合初学者练习AI应用开发。
本系列的AI应用开发文章目录为《15天学会AI应用开发全目录(零基础小白,零Token消耗)》。