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
- #hash ⇒ Object
-
#initialize(vector) ⇒ SuperVector
constructor
A new instance of SuperVector.
- #sha ⇒ Object
- #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
57 58 59 60 61 62 63 64 |
# File 'lib/diarize/super_vector.rb', line 57 def self.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
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/diarize/super_vector.rb', line 9 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) # vector = Vector.elements(Array.new(dim, 0)) 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) SuperVector.new(Vector.elements(vector)) end |
.ubm_covariance ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/diarize/super_vector.rb', line 41 def self.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
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/diarize/super_vector.rb', line 25 def self.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
66 67 68 |
# File 'lib/diarize/super_vector.rb', line 66 def dim @vector.size end |
#hash ⇒ Object
70 71 72 |
# File 'lib/diarize/super_vector.rb', line 70 def hash @vector.hash end |
#sha ⇒ Object
74 75 76 |
# File 'lib/diarize/super_vector.rb', line 74 def sha Digest::SHA256.hexdigest(hash.to_s) end |
#to_a ⇒ Object
78 79 80 |
# File 'lib/diarize/super_vector.rb', line 78 def to_a @vector.to_a end |