针对长尾问题的二重加权多音字消歧算法
2023-01-18熊一瑾叶建成
高 羽,熊一瑾,叶建成
(美的集团(上海)有限公司 AI创新中心,上海 201702)
0 引言
长尾问题在现实世界中非常普遍。对于自然采集的真实数据,尤其是大型数据集,不同类别下的数据一般不会呈理想的均匀分布,而往往是不平衡的[1-3]。以人类语言为例,字词发音的频率分布均遵守齐普夫定律(Zipf’s Law),汉语中特有的多音字的分布也属于长尾分布。因此,作为汉语语音合成的重要模块[4],多音字消歧也属于典型的对不均衡数据的分类问题[5-6]。
直接使用长尾数据训练模型时,由于头部类别的样本数远多于尾部类别,往往会导致模型过拟合于头部类别,且忽略尾部类的学习,在尾部类上泛化效果差[2,7]。在不平衡分布的数据下,如何训练出平衡的分类器是学者们所关心的问题,所以长尾算法的相关研究通常使用均匀分布的测试集来证明其算法的有效性。在工业实用的语音合成的上线测试中,也会使用人工设计的均衡测试集来评价系统的性能。因此本文的研究问题具有学术和工业应用的双重价值。
本文注意到,多音字消歧任务有一项特殊性: 其长尾分布存在于“字符”和“字音”两个维度。从“字符”的维度来说,不同多音字下的样本数分布不均,以CPP[8](Chinese Polyphones with Pinyin)的训练集举例,“哈”字的样本数共有161条,而“偻”字仅有8条。从“字音”的维度来说,同一多音字中,不同发音下的样本数分布不均,如上文中的“哈”,其发音“ha1”含160条样本,而发音“ha3”仅含1条。
为处理这两个维度上的长尾问题,本文针对性地提出一种二重加权消歧算法DW(Double Weighted),并结合另外两种长尾算法: MARC(MARgin Calibration)[9]与Decouple[10]-cRT(Classifier Retraining)进行了实验。本文对两种算法本身的使用也进行了改进,并做消融实验。在CPP测试集和两份工业场景测试数据上,本文所提出的二重加权算法较基线模型和两种原始算法取得了不同程度的准确率提升。
1 相关工作
对于长尾学习问题,目前主要有如下方法:
重采样对尾部样本过采样[11],或对头部样本欠采样[12]。但此类方法缺陷明显[13-15]: 过采样导致缺乏差异的尾部数据被反复学习,模型无法学到鲁棒易泛化的特征而过拟合;欠采样导致拥有足够差异的头部数据得不到充分学习,模型因信息损失而欠拟合。
重加权为不同类别乃至不同样本分配不同权重: 按类别数的倒数加权[16]、按有效样本数加权[17]、优化分类间距并按样本数加权[9,15,18]等。MARC[9]属于此类方法。
解耦特征与分类器将模型的特征学习过程和分类器学习过程进行解耦[10,19-20],以降低数据分布对分类器的决策的影响。Decouple[10]-cRT属于此类方法。
此外还有数据合成[21-22]、度量学习[23-24]、迁移学习[3,25]、元学习[26]/域自适应[1]、半监督学习/自监督预训练[27]等研究。
1.1 优化分类间距并重加权——MARC
文MARC[9]方法认为,先前的相关研究忽略了分类边界与分类器输出的预测概率间的关系。该文通过数学推导,提出了一种分类边界校准(MARgin Calibration)算法。其具体实现分为两个阶段: 用原始长尾数据及Softmax损失函数训练得到基线模型后,固定其所有参数;在分类器中添加2K个参数(K为分类类别数),使用MARC提出的损失函数(详见3.2节),仅对新增的2K个参数进行训练。这一过程较基线模型会更快收敛。
1.2 解耦特征与分类器——Decouple
Decouple[10]方法认为,先前相关研究的一个共性为,模型的特征提取器(Backbone)与分类器(Classifier)是联合训练的。然而,这种联合方式不能说明方法提高的是特征提取器的特征表达能力,还是分类器的性能,亦或二者皆有。于是该文提出将二者的训练进行解耦,并在不同训练阶段使用不同的数据采样策略。
本文选用Decouple中的cRT算法进行改进。原始cRT算法也包含两个阶段: ①对训练数据进行实例平衡采样(instance-balanced sampling),即不改变数据的原始分布,联合训练特征提取器与分类器; ②对训练数据进行类别平衡采样(class-balanced sampling),即使每个类别下的样本数大体相同;将特征抽取器的参数固定,重新随机初始化分类器的参数,且仅训练分类器。两个阶段都使用Softmax损失函数。相较第一阶段,第二阶段的模型会在更少的步数下收敛。
2 基于ELECTRA的多音字消歧模型
2.1 模型结构
如图1所示,首先,我们使用ELECTRA模型[28]对样本句进行深度语义编码;随后,将得到ELECTRA编码的整句表征向量,经全连接层1(full-connected layer, fc1)调整隐状态维度大小后,输入到Bi-LSTM[29]层,以增强文本间的距离和方向信息[30]。
受文献[31-33]等启发,不同于ELECTRA本身的嵌入层,我们新增了一个可学习的多音字嵌入层,以对多音字集合进行更有针对性的表征;将Bi-LSTM建模前后多音字所在位置的表征向量与新增的多音字嵌入向量进行拼接,得到融合特征向量;最后,将融合向量输入到分类器,即全连接层2,3(fc2、fc3)进行分类。
为方便表示,在后文中,ELECTRA以外的模型结构统称为多音字模块(Phoneme Module)。
2.2 归一化与激活函数
对fc1、Bi-LSTM的输出进行层归一化[34](Layer Normalization)与ReLU[35]函数激活;对fc2的输出进行批归一化[36](Batch Normalization)与ReLU函数激活。
图1 模型结构
3 损失函数与改进策略
本节将介绍实验中用到的3种损失函数: 掩码Softmax,边界校准Softmax,以及本文提出的二重加权(Double Weighted,DW)Softmax。
原始Softmax Loss是常用于分类的损失函数。当定义第i个样本的真实标签为yi时,Softmax Loss计算方法如式(1)~式(3)所示。其中,fj为最终全连接层(本文中为fc3)输出的分类向量f的第j个元素,K为分类类别数,N为训练样本的总个数。
在多音字分类任务下,由于字符类别与字音类别存在嵌套关系,我们对后文中出现的参数进行进一步明确: 记全体多音字含X个字符,U个发音,训练样本总个数为N。其中,第p(p∈[1,X])个多音字共含mp个样本,Kp个发音;其第j(j∈[1,Kp])个发音包含nj个样本。于是有:
重新定义:K为Kp的最大值;数据集中第i个样本的真实字符标签为yq,字音标签为yi,如式(7)所示。
K=max (Kp)
(7)
3.1 掩码Softmax
注意到,单个多音字的候选发音集合Kp实际仅占全体发音集合U的很小部分。由于Softmax会给每一个分类选项预测一个非0概率,如果将集合U作为预测空间,会导致概率分布非常发散,对整个训练产生负面影响。
因此,我们使用掩码向量[37]作为权重,对式(1)中元素进行加权,防止模型预测到其他多音字的拼音,如式(8)所示。mj为布尔值掩码向量,表示是否掩蔽元素fj。我们首先将预测空间维度约束在K以内,再通过mj将空间进一步约束在yq的实际发音数Kyq。
(8)
3.2 边界校准Softmax
式(9)为MARC的核心改进:ωj与βj为新增的2K个可学习参数(j∈ [1,K]),以调整分类边界。Wj为最终全连接层中对应到类别j的权重向量,‖·‖表示L2正则。其具体推导过程可参考原文[9]Method章节。
(9)
3.3 二重加权Softmax
为应对字符与字音两个维度上的长尾分布,本文对式(3)中的li进行二重加权,如式(10)所示。具体地,式(11)为对“字符”维度分配的权重,式(12)为对“字音”维度分配的权重。
式(11)、式(12)均由线性项与非线性项构成。线性项分别为总发音数U、与yq自身的发音数Kyq。非线性项为相应维度上类别样本数myq、nyi的倒数的占比[38]。因此,所属类别的样本数越少,被分配的权重会越高,且两组权值分开计算,不相耦合。
继续使用引言中的示例: 相较含161条样本的“哈”字,仅含8条样本的“偻”字会有更高的字权重weightyq;而同属于“哈”字,即weightyq相等时,相较含160条样本的发音“ha1”,仅含1条样本的发音“ha3”会有更高的字音权重weightyi。
如此,模型对尾部类别的关注得到了提高,且提高程度与数据自身的分布(出现频率)相关。
其中,γ1、γ2为尺度超参,可对两式的非线性项权重分别进行调整,提供了更多的自由度来控制分布的形式,以适应不同的不平衡程度。
注意,本文所有实验均基于掩码Softmax,在其基础上进行边界校准或二重加权。
3.4 参数解冻
注意到,MARC与Decouple-cRT在第二阶段仅开放少量参数进行训练: MARC仅训练新增的2K个参数,Decouple-cRT仅训练分类器参数(对应本文fc2、fc3)。
而本文提出的模型,除预训练模型ELECTRA与分类器外,还有Bi-LSTM、多音字嵌入层等结构。因此,MARC与Decouple-cRT对二阶段可训练参数的原始设定在本文模型上可能存在局限性。
我们猜想,在第二阶段训练中开放更多参数: 将多音字模块(Phoneme Module)的参数全部解冻参与训练,能够进一步提升模型性能,并已通过后续实验证明(表3、表4)。
4 实验设置与结果分析
4.1 实验数据
首先对本文使用的两份开源数据,CPP[8]与标贝中文标准女声音库[39]进行说明:
CPP来源于中文维基百科,其训练集、开发集、测试集大小见表1。CPP共含623个多音字,每个字含10~250条样本,每条样本长5~50字。更多统计数据可参考原文[8]第4节,其也反映字符与字音两个维度上的长尾分布现象。
标贝中文标准女声音库为语音合成(TTS)任务的数据集,共有10 000条语音,每条语音平均字数为16,总有效时长约12小时。由于数据集还包含每条语音对应的文本、拼音等,故也可用于韵律标注、多音字消歧等任务的训练。
本文使用两套数据方案进行了实验,相关信息见下列说明与表1、表2。
表1 数据方案(1)
表2 数据方案(2)
方案(1): 原始CPP训练集、开发集、测试集。此外,我们对原始测试集进行采样,构造了一个近似均衡的测试子集,命名为CPP balance。采样方式如下: 当字音样本数小于等于5时,保留所有样本;样本数大于5时,从中随机抽取5条。
方案(2): 混合CPP所有数据与标贝数据,随机划分出训练集和开发集。测试集来自两份业务场景的数据,分别名为scene1、scene2。
在方案(2)下,多音字消歧字典已依照工业需求事先建好,因此,训练数据中,字/字音不在该字典中的样本不会参与实际训练。表2为字典能匹配到的实际有效的样本数量。
4.2 超参设置
ELECTRA模型使用ELECTRA-small[28]的默认设置;Bi-LSTM的输入、隐状态、输出维度分别为128、64、128。多音字嵌入向量层的词典大小为多音字字符数X,嵌入向量维度为128。优化器选用AdamW[40],批大小为256。
学习率: 基线模型中,ELECTRA在前一万步不参与训练,一万步后以1e-5的学习率加入训练。其余模块始终以1e-4的学习率进行训练。
4.3 实验结果
我们首先在数据方案(1)下进行实验,各模型及消融实验结果见表3。得到数据方案(1)的结果后,我们对数据方案(2)也进行了相同模型配置下的实验,对各算法性能进行更公平的验证(表4)。以下是对表3、表4中涉及的模型与算法配置的说明。
表3 方案(1)下各模型测试准确率 (单位: %)
表4 方案(2)下各模型测试准确率 (单位: %)
续表
基线模型: 用原训练集与掩码Softmax训练至收敛得到的模型。
cRT: 得到基线模型后,重新初始化fc2、fc3的参数,用类别平衡采样后的训练集(总大小与原训练集一致)继续训练至收敛;其余模型参数均固定,不参与更新。
MARC: 由于原始MARC的类别定义与本文并不相同,为公平比较起见,设置如下: 得到基线模型后,使用式(12)对loss加权、式(9)进行边界校准,用原训练集仅对式(9)中新增的2K个参数进行训练,其余模型参数均固定。式(12)中γ2沿用原始MARC设置,取值为1.2。
+ pm: 代表多音字模块(Phoneme Module)的参数全部进行后续训练。
+ DW: 表示对loss添加权重,直至满足二重加权(式(10))。我们首先在数据方案(1)下,测试γ1的取值对模型准确率(%)的影响,结果见表5、表6。最终确定DW与cRT配合使用时γ1取1.0,与MARC配合时γ1取1.2,γ2的取值保持1.2不变。
空白对照模型: 指不使用任何算法改进,在基线模型训练好后,仅用掩码Softmax对多音字模块继续训练,以排除继续训练可能带来的受益。
表5 与cRT配合,γ1对准确率的影响 (单位: %)
表6 与MARC配合,γ1对准确率的影响 (单位: %)
4.4 结果分析
从表3、表4可以看出,cRT系列算法更容易在均衡分布的测试集上性能有所提升,而引入本文改进(+pm;+DW)后的MARC系列在长尾、均衡的测试集上性能均有较大提升。
由空白对照组结果可证明,本文算法效果的提升并非由继续训练带来的随机性产生,而是源于算法的改进。
特别地,本文提出的DW算法在两种长尾算法上展现出了不同的倾向性: 与DW结合的cRT在均衡测试集上表现更加突出,即更加强调了尾部数据的学习,但在长尾测试集上性能下降;DW在MARC上则正相反,侧重提升长尾测试集上的性能。可以得出:
(1) cRT系列算法实现简易,无须修改模型,无新增参数,对均衡分布的测试场景有效;DW可进一步提升其均衡测试场景下的表现,但在长尾测试场景下会有精度损失。
(2) MARC系列仅需新增极少量的参数,且较cRT更为稳定。尤其,改进并融合本文方法后的MARC+pm+DW模型,性能更为突出,能够适配更多场景。
此外,γ1,γ2可分别对字符与字音的权重进行非线性缩放调整。虽然本实验中对γ1的取值有进行比较(表5、表6),但这种方式仍较为粗糙。未来的工作中,我们希望可以让模型自适应地学习γ1、γ2应如何取值。
5 结束语
本文对多音字消歧任务中,字符与字音两个维度上的长尾分布问题,针对性地提出了一种简易有效的二重加权算法: DW,在开源与工业数据上都取得了较大的性能提升。
本文将原用于图像分类任务上的两种长尾算法: Decouple-cRT与MARC应用到多音字消歧任务中。将两者结合DW算法,并根据本文模型架构特点增加改进策略,在四份语料上测试并做消融实验,证实DW算法与改进策略的有效性。
我们发现,强调尾部的学习总会引入损失头部精度的风险。模型在头部数据和尾部数据上的性能难以同时获得较高提升,达成平衡则相对容易。在未来的研究中,我们将继续跟进前沿算法,尝试用更多方法如自监督、半监督、预训练,结合现有思路,多角度地继续改进算法。同时也希望本文能为其他存在长尾问题的深度学习任务提供思路,多维度地利用数据信息。