华为云 ModelArts 部署中文文本分类服务:从标注到在线推理的工程化实践

举报
yd_253000176 发表于 2026/10/25 09:03:39 2026/10/25
【摘要】 以 12 类工单意图分类为例,走通 ModelArts 数据准备、训练、模型注册与在线服务部署全流程,附类别分布统计代码、三个关键调参经验与上线后暴露的三处坑。

中文工单的意图分类长期靠关键词规则维护。这次我把一套 12 类工单意图分类模型迁到华为云 ModelArts,完整跑通了标注到在线推理,下面按步骤记录,代码可直接复用。

一、选型与整体链路

链路是:OBS 存数据 → ModelArts 数据集标注 → 训练作业(BERT 微调)→ 模型注册为资产 → 在线服务 → API 调用。理由很直接:训练和推理共用一套模型版本管理,不必自己搭 Kubernetes 和推理网关。

二、数据准备:先看清分布

在 OBS 建桶,按 train/val/test 分目录上传 JSONL 样本,每行一条:{"text": "...", "label": "退款"}。最容易翻车的是类别不均衡,退款类占比接近 45%。我合并了近似类目(“退款”与“退货”并为“售后”),再对长尾类做同义改写增强。训练前先看分布:

from collections import Counter
import json
rows = [json.loads(l) for l in open("train.jsonl", encoding="utf-8")]
print(Counter(r["label"] for r in rows).most_common())

三、训练作业:三个关键参数

用 ModelArts 预置的 PyTorch 镜像起训练作业,数据与模型输出都挂 OBS。影响最大的是学习率、batch size 与最大序列长度。中文工单大多在 60 字以内,把 max_length 从 512 降到 128,单轮训练从 40 分钟压到 11 分钟;学习率取 2e-5 并加线性预热,训练曲线最稳。

四、注册模型与部署在线服务

训练产出的模型目录直接注册为 ModelArts 模型资产;推理脚本实现 preprocess 与 postprocess 两个钩子,前者做分词与截断,后者把 logits 映射成标签和置信度。选 1 个 CPU 规格即可,实测单实例 QPS 约 28,平均延迟 35ms。

五、上线后暴露的三个坑

第一,标签顺序不一致。训练时的 label2id 与推理脚本里的映射表顺序不同,线上结果整体错位,务必把映射表随模型一起打包。第二,超长文本静默截断。超过 max_length 的工单被切掉尾部,后来改为截断后追加摘要。第三,OBS 权限。推理实例访问 OBS 需委托授权,漏配时服务启动正常但首个请求就报 403,日志只有一行 AccessDenied。

六、效果与后续

上线两周,12 类意图加权 F1 为 0.91,比规则方案高 27 个百分点,人工转派率降约三分之一。后续打算把置信度低于 0.6 的样本回流成增量训练集。ModelArts 的价值不在于模型本身,而在把训练、版本、部署、调用标准化,省下的是运维精力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。