謝邀。沒太做過相關工作所以思考不深,僅做簡單介紹。

開集說話人辨認任務(open-set speaker identification) 相關的文章蠻少的,一般的做法也都遵循先辨認、再確認的流程。

  1. 先辨認:按照正常的說話人辨認流程,找出最匹配的候選人,找到相似度得分最高的。
  2. 再確認:對找出的候選人進行speaker verification,看看是不是真的是我們想找的人。這一步就是卡閾值。

當閉集問題變成開集的時候準確率下降蠻嚴重的,主要集中在錯判集內/集外人。當然如果模型足夠的好,這個問題可以被部分解決, 此外score normalization 對開集問題也有比較明顯的效果。


謝邀了。。。先回答開集說話人識別的問題,就是要額外對註冊集N人以外的語音做出拒絕判斷,這並不難,也就按照閉集說話人識別來做就行了,但識別率一般會隨著註冊集的人數增加而降低。

然後,我要稍微做點額外的討論:我認為說話人辨認與說話人確認,不是次序關係,而是並列關係QAQ……

說話人識別可以分為兩種tasks,一個是說話人辨認speaker identification 和說話人確認speaker verification;

1、前者是1:N的關係,判斷測試集的某句utt是註冊集中的哪個人所說的,強調是誰;

2、後者是1:1的關係,確定測試集的某句utt是不是某個人所說的,強調是不是;

具體來講:

1、假設註冊集有N個人,就有N個註冊模型,測試階段,就要把待識別的utt跟這N個模型都做一次匹配計算,例如Cosine;根據這些相似性結果和識別標籤,做個對比,就可以得到P false alarm和P miss;而1:N中,我們是不會弄hard decision,也就不會設死EER的閾值,而是採用threshold-free的方法來做EER:

EER就是對應這兩個概率相等時的閾值,也就是EER = P_fa(θ_EER ) = P_miss(θ_EER); 這是我們最常做的手法,基本challenge上都是這樣子搞的;

2、說話人確認,這個常見於智能設備中的語音喚醒,例如我們用谷歌的音響,註冊時錄下了我的若干句話,這個就成為了匹配的說話人模型,是一個匹配模板,也就是在識別階段中的一個特定的參考模型;識別時,我們去喚醒這個機器,這裡就可以用已有的那一個模板跟待識別的utt進行比較,如果是註冊人的則通過,不是則拒掉,這就是所謂的1:1;因為這個任務是對「未來」待識別的utt做出判決,不能像第1個那樣,先做好與全部N個模型的比較求出相似結果,再求EER,而是要事先設置好EER,作為卡通過的依據;大於則確認,小於則拒絕;這個設置EER的做法可以像 事先拋1000次硬幣,是字向上的概率為多少,就把EER設到那裡去,有點先驗概率的味道;也可以看需求來設置,例如銀行那種,經驗閾值就卡得更死更死


同意 @happywarrior 和 @Leon晉 兩位大大。

聲紋識別需要三個數據,訓練,註冊和測試。

一般註冊和測試是用同一個人不同的語音

不在話語集我自己個人理解是open-set,就是測試的人沒在模型上註冊他們的聲紋就去測試了,意思就是,在識別系統中沒有該說話人的語音特徵,但他硬要去挑戰說話人識別系統的權威,去看看該系統是不是很聰明。如大大們所說的,看系統是否能把他給拒了。

判斷是否在註冊集中也像他們所說的,設個 threshold, 若大於則說明該人註冊過了,在話語集中,小於則在集外


謝邀。

沒明白你的意思。說話人識別不就是要判斷當前說話人是否是已知集合中的某個說話人嗎?不是的話就報告不是就可以了啊。

或者你的意思是你做的是一個閉集的測試,一定要在集合裏選一個作為答案報告出來?實驗有時候這樣做。大多數應用場景不是這樣的,肯定要考慮說話人不在給定集合裏的情況啊。

至於怎麼處理,最簡單的就是把取最大概率改成對概率取閾值。如果沒有任何一個人的概率超過閾值就報告「沒有」。


這就是典型的聲紋開集1:N識別,沒有什麼特殊處理方式,根據閾值來判斷即可。


聲紋識別有兩種:1.說話人確認(1:1); 2.說話人辨認(1: N). 在第一種情況中,只需要確定說話人是或者不是某人,相似度高於某閾值認為是,反之則不是; 在第二種情況中,首先需要從N個人中找出相似度最好的那個,如果相似度高於某個閾值則是那個人,反之則認為不在辨別範圍內。


推薦閱讀:
相關文章