Downloads · 30 days
85
29% of all-time downloads
Bheri/ithasa-jina-colbertv2
ithasa-jina-colbertv2 is a sentence similarity model from Bheri. Use it when you need a score for how close two texts are. It is set up for PyLate.
This is a PyLate model finetuned from jinaai/jina-colbert-v2. It maps sentences & paragraphs to sequences of 128-dimensional dense vectors and can be used for semantic textual similarity using the MaxSim operator.
Downloads · 30 days
85
29% of all-time downloads
All-time downloads
295
Public
Parameters
559M
3.4 GB on disk
Likes
0
Public
Click a slice to open those files.
.pt2.2 GB · 66%
From the Hugging Face model README
This is a PyLate model finetuned from jinaai/jina-colbert-v2. It maps sentences & paragraphs to sequences of 128-dimensional dense vectors and can be used for semantic textual similarity using the MaxSim operator.
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})
)
First install the PyLate library:
pip install -U pylate
Use this model with PyLate to index and retrieve documents. The index uses FastPLAID for efficient similarity search.
Load the ColBERT model and initialize the PLAID index, then encode and index your documents:
from pylate import indexes, models, retrieve
# Step 1: Load the ColBERT model
model = models.ColBERT(
model_name_or_path="pylate_model_id",
)
# Step 2: Initialize the PLAID index
index = indexes.PLAID(
index_folder="pylate-index",
index_name="index",
override=True, # This overwrites the existing index if any
)
# Step 3: Encode the documents
documents_ids = ["1", "2", "3"]
documents = ["document 1 text", "document 2 text", "document 3 text"]
documents_embeddings = model.encode(
documents,
batch_size=32,
is_query=False, # Ensure that it is set to False to indicate that these are documents, not queries
show_progress_bar=True,
)
# Step 4: Add document embeddings to the index by providing embeddings and corresponding ids
index.add_documents(
documents_ids=documents_ids,
documents_embeddings=documents_embeddings,
)
Note that you do not have to recreate the index and encode the documents every time. Once you have created an index and added the documents, you can re-use the index later by loading it:
# To load an index, simply instantiate it with the correct folder/name and without overriding it
index = indexes.PLAID(
index_folder="pylate-index",
index_name="index",
)
Once the documents are indexed, you can retrieve the top-k most relevant documents for a given set of queries. To do so, initialize the ColBERT retriever with the index you want to search in, encode the queries and then retrieve the top-k documents to get the top matches ids and relevance scores:
# Step 1: Initialize the ColBERT retriever
retriever = retrieve.ColBERT(index=index)
# Step 2: Encode the queries
queries_embeddings = model.encode(
["query for document 3", "query for document 1"],
batch_size=32,
is_query=True, # # Ensure that it is set to False to indicate that these are queries
show_progress_bar=True,
)
# Step 3: Retrieve top-k documents
scores = retriever.retrieve(
queries_embeddings=queries_embeddings,
k=10, # Retrieve the top 10 matches for each query
)
If you only want to use the ColBERT model to perform reranking on top of your first-stage retrieval pipeline without building an index, you can simply use rank function and pass the queries and documents to rerank:
from pylate import rank, models
queries = [
"query A",
"query B",
]
documents = [
["document A", "document B"],
["document 1", "document C", "document B"],
]
documents_ids = [
[1, 2],
[1, 3, 2],
]
model = models.ColBERT(
model_name_or_path="pylate_model_id",
)
queries_embeddings = model.encode(
queries,
is_query=True,
)
documents_embeddings = model.encode(
documents,
is_query=False,
)
reranked_documents = rank.rerank(
documents_ids=documents_ids,
queries_embeddings=queries_embeddings,
documents_embeddings=documents_embeddings,
)
<!--
### Direct Usage (Transformers)
<details><summary>Click to see the direct usage in Transformers</summary>
</details>
-->
<!--
### Downstream Usage (Sentence Transformers)
You can finetune this model on your own dataset.
<details><summary>Click to expand</summary>
</details>
-->
<!--
### Out-of-Scope Use
*List how the model may foreseeably be misused and address what users ought not to do with the model.*
-->
<!--
## Bias, Risks and Limitations
*What are the known or foreseeable issues stemming from this model? You could also flag here known failure cases or weaknesses of the model.*
-->
<!--
### Recommendations
*What are recommendations with respect to the foreseeable issues? For example, filtering explicit content.*
-->
| query | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details | <ul><li>min: 32 tokens</li><li>mean: 32.0 tokens</li><li>max: 32 tokens</li></ul> | <ul><li>min: 32 tokens</li><li>mean: 32.0 tokens</li><li>max: 32 tokens</li></ul> | <ul><li>min: 32 tokens</li><li>mean: 32.0 tokens</li><li>max: 32 tokens</li></ul> |
| query | positive | negative |
|---|---|---|
| <code>There was no Mughal tradition of primogeniture, the systematic passing of rule, upon an emperor's death, to his eldest son.</code> | <code>Sanskrit: चक्रवर्तिनः मृत्योः अनन्तरं तस्य शासनस्य व्यवस्थितरूपेण सङ्क्रमणस्य, मुघलपरम्परायाः ज्येष्ठपुत्राधिकारपद्धतिः नासीत्।<br>English: There was no Mughal tradition of primogeniture, the systematic passing of rule, upon an emperor's death, to his eldest son.</code> | <code>Sanskrit: येऽरक्ष्यमाणा हीयन्ते दैवेनाभ्याहता नृप। तस्करैश्चापि हीयन्ते सर्वं तद् राजकिल्बिषम्॥<br>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.</code> |
| <code>The four sons of Shah Jahan all held governorships during their father's reign.</code> | <code>Sanskrit: शाह्-जहाँ-नामकस्य चत्वारः पुत्राः, सर्वे पितुः शासनकाले शासकपदम् अधारयन्।<br>English: The four sons of Shah Jahan all held governorships during their father's reign.</code> | <code>Sanskrit: आयेन वासव्ययस्य तुलने कृते सति वासः व्यययोग्यः न वेति ज्ञायते।<br>English: Comparing the price of housing to income tells if housing is affordable.</code> |
| <code>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.</code> | <code>Sanskrit: अस्मिन् विषये सः शिक्षणस्य स्वास्थ्यस्य च सामाजिकावकाशानाम् अन्योन्य-सम्बन्धस्य, तथा च एतद्द्वयम् अपि आर्थिक-राजनैतिक-स्वातन्त्र्ययोः कथं पूरकं भवतः इति च चर्चां करोति, यतोहि स्वस्था सुशिक्षिता च व्यक्तिः ज्ञानपूर्वम् आर्थिकविषयान् निर्णेतुं तथा फलप्रदेषु राजनैतिकेषु प्रतिपादनादिषु संलग्नः भवितुं च अधिकारी भवति इति।<br>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.</code> | <code>Sanskrit: स्पर्धायां दलानां विश्रामस्थानत्रयेषु अन्तिमम् अस्ति वैट्-मौण्टन्।<br>English: White Mountain is the last of three rest stops for teams in the race.</code> |
| query | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details | <ul><li>min: 32 tokens</li><li>mean: 32.0 tokens</li><li>max: 32 tokens</li></ul> | <ul><li>min: 32 tokens</li><li>mean: 32.0 tokens</li><li>max: 32 tokens</li></ul> | <ul><li>min: 32 tokens</li><li>mean: 32.0 tokens</li><li>max: 32 tokens</li></ul> |
| query | positive | negative |
|---|---|---|
| <code>You two were eloquent speakers.</code> | <code>Sanskrit: युवां वाक्पटू आस्तम् ।<br>English: You two were eloquent speakers.</code> | <code>Sanskrit: एतत् 'URL' इन्स्टलेषन् काले दत्तं 'पोर्ट् नम्बर्' तथा 'डोमैन्' नाम आधारीकृत्य वर्तते ।<br>English: This URL is based on- the port number and domain name given at the time of installation.</code> |
| <code>"""And James the son of Zebedee, and John the brother of James; and he surnamed them Boanerges, which is, The sons of thunder:"""</code> | <code>Sanskrit: """याकूब् तस्य भ्राता योहन् च आन्द्रियः फिलिपो बर्थलमयः,"""<br>English: """And James the son of Zebedee, and John the brother of James; and he surnamed them Boanerges, which is, The sons of thunder:"""</code> | <code>Sanskrit: "पश्यामः यत्, Animal interface इत्यस्य सर्वाणि मेथड्स्, नाम - talk(), see() अपि च move() इतीमानि क्लास् मध्ये इम्प्लिमेण्ट् जातानि ।"<br>English: "We can see that all the methods of the Animal interface- talk(), see() and move() are implemented inside this class."</code> |
| <code>The heart of a healthy adult person beats 60-80 times per minute</code> | <code>Sanskrit: स्वस्थस्य कस्यचन प्रौढस्य प्रति मिनट्-काले षष्टिवारात अधिकाधिकतया अशीतिवारं कम्पते।<br>English: The heart of a healthy adult person beats 60-80 times per minute</code> | <code>Sanskrit: यतस्तेन बहवो यिहूदीया गत्वा यीशौ व्यश्वसन्।<br>English: """Because that by reason of him many of the Jews went away, and believed on Jesus."""</code> |
per_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 |
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084"
}
@misc{PyLate,
title={PyLate: Flexible Training and Retrieval for Late Interaction Models},
author={Chaffin, Antoine and Sourty, Raphaël},
url={https://github.com/lightonai/pylate},
year={2024}
}
<!--
## Glossary
*Clearly define terms in order to be accessible across audiences.*
-->
<!--
## Model Card Authors
*Lists the people who create the model card, providing recognition and accountability for the detailed work that goes into its construction.*
-->
<!--
## Model Card Contact
*Provides a way for people who have updates to the Model Card, suggestions, or questions, to contact the Model Card authors.*
-->