6月1日 15:04

如何构建一个 NLP 系统?从数据到部署的完整流程

构建 NLP 系统不只是训模型——从数据收集到线上服务,中间有大量工程决策要做。模型只是系统的一部分,很多时候瓶颈不在模型效果,而在数据处理、服务稳定性和迭代速度上。

明确任务和指标

先想清楚三件事:系统要解决什么问题?怎么衡量效果?兜底策略是什么?

比如做一个客服意图分类系统:目标是自动识别用户咨询的类别(退款、物流、产品问题等),指标是 F1 值和人工介入率,兜底是置信度低于阈值就转人工。不要上来就想用最先进的模型,先把任务定义清楚。

数据工程

数据是 NLP 系统的地基,也是最容易出问题的地方。

数据收集:业务日志、用户生成内容、公开数据集。优先用业务数据——它最贴近真实场景。公开数据集可以做冷启动,但分布往往和线上不一致,上线后效果会打折。

数据标注:标注质量直接决定模型上限。找领域专家标注,别找众包工人——一个律师标的法律文本和一个大学生标的,质量天差地别。标注指南要写清楚边界案例("苹果"在什么语境下是公司,什么语境下是水果),标注一致性(多人标同一批数据的重合度)至少要 85% 以上。

数据版本管理:每次训练用的数据集要能追溯。DVC 或简单的 git + 文件哈希都行。线上出了问题,你得知道当时模型是用哪批数据训的。

模型开发

选模型:2025 年的默认选择是 BERT 系列做理解任务,GPT 系列做生成任务。小数据量(<1万条)用预训练模型微调,极少数据(<100条)考虑 few-shot prompt 或 LLM API。别从零训模型——预训练成本百万美元起步,除非你是大厂。

训练技巧:学习率用 2e-5 起,batch size 小就梯度累积。早停比固定 epoch 好。保存最优 checkpoint 而不是最后一个。混合精度训练(FP16)省一半显存,几乎不损失效果。

评估:离线指标(F1、BLEU、ROUGE)只是参考,必须做线上 A/B 测试。离线 F1 从 85 提到 87,线上可能完全没差别——因为测试集和真实分布不一样。

服务化部署

API 封装:FastAPI 是最简单的选择,异步、自动生成文档、类型检查。模型推理用 ONNX Runtime 或 TensorRT 加速,比原生 PyTorch 快 3-10 倍。

批处理 vs 实时:搜索引擎这种场景可以批处理(离线算好存索引),客服对话必须实时推理(用户等不了)。实时推理要控制延迟——P99 低于 200ms 是基本要求。

模型版本管理:线上同时跑多个版本,灰度切流量。出了问题秒级回滚。用 A/B 测试比较新旧版本的业务指标,别靠感觉。

监控和迭代

上线才是开始。监控三件事:输入分布变化(用户开始说之前没见过的话术)、模型置信度下降(突然大面积低置信度说明有新问题)、业务指标波动。

建立数据飞轮:线上低置信度的样本 → 人工标注 → 补充训练集 → 重新训练。好的 NLP 系统不是一次训好的,是持续迭代出来的。每个版本的数据、模型、效果都要能追溯,这样出了问题才能定位原因。

标签:NLP