Module: Legion::Extensions::Apollo::Helpers::Similarity
- Defined in:
- lib/legion/extensions/apollo/helpers/similarity.rb
Class Method Summary collapse
- .above_corroboration_threshold?(similarity:) ⇒ Boolean
- .classify_match(similarity:, same_content_type: true, contradicts: false) ⇒ Object
- .cosine_similarity(vec_a:, vec_b:) ⇒ Object
Class Method Details
.above_corroboration_threshold?(similarity:) ⇒ Boolean
21 22 23 |
# File 'lib/legion/extensions/apollo/helpers/similarity.rb', line 21 def above_corroboration_threshold?(similarity:, **) similarity >= Confidence::CORROBORATION_SIMILARITY_THRESHOLD end |
.classify_match(similarity:, same_content_type: true, contradicts: false) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/legion/extensions/apollo/helpers/similarity.rb', line 25 def classify_match(similarity:, same_content_type: true, contradicts: false, **) if above_corroboration_threshold?(similarity: similarity) && same_content_type contradicts ? :contradiction : :corroboration else :novel end end |
.cosine_similarity(vec_a:, vec_b:) ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/legion/extensions/apollo/helpers/similarity.rb', line 12 def cosine_similarity(vec_a:, vec_b:, **) dot = vec_a.zip(vec_b).sum { |x, y| x * y } mag_a = Math.sqrt(vec_a.sum { |x| x**2 }) mag_b = Math.sqrt(vec_b.sum { |x| x**2 }) return 0.0 if mag_a.zero? || mag_b.zero? dot / (mag_a * mag_b) end |