Class: Diarize::SuperVector
- Inherits:
-
Object
- Object
- Diarize::SuperVector
- Includes:
- JBLAS
- Defined in:
- lib/diarize/super_vector.rb
Instance Attribute Summary collapse
-
#vector ⇒ Object
readonly
Returns the value of attribute vector.
Class Method Summary collapse
- .divergence(sv1, sv2) ⇒ Object
- .generate_from_model(model) ⇒ Object
- .ubm_covariance ⇒ Object
- .ubm_gaussian_weights ⇒ Object
Instance Method Summary collapse
- #dim ⇒ Object
- #hash ⇒ Object
-
#initialize(vector) ⇒ SuperVector
constructor
A new instance of SuperVector.
Constructor Details
#initialize(vector) ⇒ SuperVector
Returns a new instance of SuperVector.
25 26 27 |
# File 'lib/diarize/super_vector.rb', line 25 def initialize(vector) @vector = vector end |
Instance Attribute Details
#vector ⇒ Object (readonly)
Returns the value of attribute vector.
23 24 25 |
# File 'lib/diarize/super_vector.rb', line 23 def vector @vector end |
Class Method Details
.divergence(sv1, sv2) ⇒ Object
72 73 74 |
# File 'lib/diarize/super_vector.rb', line 72 def self.divergence(sv1, sv2) ubm_gaussian_weights.mul(((sv1.vector - sv2.vector) ** 2) / ubm_covariance).sum end |
.generate_from_model(model) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/diarize/super_vector.rb', line 29 def self.generate_from_model(model) # Generates a supervector from a LIUM GMM dim = model.nb_of_components * model.components.get(0).dim vector = DoubleMatrix.new(1, dim) model.nb_of_components.times do |k| gaussian = model.components.get(k) gaussian.dim.times do |i| vector[k * gaussian.dim + i] = gaussian.mean(i) end end SuperVector.new(vector) end |
.ubm_covariance ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/diarize/super_vector.rb', line 57 def self.ubm_covariance # Returns a vector of diagonal covariances, same dimension as speaker's super vectors @@ubm_covariance ||= ( ubm = Speaker.ubm cov = DoubleMatrix.new(1, ubm.supervector.dim) ubm.model.nb_of_components.times do |k| gaussian = ubm.model.components.get(k) gaussian.dim.times do |i| cov[k * gaussian.dim + i] = gaussian.getCovariance(i, i) end end cov ) end |
.ubm_gaussian_weights ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/diarize/super_vector.rb', line 42 def self.ubm_gaussian_weights # Returns a vector of gaussian weights, same dimension as speaker's super vectors @@ubm_gaussian_weights ||= ( ubm = Speaker.ubm weights = DoubleMatrix.new(1, ubm.supervector.dim) ubm.model.nb_of_components.times do |k| gaussian = ubm.model.components.get(k) gaussian.dim.times do |i| weights[k * gaussian.dim + i] = gaussian.weight end end weights ) end |
Instance Method Details
#dim ⇒ Object
76 77 78 |
# File 'lib/diarize/super_vector.rb', line 76 def dim @vector.columns end |
#hash ⇒ Object
80 81 82 |
# File 'lib/diarize/super_vector.rb', line 80 def hash @vector.hash end |