Hybrid search strategies in Prompt Engineering / GenAI - ML Experiment: Train & Evaluate
Start learning this pattern below
Jump into concepts and practice - no test required
import numpy as np from sklearn.metrics.pairwise import cosine_similarity # Sample documents and queries documents = [ "Apple fruit is sweet and crunchy.", "Bananas are yellow and soft.", "I love eating fresh apples.", "Oranges are citrus fruits.", "Fruits like apple and banana are healthy." ] queries = ["sweet apple", "yellow fruit"] # Simple keyword matching score (count of query words in document) def keyword_score(query, doc): query_words = query.lower().split() doc_words = doc.lower().split() return sum(word in doc_words for word in query_words) # Dummy embedding function (for example, use random vectors here) # In real case, use a pre-trained model like SentenceTransformer np.random.seed(0) embedding_dim = 5 embeddings = {doc: np.random.rand(embedding_dim) for doc in documents} query_embeddings = {q: np.random.rand(embedding_dim) for q in queries} # Compute hybrid score: weighted sum of normalized keyword and semantic scores def hybrid_score(query, doc, alpha=0.5): kw = keyword_score(query, doc) kw_norm = kw / max(len(query.split()), 1) # normalize keyword score sem = cosine_similarity(query_embeddings[query].reshape(1, -1), embeddings[doc].reshape(1, -1))[0][0] return alpha * kw_norm + (1 - alpha) * sem # Rank documents for each query alpha = 0.6 # weight for keyword matching results = {} for q in queries: scores = [(doc, hybrid_score(q, doc, alpha)) for doc in documents] ranked = sorted(scores, key=lambda x: x[1], reverse=True) results[q] = ranked # Print results for q, ranked_docs in results.items(): print(f"Query: {q}") for doc, score in ranked_docs: print(f" Score: {score:.3f} - Document: {doc}") print()
Before: Keyword matching only, accuracy 70%, misses synonyms and related meanings.
After: Hybrid search combining keywords and semantic similarity, accuracy 87%, finds more relevant results with different wording.
Practice
What is the main benefit of using a hybrid search strategy in AI?
Solution
Step 1: Understand hybrid search purpose
Hybrid search mixes different search methods to get better results than using one method alone.Step 2: Compare options
It combines different search methods to improve results. correctly states the benefit. The other options either describe single-method approaches or are incorrect.Final Answer:
It combines different search methods to improve results. -> Option CQuick Check:
Hybrid search = mix methods [OK]
- Thinking hybrid means using only one search method
- Confusing hybrid search with keyword-only search
- Ignoring the benefit of combining methods
Which of the following is the correct way to combine keyword and embedding search scores in a hybrid search?
final_score = ?Solution
Step 1: Understand score combination
Hybrid search often combines scores by weighted sum to balance keyword and embedding contributions.Step 2: Evaluate options
final_score = 0.5 * keyword_score + 0.5 * embedding_score uses weighted sum, which is common. Multiplying scores can distort results. Taking the max ignores combined info. Subtracting can give negative scores.Final Answer:
final_score = 0.5 * keyword_score + 0.5 * embedding_score -> Option AQuick Check:
Weighted sum combines scores [OK]
- Multiplying scores causing skewed results
- Using max ignores combined info
- Subtracting scores can produce negatives
Given the following Python code snippet for hybrid search scoring, what is the output?
keyword_scores = [0.8, 0.6, 0.9]
embedding_scores = [0.7, 0.9, 0.5]
final_scores = [0.5 * k + 0.5 * e for k, e in zip(keyword_scores, embedding_scores)]
print(final_scores)Solution
Step 1: Calculate each final score
For each pair: (0.8+0.7)/2=0.75, (0.6+0.9)/2=0.75, (0.9+0.5)/2=0.7Step 2: Verify output list
The list is [0.75, 0.75, 0.7], matching [0.75, 0.75, 0.7].Final Answer:
[0.75, 0.75, 0.7] -> Option BQuick Check:
Average scores = [0.75, 0.75, 0.7] [OK]
- Adding scores without dividing by 2
- Mixing order of scores
- Printing original scores instead of combined
Identify the error in this hybrid search score calculation code and select the fix:
keyword_scores = [0.9, 0.7]
embedding_scores = [0.6]
final_scores = [0.5 * k + 0.5 * e for k, e in zip(keyword_scores, embedding_scores)]
print(final_scores)Solution
Step 1: Check list lengths
keyword_scores has 2 elements, embedding_scores has 1 element, causing zip to truncate to 1 element.Step 2: Fix length mismatch
Lists have different lengths; use min length or pad shorter list. suggests using min length or padding shorter list to avoid losing data.Final Answer:
Lists have different lengths; use min length or pad shorter list. -> Option DQuick Check:
Length mismatch needs handling [OK]
- Ignoring length mismatch causing data loss
- Changing operators incorrectly
- Assuming zip auto-fills missing values
You want to build a hybrid search system that first filters documents by keywords, then reranks them by embedding similarity. Which approach best fits this goal?
Solution
Step 1: Understand filtering and reranking
Filtering by keywords narrows down documents quickly; reranking by embeddings improves relevance.Step 2: Match approach to goal
Filter documents by keywords, then rerank filtered set by embedding similarity. matches the goal: filter first, then rerank. Run embedding search first, then filter results by keywords. reverses order, less efficient. Combine keyword and embedding scores equally on all documents without filtering. skips filtering, less efficient. Use only keyword search for filtering and ignore embeddings. ignores embeddings, losing semantic power.Final Answer:
Filter documents by keywords, then rerank filtered set by embedding similarity. -> Option AQuick Check:
Filter then rerank = best hybrid approach [OK]
- Reranking before filtering wastes resources
- Ignoring filtering step reduces speed
- Using only one method loses hybrid benefits
