Class: Diarize::SuperVector
- Inherits:
-
Object
- Object
- Diarize::SuperVector
- 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
class.
- #hash ⇒ Object
-
#initialize(vector) ⇒ SuperVector
constructor
A new instance of SuperVector.
- #to_a ⇒ Object
Constructor Details
#initialize(vector) ⇒ SuperVector
Returns a new instance of SuperVector.
5 6 7 |
# File 'lib/diarize/super_vector.rb', line 5 def initialize(vector) @vector = vector end |
Instance Attribute Details
#vector ⇒ Object (readonly)
Returns the value of attribute vector.
3 4 5 |
# File 'lib/diarize/super_vector.rb', line 3 def vector @vector end |
Class Method Details
.divergence(sv1, sv2) ⇒ Object
54 55 56 |
# File 'lib/diarize/super_vector.rb', line 54 def divergence(sv1, sv2) return ubm_gaussian_weights.mul(((sv1.vector - sv2.vector) ** 2) / ubm_covariance).sum end |
.generate_from_model(model) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/diarize/super_vector.rb', line 11 def generate_from_model(model) # Generates a supervector from a LIUM GMM dim = model.nb_of_components * model.components.get(0).dim vector = GSL::Vector::alloc(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
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/diarize/super_vector.rb', line 39 def ubm_covariance # Returns a vector of diagonal covariances, same dimension as speaker's super vectors @@ubm_covariance ||= begin ubm = Speaker.ubm cov = GSL::Vector::alloc(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 end |
.ubm_gaussian_weights ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/diarize/super_vector.rb', line 24 def ubm_gaussian_weights # Returns a vector of gaussian weights, same dimension as speaker's super vectors @@ubm_gaussian_weights ||= begin ubm = Speaker.ubm weights = GSL::Vector::alloc(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 end |
Instance Method Details
#dim ⇒ Object
class
60 61 62 |
# File 'lib/diarize/super_vector.rb', line 60 def dim @vector.size end |
#hash ⇒ Object
64 65 66 |
# File 'lib/diarize/super_vector.rb', line 64 def hash @vector.to_a.hash end |
#to_a ⇒ Object
68 69 70 |
# File 'lib/diarize/super_vector.rb', line 68 def to_a @vector.to_a end |