玩转GPT--在线文本生成项目[可入坑~科普系列]

news/2024/5/19 4:23:05/文章来源:https://blog.csdn.net/FUTEROX/article/details/128423501

文章目录

  • 前言
  • 效果
  • 页面说明
    • 文字个数
    • top_K
    • Top_P
    • temperature
    • 聊天上下文关联记忆
  • 项目部署
    • 获取项目
    • 获取模型
    • 运行
  • 彩蛋
  • 总结

前言

没办法,最近ChatGPT杀疯了,没忍住,还是想look,look。没办法,哪个帅小伙能够忍受的了一个可以和自己对话的神奇的玩意儿。而且还是近距离去接触这个东西,如果你对自己的设备还有足够自信的话,咱们还能够给自己重新训练出一个模型,或者自己准备数据集,然后训练自己的“贾维斯”。嘿嘿,想想,这可比女朋友有意思多了!同时也作为一个跨年博文,咱们新的一年可以玩点儿别的东西。并且不要担心,这是一篇面向大众的“科普”难度的文章,只需要按照文章进行操作即可。同样的项目基于GPT2进行开发(没办法GPT3玩不起来),当然这个项目也是一个python项目。

okey废话不多说,现在咱们就开始吧~

效果

首先我们来看到项目的运行吧~
当咱们的项目运行完毕之后,效果是这样的:
在这里插入图片描述

你将得到一个可以在网页端正常使用的dome,并且你可以在这里选择你的模型:
在这里插入图片描述
在这里插入图片描述

页面说明

OK,之后的话我们来说一说这个刚刚咱们在页面上的这些参数是什么意思,并且关于聊天模型的话,还多出了一些参数。那么这些参数是什么意思呢,我们待会来一一说明。

文字个数

首先我们来看到这个参数的含义:
在这里插入图片描述
这个参数的意思呢其实就是说你想要让你GPT模型生成多少个文字(最长)。如果你想要生成的文字越多,那么相应的计算消耗也会更大一些,当然这是极端情况下。

top_K

在这里插入图片描述

之后的话我们来看到top_k的含义。那么要解释这个含义的话,我们这里要简单说明一下GPT在生成文本的时候最后是怎么生成的。
他是这样的:

在这里插入图片描述
这个模型是啥,我们把它抽象成一个算法就好了,一个黑格子。

那么假设我们生成的句子是由3个词组成的句子,并且在我们的词库里面假设有20个词.那么这个概率矩阵是这样的:
在这里插入图片描述

那么Topk的意思就是说,那么会对这些词语的概率进行一个排序,选取前多少个,然后在这多少个里面通过我们的一些优化算法去选出词来(这里我们不是单纯选择概率最大的)

Top_P

在这里插入图片描述

之后的话是咱们Top_P的含义。这个的话,其实和咱们的top_k有点类似。啥意思呢,其实也是我们需要去选词,但是呢,词语太多了,那么我们就从左到右,去把这些词的概率加起来,假设我们设置top_k为0.9,那么加到概率之后大于等于0.9的时候,我们就停止假设从左往右加了20个位置的概率,那么我们就把这20个位置的概率进行运算,选择里面的top_k。换一句话说,这个概率越大,可能被选到的词就越多。其实也是为了多样性嘛。如果我们只是选择top_k的话,假设概率大的词语在后面一点,那么前面的词就比较难选到。

temperature

在这里插入图片描述

之后是这个东西,这个是啥玩意呢。其实它是在我们得到概率之后每个概率都处于这个数。什么意思呢,
假设,我们生成的句子有三个词语,词的种类有20个,那么得到的就是3x20的一个概率矩阵。现在的话,我们把这些概率都同时处于一个数字,叫做temperature。

这样做的好处是啥呢,
举个例子,就是,假设有一个概率0.2和0.5。如果0.2和0.5同时除以一个比1大的数字,比如10.那么就会变成0.02和0.05由于0.02和0.05相差不大,因此原来概率0.2的词被选到的概率就会和0.5差不多。反之如果除以一个比1小的数子,假设除以0.5,那么就会得到0.4和1这样二者之间的差距就变大了。那么这个时候原来概率为0.2的词被选中的概率就更低了。

那么这样做会有啥效果呢,那就是如果temperature设置的更大一些,那么输出的文本就会有更多多样性。可能就不会那么契合你的输入,或者说,回答的内容会更加广泛一点儿。

聊天上下文关联记忆

在这里插入图片描述

之后这个是我们聊天模型独有设置,这个是啥呢,就是模拟我们人类对话嘛,我们对话是需要联系上下文语境的。

那么这个参数的设置有什么讲究嘛?其实没啥,举个例子,就是假设你在和你女朋友或者男朋友聊天的时候,彼此之间的对话可能是围绕前面抛出的一个话题来说的,也就是说和上文是有一定联系的。总不可能是尬聊吧,没有话题,对方不配合是很难聊天下去的,非要这样做那就是“舔”了。

项目部署

获取项目

OK,终于到了咱们的项目部署了。

首先我们需要到这个地方:https://gitee.com/Huterox/gpt-play
是的为了方便访问,我将这个项目上传到了码云而不是github。之后在这个页面:
在这里插入图片描述
获取到项目。

获取模型

之后的话由于模型实在是太大了,因此这里我把文件上传到了百度云盘:
模型获取地址: 链接:https://pan.baidu.com/s/1dnVzzi8p8EqRoKQwtNu2Cw 提取码:6666

在这里插入图片描述
下载之后,将里面的文件:
在这里插入图片描述
放在项目的这个地方:
在这里插入图片描述

运行

之后的话,下载安装好对应的依赖:

transformers==4.25.1
pytorch==1.3.1
scipy==1.2.1
streamlit==1.0
pillow==9.0.1

在项目当中有个文件:
在这里插入图片描述
使用pip命令

pip install -r requirements.txt

即可安装,如果你已经有了部分依赖,那么你只需要下载你需要的即可。
(此外项目环境当中不能同时具备pytorch和TensorFlow环境)

之后在终端输入以下指令:
(切换到Server目录下)

streamlit run app.py

此时项目即可运行:默认地址:

http://localhost:8501

此时即可进入页面。

彩蛋

此外本项目中海油一个彩蛋,就是这个:
在这里插入图片描述
在输入某些关键词时,会触发这个。那么这部分的代码可以直接在app.py当中进行修改:

import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)import streamlit as st
from Server.config import *
import time
from Server.controller import GPTgetSentence
from PIL import Image
#彩蛋图片
image = Image.open(curPath+'/imgae/huterox.jpg')
history = []def app():st.markdown("""## GPT RUN BY Huterox""")st.sidebar.subheader("参数配置")generator_number = st.sidebar.number_input("文字个数",min_value=0,max_value=512,value=128)top_k = st.sidebar.slider("top_k",min_value=1,max_value=20,value=10,step=1,)top_p = st.sidebar.slider("top_p",min_value=0.8,max_value=1.0,value=0.9,step=0.02)temperature = st.sidebar.slider("temperature",min_value=0.1,max_value=5.0,value=1.0,step=0.1)model_name,model_list = flow_get_model_name_list()if(len(model_name)==0):st.markdown("""`项目目录GPT2/model/norm_model下未检测到模型`""")else:choose = st.selectbox("选择GPT模型",model_name,index=0)if (choose == "对话模型"):max_history_len = st.sidebar.number_input("聊天上下文关联记忆", min_value=1, max_value=24, value=5)user_input = st.text_area("请输入文本",max_chars=512)if(st.button("点击生成结果")):tips = st.empty()tips.text("正在努力生成中,第一次加载模型运行较慢哟~")if(("Huterox" in user_input) or ("huterox" in user_input)):"""彩蛋触发,修改条件即可"""tips.text("这是毫无疑问的,无论如何,Huterox is awesome!!!")st.image(image, caption='Huterox is awesome!!!',width=350)passelse:start = time.time()if(choose=="对话模型"):result = GPTgetSentence(user_input,temperature,top_k,top_p,generator_number,history,max_history_len,100,True,model_list[model_name.index(choose)])else:result = GPTgetSentence(user_input, temperature, top_k, top_p, generator_number,history, 5, 100, False, model_list[model_name.index(choose)])res = st.text_area("生成结果",value=result)paytime = time.time()-starttips.text("耗时:"+str(paytime)+"s")if __name__ == '__main__':app()

总结

由于服务资源紧张(博主这里就不进行部署了,来个大哥,马上改代码部署上线(狗头))
okey~,这个就是咱全部的内容了,那么本次前沿系列就到此结束,后序有时间会将期间前沿系列过程中学习到的东西,进行整理成文(没办法时间不够,整理成文的时间花费有点大,说了会做这个系列,但是没说要把全部的进行整理(狗头),真没空)

最后,最后,提前祝贺大家新年快乐,注意是新年快乐,而不是圣诞快乐!!!

抗美援朝战争第二次战役
抗美援朝战争第二次战役是指,1950年11月7日~12月24日,中国人民志愿军在朝鲜人民军配合下,将美国为首的"联合国军"及其指挥的南朝鲜(韩国)军诱至预定战场后,对其突然发起反击的战役,是扭转朝鲜战局的一次战役。
第二次战役历时29天,是抗美援朝战争中战略意义最为重大的一次胜利。这一胜利,大大超过了毛泽东在志愿军入朝时及第二次战役前的预想。随着志愿军收复平壤、元山,美军开始大撤退,一直退到了三八线以南地区。志愿军不但彻底粉碎了“联合国军”所发动的“圣诞节攻势”,而且将战线由清川江推至三八线,收复了三八线以北(除襄阳外)的全部领土,解放了三八线以南的瓮津半岛及延安半岛,彻底扭转了朝鲜战局。
志愿军取得的胜利震惊了世界,在全世界打出了新中国的国威军威。正如美国《纽约先驱论坛报》所称的,这是“美国陆军史上最大的败绩”。它打破了美军不可战胜的神话,在国际舞台上彻底改变了中华民族在近代一直落后挨打的形象。至此,再也没有人会认为中国的这支“农民武装”式的军队是一支可以轻易侮辱的力量了。
在这里插入图片描述
RESPECT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_240035.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红中私教:计网那点事(1)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 🍂专栏地址:网安专栏 光明神已陨落,现在 由计网引领我 破戒了,本来…

力扣刷题笔记day10(树的子结构+二叉树镜像+对称的二叉树)

文章目录树的子结构题目思路代码二叉树镜像题目思路代码对称的二叉树题目思路代码树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 题目 思路 dfs(A, B) …

圣诞节,记录前行中跨过的2022

2022年,我人生的第二十四年,是我大学生活的最后一年,是我职场生涯的第一年,这一年从学生到打工人,从实习生到职场员工,变化了许多,做了许多,收获了许多,同时也成长了许多…

《教育的目的》笔记——如何让学生通过树木看见森林

目录 作者简介 个人感悟 经典摘录 1、学生所受的训练应该比他们最终投身的专业更为广泛 2、学习新语言用途 3、教师的责任 4、教育的主题 5、学到的有用之物 6、教育目的 7、所有事物都不是静态的、定型的,而是处于形成(becoming)过…

【C函数】函数详解

函数前言一、函数是什么二、C语言中函数的分类(一)库函数1.printf类2.strcpy类3.math类4.概念5.小知识6.总结(二)自定义函数1.概念2.函数的组成3.例子1(求出两个数中的最大值)4.例子2(交换两个整…

三、SpringBoot启动流程及自动化配置

一、Springboot启动流程 图一:Springboot项目的启动流程 首先,针对上图中自己不太明确的两个知识点,这里做如下总结: 1.Banner:参考这篇文章:SpringBoot之Banner介绍 - MarkLogZhu - 博客园 (cnblogs.com) ; 2.钩子方…

HRTransNet阅读理解

E. Dual-direction short connection fusion module HRFormer applies transformer blocks to enlarge receptive field of fused feature Frs, and uses exchange units to absorb the merits of multi-scales features. The process is described as: HRFormer使用TRM块来扩…

程序员过圣诞 | 用HTML写出绽放的烟花

文章目录一、前言二、创意名三、效果展示四、烟花代码五、总结一、前言 2022年圣诞节到来啦,圣诞节是基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节,天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期,《圣经》并无记载。公元336年罗马教会…

平衡二叉树的一系列操作:删除、插入(在二叉排序树中插入新结点后,如何保持平衡)、调整平衡等等等

平衡二叉树的插入(在二叉排序树中插入新结点后,如何保持平衡)1.平衡二叉树的定义2.平衡二叉树的插入(调整最小不平衡子树A)2.1LL(在A的左孩子的左子树中插入导致不平衡)2.2RR(在A的右…

qt嵌入并运行外部exe

由于项目需要,要实现将一个外部exe运行在qt的窗口中。下面记录一下过程: 首先就是在qt中创建一个新项目 由于我这里没有用到画布,所以没有勾选Generate form 然后就会自动生成一个可运行的代码 然后将我下边的代码替换粘贴进去 #includ…

cubeIDE开发, UART的CubeMX及HAL库实现原理及底层分析

一、UART通信协议 UART通用异步收发器(Universal Asynchronous Receiver and Transmitter)是STM32 上常用的串行通信外设,可以灵活地与外部设备进行全双工数据交换,需要注意区别: 【1】USART-通用同步异步收发器(Universal Synchronous Async…

stm32f407VET6 系统学习 day04 DHT11 温湿度传感器

1.温湿度的一次完整的数据包括: 一次完整的数据传输为40bit,高位先出。 数据格式: 8bit湿度整数数据 8bit湿度小数数据 8bi温度整数数据 8bit温度小数数据 8bit校验(校验和的值是前四个字节数据的和) 用户MCU发送一次开始信号后,DHT11从低功耗模式转…

UDP协议在Windows上使用示例

UDP(User Datagram Protocol,用户数据报协议)是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供一种不可靠数据传送服务,也就是说,当进程将一个报文发送进UDP套接字时,UDP协议并不保证该报文将到达接收进程。…

为什么要使用 Compose 来开发 Android ?

1. Compose诞生背景 近年来,以React为代表的声明式UI开发思想席卷了整个前端开发领域。客户端与前端在产品形态上非常相似,也希望借鉴这种全新的开发思想来提升客户端UI的开发效率和体验。在这个大背景下,Android与iOS平台相继发布了自己的声…

node.js+uni计算机毕设项目互联网教育系统小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

Attetion is all you need论文阅读笔记

Attetion is all you need 参考:沐神( 沐神_论文精讲_Attention is all you need) 1、Abstract 主流的序列转录模型(给一个序列生成另一个序列,比如机器翻译,给一句英文,生成一句中文&#x…

Biotin-PEG-MAL,Maleimide-PEG-Biotin,生物素聚乙二醇马来酰亚胺

英文名称:Biotin-PEG-MAL,Maleimide-PEG-Biotin 中文名称:生物素聚乙二醇马来酰亚胺 Biotin-PEG-Mal,聚乙二醇化生物素对亲和素或链霉亲和素有很高的亲和力。生物素/亲和素体系在生物分子检测和分离中有着广泛的应用。马来酰亚胺…

【状态估计】电力系统状态估计中的异常检测与分类(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

LeetCode 1739. 放置盒子:数学 思维

【LetMeFly】1739.放置盒子 力扣题目链接:https://leetcode.cn/problems/building-boxes/ 有一个立方体房间,其长度、宽度和高度都等于 n 个单位。请你在房间里放置 n 个盒子,每个盒子都是一个单位边长的立方体。放置规则如下: …

408 考研《操作系统》第三章第二节:基本分页存储管理、两级页表、基本分段存储管理方式、段页式管理方式

文章目录教程1. 基本分页存储管理的基本概念1.1 连续分配方式的缺点1.2 把“固定分区分配”改造为“非连续分配版本”1.3 什么是分页存储1.4 如何实现地址的转换?1.5 逻辑地址结构1.6 重要的数据结构——页表1.7 知识回顾与重要考点2. 基本地址变换机构2.1 例题2.2 …