外行程序员的GPT入门手册

2023年 7月 17日 124.1k 0

首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…

一. 前言

纯好奇了解了一下GPT的原理和本地运行。

毕竟不是专业的,上手花了一些时间也积累了一些东西,记录一下希望能帮助到同样感兴趣的。

如果要把一个模型跑起来,还是需要一定的 Python 基础,好在要求不高,有其他语言的基础也问题不大。

要有清晰的定位

GPT 属于 AI 领域中的 NLP(Natural Language Processing,自然语言处理) 中的 一种模型.

二. 专业术语

2.1 技术术语

  • AI(人工智能):包括机器学习,深度学习 , 自然语言处理 , 计算机视觉 ,语音识别 等多个领域
  • NLP (自然语言处理):使计算机能够理解、处理和生成自然语言的技术,让机器听懂人话
  • 模型 : 一种数据结构,是对现实行为的抽象和数字化,用于预测,生成,及处理数据
  • NLP 模型 : 主要用于NLP 领域的模型 ,最常见的就是 GPT 和 BERT
    • BERT(Bidirectional Encoder Representations from Transformers):一种预训练的双向Transformer模型
    • GPT (Generative Pre-trained Transformer):一种使用Transformer架构进行预训练的生成式模型,用于自然语言生成和其他NLP任务

其他相关术语

- RLHF : Reinforcement Learning from Human Feedback (基于人类反馈的强化学习)  
- LLM :Large Language Model (大型语言模型)
- TF-IDF(Term Frequency-Inverse Document Frequency):一种用于衡量单词在文本集合中重要性的权重算法
- Word2Vec :一种用于学习词向量(Word Embeddings)的模型
- RNN (Recurrent Neural Networks): 循环神经网络,能够处理变长的输入序列,并通过循环结构传递信息
- LSTM (Long Short-Term Memory):长短期记忆网络,用于解决传统RNN中梯度消失和梯度爆炸问题
- CNN (Convolutional Neural Networks): 用于计算机视觉领域,但也可以用于NLP中的文本分类任务

2.2 涉及组件

  • python : 一个很容易上手的语言
  • Transformers :专注于自然语言处理(NLP)任务的Python库
    • 提供了各种预训练的NLP模型和相关工具
    • 用于文本预处理、特征提取、模型训练和推理
    • 在底层的深度学习框架(如TensorFlow和PyTorch)之上提供了接口
    • TensorFlow 比 Transformers 更底层,后者在部分功能上依赖前者。
  • TensorFlow :通用的开源机器学习框架
    • 提供了用于构建和训练机器学习模型的工具和接口,支持各种任务和模型类型
  • pip :用于安装和管理Python软件包的工具
    • 安装软件包 : pip install package_name
    • 导出软件包 : pip freeze > requirements.txt
    • 安装软件包列表 : pip install -r requirements.txt (requirements.txt 是导出的或者自建)
  • NumPy :用于数值计算的Python库,也是TensorFlow的依赖库之一
  • regex :GPT-2使用了regex库来处理文本数据
  • flask : 轻量级web开发框架

2.3 操作术语

  • Pre-training (预训练):让模型学习了大量的语言知识和结构,并捕捉了文本数据的统计特性
  • Self-Attention (自注意力机制) : 用于建模词与词之间关系的机制
  • Tokenization (分词): 将一段文本分成一组单独的单词或词语的过程
  • Fine-tuning (微调):在特定的标记数据上,使用有监督学习的方式对模型进行进一步的训练,以适应特定的应用场景

三. 资料来源

3.1 Hugging Face

使用 GPT 的资料网站有不少,大部分都在国外的网站里面,常见的包括 OpenAI 的模型库,Hugging Face ,Google Research ,京东AI Research 等

部分渠道需要一定的门路才能拿到资源,如果可以访问,最理想的就是 Hugging Face 。 这是一个类似于 Github 的资源库。资源只需要去 huggingface.co/ 进行下载即可,里面有大量的预训练模型.

Hugging Face 除了是一个NLP 资源库,同时也是 Transformers 等组件的发行商,在该网站上我们可以下载对应的 LLM 模型,这些模型大概可以分为以下几类 :

image.png

  • Text-to-Image : 文本转图片
  • Image-to-Text : 图片转文本
  • Document Question Answering : 问题解释
  • Transaction : 翻译
  • Text Generation : 文本生成

我们通常都能在抖音上面看到文本转图片这类视频,能看到很多在发小说转图片的一些视频。而 GPT 主要对应的是 Text Generation 这类。

在这个类别里面最主流的2个类型就是 BERT 和 GPT :

BERT 是 2018 由 Google AI 的团队提出,而 GPT 则是由 OpenAI 在 2018年提出。

3.2 BERT 和 GPT

// 模型类型`
`- BERT 是双向Transformer模型`
`- GPT 是单向Transformer模型`

// 执行方式`
`- BERT : Masking Input , 即选词填空,通过预测句子中丢失的词来学习语言模型`
`- GPT : Predict Next Token , 即通过预测下一个词来学习语言模型`

// 数据来源`
`- GPT : 大量的网络文本数据`
`- BERT : 大型语料库 (维基,电子书)`

// 使用方式`
`- GPT : 自然语言生成任务,如文本自动补全、问答系统、文本翻译`
`- BERT : 问题回答、文本分类、句子关系分析等`

四. 主流程

这里直接推荐小册,我当时是一分钱买的,现在不确定还是不是活动,反正我看懂了

推广赚2分钱哦,哈哈哈 >> https://s.juejin.cn/ds/i9c2GvN/

image.png

这一块东西很多,我就只拿出和自己搭建有关系的整理一下 :

4.1 Token 是什么

token 是任何 NLP 神经网络 模型接收用户输入的最小粒度。例如ChatGPT 的收费模式中,是按照Token数量进行收费的。

  • token 不等于字符数量,一个50字符的字符串,可能只会消耗30个token。
  • 一次操作消耗的token = 入站 Token + 出站 Token 。
  • Tokenizer : 将用户输入的文本转换为 token 序列的过程
// 作用 :避免长尾效应 OOV。
一个模型在训练后会生成一个 Token 词表(Vocabulary),输入的文本会和词表进行匹配,得到一个 token 列表。

// 典型案例 : 
`strangest`  可能是低频的词,不会出现在词表中。但是它可以复用 ”`#strang`” 和 “`est`”  来进行传入

4.2 张量是什么

ChatGPT 的输入文字转换为 token 之后,还需要将 token 再转换为张量 , 这个过程叫 Embedding

  • 张量 (Tensor) 是指多维数组,它可以存储和处理大量的数据。
  • 作用 :将复杂的数据和运算抽象成多维数组的形式,从而方便地进行数学运算、数据处理和模型训练

用一个Demo解释这个过程就是 :

sentences = ['如何更换花呗绑定银行卡', '如何更换花呗绑定银行卡']
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

// 对以上文本进行张量解析得到的结果是一致的
tensor([[-4.4423e-04, -2.9735e-01,  8.5790e-01,  ..., -5.2770e-01,
         -1.4316e-01, -1.0008e-01],
        [-4.4366e-04, -2.9735e-01,  8.5790e-01,  ..., -5.2770e-01,
         -1.4316e-01, -1.0008e-01]])
         
// sentences = ['如何更换花呗绑定银行卡', '花呗如何更换绑定银行卡']
tensor([[-4.4423e-04, -2.9735e-01,  8.5790e-01,  ..., -5.2770e-01,
         -1.4316e-01, -1.0008e-01],
        [ 2.8771e-02, -3.2470e-01,  9.0572e-01,  ..., -4.3811e-01,
         -1.4749e-01,  5.8244e-02]])

// --- 更换文章顺序后,得到的张量就不同了

4.3 Attention 注意力机制

抄一抄小册的概念 :不然不好解释

就像老师要我们注意力集中,好好听讲。AI 模型在算模型的环节会接收到大量的信息,注意力机制让AI能剔除不必要不相关的信息,只关注有关联的信息。

案例 : 掘金社区是一个便捷的技术交流______

注意力机制的目的就是让 AI 关注其中的核心要素 ,这个语句会被转换为多个Token ,通过注意力机制决定哪些token是其中的关键信息 ,例如掘金,例如便捷。

而其中的 Self-Attention 的模式,表示权重的信息来源,依然是原句子本身(Self)。也就是说将注意力放在本身句子上面,从而使模型得到更贴近的结果。

  • 元素相关性通过分数表示 , 分数越高,相关性越强
  • 对分数归一处理后,得到权重向量
  • 循环进行,进行加权操作,从而建立关联关系。

这其中涉及一些数学公式,不是特别好解释,知道这概念就像

4.4 transformers 是什么

Attention 是一种方法,Transformer 就是具体执行这种方法的组件,或者说叫实现。

后面巴拉巴拉的自己看吧,一句话解释不清楚,写长了自己也蒙~~~

4.5 主流程

GPT 全部可以分为2个主要的阶段 : 预训练 + 微调 , 简单画了一个图,也不知道对不对,反正初步这么理解应该没大问题 :

image.png

其实也不知道具体的流程,这一块偏专业了,后面搞了几本书看完后再来改这块

五. 自己搭一个简易的 GPT 模型

5.1 下载对应的资源

首先从 Hugging Face 下获取对应的资源 ,这里使用的是 GPT2 , 很小的一个包,主要是因为电脑比较垃圾,再复杂的就跑不起来了 :

image.png

当然这里除了手动下载资源外,还可以通过类似于 Git 的方式一次性拉取全部,有兴趣的可以研究下,这里就不细说了。

5.2 准备环境信息

// 下载 Python 语言及编译器 -- 略
- 这里还是需要一定的编码基础,具体方式网上有很多种,这里就不细说

// tensorflow 
pip install tensorflow==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tensorflow-gpu==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

// 计算组件
pip install numpy==1.19.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install regex==2020.11.13 -i https://pypi.tuna.tsinghua.edu.cn/simple

// 核心执行器
pip install tensorflow-addons==0.12.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tensorflow-estimator==2.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tensorflow-hub==0.11.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip p install tensorflow-io-gcs-filesystem==0.20.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tensorflow-text==2.4.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install typing-extensions==3.10.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade Tokenizers -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers==4.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ctypes -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple

5.3 编写代码

import tensorflow as tf
import datetime
from transformers import GPT2Tokenizer, TFGPT2LMHeadModel
from flask import Flask, jsonify, request, render_template

# 配置模型路径
model_dir = "D:/python/code/studyDemo/antProject/download/gpt2"
# 加载 GPT-2 tokenizer
tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
# 加载 GPT-2 模型
model = TFGPT2LMHeadModel.from_pretrained(model_dir)

# 创建 Flask 实例 (用于定义访问接口)
app = Flask(__name__)

# 定义 API 接口
@app.route('/generate', methods=['POST'])
def generate_text():
    # 从请求中获取文本
    input_text = request.get_json()['text']
    # 使用 tokenizer 对文本进行编码
    input_ids = tokenizer.encode(input_text, return_tensors='tf')
    # 使用模型生成文本
    output_ids = model.generate(input_ids, max_length=100, num_return_sequences=1)
    # 使用 tokenizer 对生成的文本进行解码
    output_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
    # 返回生成的文本
    return jsonify({'generated_text': output_text})

# 启动应用
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

代码很简单,主要流程就是3个 :

  • 编译输入文本,构建出输入的向量
  • 将向量传入 TFGPT2LMHeadModel 中,通过模型进行运算
  • 通过 tokenizer 对模型进行解密后输出

image.png

最终输出

http://127.0.0.1:5000/generate

内容就不展示了,毕竟没经过微调还是 GPT2 .

总结

哈哈 , 大多数理论概念都是通过 GPT 查的,理论概念准确度还是很高的。

其他更复杂的点这里就不能深入了,毕竟本来就是半桶水,还要好好学习一下。

入门不难,也就玩玩,真要学进去还得把数学捡起来学学,累了累了

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论