本文主要介紹Interspeech2020中關於語音合成文本前端相關的進展,總體來說,主要是關注中文里面的多音字注音。
g2pM: A Neural Grapheme-to-Phoneme Conversion Package for Mandarin Chinese Based on a New Open Benchmark Dataset
代碼地址
g2pM-A Neural Grapheme-to-Phoneme Conversion Package for Mandarin Chinese
摘要
-
開源了一個包含99000+句話的中文多音字數據集(Chinese Polyphones with Pinyin,CPP)。
-
在上述數據集上,僅使用一個簡單的Bi-LSTM訓練,就可以獲得接近SOTA的測試集正確率,略低於利用中文BERT模型訓練的文本轉音素(Grapheme-to-Phoneme,G2P)模型。
簡介
相關工作
目前大部分解決中文多音字的G2P模型可以分為以下幾類:基於規則的方法和數據驅動方法。
-
基於規則的方法:使用收集的詞典和預先定義的規則。
-
數據驅動方法:使用決策樹、最大熵模型、雙向LSTM模型在字詞句等不同層面抽取特征,但是這類方法幾乎都需要依賴額外的工具比如分詞器和詞性標注器。最近出現了一些工作將G2P當作是序列轉錄任務,利用編解碼模型生成多語種音素。
Multilingual grapheme-to-phoneme conversion with byte representation
Neural machine translation for multilingual grapheme-to-phoneme conversion
數據集的構建
數據收集
-
刪除超過50個字符,低於5個字符的句子。
-
在漢字兩側使用“_”(U+2581)標注句子中的多音字。比如“1990年9月15日,在克里米亞發現▁了▁此天體。”。
-
為了防止數據傾斜,每個多音字的句子樣本數量控制在10到250之間。
人工標注
-
利用CC-CEDICT提供多音字的候選項,標注者只需要在這些候選讀音中選擇即可。
-
不是將數據集分成N份,供N個標注者標注。而是每個標注者都標注同樣的,完整的數據集,以便后續校對。
數據切分
訓練集、開發集和測試集,8:1:1。
模型
模型輸入一個漢字,輸出多音字的所有候選讀音的概率值。
模型主體結構為1層雙向LSTM和2層全連接層。
損失函數就是交叉熵。
評測結果
如上表所示,這個簡單模型的表現相當不錯,稍低於基於BERT的G2P模型。
上表中的Majority Vote是投票法,統計訓練集中多音字的拼音,推斷時候遇到多音字,直接給這個多音字的最高頻拼音,從這個數據看,投票法測試准確率都挺高了,感覺對其它的方法並不公平;第二個是xpinyin,第三個是python-pinyin,規則+詞典的方法;第四個是g2pC,使用條件隨機場CRF解決多音字的問題;第五個是利用中文BERT,后面接一個簡單的全連接層,輸入多音字,輸出多音字候選讀音的概率,訓練時不凍結權重。
Distant Supervision for Polyphone Disambiguation in Mandarin Chinese
摘要
本文主要是提出了一個預測中文發音的模型,並且該模型是利用遠程監督(distantly supervised)的方式訓練獲得的。具體地,就是利用聲學模型的對齊方法產生大量的字符-音素對,然后訓練一個帶有注意力機制的序列到序列生成模型;此外,利用音素序列訓練的語言模型去消除自動生成數據集中的噪音。
這里所謂的“遠程監督”,就是通過將知識庫與非結構化文本進行對齊,來自動構建大量訓練數據,減少模型對人工標注數據的依賴,增強模型跨領域適應的能力。
簡介
動機
數據驅動的文本轉音素模型會面臨以下挑戰:
-
缺少大量的標注數據。人工標注的成本十分昂貴。
-
數據分布不平衡。漢字的出現頻率呈長尾分布;此外,中文中的多音字雖然同樣一個字符對應多個讀音,但多數多音字的某一個讀音常常占據主導地位。
-
標注存在偏差。由於多音字的使用方式多樣,標注者不同的發音習慣會導致數據集中存在標注偏差。
模型結構
提出的模型包括三個部分:字符-音素轉換模塊(Character-Phoneme Transformation Module),遠程監督數據生成模塊和重排模塊。字符-音素轉換模塊使用Seq2Seq框架,以捕獲輸入字符的上下文,輸入文本和輸出音素之間的關系;該模塊輸入漢字序列,輸出對應的音素序列。遠程監督模塊(Distantly Supervised Data Generation Module)使用聲學模型的對齊方法,該模塊輸入漢字序列和對應的聲學特征,輸出音素序列,通過這個模塊可以在無人工標注情況下,獲得大量訓練數據。但是遠程監督模塊獲得的數據同樣引入了大量的噪音,因此引入了重排模塊(Reranking Module),該模塊通過大量的音素序列訓練,對前N個生成的候選音素序列進行重新排序。最高得分對應的預測音素序列將作為最終的結果。如下圖所示。
遠程監督數據生成模塊
如上圖右側所示,該模塊輸入字符序列和對應的聲學特征,輸出生成的<字符序列-音素序列>對。在該論文中,該模塊使用大約8000小時的中文語音數據訓練,LF-MMI作為目標函數。一個包括5層,每一層包含1024個節點,輸入映射層包括512個節點。\(t-2\)幀到\(t+2\)幀拼接起來作為時刻\(t\)的輸入特征,輸出為2408大小的上下文相關音素。通過測試,該G2P模型結合預訓練4-gram語言模型在Aishell測試語料上的字錯率(Character Error Rate,CER)為2.91。也就是說,通過該模型可以以較高的准確率生成音素序列。
字符-音素轉換模塊
不同於將多音字消歧當作對單個字符的分類任務,該文直接將文本轉音素(Grapheme-to-Phoneme,G2P)作為翻譯任務,因此直接采用的是Seq2Seq模型去預測輸入字符序列對應的音素序列。也就是說,對於給定的字符序列\(x\),對於每一個可能的音素序列\(y\),該模型計算概率\(p(y|x)\)。該文實驗了三種常用的Seq2Seq模型,分別為帶有全局注意力機制的LSTM網絡、Tansformer和CNN模型,Fairseq中這三個模型均有實現。相比循環網絡,卷積網絡更容易發現序列中的結構信息。這三個模型的層數分別為2、6和20,編解碼器相同。束搜索寬度為5,該模塊輸出的50-best的預測結果作為重排模塊的輸入。
重排模塊
由於訓練數據是自動生成的,因此存在着大量的噪音。與此同時,實踐中非平行語料較為充足,比如中英平行語料比較少,但是單英語語料卻很多。因此,該文訓練了一個基於Transformer的語言模型\(p(y)\)重排上述字符-音素模型生成的N-best候選音素序列。其主要目的就是希望充分利用非平行語料解決噪音問題。Seq2Seq模型的預測分數和語言模型線性結合:
其中,\(\lambda\)為固定權重,論文中設置為1.0。
重排模塊的參數設置和字符-音素轉換模塊的Transformer相似,在AUTO數據集(遠程監督模塊生成的數據集)上進行訓練[1]。
[1] K. Yee, N. Ng, Y. N. Dauphin, and M. Auli, “Simple and effective noisy channel modeling for neural machine translation,” in Empirical Methods in Natural Language Processing, 2019, pp. 5695–5700.
實驗
數據集
使用三個數據集進行實驗,分別為AUTO、MANU和CPP,后兩個均為人工標注的數據集。
實驗設置
-
Baseline。為了便於比較,使用了基於詞典的Pypinyin和上文中提到的g2pM模型作為基線。
-
方案。對於Seq2Seq模型,分別使用LSTM、Transformer和CNN三種不同的模型,為了便於分析語言模型的作用,實驗了加上語言模型之后的表現(表中使用“+LM”標識)。此外,為了和g2p模型公平對比,該文提出的模型同樣在CPP數據集上進行了訓練(表中使用“(CPP)”標識)。由於CPP數據集每一句話僅標注一個多音字,因此訓練之前使用g2pM對所有漢字生成發音。
在三個測試集上的正確率如下表。
可以看到,加入語言模型的CNN模型的正確率最高,在各個測試集上的表現也最好。CNN模型相比於Transformer,CNN更擅長捕獲局部結構。
A Mask-based Model for Mandarin Chinese Polyphone Disambiguation
摘要
該文將從上下文中抽取的掩碼向量作為一個額外的輸入,在提出的模型中,將掩碼向量作為模型輸入。掩碼向量的輸入主要有以下幾個:1)豐富了輸入特征;2)掩碼向量作為加權Softmax的權重,防止模型錯誤預測其它多音字的拼音;3)帶有掩碼向量約束的候選對象會將損失傳遞到損失函數,以更好地指導模型訓練。此外為了解決多音字發音分布不均衡的問題,引入了一個修正焦點損失函數(Modified Focal Loss)。
模型主體主要是BLSTM和CNN組成的編碼網絡獲取語義特征。
簡介
輸入特征
提出的模型主要包括6種特征輸入,包括中文字符,中文分詞,詞性,多音字,標記位和掩碼向量。
-
中文字符(Chinese Character,CC):包括單音字和多音字字符。
-
中文分詞(Chinese Word Segment,CWS):字符級別的分詞結果,以\({B,M,E,S}\)作為標記。
-
詞性(Part Of Speech,POS):字符級別的詞性標注。
-
多音字(Polyphones,PP):語料中的所有多音字字符和非多音字集合。
-
標記位(Flag Token,Flag):需要消歧、不需要消岐和單音節,以\({0,1,2}\)作為標記。
-
掩碼向量(Mask Vecotr,Mask):掩碼向量的維度等於拼音集合的長度加上兩個特殊的token(
<UN_LABLE>
和<NO_LABEL>
),前者標識單音字,而后者標識該多音字不需要消歧。
以“僅會在行業規范和會計制度方面進行指導”為例,假設僅對第一個“會”(hui4,候選讀音有hui4、kuai4)、“行”(hang2,候選讀音有hang2、xing2)和“和”(he2,候選讀音有he2、he4、huo4、huo2、hu2)打標簽並進行訓練,第二個“行”和“行”將不會被打標簽。那么上述的特征輸入如圖所示。
基於掩碼的中文多音字消歧模型
字符級別的特征嵌入層(Character-Level Feature Embedding)
這里似乎沒有什么可說的,主要是先將各種類別的特征先轉換為One-hot,然后利用前饋網絡(Feedforward Neural Network,FNN)映射為低維稠密嵌入向量。但是這里有個問題,中文漢字做One-hot然后接前饋網絡,這個參數是不是有點多;此外,掩碼向量怎么映射為One-hot,是不是掩碼向量直接就接前饋網絡就行。之后不同特征的嵌入向量進行拼接,然后利用多層前饋網絡(Multi-layers Feedforward Neural Network,MFNN)映射為固定長度的向量。
上下文特征編碼層(Context Feature Encoding Layer)
上下文特征編碼層輸入字符級別的特征嵌入層生成的向量,通過BLSTM和一維卷積提取語義級別的信息,之后利用前饋網絡將獲取的上下文向量壓縮到稠密向量中,表征在句子中的每一個字符。需要長距離上下文的情況下,BLSTM是一種抽取句子級別信息的有效方式。一維卷積是抽取n-gram(n元語法)特征的關鍵方法,對多音字消歧任務比較重要。
受限輸出層(Restricted Output Layer)
為了限制輸入多音字的候選讀音,首先輸出層利用掩碼向量和加權Softmax去選取最高概率的讀音。此外,提出的模型使用修改焦點損失(Modified Focal loss)而非交叉熵作為損失函數。
加權Softmax
對於每個多音字的候選讀音集合,實際上僅占整個拼音集合很小的一部分。而Softmax會給每一個拼音分配一個非0概率,這就會導致概率值分布會非常發散,從而對整個訓練產生負面影響。因此,在該文中使用加權Softmax,並且將掩碼向量作為加權Softmax的加權權重。
假設Softmax函數的輸入為\(V={v_1,v_2,...,v_n}\),其中\(v_i\)表示向量\(V\)的第\(i\)個元素;輸入的掩碼向量記作\(M={m_1,m_2,...,m_n}\),其中\(m_i\)是布爾值,表示是否掩蔽元素\(v_i\)。則對於每個元素的概率值計算方法如下:
通過加權Softmax可以在計算概率值的時候,排除掉特定多音字的非候選讀音。在訓練的時候,加權Softmax也可以讓模型更集中精力關注多音字的候選讀音,而非整體的拼音集合。
修改焦點損失(Modified Focal Loss)
由於拼音出現頻次的不平衡性,會導致模型過多關注常常出現的拼音,而忽視那些稀有和難以分類的樣例,從而降低模型的表現。因此該文提出了一種修改版的焦點損失(Modified Focal Loss,MFL),設置一個閾值\(\alpha\)判斷一個樣本是大量或者容易分類的樣本,還是一個困難而稀有的拼音,對前者降權,而對后者加權,從而使得模型更加關注難以標注讀音的樣本。
原始的焦點損失(Focal Loss)如下:
其中\(p_t\)表示模型對真實標簽的預測概率,值域為\([0,1]\);\(\gamma\)為超參數,值域為\((0,+\infty)\)。
本文提出的修改版的焦點損失(Modified Focal Loss,MFL)如下:
其中,\(\alpha\)為可調的置信參數,值域為\((0.0,1.0)\)。當模型對真實讀音的預測概率大於\(\alpha\)時,就認為該輸入多音字是容易分類的,那么該樣本對於整體損失的貢獻將會降低,否則會增大整體損失。
實驗
數據集
使用的好像是標貝內部的多音字數據集,有692,357句話,每句話至少有一個多音字,訓練集和測試集比例大約9:1。
模型結構和結果
-
BLSTM。雙向LSTM的層數設置為2,隱層大小設置為512.
-
B-CNN。雙向LSTM和CNN層數都設置為2,隱層大小設置為512。CNN的卷積核數設置為64,步長設置為64.
-
BC-W。和2相同,但是使用了加權Softmax。
-
BC-F。和3相同,但是應用了修改焦點損失,且\(\gamma\)設置為0.7.
-
BC-WM。和3相同,但是使用了加權Softmax。超參數\(\alpha\)設置為0.5,\(\gamma\)設置為0.7。
多音字正確率如下。
如上表所示,系統5的正確率最高。
Enhancing Sequence-to-Sequence Text-to-Speech with Morphology
摘要
本篇文章主要是給出了一個結論:使用語素(morphology)邊界可以顯著提升語音合成的質量。相比於不加入邊界的音素輸入,向原始文本中加入語素邊界后,合成的語音質量更好。並且由於語素分割任務較為簡單,而且分割准確率較高,因此這個簡單的預處理步驟,在語音合成的序列到序列建模領域有較大潛力。
簡介
語素/形態學(Morphology)
在一些詞典中會指明語素,比如Unisyn[1]和Combilex[2]。
[1] S. Fitt, “Unisyn lexicon,” 2020. [Online]. Available: http://www.cstr.ed.ac.uk/projects/unisyn/
[2] S. Fitt and K. Richmond, “Redundancy and productivity in the speech technology lexicon - can we do better?” in Proc. Interspeech. ISCA, 2006, pp. 1202–1204.
在Unisyn中直接標明了語素邊界,比如單詞unanswered
有前綴<un-
,詞根{answer}
和后綴-ed>
,因此字母和語素條目就會被記作<un<{answer}>ed>
。
如下表是論文中輸入到Tacotron的幾種形式,以potholes
為例。
加入語素邊界的動機在於,以coathanger
為例,包含兩個子詞單元th
、ng
,這兩個子詞單元的發音和there
中的th,range
中的ng就不同。而語素邊界原則上可以幫助解決英語拼寫引起的某些發音歧義:子詞單元th
在{coat}{hang}>er>
表示的含義要明顯比coathanger
更清楚一些。
關於如何獲得這些詞素邊界,該論文並沒有討論。之前也提到Unisyn提供了語素信息,對於集外詞(Out-Of-Vocabulary,OOV),可以通過一些模型[3]獲得詞素邊界。
[3] M. Bikmetova and K. Richmond, “Neural network modelling of grapheme-to-phoneme transformations: automatic morphological analysis,” Bulletin of UGATU, vol. 84, no. 2, pp. 121–126, 2019.
評測結果
MUSHRA試聽評測結果上看,輸入語素邊界的模型(橫軸帶有M
標識的模型)所生成的語音要明顯好一些。