用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

機器之心發表於2019-09-05

用 AI 打電話真的可以騙到錢?是的。而且,克隆指定人的語音只需要一段 5 秒的錄音做樣本。

用 AI 打一個電話騙走 22 萬歐元

AI 技術的應用門檻正在不斷降低,換臉、換聲音、生成各種不存在的人像都變得非常容易,但與此同時,犯罪的門檻也降低了。

據《華爾街日報》報導,今年 3 月份,一個不知名的黑客組織利用 AI 語音克隆技術打詐騙電話,結果成功騙到了 22 萬歐元。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

接電話的是英國能源公司的一名 CEO,在電話中,黑客冒充了該公司母公司董事長,催促該 CEO 緊急進行一筆大額轉賬,接收方是匈牙利的一家供應商。

黑客要求在 1 小時之內轉賬,而且他們成功地模仿了那位董事長夾雜德國口音的英語,於是該 CEO 信以為真,將錢打到了指定賬戶。

得逞之後,他們又聯絡該 CEO,以董事長的身份告訴他這筆錢會迴流到公司賬戶。

但在資金迴流之前,黑客再次冒充董事長打來電話,要求 CEO 再轉一筆錢,而且這次是從匈牙利打來的。此時,CEO 感覺事有蹊蹺,拒絕了轉賬要求。然而,之前轉給匈牙利供應商的那筆錢已經被轉移到了墨西哥和其它幾個地方。

警方現在還沒有找到犯罪嫌疑人,但所幸,為該公司承保的保險公司願意賠償。

克隆語音只需 5 秒的錄音樣本

隨著自然語言處理技術的進步,用 AI 合成特定人聲已經不是什麼難事。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

今年 5 月份,搜狗在一場大會上展示了變聲功能,可以把任何人的聲音轉化成特定聲音,讓你的聲音秒變志玲、馬雲、高曉鬆。

而谷歌的一項研究甚至可以藉助 5 秒鐘的參照語音克隆任意語音。

去年 6 月,谷歌科學家在 arXiv 上釋出了一篇遷移學習完成語音合成的論文,提出了一個名為 Speaker Verification to Multispeaker Text-To-Speech(簡稱 SV2TTS)的框架。它是一個用於零樣本(zero-shot)語音克隆的框架,只需要 5 秒鐘的參照語音。也就是說,如果你的錄音洩露出去,哪怕只有一小段,也很有可能會被壞人利用。

這項全新的語音合成技術能夠通任意一段參考音訊中提取出說話者的聲紋資訊,並生成與其相似度極高的合成語音,參考音訊與最終合成的語音甚至不必是同一種語言。除了利用參考音訊作為輸入外,該技術還能隨機生成虛擬的聲線,以「不存在的說話者」的聲音進行語音合成

近日,來自比利時列日大學的研究人員復現了該框架並開源了他們的實現,還提供 GitHub 開源工具箱。他們採用了一個新的聲碼器模型來調整框架,使其能夠實時執行。

  • GitHub 地址:https://github.com/CorentinJ/Real-Time-Voice-Cloning

  • 論文:https://puu.sh/DHgBg.pdf

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

當然,作者開源的目的肯定不是為了助長犯罪。技術都具有兩面性,我們能做的就是提高自己的隱私意識,不要輕易透露自己的各種資訊。

谷歌的 SV2TTS 是什麼?

SV2TTS 是一種三段式深度學習框架,允許人們從幾秒鐘的音訊中建立語音的數字表徵,文字轉語音模型使用數字表徵進行訓練並生成新的語音。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 7:推理過程中的 SV2TTS 框架。藍色方塊:改進的 Tacotron 架構能夠對語音進行調節。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 8:SV2TTS 的三段式訓練流程(根據研究實現)。具有實體輪廓線的模型被凍結。值得注意的是,模型使用不同的引數建立梅爾聲譜圖(mel spectrograms),作為揚聲器編碼器和聲音合成器的輸入。

揚聲器編碼器

揚聲器編碼器從單個揚聲器的短語音中獲得嵌入向量,該嵌入是揚聲器語音的意義表徵,而相似的語音在隱空間中接近。

模型架構

揚聲器編碼器模型是一個三層的 LSTM,有 768 個隱藏節點,之後是一個由 256 個單元的對映層。目前尚無論文解釋所謂的對映層是什麼,因此根據研究者的判斷,這種對映層只是全連線層,分別連線在每個 LSTM 層之後,接收上一個 LSTM 層的輸出。為了快速建模,研究人員剛開始使用了有 256 個單元的 LSTM。他們發現,更小模型的效果極好。目前他們尚無時間去訓練一個更大的模型。

揚聲器編碼器在揚聲器驗證任務上接受訓練。揚聲器驗證是一種典型的生物鑑定應用,通過鑑定人聲判定人的身份。通過從人的一些話語中獲取揚聲器嵌入,進而可以建立此人的模板。這個過程被稱為登入(enrollment)。在執行過程中,使用者說出一些話,並且系統會對這段話語的嵌入與已登入的揚聲器嵌入進行比較。如果兩個嵌入向量的相似度超過給定的閾值,則使用者驗證成功。GE2E loss 模擬這一過程,作為模型的目標函式

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 9:訓練期間構建相似度矩陣的過程。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 10:計算一段完整話語的嵌入向量。d-vector 是該揚聲器編碼器模型的非歸一化輸出。

實驗

為了避免從語音中取樣時出現基本無聲的音訊片段,研究者使用 webrtcvad Python 包執行語音活動檢測(VAD)。這將在音訊上產生一個二進位制標誌,用來表示片段有無聲音。他們在這個二進位制標誌上執行一個移動平均數,從而使檢測中的短峰值(short spike)趨於平滑,然後再次對其進行二值化。最後,他們擴充套件了核心大小為 s+1 的標誌,其中 s 表示所允許的最大沉默持續時間。之後,研究者對音訊的無聲部分進行修剪。結果發現,值 s =0.2s 時是一個好的選擇,能夠保持自然的語音韻律。具體過程如圖 11 所示。應用於音訊波形的最後一個預處理步驟是歸一化(normalization),用於彌補資料集中揚聲器產生的不同的音量。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 11:從上到下是利用 VAD 消除靜音的步驟。橙色線條代表二進位制語音標誌,軸上面的值表示有聲片段,軸下面的值表示無聲片段。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

表 2:揚聲器編碼器在不同資料集上的訓練。LS 表示 LibriSpeech,VC 表示 VoxCeleb。合成器在 LS-Clean 上進行訓練並在一個測試集上進行評估。「黑點」標註的行是研究者想要復現的實現物件。

合成器

合成器是移除了 Wavenet 的 Tacotron 2。研究者使用了 Tacotron 2 的一個開源 Tensorflow 實現,從中剝離 Wavenet 並新增了 SV2TTS。

模型架構

Tacotron 是一個迴圈的序列到序列模型,它能夠從文字中預測梅爾聲譜圖。Tacotron 是編碼器-解碼器結構(並非 SV2TTS 的揚聲器編碼器),中間由位置敏感的注意力機制連線。首先,輸入為文字序列,其中的字元首先轉換為嵌入向量。隨後嵌入向量通過卷積層,用於增加單個編碼器幀的範圍。通過卷積層之後的編碼器幀再通過雙向 LSTM,生成編碼器輸出幀。SV2TTS 對架構進行修改的地方在於,這裡由揚聲器嵌入幀級聯編碼器輸出幀,作為 Tacotron 編碼器的輸出。

注意力機制對編碼器輸出幀進行處理,以生成解碼器輸入幀。每個解碼器輸入幀和經過 pre-net 的前一個解碼器幀輸出級聯,使模型實現自迴歸。這個級聯向量通過兩個單向 LSTM 層,然後對映到梅爾聲圖譜幀。級聯向量同時對映到一個標量(scalar)上,使網路預測一個值,如果該值超過設定閾值,則停止生成。整個幀序列在轉換為梅爾聲譜圖前通過殘差 post-net 傳遞。體系架構如圖 15 所示:

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 15:修改版 Tacotron 架構。藍色方塊對應編碼器,橙色方塊對應解碼器。

實驗

在 SV2TTS 中,研究者考慮以兩個資料集來訓練合成器和聲碼器,它們分別是 LibriSpeech-Clean 和 VCTK(一個由專業裝置記錄的僅包含 109 位英語母語者的語料庫)。VCTK 資料集上的取樣率為 48kHz,實驗中降至 24kHz,但仍高於 LibriSpeech 資料集上的 16kHz 取樣率。研究者發現,就相似性來說,在 LibriSpeech 資料集上訓練的合成器生成效果優於 VCTK 資料集,但損失了語音自然度。他們的評估方法是在一個資料集上訓練合成器,在另一個資料集上測試。結果如表 3 所示:

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

表 3:對未見的揚聲器的生成聲音的自然度和與揚聲器相似性進行跨數據集評估。

資料集上語音片段長度的分佈如圖 16 所示。注意,無聲狀態持續時間為 64 小時(13.7%)。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 16:(左)LibriSpeech-Clean 資料集上話語持續時間直方圖;(中):無聲狀態打破後持續時間直方圖;(右)限制語音片段長度和重新調整後的持續時間直方圖。

雖然參考語音的「最佳」持續時間為 5 秒,但參考語音長度僅為 2 秒時,嵌入向量就可以顯示出意義,如表 4 所示。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

表 4:參考語音持續時間的影響。在 VCTK 資料集上進行評估。

研究者觀察到,該模型在非正式聽力測試中生成了正確輸出,但正式評估需要設定主觀分數投票(subjective score poll)來獲得主觀平均得分(MOS)。但對於合成器來說,人們還可以驗證注意力模組是否生成了正確的對齊方式。示例見圖 17:

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 17:(左)編碼器步驟和解碼器步驟之間的數軸對應;(右)GTA 預測聲譜圖和 ground truth 聲譜圖之間的比較。

通過計算合成語音的嵌入並利用 UMAP 將它們與 ground truth 嵌入共同對映,研究者能夠進一步觀察一些語音特徵隨 Griffin-Lim 演算法喪失。示例見圖 18:

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 18:ground truth 嵌入的對映以及由相同 ground truth 嵌入生成的 Griffin-Lim 演算法合成語音嵌入的對映Ground truth 嵌入用圓圈表示,合成嵌入用叉號表示。

聲碼器

在 SV2TTS 和 Tacotron2 中,WaveNet 是聲碼器。自推出以來,WaveNet 一直都是音訊深度學習的核心,並在 TTS 的語音自然性方面保持當前最優水平。但是,WaveNet 也是推理時速度最慢的實用型深度學習架構。之後的研究對這方面進行了改進,使生成速度接近或快於實時速度,生成語音的質量則幾乎沒有影響。儘管如此,WaveNet 在 SV2TTS 中依然作為聲碼器,因為速度不是主要的考慮因素,並且 Google 自己的 WaveNet 實現進行了各種改進,每秒鐘能夠生成 8,000 個樣本。這與 Vanilla WaveNet 形成對比,後者每秒最多能夠生成 172 個步驟。在撰寫本文時,WaveNet 的大多數開源實現依然是 Vanilla 實現。

模型架構

在 WaveRNN 中,WaveNet 的全部 60 個卷積被一個 GRU 層替代。WaveNet 的 MOS 值為 4.51 ± 0.08,而最佳的 WaveRNN 模型的 MOS 值為 4.48 ± 0.07。模型輸入的是由合成器生成的 GTA met 聲譜圖,以 ground truth 音訊為目標。模型在訓練時預測固定大小的波形片段。在粗精方案(coarse-fine scheme)中,WaveRNN 的前向傳遞通過 N = 5 的矩陣向量乘積來實現,其中首先對 16 位目標樣本的較低 8 位(粗)進行預測,然後據此對較高 8 位(精)的預測進行調整。預測包含對輸出進行取樣的分佈引數

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 19:張量的批取樣。注意,摺疊張量在兩段的交接處出現重疊。

備選的 WaveRNN 是研究者所使用的架構。由於該架構缺少相關文件或論文,研究者依賴原始碼和圖 20 中的圖表來理解其內部執行原理。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 20:備選的 WaveRNN 架構。

實驗

在處理短話語時,聲碼器的執行速度通常低於實時速度。推理速度高度依賴於批取樣過程中的摺疊次數。事實上,就摺疊次數而言,聲碼器網路幾乎是在恆定時間內執行,並且隨著摺疊次數的增加,時間只有少量增加。研究者發現討論閾值持續時間更加簡單,超過該閾值持續時間則模型實時執行。研究者設定的閾值持續時間為 12.5 秒,意味著如果話語短於該閾值,則模型的執行速度將慢於實時速度。在 PyTorch 上,模型效能似乎出人意料地隨環境因素(如作業系統)而變化,所以研究者展示了單個相同配置下的結果。

工具箱和開源

最後,研究者正在開發出一個圖形介面,使用者不需要率先進行研究即可以快速獲取該框架。他們稱之為「SV2TTS 工具箱」,其介面如圖 21 所示。SV2TTS 工具箱使用 Python 語言編寫,具有 Qt4 影像介面,可跨平臺。

用AI打個電話騙走22萬歐元,克隆你的語音只需5秒錄音

圖 21:SV2TTS 工具箱介面。

相關文章