the score of gmm

44 views
Skip to first unread message

杨someonedays

unread,
Apr 19, 2021, 9:38:03 AM4/19/21
to bob-devel
hi, recently i used gmm to detetect spoofing speeches with cqcc as input feature, but when i tried to score the speeches, i got a positive score. should the score be minus? i used another method to extract cqcc and trained gmms, i got minus score. i want to know the reason.
  • kmeans_nat = em.KMeansMachine(n_gaussians,n_ceps) 
  • kmeansTrainer = em.KMeansTrainer() 
  • em.train(kmeansTrainer, kmeans_nat, np.vstack(Xf[y==1]), max_iterations = max_iterats, convergence_threshold = 1e-5) 
  • #kmeans_nat.means 

  • # initialize and train GMM machine 
  • gmm_nat = em.GMMMachine(n_gaussians,n_ceps) 
  • trainer = em.ML_GMMTrainer(True, True, True)
  • gmm_nat.means = kmeans_nat.means 
  • em.train(trainer, gmm_nat, np.vstack(Xf[y==1]), max_iterations = max_iterats, convergence_threshold = 1e-5)  
and tried to score the test speech with two gmm:
  • llr_gmm_score[k] = gmm_nat(mfcc)-gmm_synt(mfcc)  
and i got minus or positive score with different feature

Pavel Korshunov

unread,
May 19, 2021, 9:19:12 AM5/19/21
to bob-devel
Hi,

If I understand correctly, you have trained two GMMs, one for real speech (gmm_nat in your example) and another for synthetic speech (gmm_synt). Then, for a test speech sample, you are computing the difference between log likelihoods like in your line:
  llr_gmm_score[k] = gmm_nat(mfcc)-gmm_synt(mfcc)
Generally speaking, the result of this subtraction will be positive if the test sample is likelier to be a real sample, since its log likelihood for gmm_nat will be larger than log likelihood for gmm_synt. If the result is negative, the sample is probably synthetic. A side note: you mentioned that you are using CQCC features, but I'm a bit confused why it is called MFCC when you are computing the log likelihoods. 

But in a nutshell, if the score is positive, the test sample is likely real and if negative it is likely synthetic. But in a database evaluation, it is better to compute a threshold on the scores from the development set  (and the threshold may be slightly different from 0) that will help you separate two classes better in your specific database.

I hope I could shed some light on your question.

Best,
Pavel
Reply all
Reply to author
Forward
0 new messages