本篇我们将开始在本地搭建实验环境。
由于我们需要在本地训练自己的AI模型,虽然是比较小的模型,但还是建议至少有个独显,8GB的RAM,以便加快训练的时间。
安装miniconda
Miniconda是Anaconda的一个最小化安装程序。它提供了conda包管理器和一个核心Python环境,但不会自动安装Anaconda中的全套库。我们可以有选择地安装需要的包,创建一个符合我们需求的定制化环境。 由于我本地已经装好了环境,我现在在VMWare中的windows10虚拟机中重新走一遍安装过程,Linux和Mac中由于安装十分方便,仅提供安装方式,没有截图。(才不是因为没有mac)
在Windows环境下:
我们直接通过命令行安装,省去了访问页面后到处找下载链接的麻烦。我们需要先下载一个scoop,这样我们就可以跟Linux和mac一样通过命令行进行应用安装了:
Set-ExecutionPolicy RemoteSigned -scope CurrentUser # 允许脚本运行[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 #windows10的powershell默认的tls协议好像是1.0,需要指定为Tls1.2才能连接到服务器irm get.scoop.sh | iex

在安装好scoop后我们通过scoop安装包含 Miniconda 的 extras bucket:
scoop bucket add extras
然后我们就可以安装miniconda啦
scoop install miniconda3
ok,没意外的话到这我们就安装好了,最后关闭当前的powershell重新开一个窗口,验证一下版本:

在Linux环境下:
Miniconda提供了一个不完全依赖于发行版包管理器的简单安装过程。我们可以直接从官方仓库获取最新的Miniconda安装程序,静默运行它,然后在shell中 加载conda环境。这样我们可以确保conda命令和环境无需手动配置即可随时使用。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shchmod +x Miniconda3-latest-Linux-x86_64.sh./Miniconda3-latest-Linux-x86_64.sh -b -ueval "$(/home/$USER/miniconda3/bin/conda shell.$(ps -p $$ -o comm=) hook)"conda初始化
这之后的内容三个系统都是一样的,可以参考哈
在shell中执行
conda initconda config --add channels defaultsconda config --add channels conda-forgeconda config --add channels nvidia # 当且仅当你的独显是 nvidia 时才需要conda config --add channels pytorchconda config --set channel_priority strict在完成init后,我们打开一个新窗口会发现
在每一行的开头自己多了一个(base)标识,这是conda初始化完成后,会自动在启动终端的时候激活base环境。这听起来很棒,但有的人或许不太喜欢这样(比如我),所以下面我们把这个base环境的默认启动给关掉
conda config --set auto_activate_base false这时候我们再打开新的终端就不会有base了
环境管理
众所周知,在软件开发中,管理依赖项很快就会成为一项复杂的任务,尤其是在处理具有不同库需求的多个项目时。
这时候我们就需要虚拟环境发挥作用了。它具有的优势有:
依赖隔离: 每个项目都可以有自己的一套依赖项,即使它们与其他项目的依赖项冲突。 清晰的项目结构: 通过将所有依赖项都包含在环境中,使我们的项目目录保持干净。 可复现性: 确保我们的项目可以在具有相同依赖项的不同系统上轻松复现。 系统稳定性: 防止与我们的全局 Python 安装发生冲突,并避免破坏其他项目。
conda 提供了一种创建虚拟环境的简单方法。我们要创建一个名为 ai 且使用 Python 3.11 的新环境,可以使用以下命令:
conda create -n ai python=3.11这将创建一个名为 ai 的虚拟环境,之后可用于安装所有与 AI 相关的包。
激活环境
通过以下命令激活环境:
conda activate ai诶,这时候我们的终端前面出现了(AI)的字样。现在,我们使用conda或pip安装的任何包都将安装在此环境中。
停用该环境:
conda deactivateAI的字样就会从我们的终端中消失。
在Miniconda 环境设置好后,就可以为我们的训练工作安装必要的软件包了。
虽然conda提供了十分多而且全的包,但它不可能包含所有我们需要的工具。这时候我们仍然可以在conda环境中使用pip进行包安装。
使用 conda install 命令安装以下核心包:
conda install -y numpy scipy pandas scikit-learn matplotlib seaborn transformers datasets tokenizers accelerate evaluate optimum huggingface_hub nltk category_encodersconda install -y pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidiapip install requests requests_toolbelt安装JupyterLab
为啥要用JupyterLab?
JupyterLab 是一个交互式开发环境,提供基于网络的编码、数据和可视化界面,允许在单个单元格中运行代码,便于实验和迭代开发。非常好JupyterLab推荐给大家。
在前面创建的AI环境中执行:
conda install -y jupyter jupyterlab notebook ipykernel安装完成后执行
jupyter lab之后就会在我们的浏览器中出现一个新的标签页。我们可以在这里面进行我们的实验。

我们点击notebook下的那个python3,这样会新建一个带单元格的笔记本,我们可以在这单元格里执行我们的代码,并且同一个笔记本里的代码共享一个有状态的 (stateful)执行环境。也就是说下一个单元的代码完全可以使用上一个单元格的变量和执行结果,这很棒啊有没有!

但是假如我们由于运行的代码太多,中间的变量和过程给自己搞迷糊了,可以通过重启内核来清空我们的运行状态,这样我们就可以不用重启也能都得到一个干净的运行环境。

下面我们写一个例子来执行一下:
import pandas as pdimport matplotlib.pyplot as pltimport numpy as np# 创建一个二维表格data = pd.DataFrame({"column1": np.random.rand(50), # 给第一列放50个伪随机数(严谨!)"column2": np.random.rand(50) * 10# 第二列放50个伪随机数*10})#输出前几行print(data.head())# 用上一个单元格创建的二维数据表画一个散点图plt.scatter(data["column1"], data["column2"])plt.xlabel("Column 1")plt.ylabel("Column 2")plt.title("Scatter Plot")plt.show()我们先执行第一个单元格,可以看到它输出了一个二维的数据表

然后我们执行第二个单元格,由于它俩在同一个有状态运行环境中,可以直接获取上一个运行结果来生成散点图

关于jupyter lab的更多使用方法可以参阅官方使用文档[1]
Scikit-learn 和 PyTorch
这两个库是用于AI开发的著名python库,在后面的实验中我们也会经常用到,可以阅读它们的官方使用文档进行学习。本文仅对它们做一个简介。
Scikit-learn
Scikit-learn 是一个构建于 NumPy、SciPy 和 Matplotlib 之上的综合性库。它为机器学习任务提供了广泛的算法和工具,并提供了一致且直观的 API,使得实现各种机器学习模型变得容易。
监督学习 (Supervised Learning): Scikit-learn 提供了大量的监督学习算法,包括:
线性回归 (Linear Regression) 逻辑回归 (Logistic Regression) 支持向量机 (Support Vector Machines, SVM) 决策树 (Decision Trees) 朴素贝叶斯 (Naive Bayes) 集成方法 (Ensemble Methods) (例如,随机森林 (Random Forests)、梯度提升 (Gradient Boosting))
无监督学习 (Unsupervised Learning): 它还提供各种无监督学习算法,例如:
聚类 (Clustering) (K-Means、DBSCAN) 降维 (Dimensionality Reduction) (PCA、t-SNE)
模型选择与评估: Scikit-learn 包含了用于模型选择、超参数调整和性能评估的工具,使开发人员能够有效地优化其模型。 数据预处理: 它提供了用于数据预处理的功能,包括:
特征缩放和归一化 处理缺失值 编码分类变量
PyTorch
PyTorch 是一个由 Facebook 的 AI 研究实验室开发的开源机器学习库。它为构建和部署包括深度学习模型在内的各种类型的机器学习模型提供了一个灵活而强大的框架。
主要特性
深度学习 (Deep Learning): PyTorch 在深度学习方面表现出色,能够开发具有多层和复杂架构的神经网络。 动态计算图 (Dynamic Computational Graphs): 与 TensorFlow 等库中使用的静态计算图不同,PyTorch 使用动态计算图,这使得模型构建和调试更加灵活和直观。 GPU 支持: PyTorch 支持 GPU 加速,可显著加快计算密集型模型的训练过程。 TorchVision 集成: TorchVision 是一个与 PyTorch 集成的库,它为图像数据集、预训练模型和常见图像转换提供了用户友好的界面。 自动微分 (Automatic Differentiation): PyTorch 使用 autograd 自动计算梯度,简化了反向传播 (backpropagation) 的过程。 社区和生态系统: PyTorch 拥有一个庞大而活跃的社区,从而形成了一个包含工具、库和资源的丰富生态系统。
数据集
在人工智能中,用于训练模型的数据的质量和特性会显著影响其性能和准确度。数据集(Datasets)是用于分析和模型训练的数据点的集合,有多种形式和格式,每种都有其自身的属性和注意事项。它们的形式包括:
表格数据(Tabular Data):组织成带有行和列的表格的数据,常见于电子表格或数据库中。 图像数据(Image Data):由表示为像素阵列的数值组成的一组图像。 文本数据(Text Data):由句子、段落或完整文档组成的非结构化数据。 时间序列数据(Time Series Data):随时间推移收集的有序数据点,强调时间模式。
数据集的质量是数据分析或机器学习项目成功的基础。原因如下:
模型准确度(Model Accuracy):高质量的数据集能产生更准确的模型。质量差的数据(如含噪声、不完整或有偏见的数据集)会导致模型性能下降。 泛化(Generalization):精心整理的数据集能使模型有效地泛化到未见过的数据。这可以最大限度地减少过拟合(overfitting) 并确保在实际应用中性能的一致性。 效率(Efficiency):干净、准备充分的数据可以减少训练时间和计算需求,从而简化整个流程。 可靠性(Reliability):可靠的数据集能带来值得信赖的见解和决策。在医疗或金融等关键领域,数据质量直接影响结果的可信度。
什么是“好”的数据集
一个好的数据集具有以下几个关键属性:
数据预处理
数据预处理 (Data preprocessing) 将原始数据转换为适用于机器学习算法的格式。关键技术包括:
数据清洗 (Data Cleaning):处理缺失值、移除重复项以及平滑噪声数据。 数据转换 (Data Transformation):对数据进行归一化、编码、缩放和规约。 数据集成 (Data Integration):合并和聚合来自多个来源的数据。 数据格式化 (Data Formatting):转换数据类型和重塑数据结构。 有效的预处理可以解决不一致性、缺失值、异常值、噪声和特征缩放 (feature scaling) 等问题,从而提高机器学习模型的准确性、效率和鲁棒性。
数据转换
数据转换 (Data transformations) 可以改进特征的表示和分布,使其更适合机器学习模型。这些转换通过将分类变量转换为机器可读的格式并处理偏态数值分布,确保模型能够高效地捕捉潜在模式。它们还能增强已训练模型的稳定性、可解释性和预测性能。
评估模型的指标
在评估一个训练完的机器学习模型时,我们会考察一组数值指标,以衡量模型在特定任务上的表现。这些指标通常量化了预测结果与已知真实标签之间的关系。
在前面的文章中,我们简要介绍了诸如准确率 (accuracy)、精确率 (precision)、召回率 (recall)和F1 分数 (F1-score)等指标。
我们这里引入F1分值
F1分值是精确率和召回率的调和平均值。对于F1-score: 0.9949,该指标表明这两方面之间达到了近乎完美的平衡。
关于F1 分数的关键点:
平衡精确率和召回率。 计算公式为 2 * (precision * recall) / (precision + recall)。 对于涉及类别不平衡的任务非常有用。
虽然这四个指标很常用,但其他度量方法可能会提供更全面的视角:
特异性 (Specificity):衡量模型有效识别负例的能力。 AUC:ROC 曲线下面积 (Area Under the ROC Curve),表示模型在不同阈值下的判别能力。 马修斯相关系数 (Matthews Correlation Coefficient):对于高度不平衡的数据集很有用。 混淆矩阵 (Confusion Matrix):总结预测与真实标签的对比情况,提供全面的性能视图。
这些指标和可视化工具可以帮助确认所给出的高数值是否真正反映了稳健的性能,而不仅仅是数据集中的有利条件。
环境搭建和实验的前置知识介绍到此结束了,下一篇将进入实验,我们会先训练一个垃圾邮件识别的模型。
训练所用的数据集来自HTB Lab[2],本合集的学习资料也大部分来自HTB Lab和部分互联网公开上的学习资料
官方使用文档: https://jupyterlab.readthedocs.io/en/latest/getting_started/overview.html
[2]HTB Lab: https://academy.hackthebox.com
夜雨聆风