1.sparrowhawk
谷歌内部基于WFST的TTS-TN系统Kestrel的开源版本 sparrowhawk,可以支持数字,日期,时间,货币,邮箱等多种文本类型的书面语文本转口语文本
2.sparrowhawk基本工作过程
主要包括两个模块
- The tokenizer/classifier
- The verbalizer
2.1.tokenizer / classify模块
2.1.1.输入的句子首先根据空格或自定义字符分割成一个个的token,再根据classifier进行分类为下列几类(分类规则由thrax语法文件确定 grammars/en_toy/classify/xxx.grm)
- 普通单词token(不需要进行处理的):
- 普通单词不进行任何处理
- eg. “apple”、“yes” → “apple” 、“yes”
- 标点符号token(Punctuation):
- sparrowhawk 源码中默认转换成 “sil”(silence,即不发音) 源码 line 157
- eg. “,” 、"?" → sil 、sil
- 需要进行TN处理的token(semiotic classes) sparrowhawk源码中类型定义
- 自定义的类型,处理成对应的proto格式(见2.1.2)
- Cardinal 整数 1,2,3
- Ordinal 序数 1st,2nd
- Fraction 分数 1/3,2/5
- Time 时间 12:30
- Decimal 十进制数 10.21 ,-11.11 ,12k
- Measure 度量单位 10cm,10kg,100%
- Date 日期 3 Jan. 1980
- Money 货币 $10
- Telephone 电话号码
- Electronic URL地址
- Connector 连接符 1:1,4x3
- Abbreviation 缩写词 U.S
- 自定义的类型,处理成对应的proto格式(见2.1.2)
- 未知或者处理失败的token
- 在verbalize中的verbatim.grm二次处理
2.1.2.token经过classify分类之后,处理成不同的proto格式 ,根据编写的语法而定 classify_example (其中的 .grm文件为thrax语法规则,.far文件为编译后的FST Arachive文件)
- eg. 货币格式 $200 ----→ tokens { money { currency: “usd” amount { integer_part: “200”} } }
- eg. 度量格式 66.66% ----→ tokens { measure { decimal { integer_part: “66” fractional_part: “66”} units: “percent”} }
- eg. 数字格式 12 ----→ tokens { cardinal { integer: “12” } }