大语言模型
大语言模型
一、大型语言模型(LLM)概念
1、LLM定义、特点、核心:
处理海量文本,多者可以具备数百亿参数,理解语言深度,展现涌现能力
它的核心是注意力机制 :通过注意力机制,transformer能够聚焦于输入序列中的重要部分,类似于人类阅读时关注关键词
2、模型大小与性能关系 :
与小模型 架构相似,但参数量级提升带来解决复杂任务的显著优势
3、LLM国内外代表:
国外有GPT系列、LLaMA等,国内有文心一言等,均表现强大
4、LLM应用示例:
ChatGPT是LLM的对话应用典范,展示出与人类流畅自然地交互能力
二、LLM的发展历程
1、早期语言模型
采用统计学习预测词汇,受限于理解复杂语言规则。
2、深度学习的引入
Bengio在2003年将深度学习应用于语言模型,增强理解语言的能力。
3、Transformer架构优势
2018年左右,Transformer模型出现,通过大量文本训练理解语言规
则。
4、大型语言模型时代
随着模型规模扩大,LLM展现出惊人能力,开启新纪元。
三、代码分析
1、导入库
from transformers import AutoModelForCausalLM, AutoTokenizer
2、将模型加载到cuda设备上,这通常意味着使用GPU来加速模型的计算。
device = "cuda" # the device to load the model onto
3、使用AutoModelForCausalLM.from_pretrained方法加载预训练的模型。这里指定了模型的路径、数据类型自动选择、设备映射自动选择。
model = AutoModelForCausalLM.from_pretrained(
"/gemini/pretrain/Qwen2-0.5B-Instruct",
torch_dtype="auto",
device_map="auto"
)
4、使用AutoTokenizer.from_pretrained方法加载与模型匹配的分词器。
tokenizer = AutoTokenizer.from_pretrained("/gemini/pretrain/Qwen2-0.5B-Instruct")
5、创建一个包含系统角色和用户角色的消息列表,用户角色的内容是“你是谁?”。然后使用分词器的apply_chat_template方法将这些消息转换为模型可以理解的格式。
prompt = "你是谁?"
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
6、使用分词器将文本转换为模型可以理解的输入格式,并将输入移动到之前设置的设备上。
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
7、使用模型的generate方法生成文本,这里设置最多生成512个新的标记(tokens)。
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
)
8、从生成的文本中移除输入部分的标记,只保留新生成的文本。
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
9、使用分词器的batch_decode方法将生成的标记解码为可读的文本。
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
10、最后,打印出模型生成的文本。
print(response)
四、流式输出
`
import torch`
`from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer`
`from threading import Thread`
`device = "cuda"`
`model_name = "/gemini/pretrain/Qwen2-0.5B-Instruct"`
`model = AutoModelForCausalLM.from_pretrained(model_name).to(device)`
`tokenizer = AutoTokenizer.from_pretrained(model_name)`
`streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)`
`messages = [`
`{"role": "system", "content": "You are a helpful assistant."},`
`]
`
`
def stream_generate(prompt, model, tokenizer, device):`
`messages.append({"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)`
`generate_params = dict(`
`inputs=model_inputs.input_ids,`
`max_new_tokens=512,`
`do_sample=True,`
`top_k=50,`
`temperature=0.7,`
`pad_token_id=tokenizer.eos_token_id,`
``streamer=streamer`
`)`
`thread = Thread(target=model.generate, kwargs=generate_params)thread.start()`
`generated_text = ""`
`for new_text in streamer:`
`generated_text += new_text`
`print(new_text, end='', flush=True)`
`print()`
`#generated_text`
`messages.append({"role": "user", "content": generated_text})
`
`#多轮对话`
`while True:`
`user_input = input("User: ")`
`if user_input.lower() == 'exit':`
`print("Exiting...")`
`break`
``
`#生成回复并流式输出`
`print("Assistant: ", end="")`
`stream_generate(user_input, model, tokenizer, device)v`
五、stable diffusion图像生成方法
1、主要组成部分:
文本编码器、图像解码器、噪声预测器
2、特性:
模型稳定性、训练速度快、易与优化与多样性控制
3、缺点:
样本多样性牺牲、生成样本速度问题
4、未来发展趋势与潜力:
图像生成技术、人工智能应用、创意产业
浙公网安备 33010602011771号