项目文件夹

文件
2026-07-13 12:28:27 +08:00

5.9 KiB

热词功能如何使用

什么是热词

热词功能用于修正语音识别结果中的特定词汇。比如你 "CapsWriter" 是一个非常见词,可能被识别成 "Caps rider",就可以通过热词进行修正。

CapsWriter-Offline 提供了三种热词机制,分别用于不同场景。


一、客户端强制热词(hot.txt

作用

基于音素匹配的强制替换。只要识别文本的音素与热词足够相似(超过阈值),一定会被替换。适用于人名、专业术语、英文品牌等识别不准的词。

文件位置

项目根目录的 hot.txt,修改后自动热重载,无需重启。

格式

  • 每行一个热词
  • # 开头的行为注释
  • | 分隔多个别名(写法不同,音素相似,都替换为第一个词)
  • ~~~ 后面添加黑名单
# 这是注释
Claude | Cloud | 克劳德 | 克劳得 ~~~ Weather | Sky
CapsWriter | Caps Rider | 
我家鸽鸽

上例中,如果说 "cloud" 或 "克劳德",都会被替换为 "Claude",但当周围有 weather 或 sky 时,就不会替换。

自定义短语

热词的第一个词不一定是"纠正目标",也可以是你希望输入的内容,后面跟触发别名。这样就可以用作"自定义短语",用语音快速输入长文本,而不必逐字念:

18200006666 | 我的手机号 | input my phone
上海市浦东新区张江高科技园区 | input my address
hello@example.com | 我的邮箱 | input my email

上例中,说"我的手机号"或"input my phone",都会自动上屏 "18200006666",不需要一个个数字念。

如何添加热词

方法一:直接编辑 hot.txt,保存后自动生效。

方法二:右键系统托盘图标 → 添加热词 → 在弹出的对话框中输入热词(每行一个)→ 确认。

配置项

`config_client.py 中:

hot = True          # 总开关,是否启用音素热词替换
hot_thresh = 0.85   # 替换阈值(越高越精准,越低越容易触发)
hot_similar = 0.6   # 相似阈值(低于 hot_thresh 但高于此值的,只作为 LLM 参考)

二、规则替换(hot-rule.txt

作用

基于正则表达式的精确替换。适用于单位转换、符号修正等固定模式替换。(正则语法可参考 Python 正则表达式

文件位置

项目根目录的 hot-rule.txt,修改后自动热重载

格式

查找模式 = 替换文本
  • = 两边必须有空格
  • 查找模式是正则表达式,支持捕获组
  • # 开头的行为注释
  • 替换侧可用 \s 表示空格

示例

毫安时     =      mAh
赫兹      =      Hz
(艾特)\s*(QQ)\s*点\s*            =     @qq.
(艾特)\s*(\w+)\s*(点)\s*(\w+)    =     @\2.\4
欧拉玛   =  Ollama
\/sil   =   
\[breath\]  =    
(^逗号[,。]?)|([,。]?逗号$)       =    ,
(^句号[,。]?)|([,。]?句号$)       =    。
(^问号[,。]?)|([,。]?问号$)       =    ?

配置项

hot_rule = True    # 是否启用规则替换

三、服务端热词(hot-server.txt

作用

部分模型自带热词功能,会用这个文件中的热词,用作语境增强。

具体原理是:

  • Fun-ASR-Nano 有两个解码器,CTC Decoder 和 LLM Decoder。
    • CTC Decoder 会输出一个较粗糙的结果,可通过音素检索出全部热词中发音最相近的几个
    • 发音最相近的热词被放入 LLM Decoder 的上下文,辅助精确识别。但上下文提示仅具建议性,LLM Decoder 会根据语境决定是否采纳。
  • SenseVoice 的解码器是 CTC Decoder,每帧音频会依概率转为文字,设计了一种扫描算法,当 CTC 的连续概率空间内出现热词时,强制输出热词。不建议添加长度太短的英文热词,否则容易误换。

事实上,客户端热词(加上别名功能后)就已经完全够用,仅是因为有模型支持这个特性,于是加上了这个功能。

文件位置

项目根目录的 hot-server.txt,服务端暂无热重载。

格式

每行一个热词,# 开头为注释:

# ========== 中文热词 ==========
机器学习
深度学习
自然语言处理

# ========== 英文热词 ==========
Transformer
PyTorch
TensorFlow

四、客户端热词工作流程

语音识别结果
    ↓
音素 RAG 匹配(hot.txt
    ├─ 相似度 ≥ hot_thresh → 周围没有黑名单词 → 强制替换
    └─ hot_similar ≤ 相似度 < hot_thresh → 记作"潜在热词",可传入角色上下文,用于润色
    ↓
正则规则替换(hot-rule.txt)
    ↓
(可选)角色功能润色
    ↓
输出

其实,Qwen3-ASR 已经非常强大,加上热词功能,已经完全不需要 LLM 润色功能。只是 Typeless 有润色,LLM 又这么火,总会有朋友想试试。


五、实用技巧

1. 英文热词

直接英文单词专用术语,辅助正确的大小写拼写:

PyTorch
TensorRT
DirectML

2. 用别名覆盖多种口音

Claude | Cloud | 克劳德 | 克劳得

六、常见问题

Q: 修改热词文件后需要重启吗?

客户端会自动检测热词文件变化,修改的 3 秒后自动重载。

Q: 热词为什么没生效?

检查以下几点:

  • config_client.pyhot = True 是否开启
  • hot_thresh 是否过高
  • 热词是否添加到了正确的文件(服务端热词放到 hot.txt 而不是 hot-server.txt
  • 日志中是否有匹配记录(查看 logs/client_latest.log

Q: hot.txt 和 hot-server.txt 有什么区别?

hot.txt客户端强制替换,匹配了一定会改;hot-server.txt服务端功能,仅支持的模型可用,且不具备强制性

Q: 规则替换的正则语法是什么?

Python 标准 re 模块语法,支持 \1\2 等反向引用。