大语言模型

大语言模型

一、大型语言模型(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、未来发展趋势与潜力:

图像生成技术、人工智能应用、创意产业

posted @ 2024-08-08 17:31  dzhang  阅读(169)  评论(0)    收藏  举报