FST ITN-ZH教程:如何配置独立数字转换规则
1. 简介与背景
中文逆文本标准化(Inverse Text Normalization, ITN)是语音识别后处理中的关键环节,其目标是将口语化、非结构化的自然语言表达转换为标准的书面格式。例如,在ASR系统输出“二零零八年八月八日”时,ITN模块应将其规范化为“2008年08月08日”,以便后续的信息提取或结构化处理。
FST ITN-ZH 是基于有限状态转导器(Finite State Transducer, FST)实现的高性能中文ITN工具,具备高精度、低延迟和可扩展性强等优点。本教程聚焦于如何配置独立数字转换规则,帮助开发者根据实际业务需求灵活调整数字转换行为。
本文内容适用于已部署 FST ITN-ZH WebUI 的用户,重点讲解高级设置中“转换独立数字”功能的原理与配置方法。
2. 核心概念解析
2.1 什么是“独立数字”?
在中文语境中,“独立数字”指的是不依附于特定单位或上下文的纯数量表达。例如:
一百二十三→123幸运一百→ 是否转为100取决于是否开启“转换独立数字”
这里的“一百”出现在“幸运”之后,属于修饰性成分,是否应被转换存在语义歧义。
2.2 转换策略的本质
FST ITN-ZH 使用分层规则匹配机制来判断一个中文数字是否应该被转换。其核心逻辑如下:
- 词法分析:识别输入文本中的中文数字片段
- 上下文判定:分析该数字前后是否有语义绑定词(如“第”、“号”、“元”、“kg”等)
- 规则决策:依据配置参数决定是否执行数值化转换
因此,“独立数字转换”本质上是一个语义敏感开关,控制模型对无明确单位或用途的数字的处理方式。
3. 配置独立数字转换规则
3.1 访问高级设置界面
启动服务后,访问 WebUI 地址:
http://<服务器IP>:7860进入主页面后,点击右上角「高级设置」展开配置选项。
3.2 关键参数说明
| 参数名称 | 默认值 | 功能描述 |
|---|---|---|
| 转换独立数字 | 开启 | 控制是否将孤立的中文数字转为阿拉伯数字 |
| 转换单个数字 (0-9) | 关闭 | 控制是否转换单字数字如“零”、“五” |
| 完全转换'万' | 关闭 | 控制“六百万”→“6000000”还是“600万” |
我们重点关注第一个参数:“转换独立数字”。
3.3 实际效果对比
情况一:开启“转换独立数字”
输入: 幸运一百 奖金三千元 第五名 输出: 幸运100 奖金3000元 第5名- “一百”被视为可转换的独立数字
- “三千”因有单位“元”必然转换
- “第五”中的“五”因与序数词结合也被转换
情况二:关闭“转换独立数字”
输入: 幸运一百 奖金三千元 第五名 输出: 幸运一百 奖金3000元 第5名- “一百”保留原样,因其前无量词、后无单位,视为文化/习惯用语
- 其他带语义绑定的数字仍正常转换
提示:某些场景下,“幸运一百”可能是品牌名或固定说法,关闭此选项有助于保留原始语义。
4. 规则配置实践指南
4.1 如何选择开启或关闭?
| 使用场景 | 推荐设置 | 理由 |
|---|---|---|
| 数据清洗、结构化入库 | ✅ 开启 | 最大程度数字化,便于数据库存储与计算 |
| 文本重写、内容生成 | ❌ 关闭 | 保持语言自然性,避免“我买了100个苹果”这类机械表达 |
| ASR后处理 + NLP pipeline | ✅ 开启 | 利于下游NER、时间解析等任务 |
| 客服对话记录归档 | ⚠️ 按需 | 若需统计金额/数量则开,否则建议关 |
4.2 修改配置并生效
- 在 WebUI 中调整「转换独立数字」开关状态
- 点击任意「开始转换」按钮
- 系统会自动重新加载 FST 规则图(耗时约 3–5 秒)
注意:首次切换参数后会有短暂延迟,后续转换将恢复正常速度。
5. 批量测试验证配置效果
5.1 准备测试文件
创建test_input.txt文件,内容如下:
幸运一百 奖金三千元 第五名 房间号八百 我有九个朋友 六百万粉丝 京A一二三四五5.2 执行批量转换
- 进入「📦 批量转换」标签页
- 上传
test_input.txt - 设置高级参数:
- 转换独立数字:✅ 开启
- 转换单个数字:✅ 开启
- 完全转换'万':✅ 开启
- 点击「批量转换」
5.3 预期输出结果
幸运100 奖金3000元 第5名 房间号800 我有9个朋友 6000000粉丝 京A12345若关闭“转换独立数字”,则“幸运一百”和“我有九个朋友”将分别保留为“幸运一百”和“我有九个朋友”。
6. 工程优化建议
6.1 自定义规则扩展(进阶)
虽然 WebUI 提供了基础配置,但对于更复杂的业务逻辑,建议直接修改底层 FST 规则文件。
路径:/root/fst_itn_zh/rules/number.far
添加自定义例外规则示例(伪代码):
# 不转换特定短语中的数字 EXCEPT_PHRASES = ["幸运", "祝福", "纪念日"] def should_convert(text, number_span): for phrase in EXCEPT_PHRASES: if phrase in text[:number_span.start]: return False return True注:此操作需要重启服务或调用 reload API。
6.2 性能调优建议
- 缓存常用配置组合:预生成多种参数组合下的 FST 图,减少运行时编译开销
- 异步处理长文本:对于超过 100 字的输入,采用流式分段处理,防止内存溢出
- 日志记录转换前后对照:便于后期审计与错误回溯
7. 常见问题与排查
7.1 为什么“第五名”总是被转换?
因为“第五”属于序数词结构,无论“转换独立数字”是否开启,都会被标准化为“第5名”。这是由date_time.far或ordinal.far规则强制定义的。
解决方法:如需保留中文形式,需手动注释相关规则或增加排除条件。
7.2 “零和九”为何未变?
默认情况下,“转换单个数字”处于关闭状态。要使“零和九”变为“0和9”,必须手动开启该选项。
7.3 修改设置后无变化?
请确认以下几点:
- 是否点击了转换按钮触发规则重载?
- 浏览器是否缓存了旧页面?尝试硬刷新(Ctrl+F5)
- 后端日志是否有报错?查看
/root/logs/itn_webui.log
8. 总结
8. 总结
本文详细介绍了 FST ITN-ZH 中“独立数字转换”功能的配置方法与应用场景。通过合理设置“转换独立数字”、“转换单个数字”和“完全转换'万'”三个核心参数,可以精准控制中文数字的标准化行为,满足不同业务场景的需求。
关键要点回顾:
- “独立数字”指无上下文绑定的中文数字,其转换与否影响语义自然性与数据结构化程度。
- 开启该功能适用于数据清洗、ASR后处理等强结构化场景;关闭则更适合保留语言风格的内容应用。
- 批量测试是验证配置有效性的必要步骤,建议建立标准测试集用于回归验证。
- 高级用户可通过修改 FST 规则实现更精细控制,但需注意维护成本。
正确配置数字转换规则,不仅能提升 ITN 系统的准确性,还能显著增强下游 NLP 任务的表现力。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。