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.is_a?(Array) ? Vector.elements(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
56 57 58 59 60 61 62 63 |
# File 'lib/diarize/super_vector.rb', line 56 def divergence(sv1, sv2) # ubm_gaussian_weights.mul(((sv1.vector - sv2.vector) ** 2) / ubm_covariance).sum diff = sv1.vector - sv2.vector square = diff.map {|el| el ** 2} codiv = Vector.elements(square.each.with_index.inject([]) {|a,(el,ix)| a << el / ubm_covariance[ix]}) mult = ubm_gaussian_weights.each.with_index.inject([]) {|a,(el,ix)| a << el * codiv[ix]} mult.inject(0, :+) 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 = Array.new(dim, 0) 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.elements(vector)) end |
.ubm_covariance ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/diarize/super_vector.rb', line 40 def ubm_covariance # Returns a vector of diagonal covariances, same dimension as speaker's super vectors @@ubm_covariance ||= begin ubm = Speaker.ubm # cov = DoubleMatrix.new(1, ubm.supervector.dim) cov = Array.new(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 Vector.elements(cov) end end |
.ubm_gaussian_weights ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# 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 = DoubleMatrix.new(1, ubm.supervector.dim) weights = Array.new(ubm.supervector.dim, 0) 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 Vector.elements(weights) end end |
Instance Method Details
#dim ⇒ Object
class
67 68 69 |
# File 'lib/diarize/super_vector.rb', line 67 def dim @vector.size end |
#hash ⇒ Object
71 72 73 |
# File 'lib/diarize/super_vector.rb', line 71 def hash @vector.hash end |
#to_a ⇒ Object
75 76 77 |
# File 'lib/diarize/super_vector.rb', line 75 def to_a @vector.to_a end |