1. 大模型时代的来临
近年来,随着 DeepSeek 等大规模预训练模型的问世,人工智能(AI)领域迎来了前所未有的热潮。从 ChatGPT 到 DeepSeek AI,各种大语言模型(LLM)在文本生成、翻译、代码自动补全等任务上的表现惊艳,使 AI 的应用边界不断扩展。越来越多的开发者开始关注如何利用这些强大的模型解决实际问题,甚至思考如何训练和优化自己的模型。
那么,大模型(LLM)和传统的深度学习模型有什么区别呢? 对于想要入门 AI 训练的开发者来说,理解这两者的核心差异,可以帮助我们更好地选择合适的技术方案。
大模型 vs. 传统深度学习模型
| 对比维度 | 大模型(LLM) | 传统深度学习模型 |
|---|---|---|
| 模型规模 | 采用 百亿、千亿 级别的参数,通常由超大规模计算集群训练 | 规模较小,参数量一般在 百万到千万级别,可在本地或小型服务器上训练 |
| 训练方式 | 预训练+微调,先在海量数据上训练一个通用模型,再针对特定任务进行少量数据微调 | 端到端训练,通常针对特定任务 从零开始训练 |
| 计算需求 | 需要高性能 GPU/TPU,训练和推理计算量极大 | 计算量较小,可用 单个 GPU 或 CPU 运行 |
| 数据需求 | 需要 海量数据(如整个互联网)进行预训练 | 依赖 人工标注数据,数据量相对较小 |
| 适用场景 | 通用型任务(如聊天、搜索、文案生成、代码补全) | 专用型任务(如文本分类、相似度计算、推荐系统) |
| 可控性 | 需要微调才能适应特定业务需求,输出不易控制 | 训练过程和结果较容易控制 |
| 推理成本 | 高(部署需消耗大量计算资源) | 低(可在本地或小型服务器上运行) |
大模型的强大之处在于 通用性和广泛适应能力,但也因为计算资源的限制,使得普通开发者难以从头训练一个大模型。而 传统深度学习模型 虽然规模较小,但针对特定任务可以做到 高效、低成本、可控,特别适用于企业应用和小型项目。
本文的切入点:从零开始训练自己的深度学习模型
虽然大模型很强,但很多时候我们并不需要如此庞大的计算能力。例如,在 文本相似度计算 这样的具体任务上,传统深度学习模型往往已经能很好地满足需求,而且可以 在本地 进行训练和优化。
因此,本文将聚焦于 如何作为一名前端开发者,零基础训练自己的深度学习模型。我们将使用 Sentence-BERT(SBERT) 这一 轻量级、可训练 的 NLP 模型,来探索 AI 在文本相似度计算中的实际应用。即使你没有 AI 背景,也可以跟随本文 从 0 到 1 训练自己的深度学习模型!
本文将带你一步步搭建 Sentence-BERT(SBERT) 模型,并基于 用户反馈数据 进行优化。即使你没接触过深度学习,也能轻松跟上。
2. 深度学习是怎么回事?
在开始实战之前,我们先搞清楚一点:AI 训练到底是怎么回事?
简单来说,深度学习的核心是 学习模式。就像小孩学语言一样,AI 通过 大量示例 学习 哪些句子是相似的,哪些是不相似的,然后在遇到新句子时做出判断。
SBERT 是一种 基于 Transformer 的文本匹配模型,可以理解为一个“超级文本对比器”。它能把句子变成 向量(embedding),然后用 余弦相似度 来计算两个句子的相似程度。
3. 安装环境
在本地运行 SBERT 模型,我们需要安装 Python 以及相关的依赖库。
3.1 安装 Python
确保本机已安装 Python(建议 Python 3.8+)。如果尚未安装,可前往 Python 官网 下载并安装。
3.2 安装依赖库
使用 pip 安装所需的 Python 库:
pip install sentence-transformers torch sqlite3
其中:
sentence-transformers:SBERT 预训练模型的库torch:PyTorch 深度学习框架(SBERT 依赖)sqlite3:用于存储用户反馈数据
4. 运行 SBERT 进行文本相似度计算
4.1 加载 SBERT 模型
先来看看 SBERT 怎么计算文本相似度。
from sentence_transformers import SentenceTransformer, util
# 加载 SBERT 预训练模型
model = SentenceTransformer('all-MiniLM-L6-v2')
# 定义文本对
text1 = "投标人必须提供五年工程施工经验。"
text2 = "企业需提供五年施工案例。"
# 计算文本嵌入
embedding1 = model.encode(text1, convert_to_tensor=True)
embedding2 = model.encode(text2, convert_to_tensor=True)
# 计算余弦相似度
similarity = util.pytorch_cos_sim(embedding1, embedding2).item()
print(f"相似度: {similarity:.2f}")
运行后,你会得到一个 0-1 之间的相似度分数,数值越大表示语义越相似。
5. 训练模型(优化相似度计算)
SBERT 的预训练模型已经很强了,但它是通用的,我们可以 用实际业务数据来让它更符合自己的需求。
5.1 创建 SQLite 数据库存储反馈数据
用户给出的相似度反馈很重要,我们把它存到 SQLite 里。
import sqlite3
import os
# 确保 data 文件夹存在
if not os.path.exists('data'):
os.makedirs('data')
# 连接到 SQLite 数据库
conn = sqlite3.connect('data/feedback.db')
cursor = conn.cursor()
# 创建 feedback 表
cursor.execute('''
CREATE TABLE IF NOT EXISTS feedback (
id INTEGER PRIMARY KEY,
file_text_1 TEXT,
file_text_2 TEXT,
user_feedback REAL
)
''')
# 插入示例数据
feedback_data = [
("投标人必须提供五年工程施工经验。", "企业需提供五年施工案例。", 0.85),
("本项目要求提供施工管理经验。", "投标人需证明其具备相应的管理能力。", 0.9),
("所有材料必须符合国家标准。", "供应商提供的所有材料需符合质量认证要求。", 0.8)
]
cursor.executemany('''
INSERT INTO feedback (file_text_1, file_text_2, user_feedback)
VALUES (?, ?, ?)
''', feedback_data)
# 提交事务并关闭连接
conn.commit()
conn.close()
5.2 训练模型
用反馈数据微调 SBERT,让它更符合你的业务需求。
from sentence_transformers import InputExample, losses
from torch.utils.data import DataLoader
# 读取数据库数据
conn = sqlite3.connect('data/feedback.db')
cursor = conn.cursor()
cursor.execute("SELECT file_text_1, file_text_2, user_feedback FROM feedback")
data = cursor.fetchall()
conn.close()
# 构建训练样本
train_examples = [
InputExample(texts=[row[0], row[1]], label=row[2]) for row in data
]
# 定义数据加载器
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=8)
# 选择损失函数
train_loss = losses.CosineSimilarityLoss(model)
# 开始训练
model.fit(
train_objectives=[(train_dataloader, train_loss)],
epochs=1,
warmup_steps=100
)
# 保存优化后的模型
model.save("optimized_sbert")
6. 总结
到这里,你已经完成了你的 第一个深度学习 NLP 项目!
整个过程:
- 安装环境(Python、依赖库)
- 运行 SBERT 预训练模型 并计算文本相似度
- 存储用户反馈数据 到 SQLite
- 用反馈数据微调 SBERT,优化模型效果
- 加载优化后的模型进行推理
如果你是前端开发,或者是 AI 小白,希望这篇文章能帮你快速入门 文本相似度计算与模型微调!
对 AI 训练感兴趣?欢迎一起交流!😊