Slide 37
Slide 37 text
Search with embeddings and fuzzy text search
LIMIT = 3
diagnoses_with_embeddings.filter_map do |d|
semantic = cosine_similarity(query_embedding, d[:embedding])
fuzzy = fuzzy_score(query, d)
semantic_relevant = semantic >= MIN_SEMANTIC_SCORE
fuzzy_relevant = fuzzy >= MIN_FUZZY_SCORE
next unless semantic_relevant || fuzzy_relevant
[d[:diagnosis], [semantic, fuzzy].max]
end.sort_by { |_, score| -score }.first(LIMIT).map(&:first)