大语言模型学习笔记

一、大型语言模型(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)
User:  你好
Assistant: 你好!很高兴见到你。
User:  你是谁
Assistant: 我是通义千问,一个由阿里云研发的人工智能模型,专门用来回答各种问题和提供服务。
User:  什么是transformer,什么是bert,什么是gpt
Assistant: transformer 是一种预训练的神经网络架构,主要用于表示语义关系。它将输入的文本作为输入向量,然后将其转换成多个隐藏层中的权重矩阵,每个隐藏层都包含一个注意力机制,这个机制可以让注意力集中在输入中出现频率最高的单词上,从而使得输入的文本更易于理解。 Transformer 在机器翻译、问答系统等领域有着广泛应用。
BERT 是一种改进的Transformer,它采用了更高效的注意力机制,使其在处理长文时的表现更加出色。而 GPT 是一种基于Transformer的超大规模语言模型,它的命名实体识别能力很强,可以在大量文本中提取出有用的信息。
希望这些信息对你有所帮助。
User:  exit
Exiting...

五、stable diffusion图像生成方法

1、主要组成部分:

文本编码器、图像解码器、噪声预测器

2、特性:

模型稳定性、训练速度快、易与优化与多样性控制

3、缺点:

样本多样性牺牲、生成样本速度问题

4、未来发展趋势与潜力:

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

六、

tar xf /gemini/data-1/stable-diffusion-webui.tar -C /gemini/code/

chmod +x /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.2

cd /stable-diffusion-webui && python launch.py --deepdanbooru --share --xformers --listen

大语言模型学习笔记_第1张图片

你可能感兴趣的:(语言模型,学习,笔记)