Datawhale AI 夏令营 大模型应用开发 TASK1

大模型项目与原理解析

大模型项目分类

初学者可以尝试的LLM项目

Prompt项目

调用开源大模型,修改prompt

prompt+web开发项目优秀案例:ChatPaper

项目概述:以修改Prompt为主要方式,对领域论文(arxiv上)进行翻译概括总结,省去了人工阅读文本的时间。

核心代码功能:输入论文pdf形式,pdf转文本,文本切片,文件处理等

开源链接:https://github.com/kaixindelele/ChatPaper

其他项目:

  1. ChatBI、ChatExcel:使用文字给出代码(处理excel文件)或者读取excel

  2. ChatPPT、ChatMind:PPT是一种文件格式,使用代码操控ppt文件

如果处理数据很多,超过token限制怎么办?

这里具体指输入文本太长,超过大模型一次输入最多token限制

Embedding

Embedding是将文本、图像等人类世界的高维信息转换为低维向量,同时保留不错的语义信息,便于进行数学运算和相似度比较。

LLM入门项目:

  1. 三体检索问答

  2. prompt优化与并发

  3. 实现简单的ChatExcel

https://github.com/JessyTsui/awesome_LLM_beginner

现状:Embedding模型偏少,一般使用open ai embedding模型或者智源BGE Embedding模型(通用知识embedding模型),专业领域缺少。

对于专业领域,最好训练自己的Embedding模型

Chatlaw

https://huggingface.co/datasets/PandaVT/chinese_verdict_examples

https://huggingface.co/datasets/PandaVT/chinese_law_examples

一些其它问题

通用模型、垂直模型,我们需要的模型

  1. 通用模型:能处理10w个子任务的模型 很多

  2. 垂直模型:能处理3W个子任务的模型 少一点

  3. 我们需要的模型:能解决3位数以内的模型足够了

“好”数据哪里来?

根据实际场景,做一些数据集出来

实例项目

智能编程助手

项目简述

使用NLP技术对用户指令进行理解,基于源2B大模型作为服务端,以Streamlit开发为实现方式的客户端,最终能够实现多种编程语言的识别与分析,对代码提出改进意见与生成。

核心代码

# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st

# 创建一个标题和一个副标题
st.title("💬 Yuan2.0 智能编程助手")

# 源大模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('IEITYuan/Yuan2-2B-Mars-hf', cache_dir='./')

# 定义模型路径
path = './IEITYuan/Yuan2-2B-Mars-hf'

# 定义模型数据类型
torch_dtype = torch.bfloat16 # A10
# torch_dtype = torch.float16 # P100

# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():
    print("Creat tokenizer...")
    tokenizer = AutoTokenizer.from_pretrained(path, add_eos_token=False, add_bos_token=False, eos_token='<eod>')
    tokenizer.add_tokens(['<sep>', '<pad>', '<mask>', '<predict>', '<FIM_SUFFIX>', '<FIM_PREFIX>', '<FIM_MIDDLE>','<commit_before>','<commit_msg>','<commit_after>','<jupyter_start>','<jupyter_text>','<jupyter_code>','<jupyter_output>','<empty_output>'], special_tokens=True)

    print("Creat model...")
    model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch_dtype, trust_remote_code=True).cuda()

    return tokenizer, model

# 加载model和tokenizer
tokenizer, model = get_model()

# 初次运行时,session_state中没有"messages",需要创建一个空列表
if "messages" not in st.session_state:
    st.session_state["messages"] = []

# 每次对话时,都需要遍历session_state中的所有消息,并显示在聊天界面上
for msg in st.session_state.messages:
    st.chat_message(msg["role"]).write(msg["content"])

# 如果用户在聊天输入框中输入了内容,则执行以下操作
if prompt := st.chat_input():
    # 将用户的输入添加到session_state中的messages列表中
    st.session_state.messages.append({"role": "user", "content": prompt})

    # 在聊天界面上显示用户的输入
    st.chat_message("user").write(prompt)

    # 调用模型
    prompt = "<n>".join(msg["content"] for msg in st.session_state.messages) + "<sep>" # 拼接对话历史
    inputs = tokenizer(prompt, return_tensors="pt")["input_ids"].cuda()
    outputs = model.generate(inputs, do_sample=False, max_length=1024) # 设置解码方式和最大生成长度
    output = tokenizer.decode(outputs[0])
    response = output.split("<sep>")[-1].replace("<eod>", '')

    # 将模型的输出添加到session_state中的messages列表中
    st.session_state.messages.append({"role": "assistant", "content": response})

    # 在聊天界面上显示模型的输出
    st.chat_message("assistant").write(response)

项目效果

特别鸣谢

Datawhale AI 夏令营

感谢分享嘉宾:崔家熙大佬

第一次发文,有任何问题欢迎指正

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值