摘要:同一說話內容每次都可能有差別,不同說話人同一句話聲波的能量採集點相似度可能比較高,正樣本數量的增加也會帶來計算量的激增,說話的音頻數據中可能摻雜背景噪音,降低了特徵的表徵能力,所以需要進一步的處理。原因可能是屬於每個說話人的音頻時長不夠,使用單人聲紋模型中的音頻過濾方式,屬於每個人的音頻時長平均3分鐘,如圖下圖:。

導語

本文介紹58二手車使用聲紋技術騷擾電話甄別方面所做的一些探索、應用和實踐,希望對大家有所幫助和啓發。

背景

二手車作爲主要車輛信息發佈平臺,線上看車是大家瞭解二手車行情的一個重要渠道。隨着二手車在線帖子數量的不斷增長和用戶量不斷增加,大量在線展示電話數據就成了泄露個人信息一個切口,爲保護用戶的隱私電話,二手車技術團隊自研了一套電話轉接系統,用轉接號碼替換用戶真實電話。隨着技術更新迭代,電銷機器人的出現,爲客服工作節省人力成本的同時,以爲我們平臺帶來一些煩惱。這種利用機器合成或是人工錄音方式,通過批量電話,低成本的獲取用戶真實號碼,多數用戶在不知情的情況下把信息泄露了。我們還發現同一個用戶會在一段時間內連續接到這類電話,可能用戶會使對我們平臺產生不信任感,影響二手車平臺的價值輸出。爲了應對這類問題,二手車技術團隊自主研發聲紋識別工具,對電銷號碼進行攔截,保護用戶信息。

系統介紹

語音識別與聲紋識別有相似的之處,都是對採集到的聲音信號做處理,提取特徵並建立模型,然後做出判斷。不同的是聲紋識別目的是識別出說話人的身份,是一種生物特徵的識別。半固定文本,SV(Speaker Verification)判斷,確認某段語音是否是指定的某個人所說的,是“一對一判別”問題。
人在講話時使用的發聲器官在尺寸和形態方面每個人的差異很大,所以任何兩個人的聲紋圖譜都有差異,主要體現在:共鳴方式特徵、嗓音純度特徵、平均音高特徵和音域特徵。
不同人的聲音在語譜圖中共振峯的分佈情況不同,聲紋識別正是通過比對兩段語音的說話人在相同音素上的發聲來判斷是否爲同一個人。

圖1(聲譜圖)

我們遇到的問題是,一批電銷號碼使用相同錄音,接通電話後使用設定好的錄音問題與用戶進行對話,進而向用戶索要個人電話號碼,這時不知情的用戶可能就會把電話暴露給對方了。這些主叫號碼在話單中出現次數並無規律,使用統計較難找出多數的電銷號碼,也有一定的誤判概率,統計結果的每一段錄音需要人去聽,完成這項工作的成本較高,也有較大時間滯後性。
我們使用人工加機器學習的方式提升攔截效率和攔截量,同時降低誤判率。人工統計發現問題電話,用這種方式選取訓練用的語料錄音,用深度學習生成分類模型,用於判斷電話錄音是否是問題電話,如果符合問題電話特徵,講主叫號碼放入黑名單,用於呼入攔截判斷。目前的流程屬於後置判斷,通過對已有電話錄音的分析,判斷主叫電話是否應該被攔截。如果發現新錄音,再循環上述流程。
我們研發的聲紋識別工具有三部分組成:
模型文件系統,存儲不同階段獲得的模型,進行模型訓練。
API,對外提供識別能力的接口,識別結果作爲人工標記部分的輸入。
人工標記,把未識別(識別結果是-1)或識別錯誤(與統計結果不符)的數據進行人工標記。

圖2(系統構成圖)

模型訓練數據來源是電話錄音。運營商提供的電話錄音已經進行了左右聲道分離,這裏只使用主叫部分的語音,也就是右聲道的音頻數據。
音頻數據處理過程:
格式轉換,mp3轉wav,方便聲道提取等後續操作;
提取右聲道;
音頻分段,根據語音中的停頓部分,把一段較長語音分成多個小段,這裏是爲了減少每個batchsize的數據量,我們採用的閾值下限是700ms,小於這個下限的部分會合並的下一段中;
過濾靜音部分,這裏對上一步的小段音頻做一次VAD操作,把音頻中無聲的部分過濾掉,因爲這部分數據會影響模型判斷精度,大概率造成過擬合。VAD效果如下圖:

圖3(VAD前後波形對比圖)

右側是原數據,左側是VAD後。
最後輸出的音頻長度控制在15s內(經驗值)。
預訓練集數據規模:訓練數據集1213條原始錄音數據,分段後總時長約2300分鐘;測試集1997條。
人工標記的新增訓練數據處理方式與上述步驟一樣。
預測數據的處理類似,不同的是隻取一個段音頻用於識別。因爲一定電話錄音開始和結束的話術很相近,例如:“喂,你好!”、“再見!”、“byebye.”等,這裏選取順序在中間位置的音頻段,這樣能進一步防止過擬合。
獲取音頻特徵,我們選用MFCC(Mel Frequency Cepstrum Coefficient),計算量可接受的情況下較好的提取語音中的頻率特徵,尤其是MFCC的預加重處理能較好的保留高頻信息和DCT在保證特徵量的同時減少計算量。提取音頻特性濾波組由26個濾波器組成(一組通常取20~40個三角濾波器組
),對音頻能量信號信息濾波處理,對得到能量值取對數、進行DCT,得到26個倒譜系數,保留2~13這12個係數,其它係數都接近於0,這裏就都忽略了,再把能量也加入到特徵中,得到音頻的13階特徵,抽取13階特徵的一階差值和二階差值,一共是39維特徵。有些聲紋識別的場景,直接用這裏獲取的特徵就能獲取不錯的效果,例如歌曲識別。
整個處理過程如下:

但是在說話人識別上,並不能滿足需要。同一說話內容每次都可能有差別,不同說話人同一句話聲波的能量採集點相似度可能比較高,正樣本數量的增加也會帶來計算量的激增,說話的音頻數據中可能摻雜背景噪音,降低了特徵的表徵能力,所以需要進一步的處理。
下面兩個圖取自同一聲音的不斷兩端錄音生成的聲譜圖(同一人不同時序上的波形差異):

圖4(來自訓練集聲譜圖)

不同時刻共振峯有着明顯的差異,有足夠的表徵力,用其建立模型,應該能達到不錯的擬合效果。
語音的前後發音具有較強關聯性能,這能表徵一個人的說話習慣;語音內容的上下文之間也有很強的相關性,這些特性與文本識別的場景相似。借鑑文本識別中用到的RNN模型,我們也使用了屬於RNN模型的LSTM模型。LSTM對有時序性的數據有較好表徵能力,同時利用LSTM中的Forget gate減少計算過程中噪聲信息的傳遞,很適合利用LSTM的優勢來提取特徵。LSTM每次循環都會帶有一定權重的上一級特徵,契合了語音具有的特性。
有些時候預測可能需要由前面若干輸入和後面若干輸入共同決定,這樣會更加準確。雙向LSTM在Forward層從1時刻到t時刻正向計算一遍,得到並保存每個時刻向前隱含層的輸出。在Backward層沿着時刻t到時刻1反向計算一遍,得到並保存每個時刻向後隱含層的輸出。我們使用雙向LSTM搭建瞭如下神經網絡。
整體網絡結構如下圖:

圖5(網絡結構圖)

幾輪訓練之後得到0.96的準確率,在測試集上也能有超過0.8的準確率。

兩層雙向LSTM模型,sigmoid激活函數,batch_size=16, epochs=1000,訓練時長大約8小時(GPU RTX2070 8G),模型700M。

線上數據測試,查準率0.65~0.85(選取7天線上錄音數據),識別率有較大波動。識別率不理想,查準率最壞的情況下與統計方式相當。原因分析,模型對正樣本數據覆蓋不全,有些具有明顯特徵的樣本數並沒有使用的訓練集中;負樣本數據量不夠也會造成模型的魯棒性下降。在後續的人工校對階段會逐漸完善。考慮到後續對分類數量的擴展,以及模型訓練的複雜度,我們很難大幅擴展對負樣本數據的覆蓋。

最差情有35%識別錯誤數據,假設識別集合有1000個錄音(實際情況小於這個數量),也就是350個錄音進行二次識別,這部分音頻從頻譜上看具有較高的相似度。

我們的設想是儘量保證接口的響應時間,所有在模型選擇上儘量使用計算量較小的模型。

我們計劃嘗試使用聚類的機器學習模型做一次再判斷。我們嘗試了GMM、ivector、PLDA等模型。ivector是基於GMM,從GMM均值超矢量中提取一個更緊湊的矢量,除了包含說話人空間信息還有信道空間信息;PLDA是基於ivector,對ivector的信道特徵補償算法。從實驗結果來看,三種方式的輸出結果相差無幾,因爲識別場景簡單,屬於二分類,錄音經過前面的音頻處理後,因爲是包含單人語音、較輕微的背景音,所以信道空間信息對應分類準確性的形象可忽略。

GMM模型本身的缺點是分類數量增加是,參數規模也會等比例的膨脹,需要更多的數據來驅動來提升通用(或稱泛化)能力,容易過擬合。使用GMM訓練獲得的模型魯棒性一般。

但是,針對我們的場景,GMM且是比較好的選擇。GMM多個高斯概率密度函數的加權和來擬合,可以平滑地逼近任意形狀的概率密度函數,是一種參數化的生成性模型,具備對實際數據極強的表徵力。

這裏只用做一種類型的判斷,能規避GMM缺點。同時,相比k-means,GMM能給出一個分值,需要自定義閾值判斷被歸類到簇的概率,對應結果設定具有一定靈活性。

GMM 的概率密度函數:

本例中,只需要一個Component,K=1,公式簡化成如下形式:

參數規模較小,只需要少量訓練數據既能達到不錯的擬合效果。
訓練樣本數量時長大約20分鐘(只有正樣本),訓練時間2分鐘左右(筆記本上訓練),模型大小:68K,判斷耗時:毫秒級,線上查準率提升至0.95~0.97。
使用LSTM和GMM混合方式,需要對兩種模型的判斷閾值最組合最優選擇。閾值影響到查全率與查準率通過模擬不同的閾值計算出查全率與查準率,統計結果,如圖下圖:

圖6(閾值對比圖)

可以大約估計GMM的閾值爲5的時候較好,但實驗總是要嚴謹,爲了得到更好的模型數據,我在此基礎上通過自動修改閾值來發現全局最優的閾值組合。
GMM閾值設置爲5,LSTM遞減的查全率與查準率的變化圖,從圖7可以看出來當LSTM閾值設置爲0.001的時候其查準率達到峯值。

圖7(LSTM遞減的查全率與查準率的變化圖)

LSTM閾值設置爲0.001,GMM閾值遞減的查全率與查準率的變化圖,從圖8可以看出GMM於是越高,查準率越高,當GMM小於5.4時,查準率呈線性下降。

圖8(GMM閾值遞減的查全率與查準率的變化圖)

從圖7與圖8可以看出,查全率跟查準率是一個矛盾的關係,如果要達到100%的準確率,就要承擔漏掉一部分機器人的結果,要找到兩者的平衡就得根據業務來定。看業務是偏向於哪個指標。以現有的數據來看,LSTM設置爲0.001,GMM閾值設置爲5.4的時候效果最佳。
效果統計,日均封堵100個主叫,從之前的400個話單,降爲200以內。之前限制每個月投訴數量,導致沒法投訴,在羣裏反饋問題較多。目前無限制,投訴率5%左右,線下投訴已轉移至線上,比例未變 。問題解決明顯,之前周均投訴量100左右,目前下降至10左右 。統計兩個月數據,如圖9 。

圖9(話單統計圖)

被攔截號碼產生的話單數量(N)與被攔截號碼量(M)比值(damage),該值越逼近1說明識別效果越好。

圖10(damage變化趨勢圖)

圖10看出,damage呈現下降趨勢
如果有多個錄音電話出現,這種方法就失效了,接下來進行了多人說話人識別方向探索。

多人聲紋模型

實際場景中,新分類的發現仍然使用傳統的統計加人工篩選的方式。解決這個問題需要實現對未標記的音頻進行分類,對屬於同一聲紋類型數據聚合,是我們現在探索的方向。

使用與單人聲紋識別類似的Embedding方式,過濾後的音頻文件通過MFCC輸入到LSTM網絡中,輸出embedding vectors。因爲是聚類,輸入的batch size有兩個維度組成說話人(speakers)和音頻(utterances),假設speakers是M、utterances是N,每個speaker都對應N個utterances,即batchsize=M*N。輸出的embedding vector使用L2 範數:

這裏表示第j個speaker的第i個utterance,所有第j個speaker的embedding vectors就可以寫成,使用來表示第j個speaker:

對輸入數據進行分類也就是求輸入數據與的相似度:

輸出相似度矩陣,流程如下圖:

圖11(GE2E系統架構,不同的顏色表示不同的說話者-圖源自論文《GENERALIZED END-TO-END LOSS FOR SPEAKER VERIFICATION》)

用一天全量有效數據做訓練集,訓練時間達9小時,收斂效果也不好。如下圖:

圖12-1(loss收斂曲線)

對初始學習率(learning rate)和均勻降低的係數進行調整,收效明顯,訓練時間縮短至5小時。調整batch size,獲得較好的loss收斂,如下圖:

圖12-2(loss收斂曲線)

測試中發現模型過擬合情況較爲嚴重,

例如,實驗輸入:

enroll_list= ['speaker1.npy', 'speaker2.npy', 'speaker1.npy', 'speaker3.npy']

verif_list= ['speaker3.npy', 'speaker1.npy', 'speaker2.npy', 'speaker4.npy']

實驗結果如下:

similarity matrix:

最外層表示每個verif speaker,內部矩陣每列表示一個enroll speaker,每列中的一個元素值表示verif speaker中順序位的utterance與這個enroll speaker相似度。只看第一個矩陣,預期的輸出應該只有最後一列是,單從輸出結果來看,第二列也可能被定爲相似,第一列相似度也較高,這顯然是不對的。

原因可能是屬於每個說話人的音頻時長不夠,使用單人聲紋模型中的音頻過濾方式,屬於每個人的音頻時長平均3分鐘,如圖下圖:

圖13(向量示意圖)

藍色、黃色和綠色三組點陣的centriol分別是cj、ck和ck’,計算與各個centriol的距離,由於各個點陣數據比較稀疏,可能造成與、相等而導致過擬合。

dvector直接用於多人識別,沒有達到可用層度,初略的分析原因可能有:

1、語料規模不夠。

2、一定量語料中有噪聲數據(彩鈴聲、語音提示音、靜音段等)。

接下來會在去除噪聲數據和模型選擇上做些嘗試。對比不同模型在實際業務場景中的識別率表現。

總結

說話人識別方法的整個探索過程中,從傅里葉變換到機器學習到神經網絡,使用先標記再識別的方式,在業務系統中有不錯的收效。接下來在多人聲紋識別方面繼續探索,用來減少人工標記的工作量,實現從單人識別->分組->建模->單人識別的閉環系統。

參考文獻

1、A tutorial on MFCCs for Automatic Speech Recognition
2、漫談 Clustering (3): Gaussian Mixture Model
3、Understanding LSTM Networks
4、GENERALIZED END-TO-END LOSS FOR SPEAKER VERIFICATION

作者簡介

穆文斌  58同城ABG資深研發工程師,負責二手車電話聲紋等NLP在二手車業務中的實踐與應用。
呂龍雲  58同城ABG資深研發工程師,負責二手車電話系統項目設計和研發。

閱讀推薦

SFF一站式node服務管理平臺實踐

ZLog數據服務實踐

分佈式場景下基於重試機制的一致性解決方案

房產基於Swoole的PHP RPC框架設計

應用AST技術實現自動化升級React 15至React 16的解決方案

深度文本表徵與深度文本聚類在小樣本場景中的探索與實踐

相關文章