首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 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 模型,这些模型大概可以分为以下几类 :
- 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/
这一块东西很多,我就只拿出和自己搭建有关系的整理一下 :
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个主要的阶段 : 预训练 + 微调 , 简单画了一个图,也不知道对不对,反正初步这么理解应该没大问题 :
其实也不知道具体的流程,这一块偏专业了,后面搞了几本书看完后再来改这块
五. 自己搭一个简易的 GPT 模型
5.1 下载对应的资源
首先从 Hugging Face 下获取对应的资源 ,这里使用的是 GPT2 , 很小的一个包,主要是因为电脑比较垃圾,再复杂的就跑不起来了 :
当然这里除了手动下载资源外,还可以通过类似于 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 对模型进行解密后输出
最终输出
http://127.0.0.1:5000/generate
内容就不展示了,毕竟没经过微调还是 GPT2 .
总结
哈哈 , 大多数理论概念都是通过 GPT 查的,理论概念准确度还是很高的。
其他更复杂的点这里就不能深入了,毕竟本来就是半桶水,还要好好学习一下。
入门不难,也就玩玩,真要学进去还得把数学捡起来学学,累了累了