前语

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

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

作用

首要咱们来看到项目的运转吧~ 当咱们的项目运转完毕之后,作用是这样的:

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

你将得到一个能够在网页端正常运用的dome,并且你能够在这儿挑选你的模型:

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

页面阐明

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

文字个数

首要咱们来看到这个参数的意义:

玩转GPT--在线文本生成项目[可入坑~科普系列]
这个参数的意思呢其实便是说你想要让你GPT模型生成多少个文字(最长)。假如你想要生成的文字越多,那么相应的计算耗费也会更大一些,当然这是极端情况下。

top_K

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

之后的话咱们来看到top_k的意义。那么要解释这个意义的话,咱们这儿要简单阐明一下GPT在生成文本的时分最终是怎样生成的。 他是这样的:

玩转GPT--在线文本生成项目[可入坑~科普系列]
这个模型是啥,咱们把它笼统成一个算法就好了,一个黑格子。

那么假定咱们生成的语句是由3个词组成的语句,并且在咱们的词库里边假定有20个词.那么这个概率矩阵是这样的:

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

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

Top_P

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

之后的话是咱们Top_P的意义。这个的话,其实和咱们的top_k有点相似。啥意思呢,其实也是咱们需求去选词,但是呢,词语太多了,那么咱们就从左到右,去把这些词的概率加起来,假定咱们设置top_k为0.9,那么加到概率之后大于等于0.9的时分,咱们就中止假定从左往右加了20个方位的概率,那么咱们就把这20个方位的概率进行运算,挑选里边的top_k。换一句话说,这个概率越大,或许被选到的词就越多。其实也是为了多样性嘛。假如咱们仅仅挑选top_k的话,假定概率大的词语在后面一点,那么前面的词就比较难选到。

temperature

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

之后是这个东西,这个是啥玩意呢。其实它是在咱们得到概率之后每个概率都处于这个数。什么意思呢, 假定,咱们生成的语句有三个词语,词的品种有20个,那么得到的便是3×20的一个概率矩阵。现在的话,咱们把这些概率都一起处于一个数字,叫做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设置的更大一些,那么输出的文本就会有更多多样性。或许就不会那么契合你的输入,或许说,答复的内容会更加广泛一点儿。

谈天上下文相关记忆

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

之后这个是咱们谈天模型独有设置,这个是啥呢,便是模拟咱们人类对话嘛,咱们对话是需求联络上下文语境的。

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

项目布置

获取项目

OK,终于到了咱们的项目布置了。

首要咱们需求到这个当地:gitee.com/Huterox/gpt… 是的为了便利访问,我将这个项目上传到了码云而不是github。之后在这个页面:

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

获取模型

之后的话因为模型实在是太大了,因而这儿我把文件上传到了百度云盘: 模型获取地址: 链接:pan.baidu.com/s/1dnVzzi8p… 提取码:6666

玩转GPT--在线文本生成项目[可入坑~科普系列]
下载之后,将里边的文件:
玩转GPT--在线文本生成项目[可入坑~科普系列]
放在项目的这个当地:
玩转GPT--在线文本生成项目[可入坑~科普系列]

运转

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

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

在项目当中有个文件:

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

pip install -r requirements.txt

即可安装,假如你已经有了部分依靠,那么你只需求下载你需求的即可。 (此外项目环境当中不能一起具备pytorch和TensorFlow环境)

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

streamlit run app.py

此刻项目即可运转:默许地址:

http://localhost:8501

此刻即可进入页面。

彩蛋

此外本项目中海油一个彩蛋,便是这个:

玩转GPT--在线文本生成项目[可入坑~科普系列]
在输入某些关键词时,会触发这个。那么这部分的代码能够直接在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~,这个便是咱悉数的内容了,那么本次前沿系列就到此结束,后序有时刻会将期间前沿系列过程中学习到的东西,进行收拾成文(没办法时刻不够,收拾成文的时刻花费有点大,说了会做这个系列,但是没说要把悉数的进行收拾(狗头),真没空)

最终,最终,提前恭喜大家新年快乐,留意是新年快乐,而不是圣诞快乐!!!

抗美援朝战争第2次战争 抗美援朝战争第2次战争是指,1950年11月7日~12月24日,我国人民志愿军在朝鲜人民军配合下,将美国为首的”联合国军”及其指挥的南朝鲜(韩国)军诱至预定战场后,对其忽然建议反击的战争,是扭转朝鲜战局的一次战争。 第2次战争历时29天,是抗美援朝战争中战略意义最为严重的一次成功。这一成功,大大超过了毛泽东在志愿军入朝时及第2次战争前的料想。跟着志愿军克复平壤、元山,美军开始大撤退,一直退到了三八线以南区域。志愿军不但完全粉碎了“联合国军”所发动的“圣诞节攻势”,并且将战线由清川江推至三八线,克复了三八线以北(除襄阳外)的悉数疆域,解放了三八线以南的瓮津半岛及延安半岛,完全扭转了朝鲜战局。 志愿军取得的成功震动了世界,在全世界打出了新我国的国威军威。正如美国《纽约先驱论坛报》所称的,这是“美国陆军史上最大的败绩”。它打破了美军不行战胜的神话,在国际舞台上完全改变了中华民族在近代一直落后挨打的形象。至此,再也没有人会以为我国的这支“农民装备”式的戎行是一支能够轻易侮辱的力量了。

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