语音合成语料库
TH-CoSS
技术报告
清华大学计算机科学与技术系
人机交互与媒体集成研究所
2003.12.
(TH-Corpus of Speech Synthesis)
在语音合成技术日益成熟走向市场的今天,作为语音合成的基础的语音合成语料库扮演着越来越重要的角色。作为语音合成和语音分析的物质基础,建立设计合理、高质量录音的语音语料库有着极为重要的研究价值和实用价值。本语音合成语料库(TsingHua - Corpus of Speech Synthesis, 简称TH-CoSS)是由清华大学人机交互与媒体集成研究所完成。该语料库可以用于语音合成的研究、开发和评测。根据研究、开发和市场的需要,本文简要介绍本语料库的设计与使用。
该语音合成语料库由四部分组成:
·
普通话TTS系统语料库,为汉语普通话朗读语句,男女声各1人,共约10000句。
·
普通话TTS系统测试语料库,为汉语普通话朗读语句,男女声各1人,约2000句。
·
普通话语调分析用数据,自然对话语句,多于1000句,覆盖多种语调和语气。
·
连续语流篇章语音数据库,选自广播或电视,以汉语标准普通话为主。
下面分别就其设计思想进行介绍,重点介绍普通话TTS系统语料库和普通话语调分析用语料库的设计与建立。
TTS系统建库语料语句以陈述句为主, 长度为5-25个音节,其中男声4535句,女声5406句。此外语料库还包含一定数量的轻声、儿化音节组,以及上声单音节汉语音节表。
我们针对基于大语料库汉语语音合成系统的需求,进行语音合成用语料库的设计。其原始语料来自《现代汉语词典》和2000年全年的人民日报,并且参考了国家语委公布的必读轻声和儿化词表。
语料库的设计是指选取语音数据的内容或选取录音文本。这是语料库的关键问题之一。涉及的问题包括:明确需求和目的;确定语音基本单位;收集语料资源;研制语料选取算法;目标是得到最小冗余度、最大覆盖率、科学合理的语料集。采用以语音学知识指导的计算机处理方法。语料库的文本设计包括以下工作:
明确需求:通常一个语料库都以满足某个研究需求为目标。针对不同的语音处理需求,设计专门的语料库,如:语音识别用语料库和语音合成用语料库;采集的数据又分高信噪比语音数据、电话语音或高背景噪声语音;还有包括视频通道的音频数据,可以用于口形辅助语音识别的研究,或用于可视语音转换的研究。语音识别研究的课题分为特定人与非特定人、孤立词与连续语音识别、语音识别与说话人识别、本地PC上的识别与电话语音识别,为此语料库的文本设计要针对系统的需求进行。这里,我们设计的语料库主要面向汉语普通话语音合成系统。
确定内容:在明确语料库的用途后,要进一步明确语料库的内容。语料库的内容应具有代表性。如应包括的基本声学单元,这些声学单元在连续语流中的音变变体和音段间的过渡,以及适当的语境。针对西方语言的语音处理,其基本单元可能是音子(phone)、双音子(di-phone)或三音子(tri-phone)。如果把双音子作为研究基元,语料库中应覆盖所有的双音子。为了研究双音子在不同语境下的变化,还应设计双音子在该语境下的词语或语句。对于汉语来说,其基本单元可能是音节(syllable)、声母和韵母(initial,final)或音子(phone)。汉语是声调语言,因此语料库中应涵盖声调不同的语音基元,以及它们的组合。
收集原始文本:为了满足语料库的要求,需要准备大量的原始资料。基于应用目标选择具有明显针对性的材料。还要考虑是口语/书面语、新闻/服务等,材料的时间性。就通用目的来说,目前较多的选自电子词典、《人民日报》等报刊和广播等材料。当然,如果构建面向旅游、宾馆预定的语音系统,就要收集相关的语料。
研制语料抽取算法:原始语料库经过断句和拼音转写,转换成带有拼音的语句、语块(chunk)或词语。这时就可以按照需求选取不同的语段作为语料文本。语段选取是一件费时费力而又精细的工作。可以用Greedy算法从大规模语料中选取最佳覆盖的语段集。通过Greedy算法基本可以得到80-90%满足要求的语料。最后不太常用、或原始语料中没有的,由人工设计完成。选取中,受到语料规模的限制,注意所选语料的普遍性。
我们针对基于大语料库汉语语音合成系统的需求,进行语音合成用语料库的设计。设计原则是兼顾音段和韵律两个层次的需求。先满足音段需求,再考虑声调组合、音段音联现象、各种清浊搭配等;语句的设计重点考虑语句的句法结构、语调变化、轻重读。覆盖汉语的417种有调音节以及多种声学特征的搭配关系。
下面,我们较为详细的介绍设计过程中所考虑的组合搭配关系。设计过程中,以音节为中心,考虑前后音联声韵母搭配、声调搭配、音节位置的组合以及音节在自然语流中出现的频率。
·
拼音列表
下表给出了汉语普通话中全部的417个音节。但是考虑到汉语是有调音节,每个音节可能有五种声调:阴平、阳平、上声、去声和轻声。覆盖全所有的有调音节是最基本的要求。
·
声母表及其分类
汉语普通话声母共21个,列表如下:
按照发音方式的不同,这21个声母可以分为8类。同类型的声母发音机理类似,在考虑前后音联协同发音的影响时,具有同类型声母的音节对前音节的影响类似。
塞音不送气: "b",
"d", "g"
塞音送气: "p",
"t", "k"
塞擦音不送气: "z", "zh", "j"
塞擦音送气: "c",
"ch", "q"
擦音清音: "f",
"s", "sh", "x", "h"
擦音浊音: "r"
鼻音: "m",
"n"
边音: "l"
·
韵母表及其分类
汉语普通话韵母共40个,列表如下:
按照发音方式的不同,这40个韵母可以分为4类。同类型的韵母发音机理类似,在考虑前后音联协同发音的影响时,具有同类型韵母的音节对后音节的影响类似。
开口呼类:"a", "ai",
"ao", "an", "ang", "o", "ou",
"e", "ei", "en", "eng", "er",
"-i"
齐齿呼类:"i", "ia",
"ie", "iao", "iou", "ian",
"in", "iang", "ing", "iong",
"iu"
合口呼类:"u", "ua",
"uo", "uai", "uei", "ui",
"un", "uan", "uen", "uang",
"ueng", "ong"
撮口呼类:"v", "ve", "van", "vn"
·
声调调型
对一个句中音节而言,其前音的调型可以分为3类:句首(无前音)、高落(前音声调为阴平、阳平)和低落(前音声调为上声、去声或轻声)。其后音的调型也可以分为三类:句尾(无后音)、高起(后音声调为阴平、去声)和低起(后音声调为阳平、上声或轻声)。
·
音节位置
目前文本设计过程中,我们考察9类音节的位置:1)保留;2)句首;3)句尾;4)非句首的短语首;5)非句尾的短语尾;6)非句首、短语首,非单字词的词首;7)词中;8)非句尾、短语尾,非单字词的词尾;9)非句首、短语首,非句尾、短语尾的单字词。
文本设计的一个重要原则是:用尽量少的语料覆盖尽可能多的自然语言现象。这样既可以保证音库容量不会太大,又能保证合成语音的质量。现有的文本设计算法主要分为两个阶段:粗选和后期优化。本节中,我们介绍三种的粗选算法和一种基于贪婪算法的后期优化算法。
· 算法一
该算法根据前面提及的音节信息,对大量的自然语流文本进行搜索。搜索的基本单元是独立的句子。对于每个句子,其是否收入设计语料由其得分决定。每个句子的得分等于句子中每个音节得分的总合。对于每个音节的打分规则如下:按照不同位置、音联搭配下每个音节出现的频率不同,人为设定不同的得分。但是如果该语境下的该音节已经在设计语料中存在,则该音节的得分不计入句子的总分。对于一个独立的句子,如果其得分大于某个门限值,则该句子被收入设计语料中。该算法的优点是规则简单,实现容易;缺点是对音节出现频度的界定较为主观,打分策略较为呆板。
· 算法二
算法二对算法一的设计进行了一定的改进,打分策略随着语料的增长动态变化。具体说来,该算法统计自然语流中不同语境下音节出现的频度作为该语境下该音节的期望,搜索过程中,对于某个待评估的音节,考察现有语料中该语境下该音节出现的频度,根据实际频度和期望之间的差异动态调整得分。离期望越远的情况下,该音节得分越高,反之则降低。当实际频度大于期望的时候,应该考虑给与该音节负分,以期最终达到一种动态的平衡。实验中,我们采用了北京语言文化大学宋柔等设计的汉语词频表作为统计音节出现频度的基础。较之算法一,该算法避免了生硬的根据音节频度打分的缺陷,在整体和局部上都能得到较为满意的性能。但是该算法和算法一仍然不能避免得分门限的限制。由于门限是固定取值,如果门限定得太低,大量不具备代表性的句子被选入语料,在语料规模一定的情况下,这是一种极大的浪费;反之如果门限定得过高,很难得到合适的语句,造成算法的运行时间过长,在要求快速建立语料库的场合下,这是一个致命的瓶颈。同时,由于采用顺序搜索的策略,不管采用何种门限设定策略,处于原始语料后部分的语料很难被收入,造成对原始语料的一种浪费。
· 算法三
为了克服上述算法的缺陷,算法三将原始语料随机分块,每块指定一定数量N作为该块应该提供句子的指标。在每块中采用原有算法进行操作,选取得分最高的前N个句子收入录音语料。该改进较为均衡地使用了原始语料,一定程度保证了录音语料内容的广泛性。
· 优化算法
当语料库成长到一定规模后,设计者往往需要在保持句子规模不变的情况下再次挑选信息量更高的句子替代现有语料中的样本。以期望在物理容量一定的情况下,信息容量达到一个最优。贪婪算法是一种常见的替换策略,即:对于新语句Snew,考察现有语料中的句子Si, 1≤i≤N,N为语料库中句子的总数,计算去掉Si,引入Snew后系统信息量的变化δi;在所有的δi中寻找最大的信息量变化值δmax,如果δmax>0,则现有语料中的句子k (k = argi (δi = δmax))和Snew进行置换。
贪婪算法的缺点是受数据规模的影响极大,随着数据集规模的增大,计算时间迅速增加。使用500M原始语料对一个现有的3000句的设计预料进行基于贪婪算法的优化,在一台Pentium 4 2.4GHz处理器,512M RAM的PC机上,其计算时间大约在一个星期左右。
一般说来,对于一个目标在3000句左右的音库,通过第一步粗选算法,音节的覆盖率基本已经能够达到95%以上,但是前后音联的搭配、音节出现的位置的覆盖率均只有50%左右。通过贪婪算法的优化,后两种情况下的覆盖率可以上升到70%左右。因此,在条件允许的情况下,还是有必要采用贪婪算法对现有的设计语料进行优化。
为了进一步研究合成语音与自然语音的差别,探索语音质量的主观评价和客观评价方法,我们设计并录制了1000句左右的测试语句。该部分语句覆盖日常语境中最常见的语音现象,涉及多音字读音、自动分词、常见数字/符号等多方面考察点,为合成语音的客观评测做好了物质上的准备。基于该语音库,可以进行面向合成语音评价的研究,按照发音正确、时域连续、频谱连续等多方面提出建设性的评价标准。
普通话TTS系统测试语料库的文本设计素材、方法和普通话TTS系统语料库完全一致,且两个库彼此不存在交集。不同的是,该语料库的设计过程并不是全自动进行,部分包含数字符号和多音字的语句由人工手动添加。
普通话语调分析用语料库的建立目标是为普通话语调分析提供素材,从而为语音情感建模和情感语音合成提供数据基础。普通话语调分析用语料库包含疑问句和感叹/祈使句两大部分,由男女声分别录制。和建库语料不同的是,该语料的录制不再有中性语调的限制,而是要求录音员基于假设的场景进行自然发音。
和建库语料使用以新闻为主的语料不同,语调分析语料的来源主要为小说、散文等富含情感变化的文字材料。设计时以手工挑选为主,但上下文语境覆盖率仍作为一个主要的考虑因素。
一般疑问句根据其结构特点和所表达的疑问语气,可以分为以下四类:
· 是非问句
· 特指问句
· 选择问句
· 正反问句
1、是非问句
是非问句是提出问题,要求别人回答“是”或“否”的疑问句。是非问句与一般陈述句的结构形式基本相同,但语调要变为升调,或者句末加上疑问语气词。是非问句中经常使用的疑问语气词有“吗、吧、啊”等,但不能使用“呢”。例如:
你真的决定要走了?(不用疑问词,语调为升调)
今天可真够冷的,有零下二十度吧?(表示半信半疑、带有揣测的语气)
他们做什么生意,你知道吗?(表示可疑而要求证实的语气)
没有车,以后种庄稼、卖粮食你用手推、用肩扛啊?(使疑问语气变得较为舒缓)。
是非问句可以用“是、对”或“不、没有”回答。在口语交际中则可用摇头或点头表示回答。
2、特指问句
特指问句是用疑问代词代替未知的部分进行提问,要求对方针对未知的部分做出回答的疑问句。例如:
你昨天晚上几点睡的?
你想问我什么?
你是从哪里来,要往哪里去?
他明天坐什么车去学校?
特指问句既可以使用升调,也可以使用降调。
特指问句只能使用“呢、啊”等语气词,不能使用“吗”。例如:
你下一步是如何打算的呢?
爸爸今天为什么那么高兴呢?
你怎么不进去说呢?
他究竟是谁啊?
特指问句还可以由名词性词语和疑问语气词“呢”构成,不用疑问代词。例如:
钢笔呢?
你的呢?
我的手表呢?
那本字典呢?
3、选择问句
选择问句是提出两种或两种以上的情况,让对方从中进行选择的疑问句。
选择问句经常使用“A还是B”、“是A还是B”等格式。
你在小学教语文还是教数学?
这皮鞋是皮的还是革的?
法院将判离还是判不离?
你来济南是坐火车还是坐飞机?
使用“是A还是B”的格式时,应注意前一个“是”的位置。
前后分句主语相同时,“是”用在前一分句主语之后。例如:
那本字典是你的,还是他的?
你是今天值班,还是明天值班?
前后分句主语不同时,“是”用在前一分句主语之前。例如:
下一个是你发言,还是他发言?
是光我一个人去呢,还是大家一起去?
使用疑问词时,选择问句常用“呢”,一般不用“吗、吧”。采用并列复句形式的选择问句,可以只在前句使用一个语气词,也可以前后都使用语气词。比较而言,使用两个语气词的选择问句的语气更种一些。例如:
喜欢打篮球呢,还是打排球?
喜欢打篮球呢,还是打排球呢?
你到底是同意呢,还是不同意?
你到底是同意呢,还是不同意呢?
4、正反问句
正反问句是用肯定和否定并列的方式进行提问,希望对方从中做出选择的疑问句。
正反问句常用的格式主要有以下三种:
①“V不(没)V”(否定词后面出现被否定成分)
这个人可靠不可靠?
你去不(没)去听讲座?
昨天的英语考试难不难?
他应不应该受到奖励?
②“V不(没)”(否定词后面不出现否定被否定成分)
他明天来不?
你知道他还没结婚不?
看见没(有)?
你见过他没(有)?
③“V不V”(全句后面加正反否定词语)
先把自行车借我骑骑,行不行?
下午来领工资,行不行?
你不是故意迟到的,是不是?
以后早点到研究所来,好不好?
正反问句一般不使用疑问代词或疑问语气词。需要时可用“呢、啊”,一般不用“吗、吧”。例如:
我们这样做好不好啊?
今年他评不评职称呢?
感叹/祈使没有疑问句那样明确的格式和疑问词作为分类标准。我们按照表述的内容将感叹句和祈使句分为如下几类。
· 感叹句
感叹句按内容可以分为:惊讶、斥责、赞叹、愤怒、兴奋、感谢、惋惜、恐吓、急切、羡慕、痛苦、后悔、强调、担忧、期盼、决心、惊喜、鄙夷、同情、伤心、不满
· 祈使句
祈使句按内容可以分为:命令、劝说、催促、请求、禁止、号召
疑问句和感叹句的设计过程中,我们还尽量保证不同句型语句的覆盖情况。考察的句型包括:
1. 名词谓语句
名词谓语句是由名词或名词性短语充当谓语的句子。现代汉语中名词性词语单独作谓语的情况比较少见,主要用于口语中的肯定句,常用来说明天气、时间、节日、节气、姓名、年龄、籍贯、职称、方位、处所、容貌、性状意义。
2. 动词谓语句
动词谓语句是由动词或动词性短语充当谓语的句子。主要有:1)动词单独作谓语和2)动词的复杂形式作谓语两种类型。
动词谓语句中有几种需要特别注意,它们是:“把”字句、“被”字句、“是”字句、连谓句、兼语句、双宾句和存现句。
3. 形容词谓语句
形容词谓语句是由形容词或形容词性短语充当谓语的句子。主要有:1)形容词单独作谓语和2)形容词的复杂形式作谓语。与单个形容词作谓语相比,形容词的复杂形式充当谓语的情况更为常见。形容词通常要加上状语或补语等修饰成分。
4. 主谓谓语句
主谓谓语句是由主谓短语充当谓语的句子。主谓短语作谓语是汉语语法的显著特点。全句主语又叫“大主语”,主谓短语里的主语叫做“小主语”。根据大主语和小主语的句法功能和相互之间的关系,可以把主谓谓语句分为下列三种情况:
1) 大主语是受事,小主语是施事
2) 大主语是施事,小主语是受事
3) 大主语和小主语既非受事也非施事
自然语音,包括新闻、天气预报、广播故事等,总时长为两小时。内容涉及政治、经济、交通、环境、医疗卫生等各个方面。其中新闻语速较快风格平实,而广播故事语速和语调都比较多变。
韵律标注是语料库建设必不可少的工作。这是因为韵律结构与句法结构相关但不一致,韵律信息是文字无法传递的,但它对语义理解、对语用意义、对揭示语篇结构等都有贡献。目前对于音段标音和韵律标注,目前没有一个公认的标注系统。本项目参考国际上标音系统SAMPA和ToBI,设计适合于汉语的音段和韵律的标注系统。在标注内容的设计上,我们采用基于XML可扩展标记语言为载体,对韵律信息分层级进行标注。从最低层音节信息,到韵律词、韵律短语、句子,直到篇章级的信息均能覆盖。标注的内容除拼音、声调等最基本内容外,覆盖位置、前后音联等韵律信息。同时,XML为标注内容的可扩展性提供了保证,系统可以根据需要添加必要的标注信息,而不用重新设计整个标注体系。
标注数据文件记录句子中每个音节的汉字、拼音、IPA音标和始末位置等信息,同时表明韵律词和韵律短语的层级结构。标注文件采用XML格式进行说明,便于浏览和扩展。其基本标记定义为:
<?xml version="1.0" encoding="gb2312"?>
<!ELEMENT utterance (sil*,sentence)>
<!--根元素,韵律结构的最大单元-->
<!ATTLIST utterance total_sample CDATA #REQUIRED>
<!--该文件对应语音文件的采样点数-->
<!ELEMENT sil (#PCDATA)>
<!--静音段-->
<!ATTLIST sil end_sample ID #REQUIRED>
<!--该段的末尾采样点序号-->
<!ELEMENT sentence (prosodic_phrase+)>
<!--句子-->
<!ELEMENT prosodic_phrase (prosodic_word+)>
<!--韵律短语-->
<!ELEMENT prosodic_word (syllable+,sil*)>
<!--韵律词-->
<!ELEMENT syllable (#PCDATA)>
<!--音节-->
<!ATTLIST syllable ch_char CDATA #REQUIRED>
<!--汉字-->
<!ATTLIST syllable pinyin CDATA #REQUIRED>
<!--有调拼音-->
<!ATTLIST syllable end_sample ID #REQUIRED>
<!--音节末采样点序号-->
下面以“为临帖他还远游西安碑林龙门石窟泰山摩崖石刻”一句为例,进行说明。
标注的根结构为“utterance”单元,其属性为该utterance单元的采样点数(长度)。Chunk块开始到第一个句子开始其间可能有静音部分,以“<sil end_sample = “ ”>”结构说明静音段的长度。在目前的标注语料中,每个chunk单元包含一个句子。句子结构以<sentence>记号加以标注,根据需要,该记号后还可以进行扩充,以加入对句子属性的更多描述。
一个sentence单元可能被划分为若干个韵律短语(Prosodic Phrase)单元,以< prosodic_phrase>记号加以修饰。
同样,每个韵律短语单元还可以进一步细分为韵律词单元,以<prosodic_word>记号加以修饰。
最基本的单元为音节(syllable),以<syllable>记号修饰,其后跟音节的属性,包括汉字(char),拼音(pinyin),MCIPA音标(MCIPA),音节结束位置(end_sample)。音节边界与韵律词边界之间,以及语音文件的始末部分可能还存在静音部分,同样用与音节同层的静音(sil)单元“<sil end_sample = “ ”>”加以说明。
可以看出,采用基于XML的层级标注方式,可以清晰地表示出语句的韵律层级结构。并且,根据需要可以方便的扩展/删除某一标注单元的属性。下面给出一个较为完整的例子。
1) Rui
CAI, Zhi-Yong WU, and Lian-Hong CAI Annotation
of Chinese Prosodic Level Based on Probabilistic Model Proc. of International Symposium on Chinese Spoken Language
Processing 2002 (ISCSLP'02), pp.375-378, Taipei, August 22-24, 2002
2) 蔡莲红、刘涛、吴志勇、蔡锐,“汉语声调音域模型初探 ”,第六届全国现代语音学会议论文集
(NCMP'03),pp.137-142,天津, 2003。
3) 蒋丹宁、蔡莲红,“汉语疑问语气的声学特征研究”,第六届全国现代语音学会议论文集 (NCMP'03),pp.186-191,天津,2003。
4) 刘涛、蔡莲红,“基于基频包络的音节聚类的研究”,小型微型计算机系统,已录用。
5) 蒋丹宁、蔡莲红,“带有频谱补偿的基频修改算法”,清华大学学报, 已录用。
6) 蔡莲红、蔡锐、吴志勇、陶建华,“语音合成语料库的设计与声学特征分析”,中国声学学会2002年全国声学学术会议,pp.375-376。