本文以开发傣语语音合成系统为目的,重点研究傣语文本中的数字归一化和特殊字符归一化问题。数字和特殊字符都属于傣语文本中的非标准词,文本归一化的主要目的是用标准词表示非标准词的发音。归一化处理过程包括:非标准词识别、歧义判断、消歧处理和非标准词转换为标准词4个步骤。本文采用基于规则和上下文关键词相结合的方法识别非标准词,利用正则表达式判断其歧义类型,根据转换规则对非标准词进行消歧并确定其正确的傣文读音。实验结果表明,本文提出的文本归一化方法的正确率达到了94.6%,可以完全满足傣语文语转换系统前端文本分析的需求,并具有良好的自然语言处理应用价值。 With the purpose of developing a Dai speech synthesis system, this paper focuses on the study of Dai numbers and special characters normalization. Both numbers and special characters are the non-standard words in Dai text. The main purpose of the text normalization is to represent the pronunciation of non-standard words with standard words. The normalization process includes non-standard words recognition, ambiguity judgment, disambiguation and non-standard transla-tion. Firstly, the non-standard words are recognized and the ambiguous types of these non-stan- dard words are determined using a method based on rule-based and context-keyword, in this paper. Then, the types of ambiguity are judged on regular expression. Lastly, the correct pronunciation of no-standard words is determined according to the transformation rules. Experimental results show that the correct rate of this normalization is more than 94.6%. This purposed method can fully satisfy the front-end text analysis in Dai text to speech conversion system, and has a good natural language processing application value.
伍烛梅,杨鉴*,王展
云南大学信息学院,云南 昆明
收稿日期:2016年7月6日;录用日期:2016年7月25日;发布日期:2016年7月29日
本文以开发傣语语音合成系统为目的,重点研究傣语文本中的数字归一化和特殊字符归一化问题。数字和特殊字符都属于傣语文本中的非标准词,文本归一化的主要目的是用标准词表示非标准词的发音。归一化处理过程包括:非标准词识别、歧义判断、消歧处理和非标准词转换为标准词4个步骤。本文采用基于规则和上下文关键词相结合的方法识别非标准词,利用正则表达式判断其歧义类型,根据转换规则对非标准词进行消歧并确定其正确的傣文读音。实验结果表明,本文提出的文本归一化方法的正确率达到了94.6%,可以完全满足傣语文语转换系统前端文本分析的需求,并具有良好的自然语言处理应用价值。
关键词 :傣语,语音合成,文本分析,归一化
中国傣族是一个历史悠久的民族,傣语是傣族人民使用的语言,全球约有6600万左右的人口使用傣语 [
虽然语音合成技术的研究已有较长时间,但大多仍集中在中英文语言的合成,对少数民族语言涉及较少 [
语音合成包括前端文本分析和后端语音合成。前端文本处理是研究傣语语音合成的前提工作,在语言层、语法层、语义层的处理工作可以归结为前端的文本分析 [
傣文是一种拼音文字,正常形式为“声母+韵母+声调”的三音素音节模型。但是,文本中除了标准的音节外,还包括一些不规范的书写形式。比如:缩写词语,数学公式,数字,日期,特殊符号等。文本归一化就是对这些不规范的书写形式进行标准化转换,使傣语文本的书写形式与读音形式保持一致 [
文本归一化又称为文本正则化,是指对文本进行分析,将文本中的不规范文本识别出来,将其转换为规范文本的过程。这些不规范的文本我们称为非标准词 [
傣语文本归一化主要包括两方面的任务,一是将非傣语字符转化为傣语字符并确定其读音,二是将傣文数字的字符形式转化为拼音形式,以使文本与录音保持一致性。处理步骤分为四步:非标准词识别、歧义判断、消歧处理、非标准词转换为标准词。其处理流程如图1所示。
傣语的标准词必须由傣语声韵母构成,凡是不满足此条件的,都为非标准词。如:傣语数字字符“᧐,᧑,᧒,᧓,᧔,…”。虽然属于傣语字符,但它不是标准的声韵母形式,所以仍将其归为非标准词。傣语的非标准词主要由一些非标准字符组成。这些非标准字符可分为四类:
阿拉伯数字。比如:“0,1,2,3,4,…”。
傣语数字。比如:“᧐,᧑,᧒,᧓,᧔,…”。
特殊符号。比如:运算符(+,*,>,…)、网络符号(@,#,/,…)、单位(¥,$,…)。
英文字符。比如:“A,B,C,D,E,…”。
这些非标准字符,可以单独组成非标准词,也可以几种字符组合在一起。常见的形式包括:纯数字、数字与特殊符号组合、特殊符号、纯英文、英文与字符组合。
为了方便且准确识别出非标准词,我们建立了傣语标准字符表,包括42个声母,96个韵母以及2个显性调符 [
1) 建立非标准字符数据库。使用Access数据库来存储非标准字符。
2) 连接并读取数据库。使用微软的OLEDB (Object Linking and Embedding Database)来访问数据库。整个过程包括:
a) 连接数据库。使用OLEDB中的类OleDbConnection来完成。
b) 读取数据库。根据sql语句来读取数据。用OLEDB的类OleDbCommand来执行sql语句。
c) 关闭连接。读取数据后,调用OleDbConnection对象的close方法关闭数据库连接。
3) 非标准字符比对。将数据库中的数据读取出来后,需要将傣文与标准字符比对。先比对非歧义字符。通过循环,将非歧义字符从变量中逐个取出,并与傣文比对,看傣文中是否包含该歧义字符。接着再比对歧义字符,若包含歧义字符,则后续需进行歧义判断并消歧。
图1. 归一化流程
歧义非标准词一般是阿拉伯数字与歧义字符的组合。通过非标准词识别,若傣文中包含歧义字符,则对其进行歧义判断,并结合规则与语境进行消歧处理。根据现有的语料及以往的经验,我们总结出了四种常见的歧义类型,包括:纯数字(123)、数字:数字(12:13)、数字–数字(12~13)、数字/数字(12/13)。对于每一种歧义类型,我们通过正则表达式(Regular Expression)与关键字相结合的方式来判断。正则表达式是对字符串操作的一种逻辑公式,指用事先定义好的特殊字符及普通字符组合成一个“规则字符串”,通过这个“规则字符串”来对文本内容进行匹配与筛选 [
纯数字的歧义判断主要是判断该数字是数值还是数码。大多数情况下,纯数字按数值来读。但有时数字需要读为数码,如:手机号码、邮编、QQ号码等。因此需要将数码读法的情况列举出来,并进行判断。常见数码数字的正则与关键字如表1所示。
当数字与歧义字符组合时,数字都是按数值来发音的,我们主要判断歧义字符的读法。常见的组合有以下三种(n1,n2表示阿拉伯数字):
n1:n2。这种形式既可读为时间,又可读为比分。如:12:15。由于其形式比较固定,在进行正则判断时是比较简单的。其正则可编写为:(^|[^0-9])\d+:\d+($|[^0-9])。
n1 − n2。这种形式既可以读为范围,又可以读为减法。如:12~15。依据其形式,可编写正则为:(^|[^0-9])\d+−\d+($|[^0-9])。根据正则匹配,即可判断傣文中是否包含该歧义类型。
n1/n2。这种形式既可以读为时间,又可以读为分数。如:12/15。依据其形式,可编写正则为:(^|[^0-9])\d+/\d+($|[^0-9])。根据正则匹配,即可判断傣文中是否包含该歧义类型。
通过正则表达式及关键字,我们判断出傣文中哪些地方有歧义,然后对其进行消歧处理。对于纯数字,如果判断出该数字应该读为数码,那么就将其转写为数码读法的傣文;如果是其他歧义字符,则依据歧义判断结果,对其进行消歧。下面将重点阐述数字消歧处理和字符消岐处理。
傣文数字包括阿拉伯数字、傣语数字、傣语读音三种形式。它们三者之间的对应关系如表2所示。
如果歧义判断为数码,只需根据表2所示的转换规则一一转换即可。如果歧义判断为数值,除了按规则将数字转换成傣语数字外,还需在相应位置添加权重。傣语中的数值权重标识符包括:“ᦉᦲᧇ(十)”、“ᦌᦱᧁ(二十)”、“ᦣᦾᧉ(百)”、“ᦗᧃ(千)”、“ᦖᦹᧃ(万)”。数值的读音形式分为一般形式和特殊形式。对于一般的数值,其读法为“数字+权重”的方式,主要包括以下三种形式:
数码类型 | 实例 | 正则表达式 | 关键字 |
---|---|---|---|
手机号码 | 13586894560 | (^|[^0-9])1[3,4,5,7,8]\d{9}($|[^0-9]) | 无 |
邮政编码 | 650000 | (^|[^0-9]) [1-9]\d{5} ($|[^0-9]) | ᦍᦲᧁᧉᦈᦵᦲᧃᧈ |
QQ号码 | 10000 | (^|[^0-9]) [1-9]\d{4,} ($|[^0-9]) |
表1. 数码的正则识别与关键字
阿拉伯数字 | 傣语数字 | 傣语读音 | 阿拉伯数字 | 傣语数字 | 傣语读音 |
---|---|---|---|---|---|
0 | ᧐ | ᦉᦳᧃ | 5 | ᧕ | ᦠᦱᧉ |
1 | ᧑ | ᦓᦹᧂᧈ | 6 | ᧖ | ᦠᦷᧅ |
2 | ᧒ | ᦉᦸᧂ | 7 | ᧗ | ᦈᦵᧆ |
3 | ᧓ | ᦉᦱᧄ | 8 | ᧘ | ᦔᦶᧆᧈ |
4 | ᧔ | ᦉᦲᧈ | 9 | ᧙ | ᦂᧁᧉ |
表2. 傣语数字的三种形式
个位数
Ø 字符形式与读音形式一一对应,直接替换即可。
十位数
Ø 十位标志词是ᦉᦲᧇ (/sip55/),读法为“十位标志词+个位数字”,如᧑᧒ (12)为ᦉᦲᧇᦉᦸᧂ。
Ø 30~99读法均为“十位数字+十位标志词+个位数字”,如᧔᧖(46)为ᦉᦲᧈᦉᦲᧇᦠᦷᧅ。
百千万
Ø 百位标志词为ᦣᦾᧉ(/hɔi11/),千位标志词为ᦗᧃ(/pan41/),万位标志词为ᦖᦹᧃ(/mɯn35/),读法均为“数字 + 标志词”,如᧒᧙᧔᧙(2949)为ᦉᦸᧂᦗᧃᦂᧁᧉᦣᦾᧉᦉᦲᧈᦉᦲᧇᦂᧁᧉ。
而对于特殊读法,其转换规则分为以下四类:
数字1与任意数字组合,若为个位数,则需要变调读为ᦀᦵᧆ(/ʔet55/)。如᧑᧑(11)读音为ᦉᦲᧇ ᦀᦵᧆ,而不是ᦉᦲᧇ ᦓᦹᧂᧈ。
20为特殊读法,标志词为ᦌᦱᧁ(/sa:u41/),读法为标志词+个位数字,如᧒᧓(23)为ᦌᦱᧁᦉᦸᧂ,而不是ᦉᦸᧂ ᦉᦲᧇ ᦉᦱᧄ。
当1出现在最高位时,必须省略不读,直接读标志词即可。如᧑᧖᧒(162)为ᦣᦾᧉ ᦠᦷᧅ ᦉᦲᧇ ᦉᦸᧂ。
当一个0或连续几个0出现在除个位以外的其他位上时,均用ᦔᦻ(/paːi55/)代替,意为“多”,如᧒᧐᧐᧖(2006)为ᦉᦸᧂ ᦗᧃ ᦔᦻ ᦠᦷᧅ。
根据上述规则,傣语数值的归一处理主要分为两阶段:阿拉伯数字转换成傣语数字及添加权重。
对于歧义字符的消歧,我们先设置一个默认读法,将读法更普遍的视为默认读法。如:“12~20”作为范围的情况更多,因此将“-”的默认读法设为ᦏᦹᧂᧈ。这样确保了在没有明显的关键字进行判断的情况下,字符能转换为标准傣语。消歧的思想是利用正则表达式,根据上下文关键字来确定其歧义类型,根据转换规则将非标准词转写成标准词。部分字符消歧规则如表3所示。
这里以时间“12:30”为例说明,消歧过程如下:
1. 依据歧义字符“:”,将上述字符串拆分为“12”,“30”。
2. 将歧义字符消歧为“ᦎᦱ”,并合并出字符串“12 ᦎᦱ 30”。
3. 将傣文中的“12:30”作为整体替换为“12 ᦎᦱ 30”。
傣文的非标准词识别和消歧处理后,需要对傣文中的非标准词进行标准化转换。转换分为两类:数字转换和特殊字符转换。对于数字转换,难点在于对数值权重的添加,除了将数字归一化为标准傣语外,还要在相应位置添加权重。傣语的特殊字符主要包括英文字母、网络符号和数学符号等,部分字符转换
歧义类型 | 正则表达式 | 关键字 | 消岐后的傣语读音 |
---|---|---|---|
n1:n2 | (^|[^0-9])\d+:\d+($|[^0-9]) | ᦜᦵᦲ(比)默认读法:时间 | n1 ᦎᦸᧈ n2n1 ᦎᦱ n2(时间) |
n1/n2 | (^|[^0-9])\d+/\d+($|[^0-9]) | ᦑᦸᧈ(等于)默认读法:日期 | n2 ᦔᦳᧃ n1ᦡᦵᦲᧃ n1 ᦟᦷᧅᦀᦸᧅᧈ n2 ᦃᧇᧈ(日期) |
n1-n2 | (^|[^0-9])\d+-\d+($|[^0-9]) | ᦜᦵᦲᧈ(比)默认读法:范围 | n1 ᦟᦳᧇ n2n1 ᦏᦹᧂᧈ n2(范围) |
表3. 字符消歧规则
规则如表4所示,经过消歧处理后,特殊字符都是不存在歧义的。所以,特殊字符的归一化只需按照转换规则一一替换即可。
经过对傣语语料文本的统计,我们发现本文语料文本包括数字和特殊符号两种形式的非标准词,所以,本文主要研究数字归一化和特殊符号归一化。
傣文数字包括阿拉伯数字、傣语数字、傣语读音三种形式,数字归一化的目的就是将数字的字符形式转换成读音形式。阿拉伯数字有两种语义:数值和数码。对于数码形式的归一化,只需根据转换规则直接转换即可,如手机号码“13598689545”其读音形式为 “ᦓᦹᧂᧈᦉᦱᧄᦠᦱᧉᦂᧁᧉᦔᦶᧆᧈᦠᦷᧅᦔᦶᧆᧈᦂᧁᧉᦠᦱᧉᦉᦲᧈᦠᦱᧉ”。而对于数值形式的归一化,除了将单个数字转换成读音形式外,还需添加权重标识符。下面我们以傣文“ᦉᦱᧄᦓᦹᧂᧈᦉᦸᧂ,᧓᧑᧒”为例,阐述具体实现过程,上述傣文包含傣语数字᧓᧑᧒(201)其归一化流程如图2所示。
1. 非标准词识别
利用正则匹配识别非标准词为“,᧓᧑᧒”。
2. 歧义判断与消歧
通过歧义判断,判断其是数码还是数值,若为数码,按照表2所示的规则将其转换成傣语读音形式即可;若为数值,就按照以下步骤进行归一化。
3. 添加权重标识符
利用正则表达式匹配到字符串“,᧓᧑᧒”。确定该字符串索引位置为12(从0开始)。由于该数值是三位数,所以,第一个权重标识符“ᦣᦾᧉ(百)”应添加于“᧓”后,即傣文索引位置为12 + 2,即14。第二个权重标识符“ᦉᦲᧇ(十)”应添加于“᧑”之后。由于前面已添加了“ᦣᦾᧉ(百)”,这时傣文为“ᦉᦱᧄᦓᦹᧂᧈᦉᦸᧂ,᧓ᦣᦾᧉ᧑᧒”,所以索引为20。数值中添加的多个权重可通过循环的方式插入傣文字符串,但是需要计算下次添加的索引位置。这里的20 等于14加上ᦣᦾᧉ的字符数3,加上两个空格符2及᧑的字符数1。若数值处于句首,由于匹配到的字符串不含“,”索引位置偏移不同。因此,数值处于句中还是句首应分开处理。
4. 处理个位1(᧑)
添加权重后,首先要处理个位1。在处理前,首先得判断哪些1处于个位。这里也可利用正则进行判断。正则表达式能否准确的匹配出我们需要的字符,关键是能否抓住该字符的核心特征。若我们仅用“᧑”来匹配个位1,则会将不处于个位的1挑选出来。添加权重之后,个位1有一个关键特征,其前面必定是标识符“ᦉᦲᧇ (十)”。据此可编写正则:“ᦉᦲᧇ\s᧑[^᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙]”。找出个位1后,就可将这里的1(᧑)替换为“ᦀᦵᧆ”。
5. 处理中间0
最后处理中间0,为提高效率,先判断傣文中是否包含“᧐(0)”,包含了才处理。若数值中包含中间
图2. ᦉᦱᧄᦓᦹᧂᧈᦉᦸᧂ,᧓᧑᧒的归一化流程
特殊字符 | 傣语读音 | 特殊字符 | 傣语读音 |
---|---|---|---|
> | ᦜᦻᦜᦵ | A | ᦁᦵᧀᧈ |
+ | ᦢᦷᧅᧈ | C | ᦌᦲᧈ |
= | ᦑᦸᧈᦡᦺᧉ | E | ᦍᦲᧈ |
@ | ᦁᦵ | G | ᦋᦲᧈ |
* | ᦉᦲᧈ | I | ᦀᦻᧈ |
表4. 傣语特殊字符转写规则
0,如:“102”、“1002”、“1022”。为了便于处理,仍然要抓住其关键特征。即不在个位的0,它们可作为十位,百位,千位,万位,在添加权重之后,相应的字符为“᧐ᦖᦹᧃ”、“᧐ᦗᧃ”、“᧐ᦣᦾᧉ”、“᧐ᦉᦲᧇ”。只要出现上述字符串,那么肯定属于中间0。只需将上述字符串替换为“ᦔᦻ(多)”即可。若是连续的几个0,那么替换完后会出现多个“ᦔᦻ”。再将“ᦔᦻᦔᦻᦔᦻ”、“ᦔᦻᦔᦻ”等,进一步替换为“ᦔᦻ”即可。
6. 将傣语数字转为傣语读音
依照规则将数值权重添加后,就需将相应的傣文数字转换为傣文发音。由于两者之间一一对应,且不存在任何包含关系,将傣文数字逐个替换即可。
除了将数字归一化为标准傣语外,还要将一些特殊字符转为标准傣语。经过消歧处理后,剩下的特殊字符都是不存在歧义的。所以,特殊字符的归一化只需按照表4所示的转写规则一一替换即可。
本文主要讲述了傣语归一化的实现过程,主要分为四个步骤:非标准词识别,歧义判断,消歧处理,非标准词转换为标准词。归一化的难点在于歧义判断与消歧处理。这里歧义判断是依据正则表达式来判断。依据编写好的正则,来匹配出存在歧义的非标准词。当匹配出歧义时,又需要依据相关规则与关键字来消歧。对于纯数字类非标准词,主要分为数码与数值两种读法。大部分的纯数字是读数值的,因此在归一化时还需要依据数值的大小添加“万”、“千”、“百”等权重,这也是归一化时的一个难点。
本文语料文本包括非标准词3750个,其中基本非标准词的比例为62.6%,歧义非标准词的比例为37.4%。集外测试的语料文本共有3288句,其中含有非标准词8360个,基本非标准词的比例为58.5%,歧义非标准词的比例为41.5%。
采用本文方法,集内测试正确消歧非标准词1335个,消歧正确率为95.2%;正确归一化非标准词3638个,归一化正确率为97.0%。集外测试正确消歧非标准词3230个,消歧正确率为93.1%;正确归一化非标准词8025个,归一化正确率为96.0%。
另外,傣语文本中共包含2571个字符形式的傣语数字,因不存在歧义现象,按规则进行转写后,正确率为100%,达到预期要求。
从实际应用的效果表明,为提高傣语文语转换系统合成语音的质量,本文提出的归一化方法还有进一步改进的空间。在后续研究中不仅可以考虑增大词典的规模,还可以考虑釆用跳跃式的词串匹配方式来进行关键词的匹配。
首先,感谢云南民族大学的傣族同胞玉腊光罕以及她的同学们,谢谢他们帮助我们校对傣语文本。其次,感谢云大语音实验室的所有成员的关心和帮助,谢谢你们给了我一个温暖的集体和轻松愉快的学习环境。最后还要感谢国家自然科学基金项目对实验室的支持。
获国家自然科学基金(61262068)资助。
伍烛梅,杨鉴,王展. 傣语语音合成中的文本归一化方法An Approach to Normalization of Dai Text for Speech Synthesis[J]. 计算机科学与应用, 2016, 06(07): 415-422. http://dx.doi.org/10.12677/CSA.2016.67051
http://dx.doi.org/10.1016/j.joi.2015.11.003
http://dx.doi.org/10.1006/csla.2001.0169