這篇論文在神經網絡 採用編碼-解碼RNN 做端到端的機器翻譯的基礎上,使得模型可以在預測下一個詞的時候,自動地選擇原句子相關的部分作爲解碼的輸入,這也是後來被提爲attention機制的內容。
原論文鏈接: Neural Machine Translation by Jointly Learning to Align and Translate
最近開始研究端到端語音合成,由於Attention機制在端到端的語音合成以及識別中的廣泛應用,找到了這篇最早提出Attention概念的機器翻譯論文。相關的論文原本準備自己翻譯,看到網上已經有翻譯的比較好的版本,
故轉載於此,僅作重新排版和細節修改。 翻譯原地址:https://my.oschina.net/stephenyng/blog/1631754
摘要
語音克隆是個性化語音接口的一項備受期待的能力。基於神經網絡的語音合成已經顯示能爲大量說話人生成高質量的語音。在本文中,我們介紹了一個神經語音克隆系統,將少量音頻樣本作爲輸入。我們研究了兩種方法:說話人自適應和說話人嵌入。說話人自適應基於在一個多說話人生成模型上,使用少量克隆樣本進行微調。說話人嵌入基於訓練一個單獨的模型以直接由克隆音頻推斷新的說話人,這在一個多說話人生成模型中被使用。就語音的自然度及其與原始說話人的相似度而言,即使只有非常少的克隆音頻,這兩種方法都可以實現良好的性能(克隆音頻樣本位於https://audiodemos.github.io)。儘管說話人自適應可以實現更好的自然度和相似度,說話人嵌入方法的克隆時間或所需存儲明顯更少,使其有利於低資源部署。
1. 介紹
基於深度學習的生成模型已成功應用於許多領域,如圖像合成(van den Oord et al., 2016; Karras et al., 2017),音頻合成(Wang et al., 2017; Engel et al., 2017; Arik et al.,
2017a),和語言建模(Jozefowicz et al., 2016; Merity et al., 2017)。深度神經網絡能夠對複雜的數據分佈進行建模,並且可以很好地擴展大型訓練數據。它們可以進一步以外部輸入爲條件來控制高級行爲,例如指示生成樣本的內容和風格。
對於語音合成,生成模型可以用文本(Wang et al., 2017)和說話人身份來訓練(Arik et al., 2017b; Ping et al., 2017)。雖然文本攜帶語言信息並控制所生成語音的內容,但是說話人表徵捕獲說話人的特徵,例如音調範圍,語速和重音。一種多說話人語音合成的方法是用三元組(文本,音頻,說話人身份)聯合訓練生成模型和說話人嵌入(Arik et al., 2017b; Ping et al., 2017)。所有說話人的嵌入都是隨機初始化,並以生成性損失來訓練的。該想法是以低維嵌入對說話人相關信息進行編碼,同時對於所有說話人共享大多數模型參數。這種模型的一個限制是它只能爲訓練中觀察到的說話人生成語音。一個更有趣的任務是少量語音樣本中學習未知說話人的聲音,這也被稱爲語音克隆。語音克隆可用於許多支持語音的應用程序,以提供個性化的用戶體驗。
在這項工作中,我們專注於未知說話人的有限語音樣本的語音克隆,這也可以在語音的小樣本生成建模的背景下考慮。對於大量樣本,可以從頭開始爲任意目標說話人訓練生成模型。然而,除了具有吸引力外,小樣本生成建模還具有挑戰性。生成模型需要從少量音頻樣本提供的有限信息中學習說話人特徵,並泛化至未知文本。我們利用最近提出的端到端神經語音合成方法(Wang et al., 2017; Ping et al., 2017)探索語音克隆方法,該合成方法應用了帶注意力機制的序列到序列建模。在神經語音合成中,編碼器將文本轉換爲隱藏表徵,並且解碼器以自迴歸方式估計語音的時頻表徵。與傳統的單元選擇語音合成(Sagisaka et al., 1992)和統計參數語音合成(Zen et al., 2009)相比,神經語音合成具有更簡單的流水線併產生更自然的語音(Shen et al., 2017b)。
端到端多說話人語音合成模型通常通過生成模型的權重和說話人嵌入查找表來參數化,其中後者應帶有說話人特性。這項工作中,我們研究了兩個問題。首先,說話人嵌入能夠在多大程度上捕捉說話人之間的差異?然後,僅僅由未知說話人的少量樣本,說話人嵌入能學習地多好?我們比較了兩種語音克隆方法:(i)說話人自適應和(ii)說話人嵌入,在語音自然度,說話人相似度,克隆/推斷時間和模型足跡方面。
2. 語音克隆
我們考慮一個多說話人生成模型 ,其中文本 ,說話人身份 。模型中的可訓練參數由 參數化, 表示爲關於 的可訓練說話人嵌入。 和 都由最小化損失函數 來優化,損失函數懲罰生成和真實標定音頻之間的差異(例如,譜圖的迴歸損失): 其中, 是說話人集合, 是說話人 的文本-音頻對訓練集, 是說話人 的文本 對應地真實標定音頻。通過所有訓練發言人的文本音頻對來估計期望。在實踐中,損失函數的 算子通過minibatch來近似。我們使用 和 來表示訓練參數和嵌入。
說話人嵌入已經顯示能有效地捕獲多說話人語音合成中的說話人差異。它們是說話人特徵的低維連續表徵(Arik et al., 2017b; Ping et al., 2017)。儘管使用純粹的生成性損失進行訓練,但在嵌入空間中確實可以觀察到判別式屬性(例如,性別或口音)。
語音克隆的目的是從一組克隆音頻 中提取未知說話人 的說話人特徵,以便爲該說話人生成基於給定文本的不同音頻。生成音頻的兩個性能指標是(i)音頻的自然度,以及(ii)它是否聽起來是由同一個說話人發音的。
神經語音克隆的兩種方法總結在圖1中,並在以下部分中進行了解釋。
2.1 說話人自適應
說話人自適應的想法是通過應用梯度下降,使用少量音頻和相應的文本,來爲未知說話人微調訓練的多說話人模型。微調可用於說話人嵌入(Taigman et al., 2017)或者整個模型。對於僅作用於嵌入的自適應,我們有以下目標:
在編碼器-解碼器框架中,編碼器讀入輸入句子,它是一個向量序列x = (x1, … , ),將其轉換成一個向量c【儘管大多數之前的工作(例如:Cho et al., 2014a; Sutskever et al., 2014; Kalchbrenner and Blunsom, 2013)都把一個變長輸入句子編碼成一個定長向量,其實並不是必須的,甚至如果編碼成變長向量會更好,我們會稍後展示】。實現這一任務的最普通的方法是使用RNN,使得:
其中, 屬於n維實數空間,是t時刻的隱藏狀態,c是由所有隱藏狀態生成的向量,f和q是非線性函數。例如,Sutskever et al. (2014) 使用一個LSTM作爲f,並令 。
解碼器被訓練用來在給定上下文向量c和所有之前的已預測詞 的情況下,預測下一個單詞 ,換句話說,解碼器通過把聯合概率分解成一系列條件概率,定義了翻譯結果y的概率p:
其中 。在RNN中每個條件概率被建模爲:
其中g是一個多層非線性函數,用以輸出 的條件概率; 是RNN的隱藏狀態。請注意解碼器也可以使用如RNN和反捲積神經網絡的混合體(Kalchbrenner and Blunsom, 2013)等其他架構。
3. 學習對齊和翻譯
在這一部分,我們提出一個全新的神經機器翻譯架構。這個新架構包含一個雙向RNN作爲編碼器(參照3.2),和一個在翻譯過程中對源句子進行仿真搜索的解碼器(參照3.1)。
3.1 解碼器: 概要描述
在新模型架構中,我們定義公式(2)中的條件概率爲:
其中 是i時刻RNN的隱藏狀態,其計算公式爲:
請注意既存的編碼器-解碼器方法(公式(2))中,每個單詞使用的概率條件是相同的上下文向量c,而這裏使用的概率條件是特定於每個目標單詞 的不同的上下文向量 。
上下文向量 依賴於由編碼器從輸入句子中映射過來的標註序列 ,其中的每一個標註 都包含了輸入句子的整體信息,並對輸入句子中的第i個單詞的附近部分給予了強烈關注。我們在3.2節詳細解釋如何計算這些標註。
然後對標註 進行加權求和得到上下文向量 :
標註 的對應權重 的計算方法:
其中:
是一個對齊模型,它評價了輸入句子的第j個單詞附近的信息,在多大程度上與翻譯輸出的第i個單詞相匹配。對齊模型的評價得分依賴於RNN隱藏狀態 (恰在輸出 之前的狀態,參考公式(4))和輸入句子的第j個標註 。
我們將對齊模型 參數化爲一個前饋神經網絡,它同系統的其他組件一起進行聯合訓練。注意不像傳統機器翻譯那樣作爲一個隱變量,這裏的對齊模型直接計算一個軟對齊,這使得損失函數的梯度可以向後傳播,因此對齊模型可以同整個翻譯模型一起進行聯合訓練。
對所有標註加權求和的操作,我們可以理解成計算一個期望標註,這裏的期望是指對齊的概率在標註序列上的分佈。設 是目標單詞 和源單詞 的對齊或翻譯概率,那麼第i個上下文向量 就是給定所有標註和他們各自對應概率 情況下的期望標註。(譯者注: 的意義就是統計了第i個目標單詞與原始序列中的每個詞,以及每個詞附近的信息,如何發生關係,在多大程度上有關係,這就是第i個目標單詞在原始序列中的上下文,恰好詮釋了上下文這個概念。)
概率 ,或者其關聯的能量 ,反映了在給定前一個隱藏狀態 的情況下,在決策下一個隱藏狀態 和生成下一個目標單詞 的時候,標註 有多重要。直覺上,這是在解碼器中實現了一個注意力機制,解碼器可以決定應該關注源句子中的哪些部分。傳統的編碼器不得不將源句子的所有信息編碼到定長向量中,我們通過讓解碼器擁有注意力機制,把編碼器從這種負擔中解脫了出來。這個新方法使得信息散佈在標註序列中,在後續處理中解碼器可以從標註序列中選擇性的獲取信息。
3.2 編碼器:雙向RNN生成標註序列
公式(1)描述的通常的RNN,從輸入序列X的第一個字符 順序讀入,直到最後一個字符 。在我們提出的結構中,在每個單詞的標註信息中,不僅要歸納前面單詞的信息,還要歸納後面單詞的信息,因此我們提議使用最近在語音識別(例如 Graves et al., 2013)中成功應用的雙向RNN(BiRNN, Schuster and Paliwal, 1997)。
一個BiRNN包含一個前向和一個後向RNN。前向RNN 按照輸入序列的順序讀取(從 到 ),同時計算前向隱藏狀態序列( , … , )。而後向RNN 逆序讀取輸入序列(從 到 ),同時計算後向隱藏狀態序列( , … , )
對每個單詞 ,通過拼接前向隱藏狀態 和後向隱藏狀態 ,我們得到標註: 。這樣一來,標註 就同時包含了前後兩個方向的單詞信息。由於RNN傾向於對最近的輸入有更好的表達,標註 將會聚焦於 附近的單詞。這些標註組成的序列被後面的解碼器和對齊模型用來計算上下文向量(公式(5)–(6))。
圖1展示了我們提出的模型。
4. 實驗設定
我們在英法翻譯任務上,使用ACL WMT ’14 (http://www.statmt.org/wmt14/translation-task.html)提供的雙語平行語料驗證我們提出的方法。作爲比較,我們對最近由Cho et al. (2014a)提出的RNN編碼器-解碼器模型也做了一個性能報告。在兩個模型上我們使用同樣的訓練步驟和同樣的數據集(模型實現在這裏:https://github.com/lisa-groundhog/GroundHog)。
4.1 數據集
WMT ’14 數據集包含下面的英法平行語料: 歐洲議會(61M words),新聞評論(5.5M), 聯合國(421M) ,以及兩個大小分別是90M和272.5M的爬蟲語料,總計850M單詞。我們使用Cho et al. (2014a)中描述的步驟,使用Axelrod et al. (2011) (獲取網址: http://www-lium.univ-lemans.fr/˜schwenk/cslm_joint_paper/)提出的數據選取方法,將聯合語料大小縮減到348M。儘管可以使用大得多的單語言語料來預訓練編碼器,但是我們沒有使用前面提到的平行語料之外的任何單語言數據。我們把數據集WMT ’14中的news-test-2012 和news-test-2013拼接在一起作爲開發(驗證)數據集,並在測試集news-test-2014上做模型評估,其包含了不在訓練數據中的3003個句子。
經過常規的分詞(我們使用開源的機器翻譯包Moses中的分詞腳本),我們使用每種語言中的前30000個高頻詞來訓練模型,任何沒有出現在這個名單中的詞都被映射爲一個特殊的詞([UNK])。在此之外,我們沒有對數據做任何其他特殊預處理,如小寫轉換或詞幹提取等。
4.2 模型
我們訓練兩個模型,一個是RNN編碼器-解碼器模型(RNNencdec, Cho et al., 2014a),另一個是我們提出的模型,稱它爲RNNsearch。我們對每個模型訓練兩次:第一次使用長度不大於30的句子(RNNencdec-30, RNNsearch-30)訓練,第二次使用長度不大於50的句子訓練(RNNencdec-50, RNNsearch-50)。
RNNencdec的編碼器和解碼器各自包含1000個隱藏單元【在這篇論文中,提到“隱藏單元”我們是指門控隱藏單元(參照附錄A.1.1)】。RNNsearch的編碼器由前向RNN和後向RNN構成,分別包含1000個隱藏單元,RNNsearch的解碼器也包含1000個隱藏單元。兩個模型都使用多層網絡,後接一個單層maxout (Goodfellow et al., 2013)隱層來計算每個目標單詞的條件概率(Pascanu et al., 2014)。
我們使用minibatch隨機梯度下降算法,並使用Adadelta (Zeiler, 2012)優化算法來訓練每個模型,每次梯度更新使用80個句子作爲minibatch,每個模型我們訓練了大概5天。
一旦模型訓練完畢,我們使用集束搜索(beam search)方法找到使得條件概率最大化的翻譯結果(例如Graves, 2012; Boulanger-Lewandowski et al., 2013)。Sutskever et al. (2014)在他們的神經機器翻譯模型中使用了此方法來生成翻譯結果。
實驗中使用的更多模型架構和訓練過程的細節,請參照附錄A和B。
5. 結果
5.1 定量結果
在表1中我們列出了翻譯性能的BLEU得分。很明顯在各種情況下RNNsearch都比傳統的RNNencdec優秀,更重要的是,當我們用只包含認識單詞的句子評估我們提出的模型時,其性能與傳統的基於短語的翻譯系統(Moses)一樣好。這是一個重要的成就,考慮到Moses除了我們使用的平行語料外,還使用了額外的單語言語料(418M單詞)。
我們提出這個方法的背後動機之一就是,基本的編碼器-解碼器方法中的定長上下文向量可能會帶來限制。我們推測這種限制使得基本編碼器-解碼器方法在處理長句子時表現不佳。在圖2中,我們看到當句子長度增加時RNNencdec的性能急劇下降,另一方面,RNNsearch-30和RNNsearch-50對句子長度更魯棒,特別是RNNsearch-50,即使句子長度達到甚至超過50仍然沒有性能惡化。表1中可以看到RNNsearch-30要比RNNencdec-50的性能還要好,這使我們提出的模型相對於基本編碼器-解碼器模型的優勢得到了進一步確認。
5.2 定性分析
5.2.1 對齊
我們提出的方法提供了一個直觀的方式來觀察翻譯結果和源句子單詞之間的(軟)對齊,這是通過對公式(6)中的標註權重 進行可視化來實現,如圖3所示。每個圖中的矩陣的每一行表明了與標註關聯的權重。通過這個圖我們可以看到源句子中哪些位置在生成翻譯目標單詞時更重要。
我們可以從圖3的對齊中看出,英語和法語之間的單詞對齊大致是單調性的,我們可以看到矩陣對角線上的權重最強。但是,也可以發現一些非平凡的,非單調的對齊。通常形容詞和名詞在法語和英語中的順序是不同的,圖3(a)中有一個這樣的例子,圖中顯示模型正確地將短語[European Economic Area]翻譯成了[zone ´economique europ´een]。RNNSearch模型能夠跳過兩個單詞([European] and [Economic]),正確的將法語的zone和英語的area對齊,然後每次再回退一個詞來完成整個短語[zone ´economique europ´een]。
與硬對齊相比,軟對齊的優勢是明顯的,比如圖3(d),源短語[the man]被翻譯成了[l’ homme],所有的硬對齊會把[the]對應到[l’],把[man]對應到[homme],但這樣的對應無助於翻譯,因爲你必須[the]後面跟了什麼單詞才能決定[the]應該被翻譯成[le], [la], [les] 還是 [l’]。我們的軟對齊方法通過讓模型同時關注[the]和[man],從而自然而然的解決了這個問題,所以在這個例子中,我們看到模型正確地將[the]翻譯成了[l’]。類似的結果可以在圖3的所有例子中看到。軟對齊的一個額外的好處是,它能夠順理成章地應對源句和目標句之間的長度差異,不需要以一種違反直覺的方式將某些單詞與 ([NULL])對應起來(例如Koehn, 2010的第4,5章)。
5.5.2 長句子
可以清楚地從圖2看到,在翻譯長句子時,提出的模型(RNNsearch)比傳統模型(RNNencdec)要好得多。這可能是由於RNNsearch不需要完美地將長句子編碼成定長向量,只需要準確編碼輸入句子圍繞特定單詞的部分。
例如,考慮測試集中的這個源句:
RNNencdec-50將這句話翻譯成: