Generate dense embeddings for corpus and queries
(corpus: Dict, queries: Dict, dataset: str, embedding_model)
| 503 | return corpus, queries, qrels |
| 504 | |
| 505 | def generate_dense_embeddings(corpus: Dict, queries: Dict, dataset: str, embedding_model) -> Tuple[List[str], np.ndarray, List[str], np.ndarray]: |
| 506 | """Generate dense embeddings for corpus and queries""" |
| 507 | cache_file = Path("datasets") / f"hybrid_{dataset}" / "dense_embeddings.npz" |
| 508 | if cache_file.exists(): |
| 509 | print("Loading cached dense embeddings...") |
| 510 | data = np.load(cache_file, allow_pickle=True) |
| 511 | return ( |
| 512 | data["corpus_ids"].tolist(), |
| 513 | data["corpus_embeddings"], |
| 514 | data["query_ids"].tolist(), |
| 515 | data["query_embeddings"], |
| 516 | ) |
| 517 | |
| 518 | print("Generating dense embeddings...") |
| 519 | corpus_ids = list(corpus.keys()) |
| 520 | corpus_texts = [ |
| 521 | f"{corpus[doc_id].get('title', '')} {corpus[doc_id]['text']}" |
| 522 | for doc_id in corpus_ids |
| 523 | ] |
| 524 | |
| 525 | query_ids = list(queries.keys()) |
| 526 | query_texts = [queries[qid] for qid in query_ids] |
| 527 | |
| 528 | # Generate corpus embeddings |
| 529 | corpus_embeddings = [] |
| 530 | for i in tqdm( |
| 531 | range(0, len(corpus_texts), EMBEDDING_BATCH_SIZE), desc="Corpus embeddings" |
| 532 | ): |
| 533 | batch = corpus_texts[i : i + EMBEDDING_BATCH_SIZE] |
| 534 | corpus_embeddings.extend(list(embedding_model.embed(batch))) |
| 535 | corpus_embeddings = np.array(corpus_embeddings) |
| 536 | |
| 537 | # Generate query embeddings |
| 538 | query_embeddings = [] |
| 539 | for i in tqdm(range(0, len(query_texts), EMBEDDING_BATCH_SIZE), desc="Query embeddings"): |
| 540 | batch = query_texts[i : i + EMBEDDING_BATCH_SIZE] |
| 541 | query_embeddings.extend(list(embedding_model.embed(batch))) |
| 542 | query_embeddings = np.array(query_embeddings) |
| 543 | |
| 544 | # Cache the embeddings |
| 545 | cache_file.parent.mkdir(parents=True, exist_ok=True) |
| 546 | np.savez_compressed( |
| 547 | cache_file, |
| 548 | corpus_ids=corpus_ids, |
| 549 | corpus_embeddings=corpus_embeddings, |
| 550 | query_ids=query_ids, |
| 551 | query_embeddings=query_embeddings, |
| 552 | ) |
| 553 | return corpus_ids, corpus_embeddings, query_ids, query_embeddings |
| 554 | |
| 555 | |
| 556 | def brute_force_dense( |