LLMs相关基础概念
机器学习(Machine Learning, ML)
机器学习是一种让计算机通过数据进行“学习”的技术。与传统编程不同,程序员不需要明确写出每一步操作的规则,而是通过提供大量示例数据,让计算机自动发现数据中的模式和规律,并据此做出预测或决策。
特点
- 数据驱动:机器学习模型依赖大量数据来训练和优化。
- 不确定性:同样的输入可能产生不同输出,取决于模型训练的随机性和参数初始化。
- 自动化学习:模型可以自主学习数据模式,无需人为定义具体规则。
示例
假设我们要训练一个模型判断图片中是否有猫:
- 我们准备一个包含猫和非猫图片的大型训练集。
- 使用卷积神经网络(CNN)等算法,模型自动学习猫的特征。
- 训练集(Training Set):用于训练模型的数据,包括输入和目标标签。
- 测试集(Test Set):用于评估模型性能的数据,在训练过程中不参与训练。
自然语言处理(Natural Language Processing, NLP)
定义
NLP 是人工智能的一个分支,研究如何让计算机理解、解读、生成和处理人类语言。应用范围从文本处理到语音识别,涵盖多种语言智能任务。
典型应用
- 文本分类:如垃圾邮件过滤,将邮件分类为“垃圾邮件”或“非垃圾邮件”。
- 情感分析:社交媒体监控工具分析用户评论的情感倾向(正面、负面、中性)。
自然语言理解(Natural Language Understanding, NLU)
NLU 是 NLP 的子领域,专注于让计算机理解人类语言的含义,通常包括:
- 语义分析:理解词句意义。
- 意图识别:理解用户希望系统执行的操作。
- 实体识别:识别文本中的关键对象、时间、地点等信息。
示例:
- 用户说:“帮我订一张明天去纽约的机票”
- 意图识别:订票
- 实体识别:“纽约”(地点)、“明天”(时间)
自然语言生成(Natural Language Generation, NLG)
NLG 是 NLP 的另一个子领域,使计算机能够生成自然、可读的语言文本。典型场景:
- 自动报告:金融分析工具生成每日或每周市场分析报告。
- 内容创作:新闻自动写作,根据输入数据生成比赛报道或财经新闻。
NLP/NLU/NLG 实例
以智能语音助手为例:
- 用户输入:说“明天的天气怎么样?”
- NLP:
- 语音识别:将语音转成文本。
- 文本预处理:清理标点、空格等。
- NLU:
- 意图识别:询问天气
- 实体识别:“明天”(时间)
- 数据查询:获取天气信息。
- NLG:
- 文本生成:输出“明天晴天,最高气温25°C,最低气温15°C”
- 语音合成:将文本转为语音播报给用户。
机器学习
1. 监督学习(Supervised Learning)
模型通过已知输入和输出数据训练,学习输入与输出之间的映射关系。
分类(Classification)
将输入数据分到离散类别。
- 示例:垃圾邮件过滤
- 输入:电子邮件内容
- 输出:垃圾邮件(spam)或正常邮件(ham)
回归(Regression)
预测连续数值输出。
- 示例:房价预测
- 输入:房子面积、位置、楼龄等
- 输出:房子价格
关联规则(Association Rule)
发现数据项之间的关系或规律。
- 示例:购物篮分析
- 如果顾客购买面包和黄油,往往也会买牛奶。
2. 无监督学习(Unsupervised Learning)
模型在没有标签数据的情况下,寻找数据内部结构和模式。
聚类(Clustering)
将数据划分为不同组,每组内部相似度高。
- 示例:客户细分
- 根据购买行为将客户分为“大宗购买者”、“偶尔购买者”等。
3. 强化学习(Reinforcement Learning, RL)
智能体(Agent)通过与环境(Environment)交互,试错学习如何完成任务或获得最大累计奖励。
核心概念
- 状态(State):智能体当前环境描述
- 例:迷宫游戏中智能体的位置
- 动作(Action):智能体可以执行的操作
- 例:上、下、左、右移动
- 奖励(Reward):动作结果的反馈,可正可负
- 例:走向出口 +10,撞墙 -10
- 智能体(Agent):执行动作并根据奖励更新策略
- 例:自动驾驶算法或游戏 AI
强化学习流程
- 观察当前状态
- 选择动作(基于策略或随机探索)
- 执行动作,环境状态更新
- 获得奖励
- 更新策略,提高未来决策质量
实例:玩具车迷宫
- 状态:位置(2,3)
- 动作:上下左右
- 奖励:朝出口 +10,撞墙 -10
- 学习过程:通过不断试错,逐渐形成高效策略找到出口。
机器学习模型评估
模型评估用于判断模型在新数据上的表现,包括三种情况:
- 欠拟合(Under-fitting)
- 模型过于简单,无法捕捉数据模式。
- 示例:用直线拟合明显的 U 形数据;房价预测只用面积一个特征。
- 最佳拟合(Optimal-fitting)
- 模型适中,既能拟合训练数据,也能泛化到新数据。
- 示例:用二次曲线拟合 U 形数据;房价预测考虑面积、位置、装修等多个重要特征。
- 过拟合(Over-fitting)
- 模型过于复杂,记住训练数据噪声,泛化能力差。
- 示例:用高次多项式拟合 U 形数据;房价预测加入不相关特征,导致新数据预测差。
总结:目标是找到模型复杂度的平衡点,使模型在训练集和测试集上都表现良好。
深度学习
1. 神经网络(Neural Network)的结构
神经网络是一种模拟人脑处理信息的算法,它由节点(神经元)和层(layer)组成,通过连接权重调整信息流动。
- 节点(Neuron):接收输入 → 加权求和 → 激活函数 → 输出信号。
- 层(Layer):
- 输入层(Input Layer):接收原始数据,如图像像素、文本词向量。
- 隐藏层(Hidden Layer):提取特征,越深的网络越能捕捉复杂模式。
- 输出层(Output Layer):生成预测结果,如类别概率或连续值。
2. 浅层 vs 深度神经网络
类型 | 隐藏层数量 | 适用任务 | 示例 | 优势 |
浅层(Shallow NN) | 1 | 简单、小规模任务 | 垃圾邮件分类 | 训练快,计算量小 |
深度(Deep NN) | 多层 | 复杂、大规模任务 | 图像分类、自动驾驶 | 能提取复杂高阶特征 |
3. 深度学习的核心流程
以图像分类任务为例:
- 输入层:接收28×28灰度图像 → 784个节点。
- 隐藏层:
- CNN卷积层提取边缘 → 池化层降维 → 更深卷积层提取形状 → 形成高阶特征。
- 输出层:10个节点 → 每个节点输出数字0-9概率。
以文本序列任务为例(情感分析):
- 输入层:词向量序列
- 隐藏层:RNN记忆每个词的上下文
- 输出层:分类输出情感标签
4. 深度学习模型特点
模型 | 适用数据 | 优势 | 核心结构 |
浅层神经网络 | 简单特征 | 训练快、简单任务 | 输入 → 隐藏1层 → 输出 |
深度神经网络 | 高维、复杂数据 | 捕捉复杂模式 | 输入 → 多隐藏层 → 输出 |
CNN | 图像、网格数据 | 局部特征提取强 | 卷积 → 池化 → 全连接 → 输出 |
RNN | 序列数据 | 上下文记忆能力 | 输入 → 隐藏循环 → 输出 |
卷积神经网络(CNN)
CNN专门处理具有网格结构的数据,如图像、视频等。
1. 核心组成
- 卷积层(Convolutional Layer)
- 功能:提取局部特征(边缘、角点、纹理等)。
- 类比:用小镜子在图像上滑动,每次观察局部区域。
- 参数:卷积核(滤波器)、步长(stride)、填充(padding)。
- 池化层(Pooling Layer)
- 功能:降维、保留重要信息。
- 类比:对图像做压缩,只保留关键特征。
- 常见方式:最大池化(Max Pooling)、平均池化(Average Pooling)。
- 全连接层(Fully Connected Layer)
- 功能:整合卷积池化后的特征,输出最终预测。
- 类比:将所有观察结果组合,做出最终判断。
2. CNN的应用示例
- 图像分类:识别手写数字0-9
- 自动分拣水果:识别苹果、梨、橙子
- 医疗影像分析:检测病灶区域
循环神经网络(RNN)
RNN适用于序列数据,如文本、语音、股票时间序列。
1. 核心特点
- 记忆功能:能保留历史信息影响当前输出。
- 参数共享:序列每一步使用相同参数,提高模型紧凑性。
- 输出依赖:可在序列中每一步或最后一步生成输出。
2. 层级功能
层级 | 功能 | 示例 |
输入层 | 接收序列元素(如词向量) | “我爱自然语言处理” → 每个词向量 |
隐藏层 | 处理当前输入 + 前一状态 → 新隐藏状态 | 记忆“我爱”信息影响下一个词处理 |
输出层 | 生成预测 | 情感分析:积极、中立、消极;文本生成:预测下一个词 |
3. RNN应用示例
- 语音识别:将音频序列映射为文本
- 文本生成:预测下一个单词
- 股票价格预测:基于过去价格序列预测未来价格
- 手写文本识别:利用字符序列信息识别单词
深度学习概念流程图
1. 神经网络总体结构
[输入数据]
↓
[输入层 Input Layer] ——接收原始数据,如图像像素、文本词向量
↓
[隐藏层 Hidden Layer(s)] ——提取和变换特征
↓
[输出层 Output Layer] ——给出预测结果或分类
- 输入层:节点数量 = 数据特征数量
- 隐藏层:节点数量可多可少,每层通过权重与前一层连接
- 输出层:节点数量 = 任务类别数(分类)或 1(回归)
2. CNN(卷积神经网络)数据流
[输入图像]
↓
[卷积层 Conv Layer] ——提取局部特征(边缘、角点)
↓
[激活函数 ReLU] ——增加非线性能力
↓
[池化层 Pooling Layer] ——降维、保留主要特征
↓
[卷积层 + 池化层循环若干次] ——提取更高阶特征
↓
[全连接层 Fully Connected Layer] ——整合特征
↓
[输出层 Output Layer] ——输出分类概率
- 卷积层:小滤镜滑动提取局部特征
- 池化层:压缩特征,降低计算量
- 全连接层:将所有特征整合,用于最终分类
3. RNN(循环神经网络)数据流
[输入序列] ——每个时间步输入一个元素(词、音频点、价格等)
↓
[隐藏层 Hidden Layer] ——循环处理,记忆上一个时间步状态
↺ ←——————
(每个时间步输出新隐藏状态)
↓
[输出层 Output Layer] ——每步或最后一步生成预测
- 记忆功能:隐藏层保留之前的状态
- 参数共享:所有时间步使用相同权重
- 输出依赖:可每步输出或最后输出整个序列结果
4. 总体概念对比
模型 | 数据类型 | 特征提取方式 | 记忆机制 | 输出方式 |
普通NN | 一般表格数据 | 隐藏层非线性组合 | 无 | 最后输出 |
CNN | 图像/网格 | 卷积 + 池化 | 无 | 最后输出(分类/回归) |
RNN | 序列数据 | 隐藏层循环 | 有,记忆历史 | 每步或最后输出 |
Transformer
概述
Transformer 是一种深度学习模型,于 2017 年由 Vaswani 等人提出,主要用于处理序列数据,如文本、语音等。它在自然语言处理任务(如机器翻译、文本生成、摘要等)中表现卓越。Transformer 的核心优势在于 能够并行处理整个输入序列,相比传统 RNN 或 LSTM,训练速度更快,并且更擅长捕捉长距离依赖关系。
核心组件
Transformer 主要由四个核心组件组成:自注意力机制(Self-Attention)、多头注意力(Multi-Head Attention)、位置编码(Positional Encoding)以及前馈网络(Feed-Forward Network)。
1. 自注意力机制(Self-Attention)
概念:
自注意力机制可以在处理每个 token 时,评估它与序列中其他 token 的相关性,从而动态分配注意力权重。举例:
读句子“当王后死后,国王也很快去世。”时,理解“国王”需要特别关注“王后”,因为两者的状态密切相关。自注意力机制模拟了人类这种关注关系的能力。作用:
- 捕捉序列中任意位置的依赖关系
- 提升模型理解长文本的能力
2. 多头注意力(Multi-Head Attention)
概念:
多头注意力机制是将自注意力机制扩展为多个“头”,每个头在不同子空间中学习序列的表示,从多个角度捕捉信息。举例:
- 组织聚会时同时考虑地点、食物、音乐等。地点 → 交通便利性
- 食物 → 参与者口味
- 音乐 → 氛围烘托
多头注意力类似,可以同时从多个角度理解句子或序列特性。
3. 位置编码(Positional Encoding)
概念:
Transformer 不像 RNN 那样顺序处理序列,因此需要位置编码来提供 token 的位置信息,使模型理解序列顺序。举例:
排队买咖啡,即使闭眼,也能通过声音顺序判断是谁在点单。位置编码让模型感知序列中 token 的相对和绝对位置。
4. 前馈网络(Feed-Forward Network, FFN)
概念:
前馈网络是作用于每个 token 的全连接网络,对每个位置独立计算,通常包括非线性激活函数。举例:
在快餐店工作时,每个客户的订单都按相同步骤处理(接单、制作、交付),无论前一个订单是什么。前馈网络对每个 token 执行相同操作,独立处理。
总结:
Transformer 的四个核心组件各自独立又相互配合,使模型能高效处理序列数据,特别是在语言理解和生成方面。
Transformer 流程概念图(文字版)
[输入序列 X] → [Token Embedding] + [Positional Encoding]
↓
[编码器 Encoder 层 x N]
├─ [Multi-Head Self-Attention] → 计算每个 token 与序列中其他 token 的相关性
├─ [Add & Layer Norm] → 残差连接 + 层归一化
├─ [Feed-Forward Network] → 对每个位置独立处理
└─ [Add & Layer Norm] → 残差连接 + 层归一化
↓
[输出序列 H] → 可以接下游任务(翻译、文本生成等)
- 自注意力机制(Self-Attention):模拟人类读句子时关注相关词
- 多头注意力(Multi-Head Attention):从不同角度理解词间关系
- 位置编码(Positional Encoding):保留序列中 token 的顺序信息
- 前馈网络(Feed-Forward Network):对每个 token 独立的非线性变换
- 残差连接 + 层归一化(Add & Layer Norm):帮助梯度稳定、加快训练
BERT(Bidirectional Encoder Representations from Transformers)
概述
BERT 是基于 Transformer 编码器的深度学习模型,用于自然语言理解(NLU)任务。其主要创新在于 双向训练,能够同时考虑文本中每个词的左侧和右侧上下文,从而理解更丰富的语义信息。
关键组件与特性
1. 基于 Transformer 编码器
BERT 使用 Transformer 的编码器部分(Encoder),包括:
- 多头自注意力(Multi-Head Self-Attention)
- 位置编码(Positional Encoding)
- 前馈网络(Feed-Forward Network)
- 残差连接 + 层归一化(Add & Layer Norm)
特点:只使用编码器,无解码器部分。
2. 双向上下文理解
- BERT 能同时利用词的左右上下文
- 相比传统单向模型(只看左或右),能更准确理解词义和语境
举例:
理解电影片段情节时,不仅要看当前事件,也需要考虑前后剧情。BERT 的双向性就模拟了这种能力。
3. 预训练与微调
预训练(在大规模语料上学习语言规律):
- MLM(Masked Language Model):随机遮盖句子中的部分词,预测被遮盖词
- NSP(Next Sentence Prediction):预测第二个句子是否为第一个句子的合理续句
微调(Fine-Tuning):
- 将预训练模型在特定任务上训练少量数据,如情感分析、问答
- 调整参数以适应具体任务
举例:
- 电影评论情感分析:预训练阶段 → 学习大量文本的语义规律
- 微调阶段 → 根据电影评论数据预测正面或负面情感
总结:
- BERT 强大之处在于:双向上下文理解能力
- 灵活的预训练 + 微调策略
- 在各种自然语言理解任务中取得显著效果
BERT 流程概念图(基于 Transformer 的 Encoder)
[输入序列 X] → [Token Embedding + Positional Encoding]
↓
[多层 Transformer 编码器 Encoder x N]
├─ 每层都包含:
│ ├─ Multi-Head Self-Attention
│ ├─ Add & Layer Norm
│ ├─ Feed-Forward Network
│ └─ Add & Layer Norm
↓
[输出上下文向量 H]
↓
[任务特定层] → 例如情感分析、问答、文本分类
- 双向上下文理解:同时看左侧和右侧的词,捕捉完整语义
- 预训练任务:
- MLM(Masked Language Model)→ 随机遮蔽部分词,预测它们
- NSP(Next Sentence Prediction)→ 判断句子顺序是否合理
- 微调 Fine-Tuning:在具体任务上调整参数
GPT(Generative Pre-trained Transformer)
概述
GPT 是一种自然语言生成模型,基于 Transformer 的解码器(Decoder)结构,能够生成类似人类写作的文本。
1. 生成式(Generative)
- 可以生成新内容,而不仅仅是分类或预测
- 用于写作、对话、文本补全等任务
示例:
给出开头“从前,有一个勇敢的骑士”,GPT 能生成后续情节。
2. 预训练(Pre-trained)
- 在大规模语料(书籍、网站、文章等)上学习语言规律
- 使模型具备丰富的语言知识和理解能力
示例:
- 对话系统 → 回答问题
- 文本生成 → 写故事、续写文章
3. Transformer 架构
- 使用多层解码器(Decoder)
- 核心组件:
- Masked Multi-Head Attention → 防止模型看到未来信息
- 前馈网络
- 残差连接 + 层归一化
- 支持并行处理,提高生成效率
4. 综合示例:生成故事
输入:
"在一个遥远的村庄里,有一个年轻的女孩,她发现了一本神秘的旧书。"
生成结果:
"书中记载着一个失落的宝藏的位置。一晚月光照进房间,她决定跟随线索寻宝。深入森林,她遇到各种奇异生物,每个都影响她的旅程……"
总结 GPT 核心特性:
- 生成式 → 可以生成完整的新文本
- 预训练 → 学习语言规律和语义知识
- Transformer 架构 → 高效捕捉上下文,理解文本
- 应用广泛 → 对话系统、文本生成、写作辅助、翻译等
GPT 流程概念图(基于 Transformer 的 Decoder)
[输入提示 Prompt] → [Token Embedding + Positional Encoding]
↓
[多层 Transformer 解码器 Decoder x N]
├─ 每层都包含:
│ ├─ Masked Multi-Head Self-Attention → 只看当前及之前的词
│ ├─ Add & Layer Norm
│ ├─ Feed-Forward Network
│ └─ Add & Layer Norm
↓
[输出预测概率 P(next token)]
↓
[生成文本] → 可以继续作为下一个输入,循环生成完整文本
- 生成式(Generative):模型可以根据提示生成新文本
- 预训练(Pre-trained):在大规模语料上学习语言规律
- Transformer 结构:高效处理序列、捕捉上下文
- 循环生成:每次生成下一个词,形成连贯文本
Transformer / BERT / GPT 核心比较
模型 | 架构基础 | 方向性 | 核心任务 | 应用举例 |
Transformer | Encoder + Decoder | 双向编码 + 单向解码 | 翻译、文本生成 | 机器翻译、摘要生成 |
BERT | Encoder | 双向上下文 | 理解、分类 | 情感分析、问答、NER |
GPT | Decoder | 单向(左到右) | 生成 | 对话、写作、故事生成 |
大语言模型(LLM, Large Language Model)
- 指参数量大、经过大规模数据训练的自然语言处理模型
- 能执行多种任务:
- 回答问题
- 生成文本
- 翻译语言
- 文本摘要与分析
向量数据库与嵌入技术
1. 向量数据库(Vector Database)
在人工智能(AI)领域,尤其是处理自然语言或图像等高维数据时,通常需要将原始数据转换为向量形式。这些向量被称为特征向量,是原始数据的数值化表示,可以用于机器学习模型的训练和预测。为了高效管理和检索这些向量,就需要使用向量数据库。
1.1 向量数据库概念
向量数据库是一类专门设计来存储、管理和查询向量数据的数据库。与传统的表格数据库不同,向量数据库能够处理高维数组,并支持复杂查询,例如寻找与给定向量最相似的向量(最近邻搜索)。
1.2 向量数据库的优势
- 高效检索
- 在推荐系统、图像识别等应用中,快速找到与输入数据相似的历史数据非常重要。向量数据库通过优化数据结构,加速了最近邻搜索。大规模存储
- AI应用往往涉及海量向量数据,传统数据库在处理高维大数据时效率低下。向量数据库针对这种需求优化了存储和查询能力。动态更新
很多场景需要实时更新或扩展向量数据集。向量数据库能够高效处理动态变化的数据。
- 图像搜索
- 用户上传一张喜欢的衣服图片,系统将其转换为特征向量,在数据库中检索最相似的商品并推荐。推荐系统
- 音乐流媒体服务分析所有歌曲,将音频转换为向量存储。当用户播放某首歌时,系统检索相似向量的歌曲,实现个性化推荐。人脸识别
安全系统将每个人的面部图像转为向量存储。访客面部转向量后,快速比对数据库中向量,如果匹配度高,则允许进入。
2. 嵌入(Embeddings)
嵌入是将非数值数据(如文本、图像)转换为数值向量的一种技术,广泛应用于自然语言处理(NLP)和机器学习中。
2.1 嵌入的特点
- 向量并非随机生成,而是通过训练学习得到,捕捉原始数据的重要特性和关系。
- 例如,在文本中,单词的嵌入向量能表达其语义和语法特性。
2.2 嵌入的作用
- 降维
- 原始数据(如单词、用户ID、商品ID)数量庞大,直接处理成本高。嵌入将这些数据压缩到较小的连续数值空间。捕获关系
嵌入通过训练学习数据关系,例如在文本中频繁共同出现的单词向量会在空间中更接近。
- 单词嵌入
- 词语:“狗”、“猫”、“汽车”
- 训练后的向量空间中,“狗”和“猫”向量接近,因为它们都是宠物,“汽车”向量则远离它们。
- 商品嵌入
- 用户A喜欢商品x、y、z;用户B喜欢x、y
- 基于商品嵌入向量,可以预测B可能也喜欢商品z,实现推荐。
- 图像嵌入
- 人脸识别系统将每个人面部转向量存储
- 验证身份时,将当前图像转向量,与数据库比对,实现快速匹配。
总结:嵌入技术是处理和分析复杂数据的有效工具,为向量数据库提供基础。
GPT 与大语言模型(LLM)
1. GPT(Generative Pre-trained Transformer)
GPT是一种先进的自然语言处理模型,能够生成类似人类书写的文本。名字各部分含义:
- Generative(生成式):能够生成新的文本内容
- 例子:给模型开头“从前,有一个勇敢的骑士”,GPT可以生成完整故事情节。
- Pre-trained(预训练):在大规模文本数据上训练,使模型具备丰富的语言知识
- 例子:GPT在书籍、网站和文章数据上学习语法、句法和语义结构。
- Transformer:高效神经网络结构,擅长处理序列数据
- 能同时理解一句话中的所有词,提高复杂文本处理效率。
应用场景:写作助手、对话生成、翻译、问答等。
2. LLM(Large Language Model,大语言模型)
2.1 基本概念
- 规模大(Large)
- 包含数十亿至上百亿参数,类似“大脑中的神经元”,帮助理解和生成语言。
- 语言(Language)
- 专门处理自然语言(英语、中文等),擅长理解语义和生成文本。
- 模型(Model)
- 通过机器学习训练的系统,根据输入生成合理输出,相当于智能助理。
2.2 关键特性
- 大规模数据训练
- 模型在海量文本数据上训练,学习语言规律和知识。
- 深层神经网络结构
- 多层网络协同工作,每层处理语言的不同方面,提高理解和生成能力。
2.3 实例应用
- 问答:问“爱因斯坦是谁?”,模型回答“著名物理学家,提出相对论,1921年获诺贝尔奖”。
- 文本生成:给开头“在月光下,一只小猫发现了宝石……”,模型生成完整故事。
- 翻译:输入“Hello, how are you?”,模型输出“你好,你好吗?”
2.4 总结
LLM是经过大规模训练的AI系统,能够理解和生成自然语言,支持多种文本处理任务,如问答、写作和翻译。它的核心特点是大规模、高效、智能、多功能,是现代AI的重要组成部分。
GPT-3 模型规模(Model Size)
GPT-3 的“大模型”被称为 175B,表示模型包含 1750亿(175 billion)个参数。这些参数是模型的核心组成部分,包括权重(weights)和偏置(bias),在训练过程中不断调整,以优化模型性能。
1. 参数(Parameters)
1.1 定义
- 参数是神经网络中可调节的数值,包括:
- 权重(Weights):决定输入数据在神经网络中如何传播。
- 偏置(Bias):用于调整输出,使模型更灵活。
- 参数通过神经网络的层和节点相互连接,控制输入数据如何被处理和映射到输出。
1.2 功能
- 在训练过程中,模型通过优化这些参数来 最小化预测误差,从而提升在各种任务上的表现。
- 参数越多,模型可以捕捉的数据模式和细节就越丰富。
2. 175B 参数的意义
2.1 含义
- GPT-3 有 1750亿个参数,这是一个非常庞大的数字。
- 参数数量大意味着模型容量高,能够学习和理解复杂的语言模式和上下文关系。
2.2 性能提升
- 文本生成:生成流畅、自然的段落,模仿人类写作风格。
- 问答系统:理解复杂问题的上下文并给出合理答案。
- 翻译任务:捕捉语言细节,实现准确翻译。
- 编程辅助:理解编程语言,生成代码片段,提高编程效率。
3. 参数数量的重要性
- 表达能力更强
- 更多参数意味着模型能学习和表示更复杂的数据模式。
- 对文本生成、问答、翻译等任务非常关键。
- 提升泛化能力
- 大模型能适应更多样化的数据类型和任务。
- 对未知或复杂输入的表现更稳健。
- 提高性能
- 参数越多,预测准确度和生成质量越高。
- 特别在模棱两可或复杂语境下表现更好。
4. 类比与理解
- 类比人脑:
- 参数可以类比为脑中的神经元连接。连接越多,处理信息的能力越强,理解复杂关系的能力越高。实际应用示例:
- 文本生成:撰写文章、写作辅助。
- 问答系统:复杂问题解析与回答。
- 编程助手:生成代码片段,提高开发效率。
5. 训练与资源需求
- 计算资源
- GPT-3 的训练需要大量 GPU/TPU 运算。
- 对硬件和电力需求极高。
- 时间与成本
- 训练可能持续数周甚至数月。
- 硬件、能耗和维护成本非常高。
6. 总结
- GPT-3 的 175B 参数代表了模型的超大规模,赋予模型理解和生成复杂语言的能力。
- 参数数量的增加带来更强的表达力、泛化能力和性能,但同时也需要巨大的计算资源和时间。
- 这种大规模模型在文本生成、问答、翻译、编程等任务中展现出卓越的应用潜力。
token
1. Token(标记)的定义
在自然语言处理(Natural Language Processing, NLP)中,Token 是指将原始文本按照特定规则切分后得到的基本处理单元。一个 Token 可以是:
- 一个完整的单词(如 "hello"),
- 一个子词(subword,如 "un"、"##able",常见于 BPE 或 WordPiece 等分词算法),
- 一个标点符号(如 ","、"!"),
- 甚至是一个字符(在某些极端分词策略下)。
Token 的具体形式取决于所使用的 分词器(Tokenizer)。例如,OpenAI 的 GPT 系列模型使用的是基于 字节对编码(Byte Pair Encoding, BPE) 的分词方法,该方法能在词汇覆盖率和模型效率之间取得良好平衡。
📌 注意:Token 并不严格等同于“单词”。例如,单词 "unbelievable" 可能被拆分为 ["un", "believ", "able"] 三个 Token。
2. Token 示例(以 GPT-4o 为例)
考虑输入文本:
"Hello, world!"
使用 GPT-4o 的分词器处理后,可能得到如下 Token 序列:
["Hello", ",", " world", "!"]
- 注意 " world" 前面包含一个空格,这是 BPE 分词器保留上下文空格信息的常见做法。
- 总共 4 个 Token。
LangChain:构建 LLM 驱动应用的完整工具链
官方文档:https://python.langchain.com/docs/introduction/
Agents - Docs by LangChain
LangChain 是一个开源框架,专为开发由大型语言模型(LLMs)驱动的应用程序而设计。它覆盖了从原型开发到生产部署的全生命周期,提供模块化、可组合的组件,显著降低 LLM 应用的工程复杂度。
LangChain 的价值与生命周期支持
LangChain 通过以下三个阶段支持 LLM 应用的完整开发流程:
阶段 | 功能 | 工具/服务 |
开发(Development) | 使用模块化组件快速构建原型 | langchain-core, langchain, langgraph, 第三方集成 |
调试与评估(Observability) | 调试、测试、评估和监控链的行为 | LangSmith(开发平台) |
部署(Deployment) | 将任意链转换为可调用的 API | LangServe(REST API 服务) |
LangChain 的开源库
LangChain 采用分层架构,各库职责清晰、解耦良好:
库名 | 职责 | 说明 |
langchain-core | 基础抽象层 | 定义核心接口(如 Runnable)、消息类型、提示模板、输出解析器等。是所有上层库的依赖基础。 |
langchain-community | 第三方集成 | 提供对主流 LLM 提供商(如 OpenAI、Anthropic、Google、Mistral 等)的适配器。 |
langchain-openai, langchain-anthropic 等 | 轻量级提供商包 | 从 langchain-community 拆分出的独立包,仅依赖 langchain-core,减少依赖体积。 |
langchain | 应用逻辑层 | 实现高级抽象:Chains(链)、Agents(智能体)、Retrieval Strategies(检索策略)等,构成应用的“认知架构”。 |
langgraph | 状态化多步工作流 | 基于有向图(DAG)建模复杂、有状态、多参与者(如人机协作)的 LLM 应用。适用于需要循环、条件分支或记忆的场景。 |
langserve | API 部署工具 | 将任意 Runnable 链一键部署为 FastAPI 驱动的 RESTful API,支持 OpenAPI 文档、输入/输出验证等。 |
LangSmith | 开发与运维平台(SaaS) | 提供链的追踪(Tracing)、评估(Evaluation)、监控(Monitoring)和调试(Debugging)能力,是生产级应用的必备工具。 |
概念Conceptual guide | 🦜️🔗 LangChain
- 聊天模型:通过聊天 API 公开的 LLM,用于处理消息序列作为输入和输出消息。
- 消息:聊天模型中的通信单位,用于表示模型输入和输出。
- 聊天记录:表示为一系列消息的对话,在用户消息和模型响应之间交替。
- 工具:具有关联架构的函数,用于定义函数的名称、描述及其接受的参数。
- 工具调用:一种聊天模型 API,它接受工具架构和消息作为输入,并将这些工具的调用作为输出消息的一部分返回。
- 结构化输出:一种使聊天模型以结构化格式(例如与给定架构匹配的 JSON)进行响应的技术。
- 内存:有关持久化的对话的信息,以便它可以在将来的对话中使用。
- 多模态:处理不同形式的数据(例如文本、音频、图像和视频)的能力。
- 可运行接口:许多 LangChain 组件和 LangChain 表达式语言所基于的基本抽象。
- 流式处理:LangChain 流式处理 API,用于在生成结果时显示结果。
- LangChain 表达式语言 (LCEL):用于编排 LangChain 组件的语法。对于更简单的应用最有用。
- 文档加载器:将源加载为文档列表。
- 检索:信息检索系统可以从数据源检索结构化或非结构化数据以响应查询。
- 文本拆分器:将长文本拆分为更小的块,可以单独索引以实现精细检索。
- 嵌入模型:在矢量空间中表示文本或图像等数据的模型。
- 向量存储:对向量和相关元数据的存储和高效搜索。
- 检索器:从知识库返回相关文档以响应查询的组件。
- 检索增强生成 (RAG):一种通过将语言模型与外部知识库相结合来增强语言模型的技术。
- 代理:使用语言模型选择要执行的作序列。代理可以通过工具与外部资源进行交互。
- 提示模板:用于分解模型“提示”的静态部分(通常是一系列消息)的组件。对于序列化、版本控制和重用这些静态部件很有用。
- 输出解析器:负责获取模型的输出并将其转换为更适合下游任务的格式。输出解析器在工具调用和结构化输出普遍可用之前主要有用。
- 少样本提示:一种通过提供提示中要执行的任务的一些示例来提高模型性能的技术。
- 示例选择器:用于根据给定输入从数据集中选择最相关的示例。示例选择器用于少数样本提示,以选择提示的示例。
- 异步编程:在异步环境中使用 LangChain 应该了解的基础知识。
- 回调:回调允许在内置组件中执行自定义辅助代码。回调用于流式传输 LangChain 中 LLM 的输出、跟踪应用程序的中间步骤等。
- 跟踪:记录应用程序从输入到输出所采取的步骤的过程。跟踪对于调试和诊断复杂应用程序中的问题至关重要。
- 评估:评估人工智能应用程序的性能和有效性的过程。这涉及根据一组预定义的标准或基准测试模型的响应,以确保其满足所需的质量标准并实现预期目的。此过程对于构建可靠的应用程序至关重要。
- 测试:验证集成或应用程序的组件是否按预期工作的过程。测试对于确保应用程序行为正确并且对代码库的更改不会引入新的错误至关重要。
词汇表
- AIMessageChunk:来自 AI 消息的部分响应。在从聊天模型流式传输响应时使用。
- AIMessage:表示来自 AI 模型的完整响应。
- astream_events:从 LCEL 链流式传输精细信息。
- BaseTool:LangChain 中所有工具的基类。
- batch:用于执行具有批处理输入的 runnable。
- bind_tools:允许模型与工具交互。
- 缓存:存储结果以避免对聊天模型的冗余调用。
- 聊天模型:处理多种数据模式的聊天模型。
- 可配置的可运行对象:创建可配置的可运行对象。
- 上下文窗口:聊天模型可以处理的最大输入大小。
- 对话模式:聊天交互中的常见模式。
- 文档:LangChain 对文档的表示。
- 嵌入模型:为各种数据类型生成向量嵌入的模型。
- HumanMessage:表示来自人类用户的消息。
- InjectedState:注入到工具函数中的状态。
- InjectedStore:可以注入到工具中进行数据持久化的存储。
- InjectedToolArg:将参数注入工具函数的机制。
- 输入和输出类型:用于 Runnables 中输入和输出的类型。
- 集成包:与 LangChain 集成的第三方包。
- 集成测试:验证组件之间交互正确性的测试,通常在访问支持集成的底层 API 的情况下运行。
- invoke:调用 Runnable 的标准方法。
- JSON 模式:以 JSON 格式返回响应。
- langchain-community:LangChain 的社区驱动组件。
- langchain-core:核心 langchain 包。包括基本接口和内存中实现。
- langchain:更高级别组件(例如,一些预构建链)的包。
- langgraph:LangChain 的强大编排层。用于构建复杂的管道和工作流。
- langserve:用于将 LangChain Runnables 部署为 REST 端点。使用 FastAPI。主要适用于 LangChain Runnables,目前不与 LangGraph 集成。
- LLM(旧版):较旧的语言模型,将字符串作为输入并返回字符串作为输出。
- 管理聊天记录:维护和管理聊天记录的技术。
- OpenAI 格式:OpenAI 用于聊天模型的消息格式。
- RunnableConfig 的传播:通过 Runnables 传播配置。如果使用 python 3.9、3.10 和异步,请阅读。
- rate-limiting:聊天模型的客户端速率限制。
- RemoveMessage:用于从聊天记录中删除消息的抽象,主要用于 LangGraph。
- role:表示聊天消息的角色(例如,用户、助手)。
- RunnableConfig:用于将运行时信息传递给 Runnables(例如,、)。
run_name
run_id
tags
metadata
max_concurrency
recursion_limit
configurable
- 聊天模型的标准参数:API 密钥、 和 .
temperature
max_tokens
- 标准测试:一组定义的单元测试和集成测试,所有集成都必须通过。
- stream:用于从可运行对象或图形流式传输输出。
- 代币化:将数据转换为代币的过程,反之亦然。
- 令牌:语言模型在后台读取、处理和生成的基本单元。
- 工具工件:将工件添加到工具的输出中,这些工件不会发送到模型,但可用于下游处理。
- 工具绑定:将工具绑定到模型。
- @tool:用于在 LangChain 中创建工具的装饰器。
- 工具包:可以一起使用的工具集合。
- ToolMessage:表示包含工具执行结果的消息。
- 单元测试:验证单个组件正确性的测试,无需访问 Internet 即可单独运行。
- 向量存储:专门用于存储和高效搜索向量嵌入的数据存储。
- with_structured_output:聊天模型的辅助方法,原生支持工具调用,以获取与通过 Pydantic、JSON 模式或函数指定的给定模式匹配的结构化输出。
- with_types:覆盖可运行对象的输入和输出类型的方法。在处理复杂的 LCEL 链和使用 LangServe 进行部署时很有用。
消息(Messages)模型
ChatModel 使用消息列表作为输入/输出。LangChain 定义了多种消息类型,均继承自 BaseMessage,包含以下通用属性:
- content: 消息主体(str 或多模态内容列表)
- role: 发送者角色(human, ai, system, tool 等)
- response_metadata: 模型响应元数据(如 token 使用量、logprobs 等)
向量数据库
向量数据库(Vector Database),也称为矢量数据库,是一种专门用于存储和处理向量数据的数据库系统。向量在数学中表示具有大小和方向的量,通常以高维数组形式存在。两个向量之间的相似性或距离可通过欧式距离、余弦相似度等度量方法计算。
非结构化数据(如文本、图像、音视频)可通过嵌入模型(Embedding Model)转换为向量形式,从而存入向量数据库。这种转换使得系统能够基于语义或上下文含义进行相似性检索,而非依赖传统数据库中的精确关键词匹配。
向量数据库的核心能力在于高效存储与快速检索高维向量数据。它通常结合索引结构(如HNSW、K-Means聚类等)和近似最近邻(ANN)搜索算法,在大规模高维数据中实现低延迟的相似性查询。此外,现代向量数据库也支持与结构化字段联合过滤,以满足复杂业务场景下的混合查询需求。
向量嵌入(Vector Embeddings)是由人工智能模型(如大型语言模型或专用嵌入模型)生成的高维向量,用于表征原始数据的语义特征。例如,文本可通过OpenAI的text-embedding-ada-002模型生成1536维向量;图像可通过CLIP模型生成对应向量;音频则可使用如wav2vec2等模型进行嵌入。这些向量捕获了数据在多个语义维度上的信息,如文本的词汇、语法、情感、主题等。
特征是用于区分和描述对象的属性。在高维空间中,每个对象可被表示为一个向量,其每个维度对应一个特征。理论上,只要特征维度足够丰富,任何对象都能在高维特征空间中获得唯一且可区分的表示。相似性搜索正是基于这一原理:通过计算查询向量与数据库中向量之间的距离,找出语义上最接近的结果。
常见的相似性度量方法包括:
- 欧式距离(Euclidean Distance):衡量两个向量之间的直线距离,反映绝对差异,适用于需考虑向量长度的场景。
- 余弦相似度(Cosine Similarity):通过计算两向量夹角的余弦值衡量方向相似性,对向量长度不敏感,广泛用于文本语义匹配。
- 点积相似度(Dot Product):在某些归一化条件下与余弦相似度等价,也常用于向量相似性计算。
为提升大规模向量检索效率,向量数据库采用近似最近邻搜索算法。典型方法包括:
- K-Means聚类:将向量划分为若干簇,搜索时先定位最近簇,再在簇内精确查找,减少计算量。但可能遗漏边界区域的最近邻。
- Hierarchical Navigable Small Worlds(HNSW):一种基于分层图结构的索引算法。高层图用于快速跳转,底层图用于精细搜索,兼顾速度与精度,但内存开销较大。
在应用层面,基于嵌入的问答系统或意图匹配系统通常包含以下流程:用户输入经嵌入模型转换为查询向量;系统在向量数据库中检索语义最相似的文档或意图向量;返回对应结果。LangChain等框架提供标准Embeddings接口,支持.embed_documents(批量嵌入文档)和.embed_query(嵌入单条查询)两种方法,以适配不同嵌入模型对文档与查询的差异化处理需求。
检索增强生成
检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种结合信息检索与文本生成的技术,用于提升大型语言模型(LLM)在回答问题时的准确性、时效性和可靠性。其核心思想是:在 LLM 生成回答之前,先从一个外部权威知识库中检索与用户查询高度相关的信息,并将这些信息作为上下文提供给 LLM,从而引导其生成更准确、有依据的回答。
大型语言模型虽然在海量通用数据上进行了训练,具备强大的语言理解和生成能力,但仍存在明显局限:其知识是静态的,截止于训练数据的时间点;无法访问组织内部或特定领域的最新信息;在缺乏确切答案时可能“编造”看似合理但错误的内容(即“幻觉”问题)。RAG 无需对模型本身进行重新训练,即可让 LLM 动态接入外部知识源,是一种高效、灵活且成本较低的增强方案。
RAG 的工作流程主要包括以下四个步骤:
- 构建外部知识库:将组织内部的非结构化或结构化数据(如 PDF、Word、网页、数据库记录等)通过文档加载器(Document Loaders)读取,并使用文本分割器(Text Splitters)将长文档切分为语义连贯的较小片段(chunks)。这些片段随后通过嵌入模型(Embedding Model)转换为高维向量,并存储到向量数据库(Vector Database)中,形成可供检索的知识库。
- 检索相关信息:当用户提出问题时,系统首先将该问题也通过相同的嵌入模型转换为向量,然后在向量数据库中执行相似性搜索(通常使用余弦相似度或欧式距离),找出与问题语义最相关的若干文档片段。
- 增强提示(Prompt Augmentation):将检索到的相关文档片段作为上下文,与原始用户问题一起组合成一个新的、信息更丰富的提示(prompt),输入给 LLM。这一过程通常通过提示工程实现,确保 LLM 能够明确知道应基于哪些外部信息作答。
- 生成最终回答:LLM 基于增强后的提示,综合其自身知识与检索到的权威信息,生成最终的回答。该回答不仅语言流畅,而且内容有据可依,显著降低了幻觉风险,并能反映最新或特定领域的知识。
RAG 相较于传统关键词搜索或纯 LLM 问答具有显著优势:
- 经济高效:避免了对基础模型进行昂贵的微调或重新训练;
- 信息时效性强:可接入实时或定期更新的数据源,确保回答内容不过时;
- 提升可信度:回答可追溯至具体来源,增强用户信任;
- 增强可控性:开发者可灵活管理知识库内容,控制模型输出范围,并对错误来源进行快速修正。
在技术实现上,RAG 依赖多个关键组件的协同:
- Document Loaders:用于从各种数据源(如 CSV、HTML、PDF、Notion、Google Drive 等)加载原始内容;
- Text Splitters:如 RecursiveCharacterTextSplitter(按段落、句子、单词递归分割)或 SemanticChunker(基于语义相似性分割),确保文本块既不过长(避免超出模型上下文限制),又保持语义完整性;
- Embedding Models:如 OpenAI 的 text-embedding-ada-002,将文本转换为向量;
- Vector Stores:如 Chroma、Pinecone、FAISS 等,高效存储和检索向量;
- Retrievers:封装检索逻辑,支持混合搜索(向量+关键词)、重排序(re-ranking)等高级功能。
此外,若需在 RAG 系统中引入对话记忆(即支持多轮上下文理解),还需额外处理“问题改写”(Query Rewriting):模型需结合历史对话,将当前用户提问重写为一个独立、完整、适合检索的查询语句,再执行检索与生成。这通常通过构建带记忆的 Agent(如 LangChain 的 React Agent)实现,使系统能理解“大会主题是什么?”这类依赖前文的问题,并正确检索相关文档。
总之,RAG 是当前构建可靠、专业、可落地的生成式 AI 应用的核心架构之一,尤其适用于企业知识问答、智能客服、研究辅助等需要高准确性和领域专业知识的场景。