基础知识简介
一、大语言模型(LLM)的概念
LLM定义与特点:处理海量文本,多者可具备数百亿参数,理解语言深度,展现涌现能力。
LLM国内外代表:i.国外有GPT系列、LLaMA等 ii.国内有文心一言、通义千问等。
模型大小与性能能关系:与小模型构架相似,但参数量级提升带来解决复杂任务的显著优势。
LLM应用实例:Chat GPT是LLM的对话应用典范,展示出与人类流畅自然的交互能力。
计算机并不能直接理解字符,例如:“我喜欢你”可以拆解为“我”,“喜欢”,“你”,可以进行排序。所以 大语言模型并不是一个一个字输出,而是一个一个token输出
二、LLM的发展历程
早期语言模型:采用统计学习预测词汇,受限于理解复杂语言规则。
深度学习的引入:Bengio在2003年将深度学习应用于语言模型,增强理解语言的能力。
Transformer架构优势:2018年左右,Transformer模型出现,通过大量文本训练理解语言规则。 大型语言模型时代:随着模型规模扩大,LLM展现出惊人能力,开启新纪元。
三、LLM的特点
在趋动云部署一个自己的大模型
https://eumgrqwyfu.feishu.cn/docx/LfNpdTGmXo79EuxPtyPckOJ9nYd#XJpbdkRZyovZPhxYOnbcnMvQn6e
在上述链接中看到启动环境,接下来:
打开test.py文件
from transformers import AutoModelForCausalLM, AutoTokenizer
导入transformers库中的 加载模型 和 加载 AutoTokenizer的包
model = AutoModelForCausalLM.from_pretrained(
"/gemini/pretrain/Qwen2-0.5B-Instruct", #这一行是大语言模型的路径
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("/gemini/pretrain/Qwen2-0.5B-Instruct")
表示用后面的/gemini/pretrain/Qwen2-0.5B-Instruct"的AutoTokenizer作tokenizer
ps:1个汉字通常会被分为2/2.5个token
prompt = "你是谁?"
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt},
{"role": "asistant", "content": "我是助教."}
]
prompt提示词就是输入给大模型的东西,提示身份或问题的核心
role角色:
①system(说明给大模型的前提条件)
②user(我们)
③assistant(助手,代表大语言模型)作用是明确大语言模型的回答规范
深层解释:前提是你(大模型)是一个助手 我问你是谁 大语言模型回我是助手
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
)
generate里max_new_tokens=XXX表示允许的最大/多token或字
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
提取最后生成的token时需要把前面的input截断,否则可能出现前面的message之后随机出现的情况
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
即实现把token转成字
接下来在环境准备文件中运行实现安装 ,在如下界面中点击terminal
输人python test.py
实现
流式输出
作流式输出需要使用工具 streamer,在流式输出文件中多一行代码
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
同时,该文件中实现多轮对话需要代码
thread = Thread(target=model.generate, kwargs=generate_params)
thread.start()
在对话框中输入exit即可退出对话
流式输出特点:不同在于它是一个字一个字生成的
交互式页面
运行流式输出文件,在该ipynb文件下即可实现对话,但引入streamlit即可美化为交互式界面
在终端进行以下操作
streamlit run one_chat.py
其中 one_chat.py文件中引入import streamlit as st
实现
出现两个IP,在右侧端口中选择添加端口,内部端口输入IP最后4字,用途随便输,添加后复制生成的外部访问,打开该链接,实现交互页面下多轮问答