LLM Core - Word2Vec
Word2Vec概述
在 NLP 中,在文本预处理后,进行特征提取,涉及到将词语转化成数值的形式,方便计算机理解
Word2Vec 的目的 - 将词语转换成向量形式,使得计算机能够理解
通过学习大量文本数据,捕捉到词语之间的上下文关系,进而生成词的高维表示 - 即词向量
架构
Word2Vec 有 2 种主要的模型 - Skip-Gram + CBOW
Model
Desc
CBOW
根据周围的上下文词汇来预测目标词
Skip-Gram
根据目标词预测其周围的上下文词汇
优劣
Key
Value
优点
揭示词与词之间的相似性 - 通过计算向量之间的距离来找到语义相近的词
缺点
无法处理多义词,每个词被赋予一个向量,不考虑上下文中的多种含义
模型架构
连续词袋 - Continuous Bag of Words, CBOW跳字模型 - Skip-Gram
连续词袋
CBOW 模型是一种通过上下文预测目标词的神经网络架构
上下文由目标词周围的一个词或多个词组成,这个数目由窗口大小决定
窗口是指上下文词语的范围 - 如果窗口为 10,那么模型将使用目标词前后各 10 ...
LLM Core - NLP
基础
NLP 的研究目的是让计算机能够理解、解释和生成人类语言,一般包含 4 个步骤
Step
Desc
文本预处理
将原始文本转换成机器容易理解的格式分词(单词或短语)、去除停用词、词干提取、词性标注等
特征提取
从处理过的文本中提取特征,以便用于机器学习模型将文本转换成数值形式 - 向量化 - 词袋模型 or 词嵌入
模型训练
使用提取到的特征和相应的机器学习算法来训练模型分类器、回归模型、聚类算法等
评估与应用
评估模型的性能,并在实际应用中使用模型来解释、生成或翻译文本
应用场景 - 搜索引擎 / 语音转换 / 文本翻译 / 系统问答
ML vs NLP
Scope
Desc
ML
让计算机通过查看大量的例子来学习如何完成任务
NLP
教会计算机理解和使用人类语言
ML + NLP
用机器学习的技术来让计算机学习如何处理和理解语言
文本预处理
将原始文本转换成易于机器理解和处理的格式
文本清洗
去除噪音(对分析无关紧要的部分)及标准化文本
123456789101112131415161718import r ...
LLM Core - RNN
背景
RNN 主要用来处理序列数据,目前大部分 LLM 都是基于 Transformer
通过学习 RNN,有助于理解 Transformer
有助于理解神经网络如何处理序列中的依赖关系、记忆过去的信息,并在此基础上生成预测
有助于理解关键问题 - 梯度消失 / 梯度爆炸
RNN
Recurrent neural network - 循环神经网络
RNN 是一类用于处理序列数据的神经网络,RNN 能够处理序列长度变化的数据 - 文本 / 语音
RNN 的特点是在模型中引入了循环,使得网络能够保持某种状态,表现出更好的性能
左边
$x$ 为输入层,$o$ 为输出层,中间的 $s$ 为隐藏层,在 $s$ 层进行一个循环 $W$
右边(展开循环)
与时间 $t$ 相关的状态变化
神经网络在处理数据时,能看到前后时刻的状态,即上下文
RNN 因为隐藏层有时序状态,那么在推理的时候,可以借助上下文,从而理解语义更加准确
优劣优势
RNN 具有记忆能力,通过隐藏层的循环结构来捕捉序列的长期依赖关系
特别适用于文本生成、语音识别等领域
局限
存在梯度消失和梯度爆炸的问题, ...
LLM Core - Machine Learning Algorithm
线性回归概述
线性回归是一种预测分析技术,用于研究两个或者多个变量之间的关系
尝试用一条直线(二维)或者一个平面(三维)的去拟合数据点
这条直线或者平面,可以用来预测或者估计一个变量基于另一个变量的值
数学
假设有一个因变量 y 和一个自变量 x
线性回归会尝试找到一条直线 y=ax+b
a 为斜率,而 b 为截距
以便这条直线尽可能地接近所有数据点
$$y=ax+b$$
sklearn
房价预测 - 房价是因变量 y,而房屋面积是自变量 x
12345678910111213141516171819202122232425import matplotlib.pyplot as pltimport numpy as npfrom sklearn.linear_model import LinearRegression# 定义数据X = np.array([35, 45, 40, 60, 65]).reshape(-1, 1) # 面积y = np.array([30, 40, 35, 60, 65]) # 价格# 创建并拟合模型model = LinearRegressi ...
LLM Core - Machine Learning Concept
机器学习
机器学习是让计算机利用数据来学习如何完成任务
机器学习允许计算机通过分析和学习数据来自我改进以及作出决策
房价预测
利用 scikit-learn 进行预测
数据集
housing_data.csv
面积
卧室数量
地理位置
售价
100
2
1
300
150
3
2
450
120
2
2
350
80
1
1
220
线性回归12345678910111213141516171819202122232425from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionimport pandas as pd# 加载数据集data = pd.read_csv("housing_data.csv") # 假设这是我们的房屋数据# 准备数据X = data[['面积', '卧室数量', '地理位置']] # 特征y = data['售 ...
LLM - API
背景
LLM 是没有 Web API 的,需要进行一次封装
将 LLM 的核心接口封装成 Web API 来为用户提供服务 - 必经之路
接口封装FastAPI接口封装
Uvicorn + FastAPI
Uvicorn 类似于 Tomcat,但比 Tomcat 轻量很多,作为 Web 服务器
允许异步处理 HTTP 请求,非常适合处理并发请求
基于 uvloop 和 httptools,具备非常高的性能
FastAPI 类似于 SpringBoot,同样比 SpringBoot 轻量很多,作为 API 框架
结合 Uvicorn 和 FastAPI
可以构建一个高性能的、易于扩展的异步 Web 应用程序
Uvicorn 作为服务器运行 FastAPI 应用,可以提供优异的并发处理能力
安装依赖12$ pip install fastapi$ pip install uvicorn
代码分层1234567891011121314import uvicornfrom fastapi import FastAPI# 创建API应用app = FastAPI()@app.get("/ ...
LLM RAG - ChatGLM3-6B + LangChain + Faiss
RAG
使用知识库,用来增强 LLM 信息检索的能力
知识准确
先把知识进行向量化,存储到向量数据库中
使用的时候通过向量检索从向量数据库中将知识检索出来,确保知识的准确性
更新频率快
当发现知识库里面的知识不全时,可以随时补充
不需要像微调一样,重新跑微调任务、验证结果、重新部署等
应用场景
ChatOps
知识库模式适用于相对固定的场景做推理
如企业内部使用的员工小助手,不需要太多的逻辑推理
使用知识库模式检索精度高,且可以随时更新
LLM 基础能力 + Agent 进行堆叠,可以产生智能化的效果
LangChain-Chatchat组成模块
模块
作用
支持列表
大语言模型
智能体核心引擎
ChatGLM / Qwen / Baichuan / LLaMa
Embedding 模型
文本向量化
m3e-* / bge-*
分词器
按照规则将句子分成短句或者单词
LangChain Text Splitter
向量数据库
向量化数据存储
Faiss / Milvus
Agent Tools
调用第三方接口
...
LLM PEFT - ChatGLM3-6B + LoRA
通用 LLM
千亿大模型(130B、ChatGPT)和小规模的大模型(6B、LLaMA2)都是通用 LLM
通用 LLM 都是通过常识进行预训练的
在实际使用过程中,需要 LLM 具备某一特定领域知识的能力 - 对 LLM 的能力进行增强
增强方式
Method
Desc
微调
让预先训练好的 LLM 适应特定任务或数据集的方案,成本相对低LLM 学会训练者提供的微调数据,并具备一定的理解能力
知识库
使用向量数据库或者其它数据库存储数据,为 LLM 提供信息来源外挂
API
与知识库类似,为 LLM 提供信息来源外挂
互不冲突,可以同时使用几种方案来优化 LLM,提升内容输出能力
LoRA / QLoRA / 知识库 / API
LLM Performance = 推理效果
落地过程
Method
Pipeline
微调
准备数据 -> 微调 -> 验证 -> 提供服务
知识库
准备数据 -> 构建向量库 -> 构建智能体 -> 提供服务
API
准备数据 -> ...
LLM Deploy - ChatGLM3-6B
LLM 选择核心玩家
厂家很多,但没多少真正在研究技术 - 成本 - 不少厂商是基于 LLaMA 套壳
ChatGLM-6B
ChatGLM-6B 和 LLaMA2 是比较热门的开源项目,国产 LLM 是首选
企业布局 LLM
选择 MaaS 服务,调用大厂 LLM API,但会面临数据安全问题
选择开源 LLM,自己微调、部署、为上层应用提供服务
企业一般会选择私有化部署 + 公有云 MaaS 的混合架构
在国产厂商中,从技术角度来看,智谱 AI 是国内 LLM 研发水平最高的厂商
6B 的参数规模为 62 亿,单张 3090 显卡就可以进行微调和推理
企业预算充足(百万以上,GPU 费用 + 商业授权)
可以尝试 GLM-130B,千亿参数规模,推理能力更强
GLM-130B 轻量化后,可以在 3090 × 4 上进行推理
训练 GLM-130B 大概需要 96 台 A100(320G),历时两个多月
计算资源
适合 CPU 计算的 LLM 不多
有些 LLM 可以在 CPU 上进行推理,但需要使用低精度轻量化的 LLM
但在低精度下,LLM 会失真,效果较差
要真正体验并应用到实 ...
LLM - LangChain + RAG
局限
大模型的核心能力 - 意图理解 + 文本生成
局限
描述
数据的及时性
大部分 AI 大模型都是预训练的,如果要问一些最新的消息,大模型是不知道的
复杂任务处理
AI 大模型在问答方面表现出色,但不总是能够处理复杂任务AI 大模型主要是基于文本的交互(多模态除外)
代码生成与下载
根据需求描述生成对应的代码,并提供下载链接 - 暂时不支持
与企业应用场景的集成
读取关系型数据库里面的数据,并根据提示进行任务处理 - 暂时不支持
在实际应用过程中,输入数据和输出数据,不仅仅是纯文本
AI Agent - 需要解析用户的输入输出
AI Agent
AI Agent 是以 LLM 为核心控制器的一套代理系统
控制端处于核心地位,承担记忆、思考以及决策等基础工作
感知模块负责接收和处理来自于外部环境的多样化信息 - 文字、声音、图片、位置等
行动模块通过生成文本、API 调用、使用工具等方式来执行任务以及改变环境
LangChain - 开源 + 提供一整套围绕 LLM 的 Agent 工具
AI Agent 很有可能在未来一段时间内成为 AI 发展的一个重要 ...