前言
公司业务需要一套可离线部署的检索增强生成(RAG)大模型知识库,于是最近花了一周时间了解了AI相关的技术。除了查阅各类高质量技术博客,也自行动手进行了一些demo样例。其中包括huggingface、modelscope等平台,虽能使用,但疑惑还是不少,仅在此记录一些学习中的过程和问题,以便日后自我查阅。
几个关键的概念
对于机器学习方面的初学者来说,预处理对象、模型对象和 pipeline 是经常见到的,尤其是写过一些demo,它们在数据处理、模型训练和预测等过程中起着重要作用。很多时候官方概念可能难以理解,以下是个人经过查阅资料后,解释这些概念及其作用。
下面会根据部分Demo代码案例说明。
预处理对象
对原始数据进行处理和转换的工具或方法,以便将数据转换为适合模型输入的格式。简单的说就是对数据进行预处理,处理成模型所需要的输入格式,例如将文本转化为输入 ID 和其他必要的张量。常见的一些预处理如下:
- 数据清理:处理缺失值、去除噪声、纠正数据错误等。
- 特征工程:生成、选择和转换特征,如标准化、归一化、特征缩放等。
- 数据增强:特别是对于图像数据,可能包括旋转、裁剪、翻转等操作。
- 编码:将分类变量转换为数值形式(如独热编码)。
- 拆分数据:将数据集分为训练集、验证集和测试集。
示例一(使用scikit-learn的预处理对象)
from sklearn.preprocessing import StandardScaler
# 创建预处理对象
scaler = StandardScaler()# 适配数据并进行转换
X_train_scaled = scaler.fit_transform(X_train)
模型对象
模型对象是由特定的算法和参数组成,经过训练后能够进行预测或分类。模型对象通常包括以下部分:
- 结构:模型的架构,例如线性回归、决策树、神经网络等。
- 参数:模型的可调参数,通过训练数据进行学习和优化。
- 训练方法:用于优化模型参数的方法,例如梯度下降。
示例一(使用scikit-learn的模型对象)
接上述示例一
from sklearn.linear_model import LogisticRegression
# 创建模型对象
model = LogisticRegression()# 训练模型
model.fit(X_train_scaled, y_train)
Pipeline
将多个数据处理步骤和模型训练步骤串联起来,以便简化和自动化整个工作流程。它将数据预处理和模型训练过程结合在一起,使得整个过程可以作为一个单独的工作流来处理。简单的说就是将多个步骤封装在一起,使用者无需关注细节,一个高级API。
一个完整的pipeline一般包括了数据的前处理、模型的前向推理、数据的后处理三个过程。
示例一(使用 scikit-learn)
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression# 创建 pipeline 对象
pipe