语音合成学习笔记二

这节主要是关于 TTS 中的前端部分,主要是抽取文本信息特征,目前基于端到端的神经网络系统还不能直接以文本作为输入,因为会有一些潜在的问题,所以还是要针对文本进行分析后作为神经网络的输入;除此之外,部分 TTS 的问题也可以通过修改前端的一些规则得到改善。

前端

前端主要分为文本正则化(Text Normalization, TN),分词(Word Segmentation),词性预测(Part of Speech),韵律预测(Prosody),注音(多音字,Polyphone),语言学特征生成(Linguistic features)。

文本正则化 文本正则化主要是讲非标准词(NSW)进行转化,比如:

  • 数字、电话号码: 10086 -> 一千零八十六/幺零零八六
  • 时间,比分: 23:20 -> 二十三点二十分/二十三比二十
  • 分数、小数、百分比: 3/4 -> 四分之三,3.24 -> 三点一四, 15% -> 百分之十五
  • 符号、单位: ¥ -> 元, kg -> 千克
  • 网址、文件后缀: www. -> 三W点

文本正则化涉及到的规则非常多。正则化的工具:

  • https://github.com/google/re2
  • https://github.com/speechio/chinese_text_normalization

分词 分词之所以重要可以通过这个例子来说明:

  • 广州市长隆马戏欢迎你 -> 广州市 长隆 马戏 欢迎你 如果没有分词错误会导致句意完全不正确: 广州 市长 隆马戏 欢迎你

分词常用方法分为最大前向匹配(基于字典)和基于CRF的分词方法。用CRF的方法相当于是把这个任务转换成了序列标注,相比于基于字典的方法好处是对于歧义或者未登录词有较强的识别能力,缺点是不能快速fix bug,并且性能略低于词典。

中文分词的常见工具:

  • https://github.com/lancopku/PKUSeg-python
  • https://github.com/thunlp/THULAC-Python
  • https://github.com/fxsjy/jieba
  • CRF++

注音 注音是需要将词转换成对应的发音,对于中文是将其转换成拼音,比如 绿色->(lv4 se4) 这里的数字表示声调。

传统方法是使用字典,但是对于未登录词就很难解决。基于模型的方法是使用 Phonetisaurus。 论文可以参考 - WFST-based Grapheme-to-Phoneme Conversion: Open Source Tools for Alignment, Model-Building and Decoding

当然这个问题也可以看做是序列标注用CRF或者基于神经网络的模型都可以做。 基于神经网络工具: g2pM

韵律(prosody) ToBI(an abbreviation of tones and break indices) is a set of conventions for transcribing and annotating the prosody of speech. 中文主要关注break

韵律等级结构:

  • 音素 -> 音节 -> 韵律词(Prosody Word, PW) -> 韵律短语(prosody phrase, PPH) -> 语调短句(intonational phrase, IPH) -> 子句子 -> 主句子 -> 段落 -> 篇章
  • LP -> LO -> L1(#1) -> L2(#2) -> L3(#3) -> L4(#4) -> L5 -> L6 -> L7

主要关注 PW, PPH, IPH

  停顿时长 前后音高特征
韵律词边界 不停顿或从听感上察觉不到停顿
韵律短语边界 可以感知停顿,但无明显的静音段 音高不下倾或稍下倾,韵末不可做句末
语调短语边界 有较长停顿 音高下倾比较完全,韵末可以作为句末

常用方法使用的是级联CRF,首先预测如果是PW,再继续预测是否是PPH,再预测是否是IPH Prosody

论文: 2015 .Ding Et al. - Automatic Prosody Prediction For Chinese Speech Synthesis Using BLSTM-RNN and Embedding Features

基于神经网络的前端文本分析模型

最近这两年基本都是基于 BERT,所以这里记录一下相关的论文:

  • g2p: 2019. Sevinj Et al. Transformer based Grapheme-to-Phoneme Conversion
  • 分词: 2019 huang Et al. - Toward Fast and Accurate Neural Chinese Word Segmentation with Multi-Criteria Learning
  • 韵律: 2020 Zhang Et al. - Chinese Prosodic Structure Prediction Based on a Pretrained Language Representation Model

除此之外,BLSTM + CRF 也比较主流。

总结一下,文本分析各个模块的方法: TN: 基于规则的方法 分词: 字典/CRF/BLSTM+CRF/BERT 注音: ngram/CRF/BLSTM/seq2seq 韵律: CRF/BLSTM + CRF/ BERT

考虑到分词,注音,韵律都是基于序列标注任务,所以理论上来说可以通过一个模型搞定。这里先 mark 一下需要做的事情:

  • 收集公开可用的数据集
  • 写 data preprocessor
  • 给 bert 加序列标注输出层
  • 修改 loss
  • 调模型
  • 写文档
  • 加入 tf-serving 支持
  • 加入 tensorrt 支持
  • 测试评估性能
  • 写文档