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

news2024/11/25 18:32:24

文章目录

  • 前言
  • 效果
  • 页面说明
    • 文字个数
    • 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)
                pass
            else:
                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()-start
                tips.text("耗时:"+str(paytime)+"s")


if __name__ == '__main__':
    app()

总结

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学知识---数论(质数和约数)

文章目录 1.质数1.1质数的判定---试除法1.2分解质因数---试除法1.3筛质数2.约数2.1试除法求约数2.2约数个数2.3约数之和2.4最大公约数---欧几里得算法(辗转相除法)1.质数 质数是针对所有大于1的自然数定义的,在大于1的整数中,如果只包含1和本身这两个约数,就被定义成为质…

【SpringCloud Alibaba】 初始化Sentinel

Sentinel 概念 特征 主要特征 开源生态​ 开启控制台 初始化工程 Sentinel 概念 分布式系统的流量防卫兵。随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护…

Biotin-PEG-NH2,Biotin-PEG-amine,生物素-PEG-氨基材料改性用化学试剂

英文名称:Biotin-PEG-NH2,Biotin-PEG-amine 中文名称:生物素-聚乙二醇-氨基 Biotin-PEG-NH2是氨基化PEG中的一种,他可以用于材料改性;氨基和很多基团可以反应,如:羧基,活性酯&…

JavaScript:封装单向链表10种常见的操作方法

链表的优势 1.要存储多个元素的时候,除了数组还可以选择链表。 2.与之数组不同的是,链表中的元素在内存中不必是连续的空间。 3.链表中的每个元素由一个存储元素本身的节点和一个指向下一个节点的引用(指针或者连接)组成。 相比于数组,链表有…

QGIS基础:根据字段属性值或基于规则进行分类符号化显示

以下操作是对数据进行分类符号化,下面是原始操作数据: 基于分类符号化的字段是如下所示(ZDTZM): A B C D 找到数据图层,右键属性,找到【符号化】,点击如下所示的分类: 在【valu…

mysql数据库完整实例-“汽车维修”

mysql数据库创建,编写,查询,自定义函数实战案例 创建汽车修理数据库,并完成数据库编写: 本文分三个部分,第一部分为数据库的创建编写和基础查询,第二部分为关联查询等复杂查询方法&#xff0c…

实验四:完整性实验

【实验目的】 掌握实体完整性、参照完整性和用户自定义完整性的定义的维护方法 【实验内容】 要实现这样一个功能:医生根据药品价表选择处方药品,录入数量和使用天数,系统根据医生选择的药品和录入的信息自动生成处方主表和处方明细表。功能…

Flink-按键分区状态-算子状态-广播状态

文章目录1. 按键分区状态(Keyed State)1.2基本概念和特点1.3 支持的结构类型1.4 代码实现1.5 状态生存时间(TTL)2 算子状态(Operator State)2.1 基本概念和特点2.2 状态类型2.3 代码实现3. 广播状态&#x…

2022年安徽建筑施工塔式起重机(建筑特种作业)模拟题库及答案

百分百题库提供特种工(塔式起重机)考试试题、特种工(塔式起重机)考试真题、特种工(塔式起重机)证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 87.塔式起重机滑轮上…

基于历史对比学习的时序知识图谱推理

时序知识图谱 知识图谱(KGs)作为人类知识的集合,在自然语言处理、推荐系统和信息检索等领域显示展现了很好的前景。传统的KG通常是一个静态知识库,它使用图结构数据拓扑,并以三元组(s, p, o)的…

自定义ContentProvider案例

自定义ContentProvider案例 1.条件准备 app5往外暴漏数据app7接收和操作远程数据图1 app5目录结构 图2 app7目录结构 2.参考代码 完整代码: https://download.csdn.net/download/weixin_41957626/87346497 1)app5的代码 (1)app5的entity&…

C#项目实战——【实例】企业人事管理系统(一):1、系统分析;2、系统设计;3、系统运行环境;

学习《C#从入门到精通》,边学边练记录实现过程。 1、系统分析 1.1、需求分析 基于其他企业人事管理软件的不足,要求能够制作一个可以方便、快捷地对职工信息进行添加、修改、删除的操作,并且可以在数据库中存储相应职工的照片。为了能够更…

Magic Live智慧引擎发力,荣耀吹响智慧服务变革号角

人类的不断进步,核心源自对生活的“不满足”。 就在十几年前,诺基亚、黑莓等手机还被当做走在时代前沿的产品,触屏笔等设计风靡一时。但后来人们发现,触屏笔非常不方便,于是迅速被淘汰,更为先进的触摸屏诞…

自动控制原理笔记-二阶欠阻尼系统动态性能指标计算

目录 欠阻尼二阶系统的两种表示方法: 二阶欠阻尼系统单位阶跃响应: 二阶欠阻尼系统单位指标计算: 例题: 例题: 二阶系统动态性能随极点位置分布的变化规律: 例题: 欠阻尼包括零阻尼 欠阻…

【Linux04-进程概念上】两个结构的理解带你“降维打击”进程概念!

前言 本期分享Linux超重要的知识:进程概念! 博主水平有限,不足之处望请斧正! 要学习进程,我们首先得搭建宏观的计算机和操作系统结构,从更高的视角学习。 先导 计算机体系结构 使用最多提及最多的计算…

【软件测试】从事5年资深测试的经验,少走弯路......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 小张: 工…

SSIS中刷新Power BI数据集

前面介绍过了怎么在Azure云中刷新Power BI数据集,感兴趣的可以阅读 数据工厂中刷新PowerBI数据集 数据工厂刷新PowerBI数据集2 但有很多公司可能并没有完全上云,比如某些公司还在使用SSIS调用ETL工程,那么有没有办法在本地也实现执行完SSI…

双11购物的凑单问题与财务凑数问题

📢作者: 小小明-代码实体 📢博客主页:https://blog.csdn.net/as604049322 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 📢本文链接:https://xxmdmst.blog.csdn.n…

Chapter3 P-N Junction

3-2 热平衡状态 电流只在一个方向很容易通过,正方向很容易通过电流,负方向很不容易 正电压加在Ptype上才会有电流 就会产生如图b的现象 electron 一定要从high concentration移动到low concentration 所以两个的移动方向如图所示 靠近junction附近&…

C#中window窗体和控件

C#中window窗体和控件 布局与事件–界面的基本问题 布局 就是拉动窗体的时候,按钮也在跟着变动。 事件 //简单的计算器 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespa…