上圖是端對端的深度學習訓練和推理過程。對比傳統聲紋識別模型,我們的模型在實際使用中優勢明顯,在用戶遠程身份驗證場景,通過注冊用戶說一段話,即可輕松快速的確認注冊用戶身份,識別準確率達到95%以上,秒級響應,實時聲紋核身。下面簡要介紹我們模型的特點。

2.0 度量學習

實驗發現,在聲紋識別中采用softmax進行網絡訓練 ,用余弦相似度的測試性能往往不如傳統聲紋識別模型,尤其是在魯棒性上。分析發現[6]基于softmax的分類訓練,為了得到更小的loss,優化器會增大一些easy samples的L2 length,減小hard examples 的L2 length,導致這些樣本并沒有充分學習,特征呈現放射狀,以MNIST識別任務為例,基于softmax學到的特征分布如圖3(a)所示. 同類別特征分布并不聚攏,在L2 長度上拉長,呈放射狀,且每個類別的間距并不大,在verification的任務中,會導致相鄰的兩個類別得分很高。

為了達到類內聚攏,類間分散的效果,我們研究了在圖像領域中應用較為成功的幾種softmax變種,包括AM-softmax[4],arcsoftmax[5]等,從圖3(b)可以看到,基于margin的softmax,相比純softmax,類間的分散程度更大,且類內特征更聚攏,對聲紋1:1比對和1:N搜索的任務友好。

2.1 噪音魯棒性

在特征提取時,對于簡單加性噪音,我們提出了基于功率譜減法,實現噪音抑制;對于其他復雜噪音,我們提出了基于降噪自動編碼器的噪音補償模型,將帶噪語音特征映射到干凈語音特征,實現噪音消除。

在模型訓練時,我們采用數據增強的訓練機制,將噪音數據通過隨機高斯的形式加入到聲紋模型的訓練中,使得訓練后的模型對噪音數據具有更好的魯棒性。

2.2 短音頻魯棒性

為了提高短音頻魯棒性,我們提出了基于短時幀級別的模型訓練機制,使模型能夠在極短的語音時長(約0.5秒)下即可完成聲紋識別. 在此基礎上,我們在模型訓練中引入了更多高階的音頻統計信息和正則化方法,進一步提升了模型在短語音條件下(2~3秒)的識別精度。

03如何使用AnalyticDB搭建聲紋對比系統

3.0 創建插件

使用一下SQL來分別創建AnalyticDB的非結構化分析插件OpenAnalytic和向量檢索插件fastann。

CREATE EXTENSION IF NOT EXISTS open_analytic;
CREATE EXTENSION IF NOT EXISTS fastann;

注:*左右滑動閱覽

3.1 建表

我們可以建立一個表來保存所有說話人的聲音和聲音的特征,后續我們可以從這個表中搜索說話人。

CREATE TABLE speaker_table (
speaker_id TEXT NOT NULL, # 說話人id
audio BYTEA NOT NULL, # 聲音文件
feature REAL[] NOT NULL, # 聲音特征向量
PRIMARY KEY (question)
);

注:*左右滑動閱覽

3.2 創建索引

我們可以為特征向量列創建向量檢索索引。

CREATE INDEX speaker_table_index 
ON speaker_table USING ann (feature) WITH (dim = 512);

注:*左右滑動閱覽

3.3 創建聲紋識別算法pipeline

通過以下sql,我們可以在數據庫中創建聲紋特征提取的算法模型。

SELECT open_analytic.pipeline_create('speaker_feature_extractor');

注:*左右滑動閱覽

3.4 獲取說話人聲紋特征

通過以下sql可以使用3.3創建的pipeline。這個UDF的輸入是pipeline名稱和目標文本。輸出是一個說話人聲音的特征向量。

# 通過聲音文件識別
SELECT open_analytic.pipeline_run_dist_random('speaker_feature_extractor',
<聲音文件>);

注:*左右滑動閱覽

3.5 說話人聲紋特征導入AnalyticDB

獲取聲音特征后, 我們可以使用一下sql來講數據插入3.1創建的表中。

INSERT INTO speaker_table VALUES (<說話人id>,  <聲音文件>, <聲音特征向量>);

注:*左右滑動閱覽

3.6 在數據庫中搜索最相似的的人

通過以下sql,我們可以在聲音特征庫中搜索最相似的說話人。然后我們可以根據特征間距離是否滿足預設的閾值來判斷是否是同一個人。

SELECT speaker_id, l2_distance(feature,  <聲音特征向量>) 
ORDER BY feature <-> <聲音特征向量>
LIMIT 10;

注:*左右滑動閱覽

3.7 比較兩個聲音是否為同一個人

我們還可以提取出兩個人的聲音特征然后直接計算二者的距離來判斷這兩個聲音是否來自同一個說話人。SQL如下

SELECT  l2_distance(feature1,  feature2);

注:*左右滑動閱覽

04AnalyticDB介紹

分析型數據庫(AnalyticDB)是阿里云上的一種高并發低延時的PB級實時數據倉庫,可以毫秒級針對萬億級數據進行即時的多維分析透視和業務探索。AnalyticDB for MySQL 全面兼容MySQL協議以及SQL:2003 語法標準, AnalyticDB forPostgreSQL 支持標準 SQL:2003,高度兼容 Oracle 語法生態。

向量檢索和非結構化數據分析是AnalyticDB的進階功能。目前兩款產品都包含向量檢索功能, 可以支持人臉, 人體, 車輛等的相似查詢和推薦系統。AnalyticDB在真實應用場景中可以支持10億級別的向量數據的查詢, 毫秒級別的響應時間。AnalyticDB已經在多個城市的重大項目中大規模部署。

在一般的包含向量檢索的的應用系統中, 通常開發者會使用向量檢索引擎(例如Faiss)來存儲向量數據, 然后使用關系型數據庫存儲結構化數據。在查詢時也需要交替查詢兩個系統, 這種方案會有額外的開發工作并且性能也不是最優。AnalyticDB支持結構化數據和非結構化數據(向量)的檢索,僅僅使用SQL接口就可以快速的搭建起以圖搜圖或者圖片+結構化數據混合檢索等功能。AnalyticDB的優化器在混合檢索場景中會根據數據的分布和查詢的條件選擇最優的執行計劃,在保證召回的同時,得到最優的性能。AnalyticDB向量版采用了多項創新性技術, 這些技術在我們的論文?AnalyticDB-V: A Hybrid Analytical Engine Towards Query Fusion for Structured and Unstructured Data?中有詳細介紹介紹。目前論文已經被數據庫三大頂會之一的VLDB接受, 具有技術領先性。

結構化信息+非結構化信息(圖片)混合檢索在實際應用中被廣泛使用的。例如人臉門禁系統被部署在多個小區時, 我們使用一張表存儲了所有小區的人臉特征, 在人臉檢索時我們只需要檢索當前小區的人臉特征。在這種情況下, 使用AnalyticDB我們只需要在SQL中增加where 小區名 =’xxx’ 就可以輕易實現。AnalyticDB同時提供了先進的圖像文本分析算法, 能夠提取非結構化數據的特征和標簽, 用戶僅僅需要使用SQL就可以完成圖像文本內容的分析。

本文章轉載微信公眾號@阿里云瑤池數據庫

上一篇:

LangChain-Chatchat:基于LangChain和ChatGLM2-6B構建本地離線私有化知識庫

下一篇:

bentoml:把你的機器學習模型變成專業級API服務!
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費