ColBERT(
(0): Transformer({'max_seq_length': 299, 'do_lower_case': False, 'architecture': 'XLMRobertaModel'})
(1): Dense({'in_features': 1024, 'out_features': 128, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity', 'use_residual': False})
)pip install -U pylate1from pylate import indexes, models, retrieve
2
3# Step 1: Load the ColBERT model
4model = models.ColBERT(
5 model_name_or_path="pylate_model_id",
6)
7
8# Step 2: Initialize the PLAID index
9index = indexes.PLAID(
10 index_folder="pylate-index",
11 index_name="index",
12 override=True, # This overwrites the existing index if any
13)
14
15# Step 3: Encode the documents
16documents_ids = ["1", "2", "3"]
17documents = ["document 1 text", "document 2 text", "document 3 text"]
18
19documents_embeddings = model.encode(
20 documents,
21 batch_size=32,
22 is_query=False, # Ensure that it is set to False to indicate that these are documents, not queries
23 show_progress_bar=True,
24)
25
26# Step 4: Add document embeddings to the index by providing embeddings and corresponding ids
27index.add_documents(
28 documents_ids=documents_ids,
29 documents_embeddings=documents_embeddings,
30)1# To load an index, simply instantiate it with the correct folder/name and without overriding it
2index = indexes.PLAID(
3 index_folder="pylate-index",
4 index_name="index",
5)1# Step 1: Initialize the ColBERT retriever
2retriever = retrieve.ColBERT(index=index)
3
4# Step 2: Encode the queries
5queries_embeddings = model.encode(
6 ["query for document 3", "query for document 1"],
7 batch_size=32,
8 is_query=True, # # Ensure that it is set to False to indicate that these are queries
9 show_progress_bar=True,
10)
11
12# Step 3: Retrieve top-k documents
13scores = retriever.retrieve(
14 queries_embeddings=queries_embeddings,
15 k=10, # Retrieve the top 10 matches for each query
16)1from pylate import rank, models
2
3queries = [
4 "query A",
5 "query B",
6]
7
8documents = [
9 ["document A", "document B"],
10 ["document 1", "document C", "document B"],
11]
12
13documents_ids = [
14 [1, 2],
15 [1, 3, 2],
16]
17
18model = models.ColBERT(
19 model_name_or_path="pylate_model_id",
20)
21
22queries_embeddings = model.encode(
23 queries,
24 is_query=True,
25)
26
27documents_embeddings = model.encode(
28 documents,
29 is_query=False,
30)
31
32reranked_documents = rank.rerank(
33 documents_ids=documents_ids,
34 queries_embeddings=queries_embeddings,
35 documents_embeddings=documents_embeddings,
36)query, positive, and negative| query | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| query | positive | negative |
|---|---|---|
There was no Mughal tradition of primogeniture, the systematic passing of rule, upon an emperor's death, to his eldest son. | Sanskrit: चक्रवर्तिनः मृत्योः अनन्तरं तस्य शासनस्य व्यवस्थितरूपेण सङ्क्रमणस्य, मुघलपरम्परायाः ज्येष्ठपुत्राधिकारपद्धतिः नासीत्।[object Object]English: There was no Mughal tradition of primogeniture, the systematic passing of rule, upon an emperor's death, to his eldest son. | Sanskrit: येऽरक्ष्यमाणा हीयन्ते दैवेनाभ्याहता नृप। तस्करैश्चापि हीयन्ते सर्वं तद् राजकिल्बिषम्॥[object Object]English: If the subjects of a king, O monarch, die from want of protection and are afflicted by the gods and oppressed by robbers, the sin of all this affects the king himself. |
The four sons of Shah Jahan all held governorships during their father's reign. | Sanskrit: शाह्-जहाँ-नामकस्य चत्वारः पुत्राः, सर्वे पितुः शासनकाले शासकपदम् अधारयन्।[object Object]English: The four sons of Shah Jahan all held governorships during their father's reign. | Sanskrit: आयेन वासव्ययस्य तुलने कृते सति वासः व्यययोग्यः न वेति ज्ञायते।[object Object]English: Comparing the price of housing to income tells if housing is affordable. |
In this regard he discusses the correlation between social opportunities of education and health and how both of these complement economic and political freedoms as a healthy and well-educated person is better suited to make informed economic decisions and be involved in fruitful political demonstrations etc. | Sanskrit: अस्मिन् विषये सः शिक्षणस्य स्वास्थ्यस्य च सामाजिकावकाशानाम् अन्योन्य-सम्बन्धस्य, तथा च एतद्द्वयम् अपि आर्थिक-राजनैतिक-स्वातन्त्र्ययोः कथं पूरकं भवतः इति च चर्चां करोति, यतोहि स्वस्था सुशिक्षिता च व्यक्तिः ज्ञानपूर्वम् आर्थिकविषयान् निर्णेतुं तथा फलप्रदेषु राजनैतिकेषु प्रतिपादनादिषु संलग्नः भवितुं च अधिकारी भवति इति।[object Object]English: In this regard he discusses the correlation between social opportunities of education and health and how both of these complement economic and political freedoms as a healthy and well-educated person is better suited to make informed economic decisions and be involved in fruitful political demonstrations etc. | Sanskrit: स्पर्धायां दलानां विश्रामस्थानत्रयेषु अन्तिमम् अस्ति वैट्-मौण्टन्।[object Object]English: White Mountain is the last of three rest stops for teams in the race. |
pylate.losses.contrastive.Contrastivequery, positive, and negative| query | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| query | positive | negative |
|---|---|---|
You two were eloquent speakers. | Sanskrit: युवां वाक्पटू आस्तम् ।[object Object]English: You two were eloquent speakers. | Sanskrit: एतत् 'URL' इन्स्टलेषन् काले दत्तं 'पोर्ट् नम्बर्' तथा 'डोमैन्' नाम आधारीकृत्य वर्तते ।[object Object]English: This URL is based on- the port number and domain name given at the time of installation. |
"""And James the son of Zebedee, and John the brother of James; and he surnamed them Boanerges, which is, The sons of thunder:""" | Sanskrit: """याकूब् तस्य भ्राता योहन् च आन्द्रियः फिलिपो बर्थलमयः,"""[object Object]English: """And James the son of Zebedee, and John the brother of James; and he surnamed them Boanerges, which is, The sons of thunder:""" | Sanskrit: "पश्यामः यत्, Animal interface इत्यस्य सर्वाणि मेथड्स्, नाम - talk(), see() अपि च move() इतीमानि क्लास् मध्ये इम्प्लिमेण्ट् जातानि ।"[object Object]English: "We can see that all the methods of the Animal interface- talk(), see() and move() are implemented inside this class." |
The heart of a healthy adult person beats 60-80 times per minute | Sanskrit: स्वस्थस्य कस्यचन प्रौढस्य प्रति मिनट्-काले षष्टिवारात अधिकाधिकतया अशीतिवारं कम्पते।[object Object]English: The heart of a healthy adult person beats 60-80 times per minute | Sanskrit: यतस्तेन बहवो यिहूदीया गत्वा यीशौ व्यश्वसन्।[object Object]English: """Because that by reason of him many of the Jews went away, and believed on Jesus.""" |
pylate.losses.contrastive.Contrastiveper_device_train_batch_size: 2num_train_epochs: 2fp16: Trueoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: noprediction_loss_only: Trueper_device_train_batch_size: 2per_device_eval_batch_size: 8per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 5e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 2max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.0warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falseuse_ipex: Falsebf16: Falsefp16: Truefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Falsedataloader_num_workers: 0dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_data_skip: Falsefsdp: []fsdp_min_num_params: 0fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}tp_size: 0fsdp_transformer_layer_cls_to_wrap: Noneaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}deepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torchoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Truedataloader_persistent_workers: Falseskip_memory_metrics: Trueuse_legacy_prediction_loop: Falsepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseinclude_for_metrics: []eval_do_concat_batches: Truefp16_backend: autopush_to_hub_model_id: Nonepush_to_hub_organization: Nonemp_parameters:auto_find_batch_size: Falsefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: Falseneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseeval_use_gather_object: Falseaverage_tokens_across_devices: Falseprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss |
|---|---|---|
| 0.0156 | 500 | 0.0421 |
| 0.0311 | 1000 | 0.0622 |
| 0.0467 | 1500 | 0.0062 |
| 0.0623 | 2000 | 0.0024 |
| 0.0779 | 2500 | 0.0002 |
1@inproceedings{reimers-2019-sentence-bert,
2 title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
3 author = "Reimers, Nils and Gurevych, Iryna",
4 booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
5 month = "11",
6 year = "2019",
7 publisher = "Association for Computational Linguistics",
8 url = "https://arxiv.org/abs/1908.10084"
9}1@misc{PyLate,
2title={PyLate: Flexible Training and Retrieval for Late Interaction Models},
3author={Chaffin, Antoine and Sourty, Raphaël},
4url={https://github.com/lightonai/pylate},
5year={2024}
6}